[maven-release-plugin] copy for tag meecrowave-1.2.0

git-svn-id: https://svn.apache.org/repos/asf/openwebbeans/meecrowave/tags/meecrowave-1.2.0@1818823 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/trunk/.gitignore b/trunk/.gitignore
new file mode 100755
index 0000000..b59638f
--- /dev/null
+++ b/trunk/.gitignore
@@ -0,0 +1,9 @@
+target
+.classpath
+.project
+.settings
+.idea
+*.ipr
+*.iml
+*.log
+*~
diff --git a/trunk/LICENSE b/trunk/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/trunk/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/trunk/NOTICE b/trunk/NOTICE
new file mode 100644
index 0000000..442fa94
--- /dev/null
+++ b/trunk/NOTICE
@@ -0,0 +1,5 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/README.adoc b/trunk/README.adoc
new file mode 100644
index 0000000..4bba746
--- /dev/null
+++ b/trunk/README.adoc
@@ -0,0 +1,3 @@
+= Apache Meecrowave
+
+Apache Meecrowave is a small Microprofile server (JAX-RS + CDI + JSON) fully based on Apache products.
diff --git a/trunk/integration-tests/app-groovy/pom.xml b/trunk/integration-tests/app-groovy/pom.xml
new file mode 100644
index 0000000..d4414c7
--- /dev/null
+++ b/trunk/integration-tests/app-groovy/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>integration-tests</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>app-groovy</artifactId>
+  <name>Meecrowave :: Integration Tests :: Groovy</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.codehaus.groovy</groupId>
+      <artifactId>groovy-all</artifactId>
+      <version>2.4.7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.5.1</version>
+        <configuration>
+          <compilerId>groovy-eclipse-compiler</compilerId>
+        </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>org.codehaus.groovy</groupId>
+            <artifactId>groovy-eclipse-compiler</artifactId>
+            <version>2.9.1-01</version>
+          </dependency>
+          <dependency>
+            <groupId>org.codehaus.groovy</groupId>
+            <artifactId>groovy-eclipse-batch</artifactId>
+            <version>2.3.7-01</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+</project>
\ No newline at end of file
diff --git a/trunk/integration-tests/app-groovy/src/main/java/org/apache/groovy/SimpleService.groovy b/trunk/integration-tests/app-groovy/src/main/java/org/apache/groovy/SimpleService.groovy
new file mode 100644
index 0000000..9bea56d
--- /dev/null
+++ b/trunk/integration-tests/app-groovy/src/main/java/org/apache/groovy/SimpleService.groovy
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy
+
+import javax.enterprise.context.ApplicationScoped
+import javax.ws.rs.GET
+import javax.ws.rs.Path
+
+@Path("simple")
+@ApplicationScoped
+class SimpleService {
+    @GET
+    get() {
+        "simple"
+    }
+}
diff --git a/trunk/integration-tests/app-groovy/src/test/java/org/apache/groovy/SimpleServiceTest.groovy b/trunk/integration-tests/app-groovy/src/test/java/org/apache/groovy/SimpleServiceTest.groovy
new file mode 100644
index 0000000..a529a5e
--- /dev/null
+++ b/trunk/integration-tests/app-groovy/src/test/java/org/apache/groovy/SimpleServiceTest.groovy
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.groovy
+
+import org.apache.meecrowave.Meecrowave
+import org.junit.Test
+
+import javax.ws.rs.client.ClientBuilder
+
+import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE
+import static org.junit.Assert.assertEquals
+
+class SimpleServiceTest {
+    @Test
+    void groovyCp() {
+        def container = new Meecrowave(new Meecrowave.Builder().randomHttpPort()).bake()
+        try {
+            def client = ClientBuilder.newClient()
+            assertEquals("simple", client.target("http://localhost:" + container.configuration.httpPort + "/simple")
+                    .request(TEXT_PLAIN_TYPE)
+                    .get(String))
+            client.close()
+        } finally {
+            container.close()
+        }
+    }
+
+    @Test
+    void groovyLoader() {
+        def loader = new GroovyClassLoader()
+        loader.parseClass(new File("src/test/parsed/SimpleService2.groovy"))
+
+        def thread = Thread.currentThread()
+        def old = thread.contextClassLoader
+        thread.setContextClassLoader(loader)
+        def container = new Meecrowave(new Meecrowave.Builder().randomHttpPort()).bake()
+        try {
+            def client = ClientBuilder.newClient()
+            assertEquals("simple2", client.target("http://localhost:" + container.configuration.httpPort + "/simple2")
+                    .request(TEXT_PLAIN_TYPE)
+                    .get(String))
+            client.close()
+        } finally {
+            container.close()
+            loader.close()
+            thread.setContextClassLoader(old)
+        }
+    }
+}
diff --git a/trunk/integration-tests/app-groovy/src/test/parsed/SimpleService2.groovy b/trunk/integration-tests/app-groovy/src/test/parsed/SimpleService2.groovy
new file mode 100644
index 0000000..d449efb
--- /dev/null
+++ b/trunk/integration-tests/app-groovy/src/test/parsed/SimpleService2.groovy
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import javax.enterprise.context.ApplicationScoped
+import javax.ws.rs.GET
+import javax.ws.rs.Path
+
+@Path("simple2")
+@ApplicationScoped
+class SimpleService2 {
+    @GET
+    get() {
+        "simple2"
+    }
+}
diff --git a/trunk/integration-tests/beanvalidation/pom.xml b/trunk/integration-tests/beanvalidation/pom.xml
new file mode 100644
index 0000000..3865f14
--- /dev/null
+++ b/trunk/integration-tests/beanvalidation/pom.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>integration-tests</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>beanvalidation</artifactId>
+  <name>Meecrowave :: Integration Tests :: Bean Validation</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-validation_1.1_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.bval</groupId>
+      <artifactId>bval-jsr</artifactId>
+      <version>1.1.2</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/trunk/integration-tests/beanvalidation/src/main/java/org/apache/meecrowave/beanvalidation/itest/Service.java b/trunk/integration-tests/beanvalidation/src/main/java/org/apache/meecrowave/beanvalidation/itest/Service.java
new file mode 100644
index 0000000..c031e40
--- /dev/null
+++ b/trunk/integration-tests/beanvalidation/src/main/java/org/apache/meecrowave/beanvalidation/itest/Service.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.beanvalidation.itest;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+
+@Path("test")
+@ApplicationScoped
+public class Service {
+    @GET
+    @Valid
+    @Produces(MediaType.APPLICATION_JSON)
+    public Res get(@QueryParam("val") final String val) {
+        final Res res = new Res();
+        res.setValue(val);
+        return res;
+    }
+
+    public static class Res {
+        @NotNull
+        private String value;
+
+        public String getValue() {
+            return value;
+        }
+
+        void setValue(final String value) {
+            this.value = value;
+        }
+    }
+}
diff --git a/trunk/integration-tests/beanvalidation/src/test/java/org/apache/meecrowave/beanvalidation/itest/ServiceTest.java b/trunk/integration-tests/beanvalidation/src/test/java/org/apache/meecrowave/beanvalidation/itest/ServiceTest.java
new file mode 100644
index 0000000..9ac8694
--- /dev/null
+++ b/trunk/integration-tests/beanvalidation/src/test/java/org/apache/meecrowave/beanvalidation/itest/ServiceTest.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.beanvalidation.itest;
+
+import org.apache.meecrowave.Meecrowave;
+import org.junit.Test;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.core.Response;
+
+import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
+import static org.junit.Assert.assertEquals;
+
+public class ServiceTest {
+    @Test
+    public void bval() {
+        try (final Meecrowave container = new Meecrowave(new Meecrowave.Builder()
+                .includePackages(Service.class.getPackage().getName())
+                .randomHttpPort())
+                .bake()) {
+            final String uri = "http://localhost:" + container.getConfiguration().getHttpPort() + "/test";
+            final Client client = ClientBuilder.newClient();
+            try {
+                assertEquals(
+                        "{\"value\":\"ok\"}",
+                        client.target(uri)
+                                .queryParam("val", "ok")
+                                .request(APPLICATION_JSON_TYPE)
+                                .get(String.class));
+                assertEquals(
+                        Response.Status.BAD_REQUEST.getStatusCode(),
+                        client.target(uri)
+                                .request(APPLICATION_JSON_TYPE)
+                                .get()
+                                .getStatus());
+            } finally {
+                client.close();
+            }
+        }
+    }
+}
diff --git a/trunk/integration-tests/pom.xml b/trunk/integration-tests/pom.xml
new file mode 100644
index 0000000..eeeab10
--- /dev/null
+++ b/trunk/integration-tests/pom.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>integration-tests</artifactId>
+  <name>Meecrowave :: Integration Tests</name>
+  <packaging>pom</packaging>
+  <description>
+    For modules requiring custom classpaths.
+  </description>
+
+  <modules>
+    <module>app-groovy</module>
+    <module>beanvalidation</module>
+    <module>webservices</module>
+  </modules>
+</project>
diff --git a/trunk/integration-tests/webservices/pom.xml b/trunk/integration-tests/webservices/pom.xml
new file mode 100644
index 0000000..c85e65e
--- /dev/null
+++ b/trunk/integration-tests/webservices/pom.xml
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>integration-tests</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>webservices</artifactId>
+  <packaging>war</packaging>
+  <name>Meecrowave :: Integration Tests :: WebServices</name>
+
+  <properties>
+    <failOnMissingWebXml>false</failOnMissingWebXml>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-frontend-jaxws</artifactId>
+      <version>${cxf.version}</version>
+      <scope>provided</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.ow2.asm</groupId>
+          <artifactId>asm</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-junit</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.meecrowave</groupId>
+        <artifactId>meecrowave-maven-plugin</artifactId>
+        <version>${project.version}</version>
+        <configuration>
+          <scanningPackageIncludes>org.apache.meecrowave.tests.webservices</scanningPackageIncludes>
+        </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-frontend-jaxws</artifactId>
+            <version>${cxf.version}</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+
+    </plugins>
+  </build>
+</project>
diff --git a/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Contract1.java b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Contract1.java
new file mode 100644
index 0000000..d1949c4
--- /dev/null
+++ b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Contract1.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tests.webservices;
+
+import javax.jws.WebService;
+
+@WebService
+public interface Contract1 {
+    String foo();
+}
diff --git a/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Contract2.java b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Contract2.java
new file mode 100644
index 0000000..1b8c220
--- /dev/null
+++ b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Contract2.java
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tests.webservices;
+
+import javax.jws.WebService;
+
+@WebService
+public interface Contract2 {
+    String bar();
+}
diff --git a/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint1.java b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint1.java
new file mode 100644
index 0000000..1c34ba5
--- /dev/null
+++ b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint1.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tests.webservices;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.jws.WebService;
+
+@WebService
+@ApplicationScoped
+public class Endpoint1 implements Contract1 {
+    @Override
+    public String foo() {
+        return "foo";
+    }
+}
diff --git a/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint2.java b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint2.java
new file mode 100644
index 0000000..13916d7
--- /dev/null
+++ b/trunk/integration-tests/webservices/src/main/java/org/apache/meecrowave/tests/webservices/Endpoint2.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tests.webservices;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.jws.WebService;
+
+@WebService
+@ApplicationScoped
+public class Endpoint2 implements Contract2 {
+    @Override
+    public String bar() {
+        return "bar";
+    }
+}
diff --git a/trunk/integration-tests/webservices/src/main/resources/META-INF/beans.xml b/trunk/integration-tests/webservices/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..2bb54d8
--- /dev/null
+++ b/trunk/integration-tests/webservices/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,19 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<beans />
diff --git a/trunk/integration-tests/webservices/src/test/java/org/apache/meecrowave/tests/webservice/JAXWSTest.java b/trunk/integration-tests/webservices/src/test/java/org/apache/meecrowave/tests/webservice/JAXWSTest.java
new file mode 100644
index 0000000..4ba0c2d
--- /dev/null
+++ b/trunk/integration-tests/webservices/src/test/java/org/apache/meecrowave/tests/webservice/JAXWSTest.java
@@ -0,0 +1,54 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tests.webservice;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit.MeecrowaveRule;
+import org.apache.meecrowave.tests.webservices.Contract1;
+import org.apache.meecrowave.tests.webservices.Contract2;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.Service;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+
+public class JAXWSTest {
+    @ClassRule
+    public static final MeecrowaveRule CONTAINER = new MeecrowaveRule(new Meecrowave.Builder()
+            .randomHttpPort()
+            .includePackages(Contract1.class.getPackage().getName()), "");
+
+    @Test
+    public void run() throws MalformedURLException {
+        assertEquals("foo", Service.create(
+                new URL(String.format("http://localhost:%d/webservices/Endpoint1?wsdl", CONTAINER.getConfiguration().getHttpPort())),
+                new QName("http://webservices.tests.meecrowave.apache.org/", "Endpoint1Service"))
+                .getPort(Contract1.class)
+                .foo());
+        assertEquals("bar", Service.create(
+                new URL(String.format("http://localhost:%d/webservices/Endpoint2?wsdl", CONTAINER.getConfiguration().getHttpPort())),
+                new QName("http://webservices.tests.meecrowave.apache.org/", "Endpoint2Service"))
+                .getPort(Contract2.class)
+                .bar());
+    }
+}
diff --git a/trunk/meecrowave-arquillian/pom.xml b/trunk/meecrowave-arquillian/pom.xml
new file mode 100644
index 0000000..aa5d880
--- /dev/null
+++ b/trunk/meecrowave-arquillian/pom.xml
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-arquillian</artifactId>
+  <name>Meecrowave :: Arquillian</name>
+
+  <properties>
+    <arquillian.version>1.1.13.Final</arquillian.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.jboss.arquillian.container</groupId>
+      <artifactId>arquillian-container-spi</artifactId>
+      <version>${arquillian.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.jboss.arquillian.junit</groupId>
+      <artifactId>arquillian-junit-container</artifactId>
+      <version>${arquillian.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveConfiguration.java b/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveConfiguration.java
new file mode 100644
index 0000000..9b6bd7f
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveConfiguration.java
@@ -0,0 +1,769 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.arquillian;
+
+import org.apache.catalina.Realm;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.xbean.recipe.ObjectRecipe;
+import org.jboss.arquillian.config.descriptor.api.Multiline;
+import org.jboss.arquillian.container.spi.ConfigurationException;
+import org.jboss.arquillian.container.spi.client.container.ContainerConfiguration;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.nio.charset.StandardCharsets;
+import java.util.Properties;
+import java.util.stream.Stream;
+
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
+
+public class MeecrowaveConfiguration implements ContainerConfiguration {
+    private int httpPort = -1;
+    private int httpsPort = 8443;
+    private int stopPort = -1;
+    private String host = "localhost";
+    private String dir;
+    private File serverXml;
+    private boolean keepServerXmlAsThis;
+    private Properties properties = new Properties();
+    private boolean quickSession = true;
+    private boolean skipHttp;
+    private boolean ssl;
+    private String keystoreFile;
+    private String keystorePass;
+    private String keystoreType = "JKS";
+    private String clientAuth;
+    private String keyAlias;
+    private String sslProtocol;
+    private String webXml;
+    private boolean http2;
+    private String tempDir = new File(System.getProperty("java.io.tmpdir"), "meecrowave_" + System.nanoTime()).getAbsolutePath();
+    private boolean webResourceCached = true;
+    private String conf;
+    private boolean deleteBaseOnStartup = true;
+    private String jaxrsMapping = "/*";
+    private boolean cdiConversation;
+    private boolean jaxrsProviderSetup = true;
+    private boolean loggingGlobalSetup = true;
+    private String users;
+    private String roles;
+    private String cxfServletParams;
+    private String loginConfig;
+    private String securityConstraints;
+    private String realm;
+    private String tomcatFilter;
+    private boolean tomcatScanning = true;
+    private boolean tomcatAutoSetup = true;
+    private boolean useShutdownHook = false /*arquillian*/;
+    private boolean useTomcatDefaults = true;
+    private boolean jaxrsLogProviders;
+    private boolean tomcatWrapLoader = true;
+    private String jaxrsDefaultProviders;
+    private String sharedLibraries;
+    private boolean useLog4j2JulLogManager = System.getProperty("java.util.logging.manager") == null;
+    private String jsonpBufferStrategy = "QUEUE";
+    private int jsonpMaxStringLen = 10 * 1024 * 1024;
+    private int jsonpMaxReadBufferLen = 64 * 1024;
+    private int jsonpMaxWriteBufferLen = 64 * 1024;
+    private boolean jsonpSupportsComment = false;
+    private boolean jsonpPrettify = false;
+    private String jsonbEncoding = "UTF-8";
+    private boolean jsonbNulls = false;
+    private boolean jsonbIJson = false;
+    private boolean jsonbPrettify = false;
+    private String jsonbBinaryStrategy;
+    private String jsonbNamingStrategy;
+    private String jsonbOrderStrategy;
+    private String scanningIncludes;
+    private String scanningExcludes;
+    private String scanningPackageIncludes;
+    private String scanningPackageExcludes;
+    private boolean tomcatNoJmx = true;
+    private boolean injectServletContainerInitializer = true;
+    private String tomcatAccessLogPattern;
+    private boolean jaxrsAutoActivateBeanValidation = true;
+    private String meecrowaveProperties = "meecrowave.properties";
+    private boolean jaxwsSupportIfAvailable = true;
+
+    // configurable cause when set to Local arquillian bypass some protocol configuration cause of container default
+    private String arquillianProtocol = "Servlet 3.1";
+
+    @Override
+    public void validate() throws ConfigurationException {
+        // no-op
+    }
+
+    Meecrowave.Builder toMeecrowaveConfiguration() {
+        final Meecrowave.Builder builder = new Meecrowave.Builder();
+        for (final Field field : MeecrowaveConfiguration.class.getDeclaredFields()) {
+            final String name = field.getName();
+            if ("users".equals(name) || "roles".equals(name) || "cxfServletParams".equals(name)
+                    || "loginConfig".equals(name) || "securityConstraints".equals(name)
+                    || "realm".equals(name)) {
+                continue; // specific syntax
+            }
+
+            try {
+                final Field configField = Meecrowave.Builder.class.getDeclaredField(field.getName());
+                if (!configField.getType().equals(field.getType())) {
+                    continue;
+                }
+                if (!field.isAccessible()) {
+                    field.setAccessible(true);
+                }
+
+                final Object value = field.get(this);
+                if (value != null) {
+                    if (!configField.isAccessible()) {
+                        configField.setAccessible(true);
+                    }
+                    configField.set(builder, value);
+                }
+            } catch (final NoSuchFieldException nsfe) {
+                // ignored
+            } catch (final Exception e) {
+                throw new IllegalStateException(e);
+            }
+        }
+
+        if (httpPort < 0) {
+            builder.randomHttpPort();
+        }
+
+        // for Map use properties
+        if (users != null) {
+            final Properties properties = new Properties() {{
+                try {
+                    load(new ByteArrayInputStream(users.getBytes(StandardCharsets.UTF_8)));
+                } catch (final IOException e) {
+                    throw new IllegalStateException(e);
+                }
+            }};
+            builder.setUsers(properties.stringPropertyNames().stream().collect(toMap(identity(), properties::getProperty)));
+        }
+        if (roles != null) {
+            final Properties properties = new Properties() {{
+                try {
+                    load(new ByteArrayInputStream(roles.getBytes(StandardCharsets.UTF_8)));
+                } catch (final IOException e) {
+                    throw new IllegalStateException(e);
+                }
+            }};
+            builder.setRoles(properties.stringPropertyNames().stream().collect(toMap(identity(), properties::getProperty)));
+        }
+        if (cxfServletParams != null) {
+            final Properties properties = new Properties() {{
+                try {
+                    load(new ByteArrayInputStream(cxfServletParams.getBytes(StandardCharsets.UTF_8)));
+                } catch (final IOException e) {
+                    throw new IllegalStateException(e);
+                }
+            }};
+            builder.setCxfServletParams(properties.stringPropertyNames().stream().collect(toMap(identity(), properties::getProperty)));
+        }
+
+        // for other not simple type use the Cli syntax
+        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if (realm != null) {
+            try {
+                int end = realm.indexOf(':');
+                if (end < 0) {
+                    builder.setRealm(Realm.class.cast(loader.loadClass(realm).newInstance()));
+                } else {
+                    final ObjectRecipe recipe = new ObjectRecipe(realm.substring(0, end));
+                    Stream.of(realm.substring(end + 1, realm.length()).split(";"))
+                            .map(v -> v.split("="))
+                            .forEach(v -> recipe.setProperty(v[0], v[1]));
+                    builder.setRealm(Realm.class.cast(recipe.create(loader)));
+                }
+            } catch (final Exception cnfe) {
+                throw new IllegalArgumentException(realm);
+            }
+        }
+        if (securityConstraints != null) {
+            builder.setSecurityConstraints(Stream.of(securityConstraints.split("|"))
+                    .map(item -> {
+                        try {
+                            final ObjectRecipe recipe = new ObjectRecipe(Meecrowave.SecurityConstaintBuilder.class);
+                            Stream.of(item.split(";"))
+                                    .map(v -> v.split("="))
+                                    .forEach(v -> recipe.setProperty(v[0], v[1]));
+                            return Meecrowave.SecurityConstaintBuilder.class.cast(recipe.create(loader));
+                        } catch (final Exception cnfe) {
+                            throw new IllegalArgumentException(securityConstraints);
+                        }
+                    }).collect(toList()));
+        }
+        if (loginConfig != null) {
+            try {
+                final ObjectRecipe recipe = new ObjectRecipe(Meecrowave.LoginConfigBuilder.class);
+                Stream.of(loginConfig.split(";"))
+                        .map(v -> v.split("="))
+                        .forEach(v -> recipe.setProperty(v[0], v[1]));
+                builder.setLoginConfig(Meecrowave.LoginConfigBuilder.class.cast(recipe.create(loader)));
+            } catch (final Exception cnfe) {
+                throw new IllegalArgumentException(loginConfig);
+            }
+        }
+
+        return builder;
+    }
+
+    public String getCxfServletParams() {
+        return cxfServletParams;
+    }
+
+    public void setCxfServletParams(final String cxfServletParams) {
+        this.cxfServletParams = cxfServletParams;
+    }
+
+    public boolean isTomcatScanning() {
+        return tomcatScanning;
+    }
+
+    public void setTomcatScanning(final boolean tomcatScanning) {
+        this.tomcatScanning = tomcatScanning;
+    }
+
+    public boolean isTomcatAutoSetup() {
+        return tomcatAutoSetup;
+    }
+
+    public void setTomcatAutoSetup(final boolean tomcatAutoSetup) {
+        this.tomcatAutoSetup = tomcatAutoSetup;
+    }
+
+    public int getHttpPort() {
+        return httpPort;
+    }
+
+    public void setHttpPort(final int httpPort) {
+        this.httpPort = httpPort;
+    }
+
+    public int getHttpsPort() {
+        return httpsPort;
+    }
+
+    public void setHttpsPort(final int httpsPort) {
+        this.httpsPort = httpsPort;
+    }
+
+    public int getStopPort() {
+        return stopPort;
+    }
+
+    public void setStopPort(final int stopPort) {
+        this.stopPort = stopPort;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(final String host) {
+        this.host = host;
+    }
+
+    public String getDir() {
+        return dir;
+    }
+
+    public void setDir(final String dir) {
+        this.dir = dir;
+    }
+
+    public File getServerXml() {
+        return serverXml;
+    }
+
+    public void setServerXml(final File serverXml) {
+        this.serverXml = serverXml;
+    }
+
+    public boolean isKeepServerXmlAsThis() {
+        return keepServerXmlAsThis;
+    }
+
+    public void setKeepServerXmlAsThis(final boolean keepServerXmlAsThis) {
+        this.keepServerXmlAsThis = keepServerXmlAsThis;
+    }
+
+    public Properties getProperties() {
+        return properties;
+    }
+
+    public void setProperties(final Properties properties) {
+        this.properties = properties;
+    }
+
+    public boolean isQuickSession() {
+        return quickSession;
+    }
+
+    public void setQuickSession(final boolean quickSession) {
+        this.quickSession = quickSession;
+    }
+
+    public boolean isSkipHttp() {
+        return skipHttp;
+    }
+
+    public void setSkipHttp(boolean skipHttp) {
+        this.skipHttp = skipHttp;
+    }
+
+    public boolean isSsl() {
+        return ssl;
+    }
+
+    public void setSsl(final boolean ssl) {
+        this.ssl = ssl;
+    }
+
+    public String getKeystoreFile() {
+        return keystoreFile;
+    }
+
+    public void setKeystoreFile(final String keystoreFile) {
+        this.keystoreFile = keystoreFile;
+    }
+
+    public String getKeystorePass() {
+        return keystorePass;
+    }
+
+    public void setKeystorePass(final String keystorePass) {
+        this.keystorePass = keystorePass;
+    }
+
+    public String getKeystoreType() {
+        return keystoreType;
+    }
+
+    public void setKeystoreType(final String keystoreType) {
+        this.keystoreType = keystoreType;
+    }
+
+    public String getClientAuth() {
+        return clientAuth;
+    }
+
+    public void setClientAuth(final String clientAuth) {
+        this.clientAuth = clientAuth;
+    }
+
+    public String getKeyAlias() {
+        return keyAlias;
+    }
+
+    public void setKeyAlias(final String keyAlias) {
+        this.keyAlias = keyAlias;
+    }
+
+    public String getSslProtocol() {
+        return sslProtocol;
+    }
+
+    public void setSslProtocol(final String sslProtocol) {
+        this.sslProtocol = sslProtocol;
+    }
+
+    public String getWebXml() {
+        return webXml;
+    }
+
+    public void setWebXml(final String webXml) {
+        this.webXml = webXml;
+    }
+
+    public boolean isHttp2() {
+        return http2;
+    }
+
+    public void setHttp2(final boolean http2) {
+        this.http2 = http2;
+    }
+
+    public String getTempDir() {
+        return tempDir;
+    }
+
+    public void setTempDir(final String tempDir) {
+        this.tempDir = tempDir;
+    }
+
+    public boolean isWebResourceCached() {
+        return webResourceCached;
+    }
+
+    public void setWebResourceCached(final boolean webResourceCached) {
+        this.webResourceCached = webResourceCached;
+    }
+
+    public String getConf() {
+        return conf;
+    }
+
+    public void setConf(final String conf) {
+        this.conf = conf;
+    }
+
+    public boolean isDeleteBaseOnStartup() {
+        return deleteBaseOnStartup;
+    }
+
+    public void setDeleteBaseOnStartup(final boolean deleteBaseOnStartup) {
+        this.deleteBaseOnStartup = deleteBaseOnStartup;
+    }
+
+    public String getJaxrsMapping() {
+        return jaxrsMapping;
+    }
+
+    public void setJaxrsMapping(final String jaxrsMapping) {
+        this.jaxrsMapping = jaxrsMapping;
+    }
+
+    public boolean isCdiConversation() {
+        return cdiConversation;
+    }
+
+    public void setCdiConversation(final boolean cdiConversation) {
+        this.cdiConversation = cdiConversation;
+    }
+
+    public boolean isJaxrsProviderSetup() {
+        return jaxrsProviderSetup;
+    }
+
+    public void setJaxrsProviderSetup(final boolean jaxrsProviderSetup) {
+        this.jaxrsProviderSetup = jaxrsProviderSetup;
+    }
+
+    public boolean isLoggingGlobalSetup() {
+        return loggingGlobalSetup;
+    }
+
+    public void setLoggingGlobalSetup(final boolean loggingGlobalSetup) {
+        this.loggingGlobalSetup = loggingGlobalSetup;
+    }
+
+    public String getUsers() {
+        return users;
+    }
+
+    @Multiline
+    public void setUsers(final String users) {
+        this.users = users;
+    }
+
+    public String getRoles() {
+        return roles;
+    }
+
+    @Multiline
+    public void setRoles(final String roles) {
+        this.roles = roles;
+    }
+
+    public String getLoginConfig() {
+        return loginConfig;
+    }
+
+    public void setLoginConfig(final String loginConfig) {
+        this.loginConfig = loginConfig;
+    }
+
+    public String getSecurityConstraints() {
+        return securityConstraints;
+    }
+
+    public void setSecurityConstraints(final String securityConstraints) {
+        this.securityConstraints = securityConstraints;
+    }
+
+    public String getRealm() {
+        return realm;
+    }
+
+    public void setRealm(final String realm) {
+        this.realm = realm;
+    }
+
+    public boolean isUseShutdownHook() {
+        return useShutdownHook;
+    }
+
+    public void setUseShutdownHook(final boolean useShutdownHook) {
+        this.useShutdownHook = useShutdownHook;
+    }
+
+    public String getTomcatFilter() {
+        return tomcatFilter;
+    }
+
+    public void setTomcatFilter(final String tomcatFilter) {
+        this.tomcatFilter = tomcatFilter;
+    }
+
+    public boolean isUseTomcatDefaults() {
+        return useTomcatDefaults;
+    }
+
+    public void setUseTomcatDefaults(final boolean useTomcatDefaults) {
+        this.useTomcatDefaults = useTomcatDefaults;
+    }
+
+    public boolean isJaxrsLogProviders() {
+        return jaxrsLogProviders;
+    }
+
+    public void setJaxrsLogProviders(final boolean jaxrsLogProviders) {
+        this.jaxrsLogProviders = jaxrsLogProviders;
+    }
+
+    public boolean isTomcatWrapLoader() {
+        return tomcatWrapLoader;
+    }
+
+    public void setTomcatWrapLoader(final boolean tomcatWrapLoader) {
+        this.tomcatWrapLoader = tomcatWrapLoader;
+    }
+
+    public String getJaxrsDefaultProviders() {
+        return jaxrsDefaultProviders;
+    }
+
+    public void setJaxrsDefaultProviders(final String jaxrsDefaultProviders) {
+        this.jaxrsDefaultProviders = jaxrsDefaultProviders;
+    }
+
+    public String getSharedLibraries() {
+        return sharedLibraries;
+    }
+
+    public void setSharedLibraries(final String sharedLibraries) {
+        this.sharedLibraries = sharedLibraries;
+    }
+
+    public boolean isUseLog4j2JulLogManager() {
+        return useLog4j2JulLogManager;
+    }
+
+    public void setUseLog4j2JulLogManager(final boolean useLog4j2JulLogManager) {
+        this.useLog4j2JulLogManager = useLog4j2JulLogManager;
+    }
+
+    public String getScanningIncludes() {
+        return scanningIncludes;
+    }
+
+    public void setScanningIncludes(final String scanningIncludes) {
+        this.scanningIncludes = scanningIncludes;
+    }
+
+    public String getScanningExcludes() {
+        return scanningExcludes;
+    }
+
+    public void setScanningExcludes(final String scanningExcludes) {
+        this.scanningExcludes = scanningExcludes;
+    }
+
+    public String getJsonpBufferStrategy() {
+        return jsonpBufferStrategy;
+    }
+
+    public void setJsonpBufferStrategy(final String jsonpBufferStrategy) {
+        this.jsonpBufferStrategy = jsonpBufferStrategy;
+    }
+
+    public int getJsonpMaxStringLen() {
+        return jsonpMaxStringLen;
+    }
+
+    public void setJsonpMaxStringLen(final int jsonpMaxStringLen) {
+        this.jsonpMaxStringLen = jsonpMaxStringLen;
+    }
+
+    public int getJsonpMaxReadBufferLen() {
+        return jsonpMaxReadBufferLen;
+    }
+
+    public void setJsonpMaxReadBufferLen(final int jsonpMaxReadBufferLen) {
+        this.jsonpMaxReadBufferLen = jsonpMaxReadBufferLen;
+    }
+
+    public int getJsonpMaxWriteBufferLen() {
+        return jsonpMaxWriteBufferLen;
+    }
+
+    public void setJsonpMaxWriteBufferLen(final int jsonpMaxWriteBufferLen) {
+        this.jsonpMaxWriteBufferLen = jsonpMaxWriteBufferLen;
+    }
+
+    public boolean isJsonpSupportsComment() {
+        return jsonpSupportsComment;
+    }
+
+    public void setJsonpSupportsComment(final boolean jsonpSupportsComment) {
+        this.jsonpSupportsComment = jsonpSupportsComment;
+    }
+
+    public boolean isJsonpPrettify() {
+        return jsonpPrettify;
+    }
+
+    public void setJsonpPrettify(final boolean jsonpPrettify) {
+        this.jsonpPrettify = jsonpPrettify;
+    }
+
+    public String getJsonbEncoding() {
+        return jsonbEncoding;
+    }
+
+    public void setJsonbEncoding(final String jsonbEncoding) {
+        this.jsonbEncoding = jsonbEncoding;
+    }
+
+    public boolean isJsonbNulls() {
+        return jsonbNulls;
+    }
+
+    public void setJsonbNulls(final boolean jsonbNulls) {
+        this.jsonbNulls = jsonbNulls;
+    }
+
+    public boolean isJsonbIJson() {
+        return jsonbIJson;
+    }
+
+    public void setJsonbIJson(final boolean jsonbIJson) {
+        this.jsonbIJson = jsonbIJson;
+    }
+
+    public boolean isJsonbPrettify() {
+        return jsonbPrettify;
+    }
+
+    public void setJsonbPrettify(final boolean jsonbPrettify) {
+        this.jsonbPrettify = jsonbPrettify;
+    }
+
+    public String getJsonbBinaryStrategy() {
+        return jsonbBinaryStrategy;
+    }
+
+    public void setJsonbBinaryStrategy(final String jsonbBinaryStrategy) {
+        this.jsonbBinaryStrategy = jsonbBinaryStrategy;
+    }
+
+    public String getJsonbNamingStrategy() {
+        return jsonbNamingStrategy;
+    }
+
+    public void setJsonbNamingStrategy(final String jsonbNamingStrategy) {
+        this.jsonbNamingStrategy = jsonbNamingStrategy;
+    }
+
+    public String getJsonbOrderStrategy() {
+        return jsonbOrderStrategy;
+    }
+
+    public void setJsonbOrderStrategy(final String jsonbOrderStrategy) {
+        this.jsonbOrderStrategy = jsonbOrderStrategy;
+    }
+
+    public String getScanningPackageIncludes() {
+        return scanningPackageIncludes;
+    }
+
+    public void setScanningPackageIncludes(final String scanningPackageIncludes) {
+        this.scanningPackageIncludes = scanningPackageIncludes;
+    }
+
+    public String getScanningPackageExcludes() {
+        return scanningPackageExcludes;
+    }
+
+    public void setScanningPackageExcludes(final String scanningPackageExcludes) {
+        this.scanningPackageExcludes = scanningPackageExcludes;
+    }
+
+    public boolean isTomcatNoJmx() {
+        return tomcatNoJmx;
+    }
+
+    public void setTomcatNoJmx(final boolean tomcatNoJmx) {
+        this.tomcatNoJmx = tomcatNoJmx;
+    }
+
+    public boolean isInjectServletContainerInitializer() {
+        return injectServletContainerInitializer;
+    }
+
+    public void setInjectServletContainerInitializer(final boolean injectServletContainerInitializer) {
+        this.injectServletContainerInitializer = injectServletContainerInitializer;
+    }
+
+    public String getTomcatAccessLogPattern() {
+        return tomcatAccessLogPattern;
+    }
+
+    public void setTomcatAccessLogPattern(final String tomcatAccessLogPattern) {
+        this.tomcatAccessLogPattern = tomcatAccessLogPattern;
+    }
+
+    public String getArquillianProtocol() {
+        return arquillianProtocol;
+    }
+
+    public void setArquillianProtocol(final String arquillianProtocol) {
+        this.arquillianProtocol = arquillianProtocol;
+    }
+
+    public boolean isJaxrsAutoActivateBeanValidation() {
+        return jaxrsAutoActivateBeanValidation;
+    }
+
+    public void setJaxrsAutoActivateBeanValidation(final boolean jaxrsAutoActivateBeanValidation) {
+        this.jaxrsAutoActivateBeanValidation = jaxrsAutoActivateBeanValidation;
+    }
+
+    public String getMeecrowaveProperties() {
+        return meecrowaveProperties;
+    }
+
+    public void setMeecrowaveProperties(final String meecrowaveProperties) {
+        this.meecrowaveProperties = meecrowaveProperties;
+    }
+
+    public boolean isJaxwsSupportIfAvailable() {
+        return jaxwsSupportIfAvailable;
+    }
+
+    public void setJaxwsSupportIfAvailable(final boolean jaxwsSupportIfAvailable) {
+        this.jaxwsSupportIfAvailable = jaxwsSupportIfAvailable;
+    }
+}
diff --git a/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveContainer.java b/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveContainer.java
new file mode 100644
index 0000000..2c1327c
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveContainer.java
@@ -0,0 +1,115 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.arquillian;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.io.IO;
+import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
+import org.jboss.arquillian.container.spi.client.container.DeploymentException;
+import org.jboss.arquillian.container.spi.client.container.LifecycleException;
+import org.jboss.arquillian.container.spi.client.protocol.ProtocolDescription;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.HTTPContext;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.ProtocolMetaData;
+import org.jboss.arquillian.container.spi.client.protocol.metadata.Servlet;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.exporter.ZipExporter;
+import org.jboss.shrinkwrap.descriptor.api.Descriptor;
+
+import java.io.File;
+
+import static java.util.Optional.ofNullable;
+
+public class MeecrowaveContainer implements DeployableContainer<MeecrowaveConfiguration> {
+    private Meecrowave.Builder configuration;
+    private Meecrowave container;
+    private ProtocolDescription defaultProtocol;
+
+    @Override
+    public Class<MeecrowaveConfiguration> getConfigurationClass() {
+        return MeecrowaveConfiguration.class;
+    }
+
+    @Override
+    public void setup(final MeecrowaveConfiguration configuration) {
+        this.configuration = configuration.toMeecrowaveConfiguration();
+        this.defaultProtocol = new ProtocolDescription(configuration.getArquillianProtocol());
+    }
+
+    @Override
+    public void start() throws LifecycleException {
+        this.container = new Meecrowave(this.configuration);
+        this.container.start();
+    }
+
+    @Override
+    public void stop() throws LifecycleException {
+        ofNullable(this.container).ifPresent(Meecrowave::close);
+    }
+
+    @Override
+    public ProtocolDescription getDefaultProtocol() {
+        return defaultProtocol;
+    }
+
+    @Override
+    public ProtocolMetaData deploy(final Archive<?> archive) throws DeploymentException {
+        final File dump = toArchiveDump(archive);
+        archive.as(ZipExporter.class).exportTo(dump, true);
+        final String context = sanitizeName(archive);
+        container.deployWebapp(context, dump);
+        final int port = configuration.isSkipHttp() ? configuration.getHttpsPort() : configuration.getHttpPort();
+        return new ProtocolMetaData()
+                .addContext(new HTTPContext(configuration.getHost(), port)
+                        .add(new Servlet("arquillian", context)));
+    }
+
+    @Override
+    public void undeploy(final Archive<?> archive) throws DeploymentException {
+        this.container.undeploy(sanitizeName(archive));
+        final File dump = toArchiveDump(archive);
+        if (dump.isFile()) {
+            IO.delete(dump);
+        }
+        final File unpacked = new File(dump.getParentFile(), dump.getName().replace(".war", ""));
+        if (unpacked.isDirectory()) {
+            IO.delete(unpacked);
+        }
+    }
+
+    @Override
+    public void deploy(final Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public void undeploy(final Descriptor descriptor) throws DeploymentException {
+        throw new UnsupportedOperationException();
+    }
+
+    private String sanitizeName(final Archive<?> archive) {
+        final String root = archive.getName().replace(".war", "").replace("ROOT", "");
+        return root.isEmpty() ? "" : ("/" + root);
+    }
+
+    private File toArchiveDump(final Archive<?> archive) {
+        final File file = new File(this.configuration.getTempDir(), archive.getName());
+        file.getParentFile().mkdirs();
+        return file;
+    }
+}
diff --git a/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveExtension.java b/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveExtension.java
new file mode 100644
index 0000000..37cd2a2
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/main/java/org/apache/meecrowave/arquillian/MeecrowaveExtension.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.arquillian;
+
+import org.jboss.arquillian.container.spi.client.container.DeployableContainer;
+import org.jboss.arquillian.core.spi.LoadableExtension;
+
+public class MeecrowaveExtension implements LoadableExtension {
+    @Override
+    public void register(final ExtensionBuilder extensionBuilder) {
+        extensionBuilder.service(DeployableContainer.class, MeecrowaveContainer.class);
+    }
+}
diff --git a/trunk/meecrowave-arquillian/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-arquillian/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/trunk/meecrowave-arquillian/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-arquillian/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..442fa94
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,5 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/meecrowave-arquillian/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/trunk/meecrowave-arquillian/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
new file mode 100644
index 0000000..85ecffa
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension
@@ -0,0 +1 @@
+org.apache.meecrowave.arquillian.MeecrowaveExtension
diff --git a/trunk/meecrowave-arquillian/src/test/java/org/apache/meecrowave/arquillian/MeecrowaveContainerTest.java b/trunk/meecrowave-arquillian/src/test/java/org/apache/meecrowave/arquillian/MeecrowaveContainerTest.java
new file mode 100644
index 0000000..0c1dca4
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/test/java/org/apache/meecrowave/arquillian/MeecrowaveContainerTest.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.arquillian;
+
+import org.apache.meecrowave.io.IO;
+import org.app.Endpoint;
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.arquillian.test.api.ArquillianResource;
+import org.jboss.shrinkwrap.api.Archive;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+@RunWith(Arquillian.class)
+public class MeecrowaveContainerTest {
+    @Deployment(testable = false)
+    public static Archive<?> app() {
+        return ShrinkWrap.create(WebArchive.class)
+                .addPackage(Endpoint.class.getPackage());
+    }
+
+    @ArquillianResource
+    private URL base;
+
+    @Test
+    public void run() throws IOException {
+        assertEquals("simple", slurp(new URL(base.toExternalForm() + "api/test")));
+    }
+
+    private String slurp(final URL url) {
+        try (final InputStream is = url.openStream()) {
+            return IO.toString(is);
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+        return null;
+    }
+}
diff --git a/trunk/meecrowave-arquillian/src/test/java/org/app/Endpoint.java b/trunk/meecrowave-arquillian/src/test/java/org/app/Endpoint.java
new file mode 100644
index 0000000..d8dbc8c
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/test/java/org/app/Endpoint.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("test")
+@ApplicationScoped
+public class Endpoint {
+    @Inject
+    private Injectable injectable;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String simple() {
+        return Boolean.parseBoolean(injectable.injected()) ? "simple" : "fail";
+    }
+}
diff --git a/trunk/meecrowave-arquillian/src/test/java/org/app/Injectable.java b/trunk/meecrowave-arquillian/src/test/java/org/app/Injectable.java
new file mode 100644
index 0000000..2b8cc7f
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/test/java/org/app/Injectable.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class Injectable {
+    public String injected() {
+        return "true";
+    }
+}
diff --git a/trunk/meecrowave-arquillian/src/test/java/org/app/RsApp.java b/trunk/meecrowave-arquillian/src/test/java/org/app/RsApp.java
new file mode 100644
index 0000000..1463b98
--- /dev/null
+++ b/trunk/meecrowave-arquillian/src/test/java/org/app/RsApp.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@Dependent
+@ApplicationPath("api")
+public class RsApp extends Application {
+}
diff --git a/trunk/meecrowave-core/pom.xml b/trunk/meecrowave-core/pom.xml
new file mode 100644
index 0000000..8436a23
--- /dev/null
+++ b/trunk/meecrowave-core/pom.xml
@@ -0,0 +1,322 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-core</artifactId>
+  <name>Meecrowave :: Core</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-annotation_1.3_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jcdi_2.0_spec</artifactId>
+      <version>1.0.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-atinject_1.0_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-interceptor_1.2_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-json_1.1_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jsonb_1.0_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jaxrs_2.1_spec</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-jaspic-api</artifactId>
+      <version>${tomcat.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+      <version>${commons-cli.version}</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-lang3</artifactId>
+      <version>3.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.xbean</groupId>
+      <artifactId>xbean-reflect</artifactId>
+      <version>${xbean.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openwebbeans</groupId>
+      <artifactId>openwebbeans-se</artifactId>
+      <version>${openwebbeans.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openwebbeans</groupId>
+      <artifactId>openwebbeans-web</artifactId>
+      <version>${openwebbeans.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-catalina</artifactId>
+      <version>${tomcat.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.tomcat</groupId>
+          <artifactId>tomcat-annotations-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.tomcat</groupId>
+          <artifactId>tomcat-jsp-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.tomcat</groupId>
+          <artifactId>tomcat-el-api</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-frontend-jaxrs</artifactId>
+      <version>${cxf.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>javax.ws.rs</groupId>
+          <artifactId>javax.ws.rs-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>javax.annotation</groupId>
+          <artifactId>javax.annotation-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>com.fasterxml.woodstox</groupId>
+          <artifactId>woodstox-core</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.ws.xmlschema</groupId>
+          <artifactId>xmlschema-core</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-integration-cdi</artifactId>
+      <version>${cxf.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>javax.enterprise</groupId>
+          <artifactId>cdi-api</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-rs-client</artifactId>
+      <version>${cxf.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.johnzon</groupId>
+      <artifactId>johnzon-jaxrs</artifactId>
+      <version>${johnzon.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.johnzon</groupId>
+      <artifactId>johnzon-jsonb</artifactId>
+      <version>${johnzon.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-api</artifactId>
+      <version>${log4j2.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-core</artifactId>
+      <version>${log4j2.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-jul</artifactId>
+      <version>${log4j2.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <version>2.10</version>
+        <executions>
+          <execution>
+            <id>copy</id>
+            <phase>process-test-classes</phase>
+            <goals>
+              <goal>copy</goal>
+            </goals>
+            <configuration>
+              <artifactItems>
+                <artifactItem>
+                  <groupId>org.apache.deltaspike.core</groupId>
+                  <artifactId>deltaspike-core-api</artifactId>
+                  <version>${deltaspike.version}</version>
+                  <type>jar</type>
+                  <overWrite>true</overWrite>
+                  <outputDirectory>${project.build.directory}/shared-test</outputDirectory>
+                </artifactItem>
+                <artifactItem>
+                  <groupId>org.apache.deltaspike.core</groupId>
+                  <artifactId>deltaspike-core-impl</artifactId>
+                  <version>${deltaspike.version}</version>
+                  <type>jar</type>
+                  <overWrite>true</overWrite>
+                  <outputDirectory>${project.build.directory}/shared-test</outputDirectory>
+                </artifactItem>
+              </artifactItems>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.5.1</version>
+        <executions>
+          <execution>
+            <id>log4j-plugin-processor</id>
+            <goals>
+              <goal>compile</goal>
+            </goals>
+            <phase>process-classes</phase>
+            <configuration>
+              <proc>only</proc>
+              <annotationProcessors>
+                <annotationProcessor>org.apache.logging.log4j.core.config.plugins.processor.PluginProcessor
+                </annotationProcessor>
+              </annotationProcessors>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>3.1.0</version>
+        <executions>
+          <execution>
+            <id>bundle</id>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <shadedClassifierName>runner</shadedClassifierName>
+              <shadedArtifactAttached>true</shadedArtifactAttached>
+              <dependencyReducedPomLocation>${project.build.directory}/reduced-pom-bundle.xml
+              </dependencyReducedPomLocation>
+              <transformers>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                  <mainClass>org.apache.meecrowave.runner.Cli</mainClass>
+                </transformer>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                  <resource>META-INF/cxf/bus-extensions.txt</resource>
+                </transformer>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                  <resource>log4j2.component.properties</resource>
+                </transformer>
+                <transformer implementation="com.github.edwgiz.mavenShadePlugin.log4j2CacheTransformer.PluginsCacheFileTransformer" />
+                <transformer implementation="org.apache.openwebbeans.maven.shade.OpenWebBeansPropertiesTransformer" />
+                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+              </transformers>
+              <filters>
+                <filter>
+                  <artifact>org.apache.logging.log4j:log4j-api</artifact>
+                  <excludes>
+                    <exclude>META-INF/versions/**</exclude>
+                  </excludes>
+                </filter>
+                <filter>
+                  <artifact>*:*</artifact>
+                  <excludes>
+                    <exclude>META-INF/*.SF</exclude>
+                    <exclude>META-INF/*.DSA</exclude>
+                    <exclude>META-INF/*.RSA</exclude>
+                    <exclude>META-INF/LICENSE.txt</exclude>
+                    <exclude>META-INF/LICENSE</exclude>
+                    <exclude>META-INF/NOTICE.txt</exclude>
+                    <exclude>META-INF/NOTICE</exclude>
+                  </excludes>
+                </filter>
+              </filters>
+              <relocations>
+                <relocation>
+                  <pattern>org.apache.commons</pattern>
+                  <shadedPattern>org.apache.meecrowave.shaded.commons</shadedPattern>
+                </relocation>
+              </relocations>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.openwebbeans</groupId>
+            <artifactId>openwebbeans-maven</artifactId>
+            <version>${openwebbeans.version}</version>
+          </dependency>
+          <dependency>
+            <groupId>com.github.edwgiz</groupId>
+            <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId>
+            <version>2.1</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/catalina/startup/MeecrowaveContextConfig.java b/trunk/meecrowave-core/src/main/java/org/apache/catalina/startup/MeecrowaveContextConfig.java
new file mode 100644
index 0000000..f374c87
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/catalina/startup/MeecrowaveContextConfig.java
@@ -0,0 +1,220 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.catalina.startup;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.LifecycleEvent;
+import org.apache.catalina.WebResource;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.logging.tomcat.LogFacade;
+import org.apache.meecrowave.openwebbeans.OWBTomcatWebScannerService;
+import org.apache.meecrowave.watching.ReloadOnChangeController;
+import org.apache.tomcat.JarScanner;
+import org.apache.tomcat.util.descriptor.web.WebXml;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.corespi.scanner.xbean.CdiArchive;
+import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder;
+import org.xml.sax.InputSource;
+
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.annotation.HandlesTypes;
+import javax.servlet.annotation.WebFilter;
+import javax.servlet.annotation.WebListener;
+import javax.servlet.annotation.WebServlet;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Modifier;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static java.util.Collections.emptySet;
+import static java.util.Optional.ofNullable;
+
+public class MeecrowaveContextConfig extends ContextConfig {
+    private static final byte[] DEFAULT_WEB_XML = "<web-app version=\"3.1\" />".getBytes(StandardCharsets.UTF_8);
+
+    private final Meecrowave.Builder configuration;
+    private final Map<String, Collection<Class<?>>> webClasses = new HashMap<>();
+    private final boolean fixDocBase;
+    private final ServletContainerInitializer intializer;
+    private OwbAnnotationFinder finder;
+    private ReloadOnChangeController watcher;
+
+    public MeecrowaveContextConfig(final Meecrowave.Builder configuration, final boolean fixDocBase, final ServletContainerInitializer intializer) {
+        this.configuration = configuration;
+        this.fixDocBase = fixDocBase;
+        this.intializer= intializer;
+    }
+
+    @Override
+    protected void fixDocBase() throws IOException {
+        if (!fixDocBase) {
+            return;
+        }
+        super.fixDocBase();
+    }
+
+    @Override
+    protected void webConfig() {
+        if (context.getServletContext().getAttribute("meecrowave.configuration") == null) { // redeploy
+            context.getServletContext().setAttribute("meecrowave.configuration", configuration);
+            context.addServletContainerInitializer(intializer, emptySet());
+        }
+
+        if (!configuration.isTomcatScanning()) {
+            super.webConfig();
+            return;
+        }
+
+        // eagerly start CDI to scan only once and not twice (tomcat+CDI)
+        final ClassLoader loader = context.getLoader().getClassLoader(); // should already be started at that point
+        final Thread thread = Thread.currentThread();
+        final ClassLoader old = thread.getContextClassLoader();
+        thread.setContextClassLoader(loader);
+        try {
+            final OWBTomcatWebScannerService scannerService = OWBTomcatWebScannerService.class.cast(WebBeansContext.getInstance().getScannerService());
+            scannerService.setFilter(ofNullable(context.getJarScanner()).map(JarScanner::getJarScanFilter).orElse(null), context.getServletContext());
+            scannerService.setDocBase(context.getDocBase());
+            scannerService.setShared(configuration.getSharedLibraries());
+            if (configuration.getWatcherBouncing() > 0) { // note that caching should be disabled with this config in most of the times
+                watcher = new ReloadOnChangeController(context, configuration.getWatcherBouncing());
+                scannerService.setFileVisitor(f -> watcher.register(f));
+            }
+            scannerService.scan();
+            finder = scannerService.getFinder();
+            finder.link();
+            final CdiArchive archive = CdiArchive.class.cast(finder.getArchive());
+            Stream.of(WebServlet.class, WebFilter.class, WebListener.class)
+                    .forEach(marker -> finder.findAnnotatedClasses(marker).stream()
+                            .filter(c -> !Modifier.isAbstract(c.getModifiers()) && Modifier.isPublic(c.getModifiers()))
+                            .forEach(webComponent -> webClasses.computeIfAbsent(
+                                    archive.classesByUrl().entrySet().stream()
+                                            .filter(e -> e.getValue().getClassNames().contains(webComponent.getName()))
+                                            .findFirst().get().getKey(), k -> new HashSet<>())
+                                    .add(webComponent)));
+        } finally {
+            thread.setContextClassLoader(old);
+        }
+        try {
+            super.webConfig();
+        } finally {
+            webClasses.clear();
+            finder = null;
+        }
+    }
+
+    @Override
+    public void lifecycleEvent(final LifecycleEvent event) {
+        super.lifecycleEvent(event);
+        if (watcher != null && watcher.shouldRun() && Context.class.cast(event.getLifecycle()) == context) {
+            if (Lifecycle.AFTER_START_EVENT.equals(event.getType())) {
+                watcher.start();
+            } else if (Lifecycle.BEFORE_STOP_EVENT.equals(event.getType())) {
+                watcher.close();
+            }
+        }
+    }
+
+    @Override  // just to avoid an info log pretty useless for us
+    protected InputSource getGlobalWebXmlSource() {
+        return ofNullable(super.getGlobalWebXmlSource()).orElse(new InputSource(new ByteArrayInputStream(DEFAULT_WEB_XML)));
+    }
+
+    @Override
+    protected void processAnnotationsWebResource(final WebResource webResource, final WebXml fragment,
+                                                 final boolean handlesTypesOnly,
+                                                 final Map<String, JavaClassCacheEntry> javaClassCache) {
+        if (configuration.isTomcatScanning()) {
+            webClasses.keySet().stream().filter(k -> k.endsWith("/WEB-INF/classes"))
+                    .forEach(k -> processClasses(fragment, handlesTypesOnly, javaClassCache, k));
+        }
+    }
+
+    @Override
+    protected void processAnnotationsUrl(final URL url, final WebXml fragment, final boolean handlesTypesOnly,
+                                         final Map<String, JavaClassCacheEntry> javaClassCache) { // use our finder
+        if (!configuration.isTomcatScanning()) {
+            return;
+        }
+        processClasses(fragment, handlesTypesOnly, javaClassCache, url.toExternalForm());
+    }
+
+    @Override
+    protected void processServletContainerInitializers() { // use our finder
+        if (!configuration.isTomcatScanning()) {
+            return;
+        }
+
+        try {
+            new WebappServiceLoader<ServletContainerInitializer>(context).load(ServletContainerInitializer.class).forEach(sci -> {
+                final Set<Class<?>> classes = new HashSet<>();
+                initializerClassMap.put(sci, classes);
+
+                final HandlesTypes ht;
+                try {
+                    ht = sci.getClass().getAnnotation(HandlesTypes.class);
+                } catch (final Exception | NoClassDefFoundError e) {
+                    return;
+                }
+                if (ht == null) {
+                    return;
+                }
+                Stream.of(ht.value()).forEach(t -> {
+                    if (t.isAnnotation()) {
+                        final Class<? extends Annotation> annotation = Class.class.cast(t);
+                        finder.findAnnotatedClasses(annotation).forEach(classes::add);
+                    } else if (t.isInterface()) {
+                        finder.findImplementations(t).forEach(classes::add);
+                    } else {
+                        finder.findSubclasses(t).forEach(classes::add);
+                    }
+                });
+            });
+        } catch (final IOException e) {
+            ok = false;
+        }
+    }
+
+    private void processClasses(final WebXml fragment, final boolean handlesTypesOnly,
+                                final Map<String, JavaClassCacheEntry> javaClassCache, final String key) {
+        Collection<Class<?>> classes = webClasses.remove(key);
+        if (classes == null && key.endsWith(".jar") && key.startsWith("file:")) { // xbean vs o.a.tomcat.u.scan.JarFileUrlJar
+            classes = webClasses.remove("jar:" + key + "!/");
+        }
+        if (classes != null && !classes.isEmpty()) {
+            final ClassLoader loader = context.getLoader().getClassLoader();
+            classes.forEach(c -> {
+                try (final InputStream stream = loader.getResourceAsStream(c.getName().replace('.', '/') + ".class")) {
+                    super.processAnnotationsStream(stream, fragment, handlesTypesOnly, javaClassCache);
+                } catch (final IOException e) {
+                    new LogFacade(MeecrowaveContextConfig.class.getName()).error("Can't parse " + c);
+                }
+            });
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
new file mode 100644
index 0000000..cb94308
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/Meecrowave.java
@@ -0,0 +1,2346 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import static java.util.Collections.emptyList;
+import static java.util.Collections.emptySet;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toList;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.lang.management.ManagementFactory;
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.ServerSocket;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Base64;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Properties;
+import java.util.ServiceLoader;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import javax.crypto.Cipher;
+import javax.crypto.spec.SecretKeySpec;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.servlet.ServletContainerInitializer;
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Globals;
+import org.apache.catalina.Host;
+import org.apache.catalina.Lifecycle;
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.LifecycleState;
+import org.apache.catalina.Manager;
+import org.apache.catalina.Realm;
+import org.apache.catalina.Server;
+import org.apache.catalina.Service;
+import org.apache.catalina.connector.Connector;
+import org.apache.catalina.core.StandardContext;
+import org.apache.catalina.core.StandardHost;
+import org.apache.catalina.session.ManagerBase;
+import org.apache.catalina.session.StandardManager;
+import org.apache.catalina.startup.Catalina;
+import org.apache.catalina.startup.MeecrowaveContextConfig;
+import org.apache.catalina.startup.Tomcat;
+import org.apache.commons.lang3.text.StrLookup;
+import org.apache.commons.lang3.text.StrSubstitutor;
+import org.apache.coyote.http2.Http2Protocol;
+import org.apache.johnzon.core.BufferStrategy;
+import org.apache.meecrowave.api.StartListening;
+import org.apache.meecrowave.api.StopListening;
+import org.apache.meecrowave.cxf.CxfCdiAutoSetup;
+import org.apache.meecrowave.io.IO;
+import org.apache.meecrowave.logging.jul.Log4j2Logger;
+import org.apache.meecrowave.logging.log4j2.Log4j2Shutdown;
+import org.apache.meecrowave.logging.openwebbeans.Log4j2LoggerFactory;
+import org.apache.meecrowave.logging.tomcat.Log4j2Log;
+import org.apache.meecrowave.logging.tomcat.LogFacade;
+import org.apache.meecrowave.openwebbeans.OWBAutoSetup;
+import org.apache.meecrowave.runner.cli.CliOption;
+import org.apache.meecrowave.service.ValueTransformer;
+import org.apache.meecrowave.tomcat.CDIInstanceManager;
+import org.apache.meecrowave.tomcat.LoggingAccessLogPattern;
+import org.apache.meecrowave.tomcat.NoDescriptorRegistry;
+import org.apache.meecrowave.tomcat.OWBJarScanner;
+import org.apache.meecrowave.tomcat.ProvidedLoader;
+import org.apache.meecrowave.tomcat.TomcatAutoInitializer;
+import org.apache.tomcat.JarScanFilter;
+import org.apache.tomcat.util.descriptor.web.LoginConfig;
+import org.apache.tomcat.util.descriptor.web.SecurityCollection;
+import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
+import org.apache.tomcat.util.modeler.Registry;
+import org.apache.tomcat.util.net.SSLHostConfig;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.xbean.finder.ResourceFinder;
+import org.apache.xbean.recipe.ObjectRecipe;
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+public class Meecrowave implements AutoCloseable {
+    private final Builder configuration;
+    protected File base;
+    protected final File ownedTempDir;
+    protected InternalTomcat tomcat;
+    protected volatile Thread hook;
+
+    // we can undeploy webapps with that later
+    private final Map<String, Runnable> contexts = new HashMap<>();
+    private Runnable postTask;
+    private boolean clearCatalinaSystemProperties;
+
+    public Meecrowave() {
+        this(new Builder());
+    }
+
+    public Meecrowave(final Builder builder) {
+        this.configuration = builder;
+        this.ownedTempDir = new File(configuration.tempDir, "meecrowave_" + System.nanoTime());
+    }
+
+    public Builder getConfiguration() {
+        return configuration;
+    }
+
+    public File getBase() {
+        return base;
+    }
+
+    public Tomcat getTomcat() {
+        return tomcat;
+    }
+
+    public boolean isServing() {
+        return tomcat != null && tomcat.getHost().getState() == LifecycleState.STARTED;
+    }
+
+    public void undeploy(final String root) {
+        ofNullable(this.contexts.remove(root)).ifPresent(Runnable::run);
+    }
+
+    public Meecrowave deployClasspath(final DeploymentMeta meta) {
+        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+        final ClassLoader parentLoader = tomcat.getServer().getParentClassLoader();
+        if (parentLoader.getParent() == classLoader) {
+            classLoader = parentLoader;
+        }
+
+        final ProvidedLoader loader = new ProvidedLoader(classLoader, configuration.isTomcatWrapLoader());
+        final Consumer<Context> builtInCustomizer = c -> c.setLoader(loader);
+        return deployWebapp(new DeploymentMeta(meta.context, meta.docBase, ofNullable(meta.consumer).map(c -> (Consumer<Context>) ctx -> {
+            builtInCustomizer.accept(ctx);
+            c.accept(ctx);
+        }).orElse(builtInCustomizer)));
+    }
+
+    // shortcut
+    public Meecrowave deployClasspath() {
+        return deployClasspath("");
+    }
+
+    // shortcut
+    public Meecrowave bake(final Consumer<Context> customizer) {
+        start();
+        return deployClasspath(new DeploymentMeta("", null, customizer));
+    }
+
+    // shortcut (used by plugins)
+    public Meecrowave deployClasspath(final String context) {
+        return deployClasspath(new DeploymentMeta(context, null, null));
+    }
+
+    // shortcut
+    public Meecrowave deployWebapp(final File warOrDir) {
+        return deployWebapp("", warOrDir);
+    }
+
+    // shortcut (used by plugins)
+    public Meecrowave deployWebapp(final String context, final File warOrDir) {
+        return deployWebapp(new DeploymentMeta(context, warOrDir, null));
+    }
+
+    public Meecrowave deployWebapp(final DeploymentMeta meta) {
+        if (contexts.containsKey(meta.context)) {
+            throw new IllegalArgumentException("Already deployed: '" + meta.context + "'");
+        }
+        // always nice to see the deployment with something else than internals
+        final String base = tomcat.getService().findConnectors().length > 0 ?
+                (configuration.getActiveProtocol() + "://" + tomcat.getHost().getName() + ':' + configuration.getActivePort()) : "";
+        new LogFacade(Meecrowave.class.getName()).info("--------------- " + base + meta.context);
+
+
+        final OWBJarScanner scanner = new OWBJarScanner();
+        final StandardContext ctx = new StandardContext() {
+            @Override
+            public void setApplicationEventListeners(final Object[] listeners) {
+                if (listeners == null) {
+                    super.setApplicationEventListeners(null);
+                    return;
+                }
+
+                // ensure owb is first and cxf is last otherwise surprises,
+                // if we don't -> no @RequestScoped in request listeners :(
+                for (int i = 1; i < listeners.length; i++) {
+                    if (OWBAutoSetup.EagerBootListener.class.isInstance(listeners[i])) {
+                        final Object first = listeners[0];
+                        listeners[0] = listeners[i];
+                        listeners[i] = first;
+                        break;
+                    }
+                }
+
+                // and finally let it go after our re-ordering
+                super.setApplicationEventListeners(listeners);
+            }
+        };
+        ctx.setPath(meta.context);
+        ctx.setName(meta.context);
+        ctx.setJarScanner(scanner);
+        ctx.setInstanceManager(new CDIInstanceManager());
+        ofNullable(meta.docBase).ifPresent(d -> {
+            try {
+                ctx.setDocBase(meta.docBase.getCanonicalPath());
+            } catch (final IOException e) {
+                ctx.setDocBase(meta.docBase.getAbsolutePath());
+            }
+        });
+        ofNullable(configuration.tomcatFilter).ifPresent(filter -> {
+            try {
+                scanner.setJarScanFilter(JarScanFilter.class.cast(Thread.currentThread().getContextClassLoader().loadClass(filter).newInstance()));
+            } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+                throw new IllegalArgumentException(e);
+            }
+        });
+
+        final AtomicReference<Runnable> releaseSCI = new AtomicReference<>();
+        final ServletContainerInitializer meecrowaveInitializer = (c, ctx1) -> {
+            new OWBAutoSetup().onStartup(c, ctx1);
+            new CxfCdiAutoSetup().onStartup(c, ctx1);
+            new TomcatAutoInitializer().onStartup(c, ctx1);
+
+            if (configuration.isInjectServletContainerInitializer()) {
+                final Field f;
+                try { // now cdi is on, we can inject cdi beans in ServletContainerInitializer
+                    f = StandardContext.class.getDeclaredField("initializers");
+                    if (!f.isAccessible()) {
+                        f.setAccessible(true);
+                    }
+                } catch (final Exception e) {
+                    throw new IllegalStateException("Bad tomcat version", e);
+                }
+
+                final List<AutoCloseable> cc;
+                try {
+                    cc = ((Map<ServletContainerInitializer, Set<Class<?>>>) f.get(ctx)).keySet().stream()
+                            .filter(i -> !i.getClass().getName().startsWith(Meecrowave.class.getName()))
+                            .map(i -> {
+                                try {
+                                    return this.inject(i);
+                                } catch (final IllegalArgumentException iae) {
+                                    return null;
+                                }
+                            })
+                            .filter(Objects::nonNull)
+                            .collect(toList());
+                } catch (final IllegalAccessException e) {
+                    throw new IllegalStateException("Can't read initializers", e);
+                }
+                releaseSCI.set(() -> cc.forEach(closeable -> {
+                    try {
+                        closeable.close();
+                    } catch (final Exception e) {
+                        throw new IllegalStateException(e);
+                    }
+                }));
+            }
+        };
+
+        ctx.addLifecycleListener(new MeecrowaveContextConfig(configuration, meta.docBase != null, meecrowaveInitializer));
+        ctx.addLifecycleListener(event -> {
+            switch (event.getType()) {
+                case Lifecycle.AFTER_START_EVENT:
+                    ctx.getResources().setCachingAllowed(configuration.webResourceCached);
+                    break;
+                case Lifecycle.BEFORE_INIT_EVENT:
+                    ctx.getServletContext().setAttribute("meecrowave.configuration", configuration);
+                    ctx.getServletContext().setAttribute("meecrowave.instance", Meecrowave.this);
+                    if (configuration.loginConfig != null) {
+                        ctx.setLoginConfig(configuration.loginConfig.build());
+                    }
+                    for (final SecurityConstaintBuilder sc : configuration.securityConstraints) {
+                        ctx.addConstraint(sc.build());
+                    }
+                    if (configuration.webXml != null) {
+                        ctx.getServletContext().setAttribute(Globals.ALT_DD_ATTR, configuration.webXml);
+                    }
+                    break;
+                default:
+            }
+
+        });
+        ctx.addLifecycleListener(new Tomcat.FixContextListener()); // after having configured the security!!!
+
+        ctx.addServletContainerInitializer(meecrowaveInitializer, emptySet());
+
+        if (configuration.isUseTomcatDefaults()) {
+            ctx.setSessionTimeout(30);
+            ctx.addWelcomeFile("index.html");
+            ctx.addWelcomeFile("index.htm");
+            try {
+                final Field mimesField = Tomcat.class.getDeclaredField("DEFAULT_MIME_MAPPINGS");
+                if (!mimesField.isAccessible()) {
+                    mimesField.setAccessible(true);
+                }
+                final String[] defaultMimes = String[].class.cast(mimesField.get(null));
+                for (int i = 0; i < defaultMimes.length; ) {
+                    ctx.addMimeMapping(defaultMimes[i++], defaultMimes[i++]);
+                }
+            } catch (final NoSuchFieldException | IllegalAccessException e) {
+                throw new IllegalStateException("Incompatible Tomcat", e);
+            }
+        }
+
+        ofNullable(meta.consumer).ifPresent(c -> c.accept(ctx));
+
+        final Host host = tomcat.getHost();
+        host.addChild(ctx);
+
+        final ClassLoader classLoader = ctx.getLoader().getClassLoader();
+        if (host.getState().isAvailable()) {
+            fire(new StartListening(findFirstConnector(), host, ctx), classLoader);
+        }
+        contexts.put(meta.context, () -> {
+            if (host.getState().isAvailable()) {
+                fire(new StopListening(findFirstConnector(), host, ctx), classLoader);
+            }
+            ofNullable(releaseSCI.get()).ifPresent(Runnable::run);
+            tomcat.getHost().removeChild(ctx);
+        });
+        return this;
+    }
+
+    public Meecrowave bake() {
+        return bake("");
+    }
+
+    public Meecrowave bake(final String ctx) {
+        start();
+        return deployClasspath(ctx);
+    }
+
+    public Meecrowave start() {
+        final Map<String, String> systemPropsToRestore = new HashMap<>();
+
+        if (configuration.getMeecrowaveProperties() != null && !"meecrowave.properties".equals(configuration.getMeecrowaveProperties())) {
+            configuration.loadFrom(configuration.getMeecrowaveProperties());
+        }
+
+        if (configuration.isUseLog4j2JulLogManager()) { // /!\ don't move this line or add anything before without checking log setup
+            System.setProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager");
+        }
+
+        if (configuration.loggingGlobalSetup) {
+
+            setSystemProperty(systemPropsToRestore, "log4j.shutdownHookEnabled", "false");
+            setSystemProperty(systemPropsToRestore, "openwebbeans.logging.factory", Log4j2LoggerFactory.class.getName());
+            setSystemProperty(systemPropsToRestore, "org.apache.cxf.Logger", Log4j2Logger.class.getName());
+            setSystemProperty(systemPropsToRestore, "org.apache.tomcat.Logger", Log4j2Log.class.getName());
+
+            postTask = () -> {
+                new Log4j2Shutdown().shutodwn();
+                systemPropsToRestore.entrySet().forEach(entry -> {
+                    if (entry.getValue() == null) {
+                        System.clearProperty(entry.getKey());
+                    }
+                    else {
+                        System.setProperty(entry.getKey(), entry.getValue());
+                    }
+                });
+            };
+        }
+
+        setupJmx(configuration.isTomcatNoJmx());
+
+        clearCatalinaSystemProperties = System.getProperty("catalina.base") == null && System.getProperty("catalina.home") == null;
+
+        if (configuration.quickSession) {
+            tomcat = new TomcatWithFastSessionIDs();
+        } else {
+            tomcat = new InternalTomcat();
+        }
+
+        { // setup
+            base = new File(newBaseDir());
+
+            final File conf = createDirectory(base, "conf");
+            createDirectory(base, "lib");
+            createDirectory(base, "logs");
+            createDirectory(base, "temp");
+            createDirectory(base, "work");
+            createDirectory(base, "webapps");
+
+            synchronize(conf, configuration.conf);
+        }
+
+        final Properties props = configuration.properties;
+        StrSubstitutor substitutor = null;
+        for (final String s : props.stringPropertyNames()) {
+            final String v = props.getProperty(s);
+            if (v != null && v.contains("${")) {
+                if (substitutor == null) {
+                    final Map<String, String> placeHolders = new HashMap<>();
+                    placeHolders.put("meecrowave.embedded.http", Integer.toString(configuration.httpPort));
+                    placeHolders.put("meecrowave.embedded.https", Integer.toString(configuration.httpsPort));
+                    placeHolders.put("meecrowave.embedded.stop", Integer.toString(configuration.stopPort));
+                    substitutor = new StrSubstitutor(placeHolders);
+                }
+                props.put(s, substitutor.replace(v));
+            }
+        }
+
+        final File conf = new File(base, "conf");
+        final File webapps = new File(base, "webapps");
+
+        tomcat.setBaseDir(base.getAbsolutePath());
+        tomcat.setHostname(configuration.host);
+
+        final boolean initialized;
+        if (configuration.serverXml != null) {
+            final File file = new File(conf, "server.xml");
+            if (!file.equals(configuration.serverXml)) {
+                try (final InputStream is = new FileInputStream(configuration.serverXml);
+                     final FileOutputStream fos = new FileOutputStream(file)) {
+                    IO.copy(is, fos);
+                } catch (final IOException e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+
+            // respect config (host/port) of the Configuration
+            final QuickServerXmlParser ports = QuickServerXmlParser.parse(file);
+            if (configuration.keepServerXmlAsThis) {
+                configuration.httpPort = Integer.parseInt(ports.http());
+                configuration.stopPort = Integer.parseInt(ports.stop());
+            } else {
+                final Map<String, String> replacements = new HashMap<>();
+                replacements.put(ports.http(), String.valueOf(configuration.httpPort));
+                replacements.put(ports.https(), String.valueOf(configuration.httpsPort));
+                replacements.put(ports.stop(), String.valueOf(configuration.stopPort));
+
+                String serverXmlContent;
+                try (final InputStream stream = new FileInputStream(file)) {
+                    serverXmlContent = IO.toString(stream);
+                    for (final Map.Entry<String, String> pair : replacements.entrySet()) {
+                        serverXmlContent = serverXmlContent.replace(pair.getKey(), pair.getValue());
+                    }
+                } catch (final IOException e) {
+                    throw new IllegalStateException(e);
+                }
+                try (final OutputStream os = new FileOutputStream(file)) {
+                    os.write(serverXmlContent.getBytes(StandardCharsets.UTF_8));
+                } catch (final IOException e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+
+            tomcat.server(createServer(file.getAbsolutePath()));
+            initialized = true;
+        } else {
+            tomcat.getServer().setPort(configuration.stopPort);
+            initialized = false;
+        }
+
+        ofNullable(configuration.getSharedLibraries()).map(File::new).filter(File::isDirectory).ifPresent(libRoot -> {
+            final Collection<URL> libs = new ArrayList<>();
+            try {
+                libs.add(libRoot.toURI().toURL());
+            } catch (final MalformedURLException e) {
+                throw new IllegalStateException(e);
+            }
+            libs.addAll(ofNullable(libRoot.listFiles((dir, name) -> name.endsWith(".jar") || name.endsWith(".zip")))
+                    .map(Stream::of).map(s -> s.map(f -> {
+                        try {
+                            return f.toURI().toURL();
+                        } catch (final MalformedURLException e) {
+                            throw new IllegalStateException(e);
+                        }
+                    }).collect(toList()))
+                    .orElse(emptyList()));
+            tomcat.getServer().setParentClassLoader(new MeecrowaveContainerLoader(libs.toArray(new URL[libs.size()]), Thread.currentThread().getContextClassLoader()));
+        });
+
+        if (!initialized) {
+            tomcat.setHostname(configuration.host);
+            tomcat.getEngine().setDefaultHost(configuration.host);
+            final StandardHost host = new StandardHost();
+            host.setName(configuration.host);
+            host.setAppBase(webapps.getAbsolutePath());
+            host.setUnpackWARs(true); // forced for now cause OWB doesn't support war:file:// urls
+            try {
+                host.setWorkDir(new File(base, "work").getCanonicalPath());
+            } catch (final IOException e) {
+                host.setWorkDir(new File(base, "work").getAbsolutePath());
+            }
+            tomcat.setHost(host);
+        }
+
+        ofNullable(configuration.getTomcatAccessLogPattern()).ifPresent(pattern -> tomcat.getHost().getPipeline().addValve(new LoggingAccessLogPattern(pattern)));
+
+        if (configuration.realm != null) {
+            tomcat.getEngine().setRealm(configuration.realm);
+        }
+
+        if (tomcat.getRawConnector() == null && !configuration.skipHttp) {
+            final Connector connector = createConnector();
+            connector.setPort(configuration.httpPort);
+            if (connector.getAttribute("connectionTimeout") == null) {
+                connector.setAttribute("connectionTimeout", "3000");
+            }
+
+            tomcat.getService().addConnector(connector);
+            tomcat.setConnector(connector);
+        }
+
+        // create https connector
+        if (configuration.ssl) {
+            final Connector httpsConnector = createConnector();
+            httpsConnector.setPort(configuration.httpsPort);
+            httpsConnector.setSecure(true);
+            httpsConnector.setProperty("SSLEnabled", "true");
+            httpsConnector.setProperty("sslProtocol", configuration.sslProtocol);
+
+            if (configuration.keystoreFile != null) {
+                httpsConnector.setAttribute("keystoreFile", configuration.keystoreFile);
+            }
+            if (configuration.keystorePass != null) {
+                httpsConnector.setAttribute("keystorePass", configuration.keystorePass);
+            }
+            httpsConnector.setAttribute("keystoreType", configuration.keystoreType);
+            if (configuration.clientAuth != null) {
+                httpsConnector.setAttribute("clientAuth", configuration.clientAuth);
+            }
+
+            if (configuration.keyAlias != null) {
+                httpsConnector.setAttribute("keyAlias", configuration.keyAlias);
+            }
+
+            tomcat.getService().addConnector(httpsConnector);
+
+            if (configuration.skipHttp) {
+                tomcat.setConnector(httpsConnector);
+            }
+        }
+
+        if (configuration.http2) {
+            final Connector c = configuration.ssl ?
+                    tomcat.getService().findConnectors()[tomcat.getService().findConnectors().length - 1] :
+                    ofNullable(tomcat.getRawConnector()).orElse(tomcat.getService().findConnectors()[0]);
+
+            c.addUpgradeProtocol(new Http2Protocol());
+            c.addSslHostConfig(buildSslHostConfig());
+        }
+
+        for (final Connector c : configuration.connectors) {
+            tomcat.getService().addConnector(c);
+        }
+        if (!configuration.skipHttp && !configuration.ssl && !configuration.connectors.isEmpty()) {
+            tomcat.setConnector(configuration.connectors.iterator().next());
+        }
+
+        if (configuration.users != null) {
+            for (final Map.Entry<String, String> user : configuration.users.entrySet()) {
+                tomcat.addUser(user.getKey(), user.getValue());
+            }
+        }
+        if (configuration.roles != null) {
+            for (final Map.Entry<String, String> user : configuration.roles.entrySet()) {
+                for (final String role : user.getValue().split(" *, *")) {
+                    tomcat.addRole(user.getKey(), role);
+                }
+            }
+        }
+
+        StreamSupport.stream(ServiceLoader.load(Meecrowave.InstanceCustomizer.class).spliterator(), false)
+                .forEach(c -> c.accept(tomcat));
+        configuration.instanceCustomizers.forEach(c -> c.accept(tomcat));
+
+        beforeStart();
+
+        try {
+            if (!initialized) {
+                tomcat.init();
+            }
+
+            tomcat.getHost().addLifecycleListener(event -> {
+                if (!Host.class.isInstance(event.getSource())) {
+                    return;
+                }
+                broadcastHostEvent(event.getType(), Host.class.cast(event.getSource()));
+            });
+
+            tomcat.start();
+        } catch (final LifecycleException e) {
+            throw new IllegalStateException(e);
+        }
+        ofNullable(configuration.getPidFile()).ifPresent(pidFile -> {
+            if (pidFile.getParentFile() != null && !pidFile.getParentFile().isDirectory() && !pidFile.getParentFile().mkdirs()) {
+                throw new IllegalArgumentException("Can't create " + pidFile);
+            }
+            final String pid = ManagementFactory.getRuntimeMXBean().getName();
+            final int at = pid.indexOf('@');
+            try (final Writer w = new FileWriter(pidFile)) {
+                w.write(at > 0 ? pid.substring(0, at) : pid);
+            } catch (final IOException e) {
+                throw new IllegalStateException("Can't write the pid in " + pid, e);
+            }
+        });
+        if (configuration.isUseShutdownHook()) {
+            hook = new Thread(() -> {
+                hook = null; // prevent close to remove the hook which would throw an exception
+                close();
+            }, "meecrowave-stop-hook");
+            Runtime.getRuntime().addShutdownHook(hook);
+        }
+        return this;
+    }
+
+
+    /**
+     * Store away the current system property for restoring it later
+     * during shutdown.
+     * @param backupPropertyMap a Map to store away the previous value before setting the newValue
+     * @param propertyKey
+     * @param newValue
+     */
+    private void setSystemProperty(Map<String, String> backupPropertyMap, String propertyKey, String newValue) {
+        backupPropertyMap.put(propertyKey, System.getProperty(propertyKey));
+
+        System.setProperty(propertyKey, newValue);
+    }
+
+    private void broadcastHostEvent(final String event, final Host host) {
+        switch (event) {
+            case Lifecycle.AFTER_START_EVENT: {
+                final Connector connector = findFirstConnector();
+                findContexts(host).forEach(ctx -> fire(new StartListening(connector, host, ctx), ctx.getLoader().getClassLoader()));
+                break;
+            }
+            case Lifecycle.BEFORE_STOP_EVENT: {
+                final Connector connector = findFirstConnector();
+                findContexts(host).forEach(ctx -> fire(new StopListening(connector, host, ctx), ctx.getLoader().getClassLoader()));
+                break;
+            }
+            default:
+        }
+    }
+
+    private Connector findFirstConnector() {
+        return Stream.of(tomcat.getServer().findServices())
+                .flatMap(s -> Stream.of(s.findConnectors()))
+                .findFirst()
+                .orElse(null);
+    }
+
+    private Stream<Context> findContexts(final Host host) {
+        return Stream.of(host.findChildren())
+                .filter(Context.class::isInstance)
+                .map(Context.class::cast)
+                .filter(ctx -> ctx.getState().isAvailable());
+    }
+
+    private <T> void fire(final T event, final ClassLoader classLoader) {
+        final Thread thread = Thread.currentThread();
+        final ClassLoader loader = thread.getContextClassLoader();
+        thread.setContextClassLoader(classLoader);
+        try {
+            WebBeansContext.currentInstance()
+                    .getBeanManagerImpl()
+                    .getEvent()
+                    .select(Class.class.cast(event.getClass()))
+                    .fire(event);
+        } finally {
+            thread.setContextClassLoader(loader);
+        }
+    }
+
+    private void setupJmx(final boolean skip) {
+        try {
+            final Field registry = Registry.class.getDeclaredField("registry");
+            registry.setAccessible(true);
+            registry.set(null, skip ? new NoDescriptorRegistry() : new Registry());
+        } catch (final Exception e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    private SSLHostConfig buildSslHostConfig() {
+        final ObjectRecipe recipe = new ObjectRecipe(SSLHostConfig.class);
+        for (final String key : configuration.properties.stringPropertyNames()) {
+            if (!key.startsWith("connector.sslhostconfig.")) {
+                continue;
+            }
+            final String substring = key.substring("connector.sslhostconfig.".length());
+            recipe.setProperty(substring, configuration.properties.getProperty(key));
+        }
+        return SSLHostConfig.class.cast(recipe.create());
+    }
+
+    protected void beforeStart() {
+        // no-op
+    }
+
+    protected void beforeStop() {
+        // no-op
+    }
+
+    public <T> AutoCloseable inject(final T instance) {
+        final BeanManager bm = CDI.current().getBeanManager();
+        final AnnotatedType<?> annotatedType = bm.createAnnotatedType(instance.getClass());
+        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final CreationalContext<Object> creationalContext = bm.createCreationalContext(null);
+        injectionTarget.inject(instance, creationalContext);
+        return creationalContext::release;
+    }
+
+    @Override
+    public void close() {
+        if (tomcat == null) {
+            return;
+        }
+        if (hook != null) {
+            Runtime.getRuntime().removeShutdownHook(hook);
+            this.hook = null;
+        }
+        beforeStop();
+        if (MeecrowaveContainerLoader.class.isInstance(tomcat.getServer().getParentClassLoader())) {
+            try {
+                MeecrowaveContainerLoader.class.cast(tomcat.getServer().getParentClassLoader()).close();
+            } catch (final IOException e) {
+                new LogFacade(Meecrowave.class.getName()).error(e.getMessage(), e);
+            }
+        }
+        try {
+            contexts.values().forEach(Runnable::run);
+        } finally {
+            try {
+                tomcat.stop();
+                tomcat.destroy();
+            } catch (final LifecycleException e) {
+                throw new IllegalStateException(e);
+            } finally {
+                if (clearCatalinaSystemProperties) {
+                    Stream.of("catalina.base", "catalina.home").forEach(System::clearProperty);
+                }
+                if (configuration.isUseLog4j2JulLogManager()) {
+                    System.clearProperty("java.util.logging.manager");
+                }
+                ofNullable(postTask).ifPresent(Runnable::run);
+                postTask = null;
+                try {
+                    if (base != null) {
+                        IO.delete(base);
+                    }
+
+                    if (ownedTempDir != null) {
+                        IO.delete(ownedTempDir);
+                    }
+                } catch (final IllegalArgumentException /*does not exist from the hook*/ e) {
+                    // no-op
+                } finally {
+                    base = null;
+
+                    // not very important if we can't delete it since next restart will write another value normally
+                    ofNullable(configuration.getPidFile()).ifPresent(File::delete);
+                }
+            }
+        }
+    }
+
+    protected Connector createConnector() {
+        final Connector connector;
+        final Properties properties = configuration.properties;
+        if (properties != null) {
+            final Map<String, String> attributes = new HashMap<>();
+            final ObjectRecipe recipe = new ObjectRecipe(Connector.class);
+            for (final String key : properties.stringPropertyNames()) {
+                if (!key.startsWith("connector.")) {
+                    continue;
+                }
+
+                final String substring = key.substring("connector.".length());
+                if (substring.startsWith("sslhostconfig.")) {
+                    continue;
+                }
+
+                if (!substring.startsWith("attributes.")) {
+                    recipe.setProperty(substring, properties.getProperty(key));
+                } else {
+                    attributes.put(substring.substring("attributes.".length()), properties.getProperty(key));
+                }
+            }
+            connector = recipe.getProperties().isEmpty() ? new Connector() : Connector.class.cast(recipe.create());
+            for (final Map.Entry<String, String> attr : attributes.entrySet()) {
+                connector.setAttribute(attr.getKey(), attr.getValue());
+            }
+        } else {
+            connector = new Connector();
+        }
+        return connector;
+    }
+
+    private static Server createServer(final String serverXml) {
+        final Catalina catalina = new Catalina() {
+            // skip few init we don't need *here*
+            @Override
+            protected void initDirs() {
+                // no-op
+            }
+
+            @Override
+            protected void initStreams() {
+                // no-op
+            }
+
+            @Override
+            protected void initNaming() {
+                // no-op
+            }
+        };
+        catalina.setConfigFile(serverXml);
+        catalina.load();
+        return catalina.getServer();
+    }
+
+    private File createDirectory(final File parent, final String directory) {
+        final File dir = new File(parent, directory);
+        IO.mkdirs(dir);
+        return dir;
+    }
+
+    private void synchronize(final File base, final String resourceBase) {
+        if (resourceBase == null) {
+            return;
+        }
+
+        try {
+            final Map<String, URL> urls = new ResourceFinder("").getResourcesMap(resourceBase);
+            for (final Map.Entry<String, URL> u : urls.entrySet()) {
+                try (final InputStream is = u.getValue().openStream()) {
+                    final File to = new File(base, u.getKey());
+                    try (final OutputStream os = new FileOutputStream(to)) {
+                        IO.copy(is, os);
+                    }
+                    if ("server.xml".equals(u.getKey())) {
+                        configuration.setServerXml(to.getAbsolutePath());
+                    }
+                }
+            }
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    private String newBaseDir() {
+        final String dir = configuration.dir;
+        if (dir != null) {
+            final File dirFile = new File(dir);
+            if (dirFile.exists()) {
+                if (base.exists() && configuration.deleteBaseOnStartup) {
+                    IO.delete(base);
+                }
+                return dir;
+            }
+            IO.mkdirs(dirFile);
+            return dirFile.getAbsolutePath();
+        }
+
+        final File file = Stream.concat(
+                    // bundle uses that with a high priority since it is the expected behavior
+                    ofNullable(System.getProperty("meecrowave.base"))
+                        .map(File::new)
+                        .filter(File::isDirectory)
+                        .map(base -> new File(base, "temp"))
+                        .map(location -> {
+                            IO.mkdirs(location);
+                            return location;
+                        })
+                        .map(File::getAbsolutePath)
+                        .map(Stream::of)
+                        .orElseGet(Stream::empty),
+                    // test common build locations - else set configuration.dir if you don't use a default setup
+                    Stream.of("target", "build"))
+                .map(File::new)
+                .filter(File::isDirectory)
+                .findFirst()
+                .map(file1 -> new File(file1, "meecrowave-" + System.nanoTime()))
+                .orElse(ownedTempDir);
+        IO.mkdirs(file);
+        return file.getAbsolutePath();
+    }
+
+    public void await() {
+        tomcat.getServer().await();
+    }
+
+    // this class holds all the built-in config,
+    // extension can use extensions feature (see cli.html) which is basically the same kind of bean
+    // accessible through builder.getExtension(type) builder being accessible through the meecrowave.configuration
+    // attribute of the ServletContext.
+    public static class Builder {
+        @CliOption(name = "pid-file", description = "A file path to write the process id if the server starts")
+        private File pidFile;
+
+        @CliOption(name = "watcher-bouncing", description = "Activate redeployment on directories update using this bouncing.")
+        private int watcherBouncing = 500;
+
+        @CliOption(name = "http", description = "HTTP port")
+        private int httpPort = 8080;
+
+        @CliOption(name = "https", description = "HTTPS port")
+        private int httpsPort = 8443;
+
+        @CliOption(name = "stop", description = "Shutdown port if used or -1")
+        private int stopPort = -1;
+
+        @CliOption(name = "host", description = "Default host")
+        private String host = "localhost";
+
+        @CliOption(name = "dir", description = "Root folder if provided otherwise a fake one is created in tmp-dir")
+        private String dir;
+
+        @CliOption(name = "server-xml", description = "Provided server.xml")
+        private File serverXml;
+
+        @CliOption(name = "keep-server-xml-as-this", description = "Don't replace ports in server.xml")
+        private boolean keepServerXmlAsThis;
+
+        @CliOption(name = "properties", description = "Passthrough properties")
+        private Properties properties = new Properties();
+
+        @CliOption(name = "quick-session", description = "Should an unsecured but fast session id generator be used")
+        private boolean quickSession = true;
+
+        @CliOption(name = "skip-http", description = "Skip HTTP connector")
+        private boolean skipHttp;
+
+        @CliOption(name = "ssl", description = "Use HTTPS")
+        private boolean ssl;
+
+        @CliOption(name = "keystore-file", description = "HTTPS keystore location")
+        private String keystoreFile;
+
+        @CliOption(name = "keystore-password", description = "HTTPS keystore password")
+        private String keystorePass;
+
+        @CliOption(name = "keystore-type", description = "HTTPS keystore type")
+        private String keystoreType = "JKS";
+
+        @CliOption(name = "client-auth", description = "HTTPS keystore client authentication")
+        private String clientAuth;
+
+        @CliOption(name = "keystore-alias", description = "HTTPS keystore alias")
+        private String keyAlias;
+
+        @CliOption(name = "ssl-protocol", description = "HTTPS protocol")
+        private String sslProtocol;
+
+        @CliOption(name = "web-xml", description = "Global web.xml")
+        private String webXml;
+
+        @CliOption(name = "login-config", description = "web.xml login config")
+        private LoginConfigBuilder loginConfig;
+
+        @CliOption(name = "security-constraint", description = "web.xml security constraint")
+        private Collection<SecurityConstaintBuilder> securityConstraints = new LinkedList<>();
+
+        @CliOption(name = "realm", description = "realm")
+        private Realm realm;
+
+        @CliOption(name = "users", description = "In memory users")
+        private Map<String, String> users;
+
+        @CliOption(name = "roles", description = "In memory roles")
+        private Map<String, String> roles;
+
+        @CliOption(name = "http2", description = "Activate HTTP 2")
+        private boolean http2;
+
+        @CliOption(name = "connector", description = "Custom connectors")
+        private final Collection<Connector> connectors = new ArrayList<>();
+
+        @CliOption(name = "tmp-dir", description = "Temporary directory")
+        private String tempDir = System.getProperty("java.io.tmpdir");
+
+        @CliOption(name = "web-resource-cached", description = "Cache web resources")
+        private boolean webResourceCached = true;
+
+        @CliOption(name = "conf", description = "Conf folder to synchronize")
+        private String conf;
+
+        @CliOption(name = "delete-on-startup", description = "Should the directory be cleaned on startup if existing")
+        private boolean deleteBaseOnStartup = true;
+
+        @CliOption(name = "jaxrs-mapping", description = "Default jaxrs mapping")
+        private String jaxrsMapping = "/*";
+
+        @CliOption(name = "cdi-conversation", description = "Should CDI conversation be activated")
+        private boolean cdiConversation;
+
+        @CliOption(name = "jaxrs-provider-setup", description = "Should default JAX-RS provider be configured")
+        private boolean jaxrsProviderSetup = true;
+
+        @CliOption(name = "jaxrs-default-providers", description = "If jaxrsProviderSetup is true the list of default providers to load (or defaulting to johnson jsonb and jsonp ones)")
+        private String jaxrsDefaultProviders;
+
+        @CliOption(name = "jaxrs-beanvalidation", description = "Should bean validation be activated on JAX-RS endpoint if present in the classpath.")
+        private boolean jaxrsAutoActivateBeanValidation = true;
+
+        @CliOption(name = "jaxrs-log-provider", description = "Should JAX-RS providers be logged")
+        private boolean jaxrsLogProviders = false;
+
+        @CliOption(name = "jsonp-buffer-strategy", description = "JSON-P JAX-RS provider buffer strategy (see johnzon)")
+        private String jsonpBufferStrategy = BufferStrategy.QUEUE.name();
+
+        @CliOption(name = "jsonp-max-string-length", description = "JSON-P JAX-RS provider max string limit size (see johnzon)")
+        private int jsonpMaxStringLen = 64 * 1024;
+
+        @CliOption(name = "jsonp-read-buffer-length", description = "JSON-P JAX-RS provider read buffer limit size (see johnzon)")
+        private int jsonpMaxReadBufferLen = 64 * 1024;
+
+        @CliOption(name = "jsonp-write-buffer-length", description = "JSON-P JAX-RS provider write buffer limit size (see johnzon)")
+        private int jsonpMaxWriteBufferLen = 64 * 1024;
+
+        @CliOption(name = "jsonp-supports-comment", description = "Should JSON-P JAX-RS provider support comments (see johnzon)")
+        private boolean jsonpSupportsComment = false;
+
+        @CliOption(name = "jsonp-supports-comment", description = "Should JSON-P JAX-RS provider prettify the outputs (see johnzon)")
+        private boolean jsonpPrettify = false;
+
+        @CliOption(name = "jsonb-encoding", description = "Which encoding provider JSON-B should use")
+        private String jsonbEncoding = "UTF-8";
+
+        @CliOption(name = "jsonb-nulls", description = "Should JSON-B provider serialize nulls")
+        private boolean jsonbNulls = false;
+
+        @CliOption(name = "jsonb-ijson", description = "Should JSON-B provider comply to I-JSON")
+        private boolean jsonbIJson = false;
+
+        @CliOption(name = "jsonb-prettify", description = "Should JSON-B provider prettify the output")
+        private boolean jsonbPrettify = false;
+
+        @CliOption(name = "jsonb-binary-strategy", description = "Should JSON-B provider prettify the output")
+        private String jsonbBinaryStrategy;
+
+        @CliOption(name = "jsonb-naming-strategy", description = "Should JSON-B provider prettify the output")
+        private String jsonbNamingStrategy;
+
+        @CliOption(name = "jsonb-order-strategy", description = "Should JSON-B provider prettify the output")
+        private String jsonbOrderStrategy;
+
+        @CliOption(name = "logging-global-setup", description = "Should logging be configured to use log4j2 (it is global)")
+        private boolean loggingGlobalSetup = true;
+
+        @CliOption(name = "cxf-servlet-params", description = "Init parameters passed to CXF servlet")
+        private Map<String, String> cxfServletParams;
+
+        @CliOption(name = "tomcat-scanning", description = "Should Tomcat scanning be used (@HandleTypes, @WebXXX)")
+        private boolean tomcatScanning = true;
+
+        @CliOption(name = "tomcat-default-setup", description = "Add default servlet")
+        private boolean tomcatAutoSetup = true;
+
+        @CliOption(name = "use-shutdown-hook", description = "Use shutdown hook to automatically stop the container on Ctrl+C")
+        private boolean useShutdownHook = true;
+
+        @CliOption(name = "tomcat-filter", description = "A Tomcat JarScanFilter")
+        private String tomcatFilter;
+
+        @CliOption(name = "scanning-include", description = "A forced include list of jar names (comma separated values)")
+        private String scanningIncludes;
+
+        @CliOption(name = "scanning-exclude", description = "A forced exclude list of jar names (comma separated values)")
+        private String scanningExcludes;
+
+        @CliOption(name = "scanning-package-include", description = "A forced include list of packages names (comma separated values)")
+        private String scanningPackageIncludes;
+
+        @CliOption(name = "scanning-package-exclude", description = "A forced exclude list of packages names (comma separated values)")
+        private String scanningPackageExcludes;
+
+        @CliOption(name = "tomcat-default", description = "Should Tomcat default be set (session timeout, mime mapping etc...)")
+        private boolean useTomcatDefaults = true;
+
+        @CliOption(name = "tomcat-wrap-loader", description = "(Experimental) When deploying a classpath (current classloader), " +
+                "should meecrowave wrap the loader to define another loader identity but still use the same classes and resources.")
+        private boolean tomcatWrapLoader = false;
+
+        @CliOption(name = "tomcat-skip-jmx", description = "(Experimental) Should Tomcat MBeans be skipped.")
+        private boolean tomcatNoJmx = true;
+
+        @CliOption(name = "shared-libraries", description = "A folder containing shared libraries.", alias = "shared-librairies")
+        private String sharedLibraries;
+
+        @CliOption(name = "log4j2-jul-bridge", description = "Should JUL logs be redirected to Log4j2 - only works before JUL usage.")
+        private boolean useLog4j2JulLogManager = System.getProperty("java.util.logging.manager") == null;
+
+        @CliOption(name = "servlet-container-initializer-injection", description = "Should ServletContainerInitialize support injections.")
+        private boolean injectServletContainerInitializer = true;
+
+        @CliOption(
+                name = "tomcat-access-log-pattern",
+                description = "Activates and configure the access log valve. Value example: '%h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"'")
+        private String tomcatAccessLogPattern;
+
+        @CliOption(
+                name = "meecrowave-properties",
+                description = "Loads a meecrowave properties, defaults to meecrowave.properties.")
+        private String meecrowaveProperties = "meecrowave.properties";
+
+        @CliOption(name = "jaxws-support-if-present", description = "Should @WebService CDI beans be deployed if cxf-rt-frontend-jaxws is in the classpath.")
+        private boolean jaxwsSupportIfAvailable = true;
+
+        private final Map<Class<?>, Object> extensions = new HashMap<>();
+        private final Collection<Consumer<Tomcat>> instanceCustomizers = new ArrayList<>();
+
+        public Builder() { // load defaults
+            extensions.put(ValueTransformers.class, new ValueTransformers());
+            StreamSupport.stream(ServiceLoader.load(Meecrowave.ConfigurationCustomizer.class).spliterator(), false)
+                    .forEach(c -> c.accept(this));
+            loadFrom(meecrowaveProperties);
+        }
+
+        public <T> T getExtension(final Class<T> extension) {
+            // in the cli we read the values from the cli but in other mode from properties
+            // to ensure we can do the same in all modes keeping a nice cli
+            return extension.cast(extensions.computeIfAbsent(extension, k -> {
+                try {
+                    return bind(k.newInstance());
+                } catch (final InstantiationException | IllegalAccessException e) {
+                    throw new IllegalArgumentException(e);
+                }
+            }));
+        }
+
+        public boolean isJaxwsSupportIfAvailable() {
+            return jaxwsSupportIfAvailable;
+        }
+
+        public void setJaxwsSupportIfAvailable(final boolean jaxwsSupportIfAvailable) {
+            this.jaxwsSupportIfAvailable = jaxwsSupportIfAvailable;
+        }
+
+        public int getWatcherBouncing() {
+            return watcherBouncing;
+        }
+
+        public void setWatcherBouncing(final int watcherBouncing) {
+            this.watcherBouncing = watcherBouncing;
+        }
+
+        public String getTomcatAccessLogPattern() {
+            return tomcatAccessLogPattern;
+        }
+
+        public void setTomcatAccessLogPattern(final String tomcatAccessLogPattern) {
+            this.tomcatAccessLogPattern = tomcatAccessLogPattern;
+        }
+
+        public boolean isTomcatNoJmx() {
+            return tomcatNoJmx;
+        }
+
+        public void setTomcatNoJmx(final boolean tomcatNoJmx) {
+            this.tomcatNoJmx = tomcatNoJmx;
+        }
+
+        public File getPidFile() {
+            return pidFile;
+        }
+
+        public void setPidFile(final File pidFile) {
+            this.pidFile = pidFile;
+        }
+
+        public String getScanningPackageIncludes() {
+            return scanningPackageIncludes;
+        }
+
+        public void setScanningPackageIncludes(final String scanningPackageIncludes) {
+            this.scanningPackageIncludes = scanningPackageIncludes;
+        }
+
+        public String getScanningPackageExcludes() {
+            return scanningPackageExcludes;
+        }
+
+        public void setScanningPackageExcludes(final String scanningPackageExcludes) {
+            this.scanningPackageExcludes = scanningPackageExcludes;
+        }
+
+        public Builder excludePackages(final String packages) {
+            this.setScanningPackageExcludes(packages);
+            return this;
+        }
+
+        public Builder includePackages(final String packages) {
+            this.setScanningPackageIncludes(packages);
+            return this;
+        }
+
+        public void setExtension(final Class<?> type, final Object value) {
+            extensions.put(type, value);
+        }
+
+        public String getScanningIncludes() {
+            return scanningIncludes;
+        }
+
+        public void setScanningIncludes(final String scanningIncludes) {
+            this.scanningIncludes = scanningIncludes;
+        }
+
+        public String getScanningExcludes() {
+            return scanningExcludes;
+        }
+
+        public void setScanningExcludes(final String scanningExcludes) {
+            this.scanningExcludes = scanningExcludes;
+        }
+
+        public String getJsonpBufferStrategy() {
+            return jsonpBufferStrategy;
+        }
+
+        public String getJsonbEncoding() {
+            return jsonbEncoding;
+        }
+
+        public void setJsonbEncoding(final String jsonbEncoding) {
+            this.jsonbEncoding = jsonbEncoding;
+        }
+
+        public boolean isJsonbNulls() {
+            return jsonbNulls;
+        }
+
+        public void setJsonbNulls(final boolean jsonbNulls) {
+            this.jsonbNulls = jsonbNulls;
+        }
+
+        public boolean isJsonbIJson() {
+            return jsonbIJson;
+        }
+
+        public void setJsonbIJson(final boolean jsonbIJson) {
+            this.jsonbIJson = jsonbIJson;
+        }
+
+        public boolean isJsonbPrettify() {
+            return jsonbPrettify;
+        }
+
+        public void setJsonbPrettify(final boolean jsonbPrettify) {
+            this.jsonbPrettify = jsonbPrettify;
+        }
+
+        public String getJsonbBinaryStrategy() {
+            return jsonbBinaryStrategy;
+        }
+
+        public void setJsonbBinaryStrategy(final String jsonbBinaryStrategy) {
+            this.jsonbBinaryStrategy = jsonbBinaryStrategy;
+        }
+
+        public String getJsonbNamingStrategy() {
+            return jsonbNamingStrategy;
+        }
+
+        public void setJsonbNamingStrategy(final String jsonbNamingStrategy) {
+            this.jsonbNamingStrategy = jsonbNamingStrategy;
+        }
+
+        public String getJsonbOrderStrategy() {
+            return jsonbOrderStrategy;
+        }
+
+        public void setJsonbOrderStrategy(final String jsonbOrderStrategy) {
+            this.jsonbOrderStrategy = jsonbOrderStrategy;
+        }
+
+        public void setJsonpBufferStrategy(final String jsonpBufferStrategy) {
+            this.jsonpBufferStrategy = jsonpBufferStrategy;
+        }
+
+        public int getJsonpMaxStringLen() {
+            return jsonpMaxStringLen;
+        }
+
+        public void setJsonpMaxStringLen(final int jsonpMaxStringLen) {
+            this.jsonpMaxStringLen = jsonpMaxStringLen;
+        }
+
+        public int getJsonpMaxReadBufferLen() {
+            return jsonpMaxReadBufferLen;
+        }
+
+        public void setJsonpMaxReadBufferLen(final int jsonpMaxReadBufferLen) {
+            this.jsonpMaxReadBufferLen = jsonpMaxReadBufferLen;
+        }
+
+        public int getJsonpMaxWriteBufferLen() {
+            return jsonpMaxWriteBufferLen;
+        }
+
+        public void setJsonpMaxWriteBufferLen(final int jsonpMaxWriteBufferLen) {
+            this.jsonpMaxWriteBufferLen = jsonpMaxWriteBufferLen;
+        }
+
+        public boolean isJsonpSupportsComment() {
+            return jsonpSupportsComment;
+        }
+
+        public void setJsonpSupportsComment(final boolean jsonpSupportsComment) {
+            this.jsonpSupportsComment = jsonpSupportsComment;
+        }
+
+        public boolean isJsonpPrettify() {
+            return jsonpPrettify;
+        }
+
+        public void setJsonpPrettify(final boolean jsonpPrettify) {
+            this.jsonpPrettify = jsonpPrettify;
+        }
+
+        public String getSharedLibraries() {
+            return sharedLibraries;
+        }
+
+        public Builder sharedLibraries(final String sharedLibraries) {
+            setSharedLibraries(sharedLibraries);
+            return this;
+        }
+
+        public void setSharedLibraries(final String sharedLibraries) {
+            this.sharedLibraries = sharedLibraries;
+        }
+
+        public boolean isJaxrsLogProviders() {
+            return jaxrsLogProviders;
+        }
+
+        public void setJaxrsLogProviders(final boolean jaxrsLogProviders) {
+            this.jaxrsLogProviders = jaxrsLogProviders;
+        }
+
+        public boolean isUseTomcatDefaults() {
+            return useTomcatDefaults;
+        }
+
+        public void setUseTomcatDefaults(final boolean useTomcatDefaults) {
+            this.useTomcatDefaults = useTomcatDefaults;
+        }
+
+        public String getTomcatFilter() {
+            return tomcatFilter;
+        }
+
+        public void setTomcatFilter(final String tomcatFilter) {
+            this.tomcatFilter = tomcatFilter;
+        }
+
+        public boolean isTomcatScanning() {
+            return tomcatScanning;
+        }
+
+        public void setTomcatScanning(final boolean tomcatScanning) {
+            this.tomcatScanning = tomcatScanning;
+        }
+
+        public Map<String, String> getCxfServletParams() {
+            return cxfServletParams;
+        }
+
+        public void setCxfServletParams(final Map<String, String> cxfServletParams) {
+            this.cxfServletParams = cxfServletParams;
+        }
+
+        public boolean isLoggingGlobalSetup() {
+            return loggingGlobalSetup;
+        }
+
+        public void setLoggingGlobalSetup(final boolean loggingGlobalSetup) {
+            this.loggingGlobalSetup = loggingGlobalSetup;
+        }
+
+        public boolean isJaxrsAutoActivateBeanValidation() {
+            return jaxrsAutoActivateBeanValidation;
+        }
+
+        public void setJaxrsAutoActivateBeanValidation(final boolean jaxrsAutoActivateBeanValidation) {
+            this.jaxrsAutoActivateBeanValidation = jaxrsAutoActivateBeanValidation;
+        }
+
+        public boolean isJaxrsProviderSetup() {
+            return jaxrsProviderSetup;
+        }
+
+        public void setJaxrsProviderSetup(final boolean jaxrsProviderSetup) {
+            this.jaxrsProviderSetup = jaxrsProviderSetup;
+        }
+
+        public int getHttpPort() {
+            return httpPort;
+        }
+
+        public void setHttpPort(final int httpPort) {
+            this.httpPort = httpPort;
+        }
+
+        public int getHttpsPort() {
+            return httpsPort;
+        }
+
+        public void setHttpsPort(final int httpsPort) {
+            this.httpsPort = httpsPort;
+        }
+
+        public int getStopPort() {
+            return stopPort;
+        }
+
+        public void setStopPort(final int stopPort) {
+            this.stopPort = stopPort;
+        }
+
+        public String getHost() {
+            return host;
+        }
+
+        public void setHost(final String host) {
+            this.host = host;
+        }
+
+        public String getDir() {
+            return dir;
+        }
+
+        public void setDir(final String dir) {
+            this.dir = dir;
+        }
+
+        public File getServerXml() {
+            return serverXml;
+        }
+
+        public void setServerXml(final File serverXml) {
+            this.serverXml = serverXml;
+        }
+
+        public boolean isKeepServerXmlAsThis() {
+            return keepServerXmlAsThis;
+        }
+
+        public void setKeepServerXmlAsThis(final boolean keepServerXmlAsThis) {
+            this.keepServerXmlAsThis = keepServerXmlAsThis;
+        }
+
+        public Properties getProperties() {
+            return properties;
+        }
+
+        public void setProperties(final Properties properties) {
+            this.properties = properties;
+        }
+
+        public boolean isQuickSession() {
+            return quickSession;
+        }
+
+        public void setQuickSession(final boolean quickSession) {
+            this.quickSession = quickSession;
+        }
+
+        public boolean isSkipHttp() {
+            return skipHttp;
+        }
+
+        public void setSkipHttp(final boolean skipHttp) {
+            this.skipHttp = skipHttp;
+        }
+
+        public boolean isSsl() {
+            return ssl;
+        }
+
+        public void setSsl(final boolean ssl) {
+            this.ssl = ssl;
+        }
+
+        public String getKeystoreFile() {
+            return keystoreFile;
+        }
+
+        public void setKeystoreFile(final String keystoreFile) {
+            this.keystoreFile = keystoreFile;
+        }
+
+        public String getKeystorePass() {
+            return keystorePass;
+        }
+
+        public void setKeystorePass(final String keystorePass) {
+            this.keystorePass = keystorePass;
+        }
+
+        public String getKeystoreType() {
+            return keystoreType;
+        }
+
+        public void setKeystoreType(final String keystoreType) {
+            this.keystoreType = keystoreType;
+        }
+
+        public String getClientAuth() {
+            return clientAuth;
+        }
+
+        public void setClientAuth(final String clientAuth) {
+            this.clientAuth = clientAuth;
+        }
+
+        public String getKeyAlias() {
+            return keyAlias;
+        }
+
+        public void setKeyAlias(final String keyAlias) {
+            this.keyAlias = keyAlias;
+        }
+
+        public String getSslProtocol() {
+            return sslProtocol;
+        }
+
+        public void setSslProtocol(final String sslProtocol) {
+            this.sslProtocol = sslProtocol;
+        }
+
+        public String getWebXml() {
+            return webXml;
+        }
+
+        public void setWebXml(final String webXml) {
+            this.webXml = webXml;
+        }
+
+        public LoginConfigBuilder getLoginConfig() {
+            return loginConfig;
+        }
+
+        public Builder loginConfig(final LoginConfigBuilder loginConfig) {
+            setLoginConfig(loginConfig);
+            return this;
+        }
+
+        public void setLoginConfig(final LoginConfigBuilder loginConfig) {
+            this.loginConfig = loginConfig;
+        }
+
+        public Collection<SecurityConstaintBuilder> getSecurityConstraints() {
+            return securityConstraints;
+        }
+
+        public Builder securityConstraints(final SecurityConstaintBuilder securityConstraint) {
+            securityConstraints = securityConstraints == null ? new ArrayList<>() : securityConstraints;
+            securityConstraints.add(securityConstraint);
+            return this;
+        }
+
+        public void setSecurityConstraints(final Collection<SecurityConstaintBuilder> securityConstraints) {
+            this.securityConstraints = securityConstraints;
+        }
+
+        public Realm getRealm() {
+            return realm;
+        }
+
+        public Builder realm(final Realm realm) {
+            setRealm(realm);
+            return this;
+        }
+
+        public void setRealm(final Realm realm) {
+            this.realm = realm;
+        }
+
+        public Map<String, String> getUsers() {
+            return users;
+        }
+
+        public void setUsers(final Map<String, String> users) {
+            this.users = users;
+        }
+
+        public Map<String, String> getRoles() {
+            return roles;
+        }
+
+        public void setRoles(final Map<String, String> roles) {
+            this.roles = roles;
+        }
+
+        public boolean isHttp2() {
+            return http2;
+        }
+
+        public void setHttp2(final boolean http2) {
+            this.http2 = http2;
+        }
+
+        public Collection<Connector> getConnectors() {
+            return connectors;
+        }
+
+        public String getTempDir() {
+            return tempDir;
+        }
+
+        public void setTempDir(final String tempDir) {
+            this.tempDir = tempDir;
+        }
+
+        public boolean isWebResourceCached() {
+            return webResourceCached;
+        }
+
+        public void setWebResourceCached(final boolean webResourceCached) {
+            this.webResourceCached = webResourceCached;
+        }
+
+        public String getConf() {
+            return conf;
+        }
+
+        public void setConf(final String conf) {
+            this.conf = conf;
+        }
+
+        public boolean isDeleteBaseOnStartup() {
+            return deleteBaseOnStartup;
+        }
+
+        public void setDeleteBaseOnStartup(final boolean deleteBaseOnStartup) {
+            this.deleteBaseOnStartup = deleteBaseOnStartup;
+        }
+
+        public String getJaxrsMapping() {
+            return jaxrsMapping;
+        }
+
+        public void setJaxrsMapping(final String jaxrsMapping) {
+            this.jaxrsMapping = jaxrsMapping;
+        }
+
+        public boolean isCdiConversation() {
+            return cdiConversation;
+        }
+
+        public void setCdiConversation(final boolean cdiConversation) {
+            this.cdiConversation = cdiConversation;
+        }
+
+        public Builder randomHttpPort() {
+            try (final ServerSocket serverSocket = new ServerSocket(0)) {
+                this.httpPort = serverSocket.getLocalPort();
+            } catch (final IOException e) {
+                throw new IllegalStateException(e);
+            }
+            return this;
+        }
+
+        public Builder loadFrom(final String resource) {
+            try (final InputStream is = findStream(resource)) {
+                if (is != null) {
+                    final Properties config = new Properties() {{
+                        load(is);
+                    }};
+                    loadFromProperties(config);
+                }
+                return this;
+            } catch (final IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }
+
+        public void setServerXml(final String file) {
+            if (file == null) {
+                serverXml = null;
+            } else {
+                final File sXml = new File(file);
+                if (sXml.exists()) {
+                    serverXml = sXml;
+                }
+            }
+        }
+
+        public Builder property(final String key, final String value) {
+            properties.setProperty(key, value);
+            return this;
+        }
+
+        private InputStream findStream(final String resource) throws FileNotFoundException {
+            InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
+            if (stream == null) {
+                final File file = new File(resource);
+                if (file.exists()) {
+                    return new FileInputStream(file);
+                }
+            }
+            return stream;
+        }
+
+        public Builder user(final String name, final String pwd) {
+            if (users == null) {
+                users = new HashMap<>();
+            }
+            this.users.put(name, pwd);
+            return this;
+        }
+
+        public Builder role(final String user, final String roles) {
+            if (this.roles == null) {
+                this.roles = new HashMap<>();
+            }
+            this.roles.put(user, roles);
+            return this;
+        }
+
+        public Builder cxfServletParam(final String key, final String value) {
+            if (this.cxfServletParams == null) {
+                this.cxfServletParams = new HashMap<>();
+            }
+            this.cxfServletParams.put(key, value);
+            return this;
+        }
+
+        public String getActiveProtocol() {
+            return isSkipHttp() ? "https" : "http";
+        }
+
+        public int getActivePort() {
+            return isSkipHttp() ? getHttpsPort() : getHttpPort();
+        }
+
+        public boolean isTomcatAutoSetup() {
+            return tomcatAutoSetup;
+        }
+
+        public void setTomcatAutoSetup(final boolean tomcatAutoSetup) {
+            this.tomcatAutoSetup = tomcatAutoSetup;
+        }
+
+        public boolean isUseShutdownHook() {
+            return useShutdownHook;
+        }
+
+        public void setUseShutdownHook(final boolean useShutdownHook) {
+            this.useShutdownHook = useShutdownHook;
+        }
+
+        public Builder noShutdownHook() {
+            setUseShutdownHook(false);
+            return this;
+        }
+
+        public boolean isTomcatWrapLoader() {
+            return tomcatWrapLoader;
+        }
+
+        public void setTomcatWrapLoader(final boolean tomcatWrapLoader) {
+            this.tomcatWrapLoader = tomcatWrapLoader;
+        }
+
+        public void addInstanceCustomizer(final Consumer<Tomcat> customizer) {
+            instanceCustomizers.add(customizer);
+        }
+
+        public Builder instanceCustomizer(final Consumer<Tomcat> customizer) {
+            addInstanceCustomizer(customizer);
+            return this;
+        }
+
+        public void addCustomizer(final Consumer<Builder> configurationCustomizer) {
+            configurationCustomizer.accept(this);
+        }
+
+        public String getJaxrsDefaultProviders() {
+            return jaxrsDefaultProviders;
+        }
+
+        public void setJaxrsDefaultProviders(final String jaxrsDefaultProviders) {
+            this.jaxrsDefaultProviders = jaxrsDefaultProviders;
+        }
+
+        public boolean isUseLog4j2JulLogManager() {
+            return useLog4j2JulLogManager;
+        }
+
+        public void setUseLog4j2JulLogManager(final boolean useLog4j2JulLogManager) {
+            this.useLog4j2JulLogManager = useLog4j2JulLogManager;
+        }
+
+        public void loadFromProperties(final Properties config) {
+            // filtering properties with system properties or themself
+            final StrSubstitutor strSubstitutor = new StrSubstitutor(new StrLookup<String>() {
+                @Override
+                public String lookup(final String key) {
+                    final String property = System.getProperty(key);
+                    return property == null ? config.getProperty(key) : null;
+                }
+            });
+
+            final ValueTransformers transformers = getExtension(ValueTransformers.class);
+            for (final String key : config.stringPropertyNames()) {
+                final String val = config.getProperty(key);
+                if (val == null || val.trim().isEmpty()) {
+                    continue;
+                }
+                final String newVal = transformers.apply(strSubstitutor.replace(config.getProperty(key)));
+                if (!val.equals(newVal)) {
+                    config.setProperty(key, newVal);
+                }
+            }
+
+            for (final Field field : Builder.class.getDeclaredFields()) {
+                final CliOption annotation = field.getAnnotation(CliOption.class);
+                if (annotation == null) {
+                    continue;
+                }
+                final String name = field.getName();
+                Stream.of(Stream.of(annotation.name()), Stream.of(annotation.alias()))
+                        .flatMap(a -> a)
+                        .map(config::getProperty)
+                        .filter(Objects::nonNull)
+                        .findAny().ifPresent(val -> {
+                    final Object toSet;
+                    if (field.getType() == String.class) {
+                        toSet = val;
+                    } else if (field.getType() == int.class) {
+                        if ("httpPort".equals(name) && "-1".equals(val)) { // special case in case of random port
+                            randomHttpPort();
+                            toSet = null;
+                        } else {
+                            toSet = Integer.parseInt(val);
+                        }
+                    } else if (field.getType() == boolean.class) {
+                        toSet = Boolean.parseBoolean(val);
+                    } else if (field.getType() == File.class) {
+                        toSet = new File(val);
+                    } else {
+                        toSet = null;
+                    }
+                    if (toSet == null) { // handled elsewhere
+                        return;
+                    }
+
+                    if (!field.isAccessible()) {
+                        field.setAccessible(true);
+                    }
+                    try {
+                        field.set(this, toSet);
+                    } catch (final IllegalAccessException e) {
+                        throw new IllegalStateException(e);
+                    }
+                });
+            }
+
+            // not trivial types
+            for (final String prop : config.stringPropertyNames()) {
+                if (prop.startsWith("properties.")) {
+                    property(prop.substring("properties.".length()), config.getProperty(prop));
+                } else if (prop.startsWith("users.")) {
+                    user(prop.substring("users.".length()), config.getProperty(prop));
+                } else if (prop.startsWith("roles.")) {
+                    role(prop.substring("roles.".length()), config.getProperty(prop));
+                } else if (prop.startsWith("cxf.servlet.params.")) {
+                    cxfServletParam(prop.substring("cxf.servlet.params.".length()), config.getProperty(prop));
+                } else if (prop.startsWith("connector.")) { // created in container
+                    property(prop, config.getProperty(prop));
+                } else if (prop.equals("realm")) {
+                    final ObjectRecipe recipe = new ObjectRecipe(config.getProperty(prop));
+                    for (final String realmConfig : config.stringPropertyNames()) {
+                        if (realmConfig.startsWith("realm.")) {
+                            recipe.setProperty(realmConfig.substring("realm.".length()), config.getProperty(realmConfig));
+                        }
+                    }
+                    this.realm = Realm.class.cast(recipe.create());
+                } else if (prop.equals("login")) {
+                    final ObjectRecipe recipe = new ObjectRecipe(LoginConfigBuilder.class.getName());
+                    for (final String nestedConfig : config.stringPropertyNames()) {
+                        if (nestedConfig.startsWith("login.")) {
+                            recipe.setProperty(nestedConfig.substring("login.".length()), config.getProperty(nestedConfig));
+                        }
+                    }
+                    loginConfig = LoginConfigBuilder.class.cast(recipe.create());
+                } else if (prop.equals("securityConstraint")) {
+                    final ObjectRecipe recipe = new ObjectRecipe(SecurityConstaintBuilder.class.getName());
+                    for (final String nestedConfig : config.stringPropertyNames()) {
+                        if (nestedConfig.startsWith("securityConstraint.")) {
+                            recipe.setProperty(nestedConfig.substring("securityConstraint.".length()), config.getProperty(nestedConfig));
+                        }
+                    }
+                    securityConstraints.add(SecurityConstaintBuilder.class.cast(recipe.create()));
+                } else if (prop.equals("configurationCustomizer")) {
+                    final ObjectRecipe recipe = new ObjectRecipe(properties.getProperty(prop));
+                    for (final String nestedConfig : config.stringPropertyNames()) {
+                        if (nestedConfig.startsWith(prop + '.')) {
+                            recipe.setProperty(nestedConfig.substring(prop.length() + 2 /*dot*/), config.getProperty(nestedConfig));
+                        }
+                    }
+                    addCustomizer(Consumer.class.cast(recipe.create()));
+                }
+            }
+        }
+
+        public <T> T bind(final T instance) {
+            final ValueTransformers transformers = getExtension(ValueTransformers.class);
+            Class<? extends Object> type = instance.getClass();
+            do {
+                Stream.of(type.getDeclaredFields())
+                        .filter(f -> f.isAnnotationPresent(CliOption.class))
+                        .forEach(f -> {
+                            final CliOption annotation = f.getAnnotation(CliOption.class);
+                            String value = properties.getProperty(annotation.name());
+                            if (value == null) {
+                                value = Stream.of(annotation.alias()).map(properties::getProperty).findFirst().orElse(null);
+                                if (value == null) {
+                                    return;
+                                }
+                            }
+
+                            value = transformers.apply(value);
+
+                            if (!f.isAccessible()) {
+                                f.setAccessible(true);
+                            }
+                            final Class<?> t = f.getType();
+                            try {
+                                if (t == String.class) {
+                                    f.set(instance, value);
+                                } else if (t == int.class) {
+                                    f.set(instance, Integer.parseInt(value));
+                                } else if (t == boolean.class) {
+                                    f.set(instance, Boolean.parseBoolean(value));
+                                } else {
+                                    throw new IllegalArgumentException("Unsupported type " + t);
+                                }
+                            } catch (final IllegalAccessException iae) {
+                                throw new IllegalStateException(iae);
+                            }
+                        });
+                type = type.getSuperclass();
+            } while (type != Object.class);
+            return instance;
+        }
+
+        public boolean isInjectServletContainerInitializer() {
+            return injectServletContainerInitializer;
+        }
+
+        public void setInjectServletContainerInitializer(final boolean injectServletContainerInitializer) {
+            this.injectServletContainerInitializer = injectServletContainerInitializer;
+        }
+
+        public String getMeecrowaveProperties() {
+            return meecrowaveProperties;
+        }
+
+        public void setMeecrowaveProperties(final String meecrowaveProperties) {
+            this.meecrowaveProperties = meecrowaveProperties;
+        }
+    }
+
+    public static class ValueTransformers implements Function<String, String> {
+        private final Map<String, ValueTransformer> transformers = new HashMap<>();
+
+        @Override
+        public String apply(final String value) {
+            if (value.startsWith("decode:")) {
+                if (transformers.isEmpty()) { // lazy loading
+                    transformers.put("Static3DES", new ValueTransformer() { // compatibility with tomee
+                        private final SecretKeySpec key = new SecretKeySpec(new byte[]{
+                                (byte) 0x76, (byte) 0x6F, (byte) 0xBA, (byte) 0x39, (byte) 0x31,
+                                (byte) 0x2F, (byte) 0x0D, (byte) 0x4A, (byte) 0xA3, (byte) 0x90,
+                                (byte) 0x55, (byte) 0xFE, (byte) 0x55, (byte) 0x65, (byte) 0x61,
+                                (byte) 0x13, (byte) 0x34, (byte) 0x82, (byte) 0x12, (byte) 0x17,
+                                (byte) 0xAC, (byte) 0x77, (byte) 0x39, (byte) 0x19}, "DESede");
+
+                        @Override
+                        public String name() {
+                            return "Static3DES";
+                        }
+
+                        @Override
+                        public String apply(final String encodedPassword) {
+                            Objects.requireNonNull(encodedPassword, "value can't be null");
+                            try {
+                                final byte[] cipherText = Base64.getDecoder().decode(encodedPassword);
+                                final Cipher cipher = Cipher.getInstance("DESede");
+                                cipher.init(Cipher.DECRYPT_MODE, key);
+                                return new String(cipher.doFinal(cipherText), StandardCharsets.UTF_8);
+                            } catch (final Exception e) {
+                                throw new IllegalArgumentException(e);
+                            }
+                        }
+                    });
+                    for (final ValueTransformer t : ServiceLoader.load(ValueTransformer.class)) {
+                        transformers.put(t.name(), t);
+                    }
+                }
+
+                final String substring = value.substring("decode:".length());
+                final int sep = substring.indexOf(':');
+                if (sep < 0) {
+                    throw new IllegalArgumentException("No transformer algorithm for " + value);
+                }
+                final String algo = substring.substring(0, sep);
+                return Objects.requireNonNull(transformers.get(algo), "No ValueTransformer for value '" + value + "'").apply(substring.substring(sep + 1));
+            }
+            return value;
+        }
+    }
+
+    public static class LoginConfigBuilder {
+        private final LoginConfig loginConfig = new LoginConfig();
+
+        public void setErrorPage(final String errorPage) {
+            loginConfig.setErrorPage(errorPage);
+        }
+
+        public void setLoginPage(final String loginPage) {
+            loginConfig.setLoginPage(loginPage);
+        }
+
+        public void setRealmName(final String realmName) {
+            loginConfig.setRealmName(realmName);
+        }
+
+        public void setAuthMethod(final String authMethod) {
+            loginConfig.setAuthMethod(authMethod);
+        }
+
+        public LoginConfigBuilder errorPage(final String errorPage) {
+            loginConfig.setErrorPage(errorPage);
+            return this;
+        }
+
+        public LoginConfigBuilder loginPage(final String loginPage) {
+            loginConfig.setLoginPage(loginPage);
+            return this;
+        }
+
+        public LoginConfigBuilder realmName(final String realmName) {
+            loginConfig.setRealmName(realmName);
+            return this;
+        }
+
+        public LoginConfigBuilder authMethod(final String authMethod) {
+            loginConfig.setAuthMethod(authMethod);
+            return this;
+        }
+
+        public LoginConfig build() {
+            return loginConfig;
+        }
+
+        public LoginConfigBuilder basic() {
+            return authMethod("BASIC");
+        }
+
+        public LoginConfigBuilder digest() {
+            return authMethod("DIGEST");
+        }
+
+        public LoginConfigBuilder clientCert() {
+            return authMethod("CLIENT-CERT");
+        }
+
+        public LoginConfigBuilder form() {
+            return authMethod("FORM");
+        }
+    }
+
+    public static class SecurityConstaintBuilder {
+        private final SecurityConstraint securityConstraint = new SecurityConstraint();
+
+        public SecurityConstaintBuilder authConstraint(final boolean authConstraint) {
+            securityConstraint.setAuthConstraint(authConstraint);
+            return this;
+        }
+
+        public SecurityConstaintBuilder displayName(final String displayName) {
+            securityConstraint.setDisplayName(displayName);
+            return this;
+        }
+
+        public SecurityConstaintBuilder userConstraint(final String constraint) {
+            securityConstraint.setUserConstraint(constraint);
+            return this;
+        }
+
+        public SecurityConstaintBuilder addAuthRole(final String authRole) {
+            securityConstraint.addAuthRole(authRole);
+            return this;
+        }
+
+        public SecurityConstaintBuilder addCollection(final String name, final String pattern, final String... methods) {
+            final SecurityCollection collection = new SecurityCollection();
+            collection.setName(name);
+            collection.addPattern(pattern);
+            for (final String httpMethod : methods) {
+                collection.addMethod(httpMethod);
+            }
+            securityConstraint.addCollection(collection);
+            return this;
+        }
+
+        public void setAuthConstraint(final boolean authConstraint) {
+            securityConstraint.setAuthConstraint(authConstraint);
+        }
+
+        public void setDisplayName(final String displayName) {
+            securityConstraint.setDisplayName(displayName);
+        }
+
+        public void setUserConstraint(final String userConstraint) {
+            securityConstraint.setUserConstraint(userConstraint);
+        }
+
+        public void setAuthRole(final String authRole) { // easier for config
+            addAuthRole(authRole);
+        }
+
+        // name:pattern:method1/method2
+        public void setCollection(final String value) { // for config
+            final String[] split = value.split(":");
+            if (split.length != 3 && split.length != 2) {
+                throw new IllegalArgumentException("Can't parse " + value + ", syntax is: name:pattern:method1/method2");
+            }
+            addCollection(split[0], split[1], split.length == 2 ? new String[0] : split[2].split("/"));
+        }
+
+        public SecurityConstraint build() {
+            return securityConstraint;
+        }
+    }
+
+    private static class InternalTomcat extends Tomcat {
+        private Connector connector;
+
+        private void server(final Server s) {
+            server = s;
+            connector = server != null && server.findServices().length > 0 && server.findServices()[0].findConnectors().length > 0 ?
+                    server.findServices()[0].findConnectors()[0] : null;
+        }
+
+        Connector getRawConnector() {
+            return connector;
+        }
+    }
+
+    private static class TomcatWithFastSessionIDs extends InternalTomcat {
+        @Override
+        public void start() throws LifecycleException {
+            // Use fast, insecure session ID generation for all tests
+            final Server server = getServer();
+            for (final Service service : server.findServices()) {
+                final org.apache.catalina.Container e = service.getContainer();
+                for (final org.apache.catalina.Container h : e.findChildren()) {
+                    for (final org.apache.catalina.Container c : h.findChildren()) {
+                        Manager m = ((org.apache.catalina.Context) c).getManager();
+                        if (m == null) {
+                            m = new StandardManager();
+                            org.apache.catalina.Context.class.cast(c).setManager(m);
+                        }
+                        if (m instanceof ManagerBase) {
+                            ManagerBase.class.cast(m).setSecureRandomClass(
+                                    "org.apache.catalina.startup.FastNonSecureRandom");
+                        }
+                    }
+                }
+            }
+            super.start();
+        }
+    }
+
+    private static class QuickServerXmlParser extends DefaultHandler {
+        private static final SAXParserFactory FACTORY = SAXParserFactory.newInstance();
+
+        static {
+            FACTORY.setNamespaceAware(true);
+            FACTORY.setValidating(false);
+        }
+
+        private static final String STOP_KEY = "STOP";
+        private static final String HTTP_KEY = "HTTP";
+        private static final String SECURED_SUFFIX = "S";
+        private static final String HOST_KEY = "host";
+        private static final String DEFAULT_CONNECTOR_KEY = HTTP_KEY;
+
+        private static final String DEFAULT_HTTP_PORT = "8080";
+        private static final String DEFAULT_HTTPS_PORT = "8443";
+        private static final String DEFAULT_STOP_PORT = "8005";
+        private static final String DEFAULT_HOST = "localhost";
+
+        private final Map<String, String> values = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
+
+        private QuickServerXmlParser(final boolean useDefaults) {
+            if (useDefaults) {
+                values.put(STOP_KEY, DEFAULT_STOP_PORT);
+                values.put(HTTP_KEY, DEFAULT_HTTP_PORT);
+                values.put(HOST_KEY, DEFAULT_HOST);
+            }
+        }
+
+        @Override
+        public void startElement(final String uri, final String localName,
+                                 final String qName, final Attributes attributes) throws SAXException {
+            if ("Server".equalsIgnoreCase(localName)) {
+                final String port = attributes.getValue("port");
+                if (port != null) {
+                    values.put(STOP_KEY, port);
+                } else {
+                    values.put(STOP_KEY, DEFAULT_STOP_PORT);
+                }
+            } else if ("Connector".equalsIgnoreCase(localName)) {
+                String protocol = attributes.getValue("protocol");
+                if (protocol == null) {
+                    protocol = DEFAULT_CONNECTOR_KEY;
+                } else if (protocol.contains("/")) {
+                    protocol = protocol.substring(0, protocol.indexOf("/"));
+                }
+                final String port = attributes.getValue("port");
+                final String ssl = attributes.getValue("secure");
+
+                if (ssl == null || "false".equalsIgnoreCase(ssl)) {
+                    values.put(protocol.toUpperCase(), port);
+                } else {
+                    values.put(protocol.toUpperCase() + SECURED_SUFFIX, port);
+                }
+            } else if ("Host".equalsIgnoreCase(localName)) {
+                final String host = attributes.getValue("name");
+                if (host != null) {
+                    values.put(HOST_KEY, host);
+                }
+            }
+        }
+
+        private static QuickServerXmlParser parse(final File serverXml) {
+            return parse(serverXml, true);
+        }
+
+        private static QuickServerXmlParser parse(final File serverXml, final boolean defaults) {
+            final QuickServerXmlParser handler = new QuickServerXmlParser(defaults);
+            try {
+                final SAXParser parser = FACTORY.newSAXParser();
+                parser.parse(serverXml, handler);
+            } catch (final Exception e) {
+                // no-op: using defaults
+            }
+            return handler;
+        }
+
+        public String http() {
+            return value(HTTP_KEY, DEFAULT_HTTP_PORT);
+        }
+
+        private String https() { // enough common to be exposed as method
+            return securedValue(HTTP_KEY, DEFAULT_HTTPS_PORT);
+        }
+
+        private String stop() {
+            return value(STOP_KEY, DEFAULT_STOP_PORT);
+        }
+
+        private String value(final String key, final String defaultValue) {
+            final String val = values.get(key);
+            if (val == null) {
+                return defaultValue;
+            }
+            return val;
+        }
+
+        private String securedValue(final String key, final String defaultValue) {
+            return value(key + SECURED_SUFFIX, defaultValue);
+        }
+    }
+
+    // there to be able to stack config later on without breaking all methods
+    public static class DeploymentMeta {
+        private final String context;
+        private final File docBase;
+        private final Consumer<Context> consumer;
+
+        public DeploymentMeta(final String context, final File docBase, final Consumer<Context> consumer) {
+            this.context = context;
+            this.docBase = docBase;
+            this.consumer = consumer;
+        }
+    }
+
+    // just to type it and allow some extensions to use a ServiceLoader
+    public interface ConfigurationCustomizer extends Consumer<Meecrowave.Builder> {
+    }
+
+    public interface InstanceCustomizer extends Consumer<Tomcat> {
+    }
+
+    private static final class MeecrowaveContainerLoader extends URLClassLoader {
+        private MeecrowaveContainerLoader(final URL[] urls, final ClassLoader parent) {
+            super(urls, parent);
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/MeecrowaveExplosion.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/MeecrowaveExplosion.java
new file mode 100644
index 0000000..0ae9210
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/MeecrowaveExplosion.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+public class MeecrowaveExplosion extends RuntimeException {
+    public MeecrowaveExplosion(final String msg, final Exception e) {
+        super(msg, e);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/ListeningBase.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/ListeningBase.java
new file mode 100644
index 0000000..ba0352a
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/ListeningBase.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.api;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.connector.Connector;
+
+public abstract class ListeningBase {
+    private final Connector connector;
+    private final Context context;
+    private final Host host;
+
+    ListeningBase(final Connector connector, final Host host, final Context context) {
+        this.connector = connector;
+        this.host = host;
+        this.context = context;
+    }
+
+    public Context getContext() {
+        return context;
+    }
+
+    public Connector getConnector() {
+        return connector;
+    }
+
+    public Host getHost() {
+        return host;
+    }
+
+    public String getFirstBase() {
+        return (connector.getSecure() ? "https" : "http") + "://" +
+                host.getName() + (connector.getPort() > 0 ? ":" + connector.getPort() : "") +
+                context.getPath();
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/StartListening.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/StartListening.java
new file mode 100644
index 0000000..dfa7bc6
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/StartListening.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.api;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.connector.Connector;
+
+public class StartListening extends ListeningBase {
+    public StartListening(final Connector connector, final Host host, final Context context) {
+        super(connector, host, context);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/StopListening.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/StopListening.java
new file mode 100644
index 0000000..b6bee79
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/api/StopListening.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.api;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.Host;
+import org.apache.catalina.connector.Connector;
+
+public class StopListening extends ListeningBase {
+    public StopListening(final Connector connector, final Host host, final Context context) {
+        super(connector, host, context);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveProvider.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveProvider.java
new file mode 100644
index 0000000..2ae3228
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveProvider.java
@@ -0,0 +1,6 @@
+package org.apache.meecrowave.cdi;
+
+import org.apache.webbeans.container.OwbCDIProvider;
+
+public class MeecrowaveProvider extends OwbCDIProvider {
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializer.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializer.java
new file mode 100644
index 0000000..00e4442
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializer.java
@@ -0,0 +1,136 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cdi;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.logging.jul.Log4j2Logger;
+import org.apache.meecrowave.logging.openwebbeans.Log4j2LoggerFactory;
+import org.apache.meecrowave.logging.tomcat.Log4j2Log;
+import org.apache.meecrowave.openwebbeans.KnowClassesFilter;
+import org.apache.meecrowave.openwebbeans.OWBTomcatWebScannerService;
+import org.apache.openwebbeans.se.OWBContainer;
+import org.apache.openwebbeans.se.OWBInitializer;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ScannerService;
+import org.apache.xbean.finder.filter.Filter;
+
+import javax.enterprise.inject.se.SeContainer;
+import javax.enterprise.inject.se.SeContainerInitializer;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.toSet;
+
+public class MeecrowaveSeContainerInitializer extends OWBInitializer {
+    static { // todo: see if we can not do it statically but also means we lazy load OWB which can require some OWB rework
+        System.setProperty("java.util.logging.manager",
+                System.getProperty("java.util.logging.manager", "org.apache.logging.log4j.jul.LogManager"));
+        System.setProperty("openwebbeans.logging.factory",
+                System.getProperty("openwebbeans.logging.factory", Log4j2LoggerFactory.class.getName()));
+        System.setProperty("org.apache.cxf.Logger",
+                System.getProperty("org.apache.cxf.Logger", Log4j2Logger.class.getName()));
+        System.setProperty("org.apache.tomcat.Logger",
+                System.getProperty("org.apache.tomcat.Logger", Log4j2Log.class.getName()));
+    }
+
+    private Meecrowave.Builder builder = new Meecrowave.Builder();
+
+    @Override
+    public SeContainerInitializer addProperty(final String s, final Object o) {
+        if (Meecrowave.Builder.class.isInstance(o)) {
+            builder = Meecrowave.Builder.class.cast(o);
+            return this;
+        }
+
+        final String setter = "set" + Character.toUpperCase(s.charAt(0)) + s.substring(1);
+        final Class<? extends Meecrowave.Builder> builderClass = builder.getClass();
+        final Optional<Method> setterOpt = Stream.of(builderClass.getMethods())
+                .filter(m -> m.getName().equals(setter) && m.getParameterCount() == 1)
+                .findFirst();
+        if (!setterOpt.isPresent()) {
+            super.addProperty(s, o);
+            // todo: log or do we assume delegate will ?
+            return this;
+        }
+
+        try {
+            builderClass.getMethod(setter, o.getClass()).invoke(builder, o);
+        } catch (final NoSuchMethodException nsme) {
+            if (Integer.class.isInstance(o)) {
+                try {
+                    builderClass.getMethod(setter, int.class).invoke(builder, o);
+                } catch (final NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
+                    throw new IllegalArgumentException(nsme);
+                }
+            } else if (Long.class.isInstance(o)) {
+                try {
+                    builderClass.getMethod(setter, long.class).invoke(builder, o);
+                } catch (final NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
+                    throw new IllegalArgumentException(nsme);
+                }
+            } else if (Boolean.class.isInstance(o)) {
+                try {
+                    builderClass.getMethod(setter, boolean.class).invoke(builder, o);
+                } catch (final NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
+                    throw new IllegalArgumentException(nsme);
+                }
+            } else {
+                throw new IllegalArgumentException(nsme);
+            }
+        } catch (final IllegalAccessException | InvocationTargetException ex) {
+            throw new IllegalArgumentException(ex);
+        }
+        return this;
+    }
+
+    @Override
+    protected void addCustomServices(final Map<String, Object> services) {
+        final Set<String> forced = this.scannerService.configuredClasses().stream().map(Class::getName).collect(toSet());
+        services.put(Filter.class.getName(), new KnowClassesFilter() { // override it to make programmatic configuration working OOTB
+            @Override
+            public boolean accept(final String name) {
+                return forced.contains(name) || super.accept(name);
+            }
+        });
+    }
+
+    @Override
+    protected SeContainer newContainer(final WebBeansContext context) {
+        final Meecrowave meecrowave = new Meecrowave(builder);
+        return new OWBContainer(context, meecrowave) {
+            {
+                meecrowave.bake();
+            }
+
+            @Override
+            protected void doClose() {
+                meecrowave.close();
+            }
+        };
+    }
+
+    @Override
+    protected ScannerService getScannerService() {
+        return new OWBTomcatWebScannerService(scannerService);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerSelector.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerSelector.java
new file mode 100644
index 0000000..00c9b87
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerSelector.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cdi;
+
+import org.apache.openwebbeans.se.SeContainerSelector;
+
+import javax.enterprise.inject.se.SeContainerInitializer;
+
+public class MeecrowaveSeContainerSelector implements SeContainerSelector {
+    @Override
+    public SeContainerInitializer find() {
+        return new MeecrowaveSeContainerInitializer();
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java
new file mode 100644
index 0000000..a42c58b
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/CxfCdiAutoSetup.java
@@ -0,0 +1,445 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cxf;
+
+import org.apache.cxf.cdi.CXFCdiServlet;
+import org.apache.cxf.common.util.ReflectionUtil;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.jaxrs.JAXRSServiceFactoryBean;
+import org.apache.cxf.jaxrs.model.ApplicationInfo;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.model.MethodDispatcher;
+import org.apache.cxf.jaxrs.model.OperationResourceInfo;
+import org.apache.cxf.jaxrs.model.ProviderInfo;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
+import org.apache.cxf.jaxrs.provider.ServerProviderFactory;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.ChainInitiationObserver;
+import org.apache.cxf.transport.http.DestinationRegistry;
+import org.apache.cxf.transport.servlet.ServletDestination;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.logging.tomcat.LogFacade;
+
+import javax.servlet.DispatcherType;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.FilterRegistration;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+import javax.ws.rs.core.Application;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+
+// this look a bit complicated but it just:
+// - wraps cxf in a filter to support plain resources when not conflicting with application path
+// - logs resources
+public class CxfCdiAutoSetup implements ServletContainerInitializer {
+    private static final String NAME = "cxf-cdi";
+
+    @Override
+    public void onStartup(final Set<Class<?>> c, final ServletContext ctx) throws ServletException {
+        final Meecrowave.Builder builder = Meecrowave.Builder.class.cast(ctx.getAttribute("meecrowave.configuration"));
+        final MeecrowaveCXFCdiServlet delegate = new MeecrowaveCXFCdiServlet();
+        final FilterRegistration.Dynamic jaxrs = ctx.addFilter(NAME, new Filter() {
+            private final String servletPath = builder.getJaxrsMapping().endsWith("/*") ?
+                    builder.getJaxrsMapping().substring(0, builder.getJaxrsMapping().length() - 2) : builder.getJaxrsMapping();
+
+            @Override
+            public void init(final FilterConfig filterConfig) throws ServletException {
+                delegate.init(new ServletConfig() {
+                    @Override
+                    public String getServletName() {
+                        return NAME;
+                    }
+
+                    @Override
+                    public ServletContext getServletContext() {
+                        return filterConfig.getServletContext();
+                    }
+
+                    @Override
+                    public String getInitParameter(final String name) {
+                        return filterConfig.getInitParameter(name);
+                    }
+
+                    @Override
+                    public Enumeration<String> getInitParameterNames() {
+                        return filterConfig.getInitParameterNames();
+                    }
+                });
+            }
+
+            @Override
+            public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
+                if (!HttpServletRequest.class.isInstance(request)) {
+                    chain.doFilter(request, response);
+                    return;
+                }
+                final HttpServletRequest http = HttpServletRequest.class.cast(request);
+                final String path = http.getRequestURI().substring(http.getContextPath().length());
+                final Optional<String> app = Stream.of(delegate.prefixes).filter(path::startsWith).findAny();
+                if (app.isPresent()) {
+                    delegate.service(new HttpServletRequestWrapper(http) { // fake servlet pathInfo and path
+                        @Override
+                        public String getPathInfo() {
+                            return path;
+                        }
+
+                        @Override
+                        public String getServletPath() {
+                            return servletPath;
+                        }
+                    }, response);
+                } else {
+                    chain.doFilter(request, response);
+                }
+            }
+
+            @Override
+            public void destroy() {
+                delegate.destroy();
+            }
+        });
+        jaxrs.setAsyncSupported(true);
+        jaxrs.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, builder.getJaxrsMapping());
+        ofNullable(builder.getCxfServletParams()).ifPresent(m -> m.forEach(jaxrs::setInitParameter));
+    }
+
+    private static class Logs {
+        private Logs() {
+            // no-op
+        }
+
+        private static String forceLength(final String httpMethod, final int l, final boolean right) {
+            final String http;
+            if (httpMethod == null) { // subresourcelocator implies null http method
+                http = "";
+            } else {
+                http = httpMethod;
+            }
+
+            final StringBuilder builder = new StringBuilder();
+            if (!right) {
+                for (int i = 0; i < l - http.length(); i++) {
+                    builder.append(" ");
+                }
+            }
+            builder.append(http);
+            if (right) {
+                for (int i = 0; i < l - http.length(); i++) {
+                    builder.append(" ");
+                }
+            }
+            return builder.toString();
+        }
+
+        private static String toSimpleString(final Method mtd) {
+            try {
+                final StringBuilder sb = new StringBuilder();
+                final Type[] typeparms = mtd.getTypeParameters();
+                if (typeparms.length > 0) {
+                    boolean first = true;
+                    sb.append("<");
+                    for (Type typeparm : typeparms) {
+                        if (!first) {
+                            sb.append(",");
+                        }
+                        sb.append(name(typeparm));
+                        first = false;
+                    }
+                    sb.append("> ");
+                }
+
+                final Type genRetType = mtd.getGenericReturnType();
+                sb.append(name(genRetType)).append(" ");
+                sb.append(mtd.getName()).append("(");
+                final Type[] params = mtd.getGenericParameterTypes();
+                for (int j = 0; j < params.length; j++) {
+                    sb.append(name(params[j]));
+                    if (j < (params.length - 1)) {
+                        sb.append(", ");
+                    }
+                }
+                sb.append(")");
+                final Type[] exceptions = mtd.getGenericExceptionTypes();
+                if (exceptions.length > 0) {
+                    sb.append(" throws ");
+                    for (int k = 0; k < exceptions.length; k++) {
+                        sb.append(name(exceptions[k]));
+                        if (k < (exceptions.length - 1)) {
+                            sb.append(",");
+                        }
+                    }
+                }
+                return sb.toString();
+            } catch (final Exception e) {
+                return "<" + e + ">";
+            }
+        }
+
+        private static String name(final Type type) {
+            if (type instanceof Class<?>) {
+                return ((Class) type).getSimpleName().replace("java.lang.", "").replace("java.util", "");
+            } else if (type instanceof ParameterizedType) {
+                final ParameterizedType pt = (ParameterizedType) type;
+                final StringBuilder builder = new StringBuilder();
+                builder.append(name(pt.getRawType()));
+                final Type[] args = pt.getActualTypeArguments();
+                if (args != null) {
+                    builder.append("<");
+                    for (int i = 0; i < args.length; i++) {
+                        builder.append(name(args[i]));
+                        if (i < args.length - 1) {
+                            builder.append(", ");
+                        }
+                    }
+                    builder.append(">");
+                }
+                return builder.toString();
+            }
+            return type.toString();
+        }
+
+        private static String singleSlash(final String address, final String value) {
+            if (address.endsWith("/") && value.startsWith("/")) {
+                return address + value.substring(1);
+            }
+            if (!address.endsWith("/") && !value.startsWith("/")) {
+                return address + '/' + value;
+            }
+            return address + value;
+        }
+
+        private static class LogOperationEndpointInfo implements Comparable<LogOperationEndpointInfo> {
+            private final String http;
+            private final String address;
+            private final String method;
+
+            private LogOperationEndpointInfo(final String http, final String address, final String method) {
+                this.address = address;
+                this.method = method;
+
+                if (http != null) {
+                    this.http = http;
+                } else { // can happen with subresource locators
+                    this.http = "";
+                }
+            }
+
+            @Override
+            public int compareTo(final LogOperationEndpointInfo o) {
+                int compare = http.compareTo(o.http);
+                if (compare != 0) {
+                    return compare;
+                }
+
+                compare = address.compareTo(o.address);
+                if (compare != 0) {
+                    return compare;
+                }
+
+                return method.compareTo(o.method);
+            }
+        }
+
+        private static class LogResourceEndpointInfo implements Comparable<LogResourceEndpointInfo> {
+            private final String address;
+            private final String classname;
+            private final List<LogOperationEndpointInfo> operations;
+            private final int methodSize;
+            private final int methodStrSize;
+
+            private LogResourceEndpointInfo(final String address, final String classname,
+                                            final List<LogOperationEndpointInfo> operations,
+                                            final int methodSize, final int methodStrSize) {
+                this.address = address;
+                this.classname = classname;
+                this.operations = operations;
+                this.methodSize = methodSize;
+                this.methodStrSize = methodStrSize;
+            }
+
+            @Override
+            public int compareTo(final LogResourceEndpointInfo o) {
+                final int compare = address.compareTo(o.address);
+                if (compare != 0) {
+                    return compare;
+                }
+                return classname.compareTo(o.classname);
+            }
+        }
+    }
+
+    private static class MeecrowaveCXFCdiServlet extends CXFCdiServlet {
+        private String[] prefixes;
+
+        @Override
+        public void init(final ServletConfig sc) throws ServletException {
+            super.init(sc);
+
+            // just logging the endpoints
+            final LogFacade log = new LogFacade(CxfCdiAutoSetup.class.getName());
+            final DestinationRegistry registry = getDestinationRegistryFromBusOrDefault(null);
+            prefixes = registry.getDestinations().stream()
+                    .filter(ServletDestination.class::isInstance)
+                    .map(ServletDestination.class::cast)
+                    .map(getServletDestinationPath(sc, log))
+                    .filter(Objects::nonNull)
+                    .toArray(String[]::new);
+        }
+
+        private Function<ServletDestination, String> getServletDestinationPath(ServletConfig sc, LogFacade log)
+        {
+            return sd -> {
+                final Endpoint endpoint = ChainInitiationObserver.class.cast(sd.getMessageObserver()).getEndpoint();
+                final ApplicationInfo app = ApplicationInfo.class.cast(endpoint.get(Application.class.getName()));
+                final JAXRSServiceFactoryBean sfb = JAXRSServiceFactoryBean.class.cast(endpoint.get(JAXRSServiceFactoryBean.class.getName()));
+                final String base = sd.getEndpointInfo().getAddress();
+
+                if (sfb != null) {
+                    final List<Logs.LogResourceEndpointInfo> resourcesToLog = new ArrayList<>();
+                    int classSize = 0;
+                    int addressSize = 0;
+
+                    final List<ClassResourceInfo> resources = sfb.getClassResourceInfo();
+                    for (final ClassResourceInfo info : resources) {
+                        if (info.getResourceClass() == null) { // possible?
+                            continue;
+                        }
+
+                        final String address = Logs.singleSlash(base, info.getURITemplate().getValue());
+
+                        final String clazz = uproxyName(info.getResourceClass().getName());
+                        classSize = Math.max(classSize, clazz.length());
+                        addressSize = Math.max(addressSize, address.length());
+
+                        int methodSize = 7;
+                        int methodStrSize = 0;
+
+                        final List<Logs.LogOperationEndpointInfo> toLog = new ArrayList<>();
+
+                        final MethodDispatcher md = info.getMethodDispatcher();
+                        for (final OperationResourceInfo ori : md.getOperationResourceInfos()) {
+                            final String httpMethod = ori.getHttpMethod();
+                            final String currentAddress = Logs.singleSlash(address, ori.getURITemplate().getValue());
+                            final String methodToStr = Logs.toSimpleString(ori.getMethodToInvoke());
+                            toLog.add(new Logs.LogOperationEndpointInfo(httpMethod, currentAddress, methodToStr));
+
+                            if (httpMethod != null) {
+                                methodSize = Math.max(methodSize, httpMethod.length());
+                            }
+                            addressSize = Math.max(addressSize, currentAddress.length());
+                            methodStrSize = Math.max(methodStrSize, methodToStr.length());
+                        }
+
+                        Collections.sort(toLog);
+
+                        resourcesToLog.add(new Logs.LogResourceEndpointInfo(address, clazz, toLog, methodSize, methodStrSize));
+                    }
+
+                    // effective logging
+                    log.info("REST Application: " + endpoint.getEndpointInfo().getAddress() + " -> "
+                            + ofNullable(app).map(ApplicationInfo::getResourceClass).map(Class::getName).map(CxfCdiAutoSetup::uproxyName).orElse(""));
+
+                    Collections.sort(resourcesToLog);
+                    final int fClassSize = classSize;
+                    final int fAddressSize = addressSize;
+                    resourcesToLog.forEach(resource -> {
+                        log.info("     Service URI: "
+                                + Logs.forceLength(resource.address, fAddressSize, true) + " -> "
+                                + Logs.forceLength(resource.classname, fClassSize, true));
+
+                        resource.operations.forEach(info -> {
+                            log.info("          "
+                                    + Logs.forceLength(info.http, resource.methodSize, false) + " "
+                                    + Logs.forceLength(info.address, fAddressSize, true) + " ->      "
+                                    + Logs.forceLength(info.method, resource.methodStrSize, true));
+                        });
+                        resource.operations.clear();
+                    });
+                    resourcesToLog.clear();
+
+                    // log @Providers
+                    if (Meecrowave.Builder.class.cast(sc.getServletContext().getAttribute("meecrowave.configuration")).isJaxrsLogProviders()) {
+                        final ServerProviderFactory spf = ServerProviderFactory.class.cast(endpoint.get(ServerProviderFactory.class.getName()));
+                        dump(log, spf, "MessageBodyReaders", "messageReaders");
+                        dump(log, spf, "MessageBodyWriters", "messageWriters");
+                    }
+                } else {
+                    final EndpointInfo endpointInfo = endpoint.getEndpointInfo();
+                    if (endpointInfo.getName() != null) {
+                        log.info("@WebService > " + endpointInfo.getName().toString() + " -> " + base);
+                    }
+                }
+
+                return base;
+            };
+        }
+
+        private void dump(final LogFacade log, final ServerProviderFactory spf, final String description, final String fieldName) {
+            final Field field = ReflectionUtil.getDeclaredField(ProviderFactory.class, fieldName);
+            if (!field.isAccessible()) {
+                field.setAccessible(true);
+            }
+            try {
+                final Collection<ProviderInfo<?>> providers = Collection.class.cast(field.get(spf));
+                log.info("     " + description);
+                providers.stream().map(ProviderInfo::getProvider).forEach(o -> {
+                    try {
+                        log.info("       - " + o);
+                    } catch (final RuntimeException re) {
+                        // no-op: maybe cdi context is not active
+                    }
+                });
+            } catch (IllegalAccessException e) {
+                // ignore, not that a big deal
+            }
+        }
+    }
+
+    private static String uproxyName(final String clazz) {
+        if (clazz.contains("$$")) {
+            return clazz.substring(0, clazz.indexOf("$$"));
+        }
+        return clazz;
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXRSFieldInjectionInterceptor.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXRSFieldInjectionInterceptor.java
new file mode 100644
index 0000000..ad4514b
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXRSFieldInjectionInterceptor.java
@@ -0,0 +1,111 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cxf;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import javax.annotation.Priority;
+import javax.interceptor.AroundConstruct;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InterceptorBinding;
+import javax.interceptor.InvocationContext;
+import javax.ws.rs.core.Application;
+
+import org.apache.cxf.jaxrs.model.ApplicationInfo;
+import org.apache.cxf.jaxrs.model.OperationResourceInfoStack;
+import org.apache.cxf.jaxrs.provider.ProviderFactory;
+import org.apache.cxf.jaxrs.utils.InjectionUtils;
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+import org.apache.cxf.message.Message;
+import org.apache.webbeans.annotation.EmptyAnnotationLiteral;
+import org.apache.webbeans.intercept.ConstructorInterceptorInvocationContext;
+
+@Interceptor
+@Priority(Interceptor.Priority.PLATFORM_BEFORE)
+@JAXRSFieldInjectionInterceptor.Binding
+public class JAXRSFieldInjectionInterceptor implements Serializable {
+    private final AtomicBoolean injected = new AtomicBoolean();
+
+    @AroundConstruct
+    public Object injectContexts(final InvocationContext ic) throws Exception {
+        doInject(ic);
+        return ic.proceed();
+    }
+
+    @AroundInvoke
+    public Object lazyInjectContexts(final InvocationContext ic) throws Exception {
+        if (!injected.get()) {
+            doInject(ic);
+        }
+        return ic.proceed();
+    }
+
+    private void doInject(final InvocationContext ic) throws Exception {
+        final Message current = JAXRSUtils.getCurrentMessage();
+        if (current != null) {
+            final OperationResourceInfoStack stack = OperationResourceInfoStack.class.cast(current.get(OperationResourceInfoStack.class.getName()));
+            if (stack != null && !stack.isEmpty()) {
+                final Object instance;
+                if (ConstructorInterceptorInvocationContext.class.isInstance(ic)) {
+                    final ConstructorInterceptorInvocationContext constructorInterceptorInvocationContext = ConstructorInterceptorInvocationContext.class.cast(ic);
+                    constructorInterceptorInvocationContext.directProceed();
+                    instance = constructorInterceptorInvocationContext.getNewInstance();
+                } else {
+                    instance = ic.getTarget();
+                }
+                Application application = null;
+                final Object appInfo = current.getExchange().getEndpoint().get(Application.class.getName());
+                if (ApplicationInfo.class.isInstance(appInfo)) {
+                    application = ApplicationInfo.class.cast(appInfo).getProvider();
+                }
+                synchronized (this) {
+                    if (injected.get()) {
+                        return;
+                    }
+                    InjectionUtils.injectContextProxiesAndApplication(
+                            stack.lastElement().getMethodInfo().getClassResourceInfo(),
+                            instance,
+                            application,
+                            ProviderFactory.getInstance(current));
+                    injected.compareAndSet(false, true);
+                }
+            }
+        }
+    }
+
+    @Target(TYPE)
+    @Retention(RUNTIME)
+    @InterceptorBinding
+    public  @interface Binding {
+        Annotation INSTANCE = new EmptyAnnotationLiteral<Binding>() {
+            @Override
+            public Class<? extends Annotation> annotationType() {
+                return Binding.class;
+            }
+        };
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSAddressMapper.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSAddressMapper.java
new file mode 100644
index 0000000..3ffce6e
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSAddressMapper.java
@@ -0,0 +1,23 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cxf;
+
+public interface JAXWSAddressMapper {
+    String map(Class<?> type);
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSCdiExtension.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSCdiExtension.java
new file mode 100644
index 0000000..c32dccb
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/JAXWSCdiExtension.java
@@ -0,0 +1,141 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cxf;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.endpoint.AbstractEndpointFactory;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.logging.tomcat.LogFacade;
+import org.apache.webbeans.component.OwbBean;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeShutdown;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.jws.WebService;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+// bus is handled by JAXRSCdiResourceExtension
+//
+// todo: support WebServiceProvider, maybe clients?
+public class JAXWSCdiExtension implements Extension {
+    private boolean active;
+
+    private final List<Bean<?>> serviceBeans = new ArrayList<>();
+    private final Collection<Runnable> preShutdownTasks = new ArrayList<>();
+
+    public JAXWSCdiExtension() {
+        try {
+            final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+            loader.loadClass("org.apache.cxf.jaxws.JaxWsServerFactoryBean");
+            loader.loadClass("org.apache.cxf.service.model.SchemaInfo");
+            active = true;
+        } catch (final NoClassDefFoundError | ClassNotFoundException e) {
+            active = false;
+        }
+    }
+
+    public <T> void collect(@Observes final ProcessBean<T> processBean) {
+        if (active && processBean.getAnnotated().isAnnotationPresent(WebService.class)) {
+            serviceBeans.add(processBean.getBean());
+        }
+    }
+
+    public void load(@Observes final AfterDeploymentValidation afterDeploymentValidation, final BeanManager beanManager) {
+        if (!active || serviceBeans.isEmpty() ||
+                !Meecrowave.Builder.class.cast(beanManager.getReference(beanManager.resolve(beanManager.getBeans(Meecrowave.Builder.class)), Meecrowave.Builder.class, null))
+                        .isJaxwsSupportIfAvailable()) {
+            return;
+        }
+
+        final Bean<?> busBean = beanManager.resolve(beanManager.getBeans("cxf"));
+        final Bus bus = Bus.class.cast(beanManager.getReference(busBean, Bus.class, beanManager.createCreationalContext(busBean)));
+
+        final Bean<?> mapperBean = beanManager.resolve(beanManager.getBeans(JAXWSAddressMapper.class));
+        final JAXWSAddressMapper mapper;
+        if (mapperBean == null) {
+            mapper = type -> {
+                WsMapping wsMapping = type.getAnnotation(WsMapping.class);
+                return wsMapping != null
+                    ? wsMapping.value()
+                    : "/webservices/" + type.getSimpleName();
+            };
+        } else {
+            mapper = JAXWSAddressMapper.class.cast(beanManager.getReference(mapperBean, JAXWSAddressMapper.class, beanManager.createCreationalContext(mapperBean)));
+        }
+
+        serviceBeans.forEach(bean -> {
+            final Class<?> beanClass = OwbBean.class.isInstance(bean) ? OwbBean.class.cast(bean).getReturnType() : bean.getBeanClass();
+
+            final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+            try {
+                final AbstractEndpointFactory aef = AbstractEndpointFactory.class.cast(loader.loadClass("org.apache.cxf.jaxws.JaxWsServerFactoryBean").getConstructor().newInstance());
+                aef.setBus(bus);
+                aef.setAddress(mapper.map(beanClass));
+
+                final Class<? extends AbstractEndpointFactory> factoryClass = aef.getClass();
+                factoryClass.getMethod("setStart", boolean.class).invoke(aef, true);
+                factoryClass.getMethod("setServiceClass", Class.class).invoke(aef, beanClass);
+
+                final CreationalContext<Object> creationalContext = beanManager.createCreationalContext(null);
+                if (!beanManager.isNormalScope(bean.getScope())) {
+                    preShutdownTasks.add(creationalContext::release);
+                }
+                factoryClass.getMethod("setServiceBean", Object.class).invoke(aef, beanManager.getReference(bean, Object.class, creationalContext));
+
+                final Object server = factoryClass.getMethod("create").invoke(aef);
+
+                final Class<?> serverClass = server.getClass();
+                serverClass.getMethod("start").invoke(server);
+                preShutdownTasks.add(() -> {
+                    try {
+                        serverClass.getMethod("destroy").invoke(server);
+                    } catch (final NoClassDefFoundError | NoSuchMethodException | IllegalAccessException e) {
+                        throw new IllegalStateException(e);
+                    } catch (final InvocationTargetException e) {
+                        throw new IllegalStateException(e.getCause());
+                    }
+                });
+            } catch (final NoClassDefFoundError | ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InstantiationException e) {
+                throw new IllegalStateException(e);
+            } catch (final InvocationTargetException e) {
+                throw new IllegalStateException(e.getCause());
+            }
+        });
+        serviceBeans.clear();
+    }
+
+    public void release(@Observes final BeforeShutdown beforeShutdown) {
+        preShutdownTasks.stream().map(r -> (Runnable) () -> {
+            try {
+                r.run();
+            } catch (final RuntimeException re) {
+                new LogFacade(JAXWSCdiExtension.class.getName()).warn(re.getMessage(), re);
+            }
+        }).forEach(Runnable::run);
+        preShutdownTasks.clear();
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
new file mode 100644
index 0000000..417194a
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/MeecrowaveBus.java
@@ -0,0 +1,269 @@
+package org.apache.meecrowave.cxf;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.bus.extension.ExtensionManagerBus;
+import org.apache.cxf.common.util.ClassUnwrapper;
+import org.apache.cxf.feature.Feature;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.message.Message;
+import org.apache.johnzon.core.AbstractJsonFactory;
+import org.apache.johnzon.core.JsonGeneratorFactoryImpl;
+import org.apache.johnzon.core.JsonParserFactoryImpl;
+import org.apache.johnzon.jaxrs.DelegateProvider;
+import org.apache.johnzon.jaxrs.JsrMessageBodyReader;
+import org.apache.johnzon.jaxrs.JsrMessageBodyWriter;
+import org.apache.johnzon.jaxrs.jsonb.jaxrs.JsonbJaxrsProvider;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.proxy.InterceptorDecoratorProxyFactory;
+import org.apache.webbeans.proxy.NormalScopeProxyFactory;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.json.Json;
+import javax.json.JsonStructure;
+import javax.json.stream.JsonGenerator;
+import javax.servlet.ServletContext;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.Provider;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static java.util.Optional.of;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toList;
+
+@Named("cxf")
+@ApplicationScoped
+public class MeecrowaveBus implements Bus {
+    private final Bus delegate = new ExtensionManagerBus();
+    private NormalScopeProxyFactory normalScopeProxyFactory;
+    private InterceptorDecoratorProxyFactory interceptorDecoratorProxyFactory;
+
+    protected MeecrowaveBus() {
+        // no-op: for proxies
+    }
+
+    @Inject
+    public MeecrowaveBus(final ServletContext context) {
+        WebBeansContext webBeansContext = WebBeansContext.currentInstance();
+        normalScopeProxyFactory = webBeansContext.getNormalScopeProxyFactory();
+        interceptorDecoratorProxyFactory = webBeansContext.getInterceptorDecoratorProxyFactory();
+
+        setProperty(ClassUnwrapper.class.getName(), (ClassUnwrapper) this::getRealClass);
+
+        final Meecrowave.Builder builder = Meecrowave.Builder.class.cast(context.getAttribute("meecrowave.configuration"));
+        if (builder != null && builder.isJaxrsProviderSetup()) {
+            final List<Object> providers =
+                    ofNullable(builder.getJaxrsDefaultProviders())
+                            .map(s -> Stream.of(s.split(" *, *"))
+                                    .map(String::trim)
+                                    .filter(p -> !p.isEmpty())
+                                    .map(name -> {
+                                        try {
+                                            return Thread.currentThread().getContextClassLoader().loadClass(name).newInstance();
+                                        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
+                                            throw new IllegalArgumentException(name + " can't be created");
+                                        }
+                                    })
+                                    .collect(Collectors.<Object>toList()))
+                            .orElseGet(() -> Stream.<Object>of(
+                                    new ConfiguredJsonbJaxrsProvider(
+                                            builder.getJsonbEncoding(), builder.isJsonbNulls(),
+                                            builder.isJsonbIJson(), builder.isJsonbPrettify(),
+                                            builder.getJsonbBinaryStrategy(), builder.getJsonbNamingStrategy(),
+                                            builder.getJsonbOrderStrategy()),
+                                    new ConfiguredJsrProvider(
+                                            builder.getJsonpBufferStrategy(), builder.getJsonpMaxStringLen(),
+                                            builder.getJsonpMaxReadBufferLen(), builder.getJsonpMaxWriteBufferLen(),
+                                            builder.isJsonpSupportsComment(), builder.isJsonpPrettify()))
+                                    .collect(toList()));
+
+            if (builder.isJaxrsAutoActivateBeanValidation()) {
+                try { // we don't need the jaxrsbeanvalidationfeature since bean validation cdi extension handles it normally
+                    final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
+                    contextClassLoader.loadClass("javax.validation.Validation");
+                    final Object instance = contextClassLoader.loadClass("org.apache.cxf.jaxrs.validation.ValidationExceptionMapper")
+                                                       .getConstructor().newInstance();
+                    instance.getClass().getGenericInterfaces(); // validate bval can be used, check NoClassDefFoundError javax.validation.ValidationException
+                    providers.add(instance);
+                } catch (final Exception | NoClassDefFoundError e) {
+                    // no-op
+                }
+            }
+
+            // client
+            if (getProperty("org.apache.cxf.jaxrs.bus.providers") == null) {
+                setProperty("skip.default.json.provider.registration", "true");
+                setProperty("org.apache.cxf.jaxrs.bus.providers", providers);
+            }
+        }
+    }
+
+
+    /**
+     * Unwrap all proxies and get the real underlying class
+     * for detecting annotations, etc.
+     * @param o
+     * @return
+     */
+    protected Class<?> getRealClass(Object o) {
+        final Class<?> aClass = o.getClass();
+        if (aClass.getName().contains("$$")) {
+            Class realClass = aClass.getSuperclass();
+            if (realClass == Object.class || realClass.isInterface()) {
+                // we have to dig deeper as we might have a producer method for an interface
+                Class<?>[] interfaces = aClass.getInterfaces();
+                if (interfaces.length > 0) {
+                    Class<?> rootInterface = interfaces[0];
+                    for (Class<?> anInterface : interfaces) {
+                        if (rootInterface.isAssignableFrom(anInterface)) {
+                            rootInterface = anInterface;
+                        }
+                    }
+                    return rootInterface;
+                }
+            }
+            return realClass;
+        }
+        return aClass;
+    }
+
+    @Override
+    public <T> T getExtension(final Class<T> extensionType) {
+        return delegate.getExtension(extensionType);
+    }
+
+    @Override
+    public <T> void setExtension(final T extension, final Class<T> extensionType) {
+        delegate.setExtension(extension, extensionType);
+    }
+
+    @Override
+    public boolean hasExtensionByName(final String name) {
+        return delegate.hasExtensionByName(name);
+    }
+
+    @Override
+    public String getId() {
+        return delegate.getId();
+    }
+
+    @Override
+    public void setId(final String i) {
+        delegate.setId(i);
+    }
+
+    @Override
+    public void shutdown(final boolean wait) {
+        delegate.shutdown(wait);
+    }
+
+    @Override
+    public void setProperty(final String s, final Object o) {
+        delegate.setProperty(s, o);
+    }
+
+    @Override
+    public Object getProperty(final String s) {
+        return delegate.getProperty(s);
+    }
+
+    @Override
+    public void setProperties(final Map<String, Object> properties) {
+        delegate.setProperties(properties);
+    }
+
+    @Override
+    public Map<String, Object> getProperties() {
+        return delegate.getProperties();
+    }
+
+    @Override
+    public Collection<Feature> getFeatures() {
+        return delegate.getFeatures();
+    }
+
+    @Override
+    public void setFeatures(final Collection<? extends Feature> features) {
+        delegate.setFeatures(features);
+    }
+
+    @Override
+    public BusState getState() {
+        return delegate.getState();
+    }
+
+    @Override
+    public List<Interceptor<? extends Message>> getInInterceptors() {
+        return delegate.getInInterceptors();
+    }
+
+    @Override
+    public List<Interceptor<? extends Message>> getOutInterceptors() {
+        return delegate.getOutInterceptors();
+    }
+
+    @Override
+    public List<Interceptor<? extends Message>> getInFaultInterceptors() {
+        return delegate.getInFaultInterceptors();
+    }
+
+    @Override
+    public List<Interceptor<? extends Message>> getOutFaultInterceptors() {
+        return delegate.getOutFaultInterceptors();
+    }
+
+    @Provider
+    @Produces({MediaType.APPLICATION_JSON, "*/*+json"})
+    @Consumes({MediaType.APPLICATION_JSON, "*/*+json"})
+    public static class ConfiguredJsonbJaxrsProvider<T> extends JsonbJaxrsProvider<T> {
+        private ConfiguredJsonbJaxrsProvider(final String encoding,
+                                             final boolean nulls,
+                                             final boolean iJson,
+                                             final boolean pretty,
+                                             final String binaryStrategy,
+                                             final String namingStrategy,
+                                             final String orderStrategy) {
+            // ATTENTION this is only a workaround for MEECROWAVE-49 and shall get removed after Johnzon has a fix for it!
+            // We add byte[] to the ignored types.
+            super(Arrays.asList("[B"));
+
+            ofNullable(encoding).ifPresent(this::setEncoding);
+            ofNullable(namingStrategy).ifPresent(this::setPropertyNamingStrategy);
+            ofNullable(orderStrategy).ifPresent(this::setPropertyOrderStrategy);
+            ofNullable(binaryStrategy).ifPresent(this::setBinaryDataStrategy);
+            setNullValues(nulls);
+            setIJson(iJson);
+            setPretty(pretty);
+        }
+    }
+
+    @Provider
+    @Produces({MediaType.APPLICATION_JSON, "application/*+json"})
+    @Consumes({MediaType.APPLICATION_JSON, "application/*+json"})
+    public static class ConfiguredJsrProvider extends DelegateProvider<JsonStructure> { // TODO: probably wire the encoding in johnzon
+        private ConfiguredJsrProvider(final String bufferStrategy, final int maxStringLen,
+                                      final int maxReadBufferLen, final int maxWriteBufferLen,
+                                      final boolean supportsComment, final boolean pretty) {
+            super(new JsrMessageBodyReader(Json.createReaderFactory(new HashMap<String, Object>() {{
+                put(JsonParserFactoryImpl.SUPPORTS_COMMENTS, supportsComment);
+                of(maxStringLen).filter(v -> v > 0).ifPresent(s -> put(JsonParserFactoryImpl.MAX_STRING_LENGTH, s));
+                of(maxReadBufferLen).filter(v -> v > 0).ifPresent(s -> put(JsonParserFactoryImpl.BUFFER_LENGTH, s));
+                ofNullable(bufferStrategy).ifPresent(s -> put(AbstractJsonFactory.BUFFER_STRATEGY, s));
+            }}), false), new JsrMessageBodyWriter(Json.createWriterFactory(new HashMap<String, Object>() {{
+                put(JsonGenerator.PRETTY_PRINTING, pretty);
+                of(maxWriteBufferLen).filter(v -> v > 0).ifPresent(v -> put(JsonGeneratorFactoryImpl.GENERATOR_BUFFER_LENGTH, v));
+                ofNullable(bufferStrategy).ifPresent(s -> put(AbstractJsonFactory.BUFFER_STRATEGY, s));
+            }}), false));
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/WsMapping.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/WsMapping.java
new file mode 100644
index 0000000..020c738
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/cxf/WsMapping.java
@@ -0,0 +1,38 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cxf;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * This annotation can be used in conjunction with &#064;WebService
+ * to define an endpoint path for the webservice.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target(ElementType.TYPE)
+public @interface WsMapping
+{
+    /**
+     * @return the full endpoint path of the webservice
+     */
+    String value();
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/io/IO.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/io/IO.java
new file mode 100644
index 0000000..6f92d1f
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/io/IO.java
@@ -0,0 +1,92 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.io;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+
+public final class IO {
+    private IO() {
+        // no-op
+    }
+
+    public static void delete(final File dir) {
+        if (!dir.exists()) {
+            return;
+        }
+
+        if (dir.isFile()) {
+            retryDelete(dir);
+            return;
+        }
+
+        Stream.of(ofNullable(dir.listFiles()).orElseGet(() -> new File[0]))
+                .forEach(f -> {
+                    if (f.isFile()) {
+                        retryDelete(f);
+                    } else {
+                        delete(f);
+                    }
+                });
+        retryDelete(dir);
+    }
+
+    private static void retryDelete(final File f) {
+        for (int i = 0; i < 3; i++) {
+            if (f.exists() && !f.delete()) {
+                System.gc(); // win
+                try {
+                    Thread.sleep(50);
+                } catch (final InterruptedException e) {
+                    Thread.interrupted();
+                }
+                continue;
+            }
+            return;
+        }
+        throw new IllegalStateException("Can't delete " + f);
+    }
+
+    public static void copy(final InputStream is, final OutputStream os) throws IOException {
+        byte[] buffer = new byte[16384];
+        int count;
+        while (-1 != (count = is.read(buffer))) {
+            os.write(buffer, 0, count);
+        }
+    }
+
+    public static String toString(final InputStream stream) throws IOException {
+        final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        copy(stream, baos);
+        return new String(baos.toByteArray(), StandardCharsets.UTF_8);
+    }
+
+    public static void mkdirs(final File d) {
+        if (!d.isDirectory() && !d.mkdirs()) {
+            throw new IllegalStateException(d + " can't be created");
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/jul/Log4j2Logger.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/jul/Log4j2Logger.java
new file mode 100644
index 0000000..3354fad
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/jul/Log4j2Logger.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.jul;
+
+import org.apache.cxf.common.logging.AbstractDelegatingLogger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.simple.SimpleLogger;
+import org.apache.logging.log4j.status.StatusLogger;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+public class Log4j2Logger extends AbstractDelegatingLogger {
+    private static final Map<Level, org.apache.logging.log4j.Level> TO_LOG4J = new HashMap<>();
+
+    private final Logger log;
+
+    static {
+        //older versions of log4j don't have TRACE, use debug
+        org.apache.logging.log4j.Level t = org.apache.logging.log4j.Level.DEBUG;
+
+        TO_LOG4J.put(Level.ALL, org.apache.logging.log4j.Level.ALL);
+        TO_LOG4J.put(Level.SEVERE, org.apache.logging.log4j.Level.ERROR);
+        TO_LOG4J.put(Level.WARNING, org.apache.logging.log4j.Level.WARN);
+        TO_LOG4J.put(Level.INFO, org.apache.logging.log4j.Level.INFO);
+        TO_LOG4J.put(Level.CONFIG, org.apache.logging.log4j.Level.DEBUG);
+        TO_LOG4J.put(Level.FINE, org.apache.logging.log4j.Level.DEBUG);
+        TO_LOG4J.put(Level.FINER, org.apache.logging.log4j.Level.TRACE);
+        TO_LOG4J.put(Level.FINEST, org.apache.logging.log4j.Level.TRACE);
+        TO_LOG4J.put(Level.OFF, org.apache.logging.log4j.Level.OFF);
+    }
+
+    public Log4j2Logger(final String name, final String resourceBundleName) {
+        super(name, resourceBundleName);
+        log = LogManager.getLogger(name);
+    }
+
+    @Override
+    public void setLevel(final Level newLevel) throws SecurityException {
+        if (org.apache.logging.log4j.core.Logger.class.isInstance(log)) {
+            org.apache.logging.log4j.core.Logger.class.cast(log).setLevel(TO_LOG4J.get(newLevel));
+        } else if (StatusLogger.class.isInstance(log)) {
+            StatusLogger.class.cast(log).setLevel(TO_LOG4J.get(newLevel));
+        } else if (SimpleLogger.class.isInstance(log)) {
+            SimpleLogger.class.cast(log).setLevel(TO_LOG4J.get(newLevel));
+        } // else ExtendedLoggerWrapper: ignore for now. we could do reflection if we need it
+    }
+
+    public Level getLevel() {
+        final org.apache.logging.log4j.Level l = log.getLevel();
+        if (l != null) {
+            return fromL4J(l);
+        }
+        return null;
+    }
+
+    protected void internalLogFormatted(final String msg, final LogRecord record) {
+        log.log(TO_LOG4J.get(record.getLevel()), msg, record.getThrown());
+    }
+
+
+    private Level fromL4J(final org.apache.logging.log4j.Level l) {
+        Level l2 = null;
+        switch (l.getStandardLevel()) {
+            case ALL:
+                l2 = Level.ALL;
+                break;
+            case FATAL:
+                l2 = Level.SEVERE;
+                break;
+            case ERROR:
+                l2 = Level.SEVERE;
+                break;
+            case WARN:
+                l2 = Level.WARNING;
+                break;
+            case INFO:
+                l2 = Level.INFO;
+                break;
+            case DEBUG:
+                l2 = Level.FINE;
+                break;
+            case OFF:
+                l2 = Level.OFF;
+                break;
+            case TRACE:
+                l2 = Level.FINEST;
+                break;
+            default:
+                l2 = Level.FINE;
+        }
+        return l2;
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java
new file mode 100644
index 0000000..b9155c6
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/Log4j2Shutdown.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.log4j2;
+
+import org.apache.logging.log4j.LogManager;
+
+/**
+ * Hide away Log4j2 stuff
+ */
+public class Log4j2Shutdown {
+
+    public void shutodwn() {
+        try {
+            // We disabled the log4j shutdown hook to gain more control and keep logs during shutdown.
+            // See #disableLog4jShutdownHook()
+            // Otoh that means we need to shutdown Log4j manually.
+            // So here we go...
+            LogManager.shutdown();
+        } catch (final Exception e) {
+            System.out.println("A problem happened when shutting down Log4j: " + e + "\n" + e.getMessage());
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/MeecrowaveLog4j2ConfigurationFactory.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/MeecrowaveLog4j2ConfigurationFactory.java
new file mode 100644
index 0000000..28f3c34
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/MeecrowaveLog4j2ConfigurationFactory.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.log4j2;
+
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.ConfigurationSource;
+import org.apache.logging.log4j.core.config.Order;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
+
+@Order(100)
+@Plugin(name = "MeecrowaveConfigurationFactory", category = "ConfigurationFactory")
+public class MeecrowaveLog4j2ConfigurationFactory extends XmlConfigurationFactory {
+    private static final String[] TYPES = {".xml"/*override*/, ".meecrowave-logging" /*our default*/, "*"};
+
+    @Override
+    public String[] getSupportedTypes() {
+        return TYPES;
+    }
+
+    @Override
+    public Configuration getConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
+        return super.getConfiguration(loggerContext, source);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/MeecrowaveLogEventFactory.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/MeecrowaveLogEventFactory.java
new file mode 100644
index 0000000..91e2bd1
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/log4j2/MeecrowaveLogEventFactory.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.log4j2;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.config.Property;
+import org.apache.logging.log4j.core.impl.DefaultLogEventFactory;
+import org.apache.logging.log4j.core.impl.Log4jLogEvent;
+import org.apache.logging.log4j.message.Message;
+
+import java.util.List;
+
+public class MeecrowaveLogEventFactory extends DefaultLogEventFactory {
+    @Override
+    public LogEvent createEvent(final String loggerName, final Marker marker, final String fqcn,
+                                final Level level, final Message data, final List<Property> properties,
+                                final Throwable t) {
+        return new MeecrowaveLog4jLogEvent(loggerName, marker, fqcn, level, data, properties, t);
+    }
+
+    public static class MeecrowaveLog4jLogEvent extends Log4jLogEvent {
+        private StackTraceElement source;
+
+        public MeecrowaveLog4jLogEvent(final String loggerName, final Marker marker, final String fqcn, final Level level,
+                                      final Message data, final List<Property> properties, final Throwable t) {
+            super(loggerName, marker, fqcn, level, data, properties, t);
+        }
+
+        @Override
+        public StackTraceElement getSource() { // this doesn't work OOTB and no config available
+            if (source != null) {
+                return source;
+            }
+            if (getLoggerFqcn() == null || !isIncludeLocation()) {
+                return null;
+            }
+
+            final StackTraceElement[] stackTrace = new Throwable().getStackTrace();
+            for (int i = stackTrace.length - 1; i > 0; i--) {
+                final String className = stackTrace[i].getClassName();
+                if (getLoggerFqcn().equals(className) && stackTrace.length > i + 1) {
+                    source = stackTrace[i + 1];
+                    if (i + 3 < stackTrace.length && stackTrace[i + 2].getClassName().equals("org.apache.meecrowave.logging.tomcat.LogFacade")) {
+                        source = stackTrace[i + 3];
+                    }
+                    break;
+                }
+            }
+            return source;
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/openwebbeans/Log4j2LoggerFactory.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/openwebbeans/Log4j2LoggerFactory.java
new file mode 100644
index 0000000..699a125
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/openwebbeans/Log4j2LoggerFactory.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.openwebbeans;
+
+import org.apache.meecrowave.logging.jul.Log4j2Logger;
+import org.apache.webbeans.logger.WebBeansLoggerFactory;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+public class Log4j2LoggerFactory implements WebBeansLoggerFactory {
+    @Override
+    public Logger getLogger(final Class<?> clazz, final Locale desiredLocale) {
+        return new Log4j2Logger(clazz.getName(), ResourceBundle.getBundle("openwebbeans/Messages", desiredLocale).toString());
+    }
+
+    @Override
+    public Logger getLogger(final Class<?> clazz) {
+        return new Log4j2Logger(clazz.getName(), "openwebbeans/Messages");
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/JULLog.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/JULLog.java
new file mode 100644
index 0000000..410503b
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/JULLog.java
@@ -0,0 +1,179 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.tomcat;
+
+import org.apache.juli.logging.Log;
+
+import java.util.logging.ConsoleHandler;
+import java.util.logging.Formatter;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+// copied from tomcat to allow our routing logic
+public class JULLog implements Log {
+    private final Logger logger;
+
+    private static final String SIMPLE_FMT = "java.util.logging.SimpleFormatter";
+    private static final String SIMPLE_CFG = "org.apache.juli.JdkLoggerConfig"; //doesn't exist
+    private static final String FORMATTER = "org.apache.juli.formatter";
+
+    static {
+        if (System.getProperty("java.util.logging.config.class") == null &&
+                System.getProperty("java.util.logging.config.file") == null) {
+            try {
+                Class.forName(SIMPLE_CFG).newInstance();
+            } catch (final Throwable t) {
+                // no-op
+            }
+            try {
+                final Formatter fmt = (Formatter) Class.forName(System.getProperty(FORMATTER, SIMPLE_FMT)).newInstance();
+                Logger root = Logger.getLogger("");
+                for (Handler handler : root.getHandlers()) {
+                    if (handler instanceof ConsoleHandler) {
+                        handler.setFormatter(fmt);
+                    }
+                }
+            } catch (final Throwable t) {
+                // maybe it wasn't included - the ugly default will be used.
+            }
+
+        }
+    }
+
+    public JULLog(final String name) {
+        logger = Logger.getLogger(name);
+    }
+
+    @Override
+    public final boolean isErrorEnabled() {
+        return logger.isLoggable(Level.SEVERE);
+    }
+
+    @Override
+    public final boolean isWarnEnabled() {
+        return logger.isLoggable(Level.WARNING);
+    }
+
+    @Override
+    public final boolean isInfoEnabled() {
+        return logger.isLoggable(Level.INFO);
+    }
+
+    @Override
+    public final boolean isDebugEnabled() {
+        return logger.isLoggable(Level.FINE);
+    }
+
+    @Override
+    public final boolean isFatalEnabled() {
+        return logger.isLoggable(Level.SEVERE);
+    }
+
+    @Override
+    public final boolean isTraceEnabled() {
+        return logger.isLoggable(Level.FINER);
+    }
+
+    @Override
+    public final void debug(final Object message) {
+        log(Level.FINE, String.valueOf(message), null);
+    }
+
+    @Override
+    public final void debug(final Object message, final Throwable t) {
+        log(Level.FINE, String.valueOf(message), t);
+    }
+
+    @Override
+    public final void trace(final Object message) {
+        log(Level.FINER, String.valueOf(message), null);
+    }
+
+    @Override
+    public final void trace(final Object message, final Throwable t) {
+        log(Level.FINER, String.valueOf(message), t);
+    }
+
+    @Override
+    public final void info(final Object message) {
+        log(Level.INFO, String.valueOf(message), null);
+    }
+
+    @Override
+    public final void info(final Object message, final Throwable t) {
+        log(Level.INFO, String.valueOf(message), t);
+    }
+
+    @Override
+    public final void warn(final Object message) {
+        log(Level.WARNING, String.valueOf(message), null);
+    }
+
+    @Override
+    public final void warn(final Object message, final Throwable t) {
+        log(Level.WARNING, String.valueOf(message), t);
+    }
+
+    @Override
+    public final void error(final Object message) {
+        log(Level.SEVERE, String.valueOf(message), null);
+    }
+
+    @Override
+    public final void error(final Object message, final Throwable t) {
+        log(Level.SEVERE, String.valueOf(message), t);
+    }
+
+    @Override
+    public final void fatal(final Object message) {
+        log(Level.SEVERE, String.valueOf(message), null);
+    }
+
+    @Override
+    public final void fatal(final Object message, final Throwable t) {
+        log(Level.SEVERE, String.valueOf(message), t);
+    }
+
+    // from commons logging. This would be my number one reason why java.util.logging
+    // is bad - design by committee can be really bad ! The impact on performance of
+    // using java.util.logging - and the ugliness if you need to wrap it - is far
+    // worse than the unfriendly and uncommon default format for logs.
+
+    private void log(final Level level, final String msg, final Throwable ex) {
+        if (logger.isLoggable(level)) {
+            // Hack (?) to get the stack trace.
+            Throwable dummyException = new Throwable();
+            StackTraceElement locations[] = dummyException.getStackTrace();
+            // Caller will be the third element
+            String cname = "unknown";
+            String method = "unknown";
+            if (locations != null && locations.length > 2) {
+                StackTraceElement caller = locations[2];
+                cname = caller.getClassName();
+                method = caller.getMethodName();
+            }
+            if (ex == null) {
+                logger.logp(level, cname, method, msg);
+            } else {
+                logger.logp(level, cname, method, msg, ex);
+            }
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/Log4j2Log.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/Log4j2Log.java
new file mode 100644
index 0000000..6314594
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/Log4j2Log.java
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.tomcat;
+
+import org.apache.juli.logging.Log;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public class Log4j2Log implements Log {
+    private final Logger delegate;
+
+    public Log4j2Log(final String name) {
+        delegate = LogManager.getLogger(name);
+    }
+
+    @Override
+    public boolean isDebugEnabled() {
+        return delegate.isDebugEnabled();
+    }
+
+    @Override
+    public boolean isErrorEnabled() {
+        return delegate.isErrorEnabled();
+    }
+
+    @Override
+    public boolean isFatalEnabled() {
+        return delegate.isFatalEnabled();
+    }
+
+    @Override
+    public boolean isInfoEnabled() {
+        return delegate.isInfoEnabled();
+    }
+
+    @Override
+    public boolean isTraceEnabled() {
+        return delegate.isTraceEnabled();
+    }
+
+    @Override
+    public boolean isWarnEnabled() {
+        return delegate.isWarnEnabled();
+    }
+
+    @Override
+    public void trace(final Object message) {
+        delegate.trace(message);
+    }
+
+    @Override
+    public void trace(final Object message, final Throwable t) {
+        delegate.trace(message, t);
+    }
+
+    @Override
+    public void debug(final Object message) {
+        delegate.debug(message);
+    }
+
+    @Override
+    public void debug(final Object message, final Throwable t) {
+        delegate.debug(message, t);
+    }
+
+    @Override
+    public void info(final Object message) {
+        delegate.info(message);
+    }
+
+    @Override
+    public void info(final Object message, final Throwable t) {
+        delegate.info(message, t);
+    }
+
+    @Override
+    public void warn(final Object message) {
+        delegate.warn(message);
+    }
+
+    @Override
+    public void warn(final Object message, final Throwable t) {
+        delegate.warn(message, t);
+    }
+
+    @Override
+    public void error(final Object message) {
+        delegate.error(message);
+    }
+
+    @Override
+    public void error(final Object message, final Throwable t) {
+        delegate.error(message, t);
+    }
+
+    @Override
+    public void fatal(final Object message) {
+        delegate.fatal(message);
+    }
+
+    @Override
+    public void fatal(final Object message, final Throwable t) {
+        delegate.fatal(message, t);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/LogFacade.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/LogFacade.java
new file mode 100644
index 0000000..d7a13a6
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/logging/tomcat/LogFacade.java
@@ -0,0 +1,125 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.logging.tomcat;
+
+import org.apache.juli.logging.Log;
+
+public class LogFacade implements Log {
+    private final Log delegate;
+
+    public LogFacade() { // for the spi
+        this.delegate = null;
+    }
+
+    public LogFacade(final String name) {
+        // should be read per launch and not once per JVM
+        this.delegate = "org.apache.meecrowave.logging.tomcat.Log4j2Log".equals(System.getProperty("org.apache.tomcat.Logger", "jul")) ?
+                new Log4j2Log(name) : new JULLog(name);
+    }
+
+    @Override
+    public boolean isDebugEnabled() {
+        return delegate.isDebugEnabled();
+    }
+
+    @Override
+    public boolean isErrorEnabled() {
+        return delegate.isErrorEnabled();
+    }
+
+    @Override
+    public boolean isFatalEnabled() {
+        return delegate.isFatalEnabled();
+    }
+
+    @Override
+    public boolean isInfoEnabled() {
+        return delegate.isInfoEnabled();
+    }
+
+    @Override
+    public boolean isTraceEnabled() {
+        return delegate.isTraceEnabled();
+    }
+
+    @Override
+    public boolean isWarnEnabled() {
+        return delegate.isWarnEnabled();
+    }
+
+    @Override
+    public void trace(final Object message) {
+        delegate.trace(message);
+    }
+
+    @Override
+    public void trace(final Object message, final Throwable t) {
+        delegate.trace(message, t);
+    }
+
+    @Override
+    public void debug(final Object message) {
+        delegate.debug(message);
+    }
+
+    @Override
+    public void debug(final Object message, final Throwable t) {
+        delegate.debug(message, t);
+    }
+
+    @Override
+    public void info(final Object message) {
+        delegate.info(message);
+    }
+
+    @Override
+    public void info(final Object message, final Throwable t) {
+        delegate.info(message, t);
+    }
+
+    @Override
+    public void warn(final Object message) {
+        delegate.warn(message);
+    }
+
+    @Override
+    public void warn(final Object message, final Throwable t) {
+        delegate.warn(message, t);
+    }
+
+    @Override
+    public void error(final Object message) {
+        delegate.error(message);
+    }
+
+    @Override
+    public void error(final Object message, final Throwable t) {
+        delegate.error(message, t);
+    }
+
+    @Override
+    public void fatal(final Object message) {
+        delegate.fatal(message);
+    }
+
+    @Override
+    public void fatal(final Object message, final Throwable t) {
+        delegate.fatal(message, t);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnowClassesFilter.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnowClassesFilter.java
new file mode 100644
index 0000000..5a3d071
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnowClassesFilter.java
@@ -0,0 +1,229 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.openwebbeans;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.xbean.finder.filter.Filter;
+
+import java.util.HashSet;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+
+public class KnowClassesFilter implements Filter { // one easy and efficient solution for fatjars
+    private static final String[] EMPTY_ARRAY = new String[0];
+
+    // this has to be configured from the root config
+    private String[] forced = EMPTY_ARRAY;
+    private String[] skipped = EMPTY_ARRAY;
+
+    private final Filter delegateAccept;
+    private final Filter delegateSkip;
+
+    public KnowClassesFilter() {
+        final Set<String> excluded = new HashSet<>();
+        excluded.add("com.codehale.metrics");
+        excluded.add("com.ctc.wstx");
+        excluded.add("com.datastax.driver.core");
+        excluded.add("com.fasterxml.jackson.annotation");
+        excluded.add("com.fasterxml.jackson.core");
+        excluded.add("com.fasterxml.jackson.databind");
+        excluded.add("com.fasterxml.jackson.dataformat");
+        excluded.add("com.fasterxml.jackson.module");
+        excluded.add("com.google.common");
+        excluded.add("com.google.thirdparty");
+        excluded.add("com.ibm.wsdl");
+        excluded.add("com.jcraft.jsch");
+        excluded.add("com.kenai.jffi");
+        excluded.add("com.kenai.jnr");
+        excluded.add("com.sun.istack");
+        excluded.add("com.sun.xml.bind");
+        excluded.add("com.sun.xml.messaging.saaj");
+        excluded.add("com.sun.xml.txw2");
+        excluded.add("io.jsonwebtoken");
+        excluded.add("io.netty");
+        excluded.add("io.swagger.annotations");
+        excluded.add("io.swagger.config");
+        excluded.add("io.swagger.converter");
+        excluded.add("io.swagger.core");
+        excluded.add("io.swagger.jackson");
+        excluded.add("io.swagger.jaxrs");
+        excluded.add("io.swagger.model");
+        excluded.add("io.swagger.models");
+        excluded.add("io.swagger.util");
+        excluded.add("javax");
+        excluded.add("jnr");
+        excluded.add("junit");
+        excluded.add("net.sf.ehcache");
+        excluded.add("net.shibboleth.utilities.java.support");
+        excluded.add("org.aeonbits.owner");
+        excluded.add("org.apache.activemq");
+        excluded.add("org.apache.bval");
+        excluded.add("org.apache.catalina");
+        excluded.add("org.apache.camel");
+        excluded.add("org.apache.commons.beanutils");
+        excluded.add("org.apache.commons.cli");
+        excluded.add("org.apache.commons.codec");
+        excluded.add("org.apache.commons.collections");
+        excluded.add("org.apache.commons.dbcp2");
+        excluded.add("org.apache.commons.digester");
+        excluded.add("org.apache.commons.io");
+        excluded.add("org.apache.commons.jcs.access");
+        excluded.add("org.apache.commons.jcs.admin");
+        excluded.add("org.apache.commons.jcs.auxiliary");
+        excluded.add("org.apache.commons.jcs.engine");
+        excluded.add("org.apache.commons.jcs.io");
+        excluded.add("org.apache.commons.jcs.utils");
+        excluded.add("org.apache.commons.lang");
+        excluded.add("org.apache.commons.lang3");
+        excluded.add("org.apache.commons.logging");
+        excluded.add("org.apache.commons.pool2");
+        excluded.add("org.apache.coyote");
+        excluded.add("org.apache.cxf");
+        excluded.add("org.apache.geronimo.javamail");
+        excluded.add("org.apache.geronimo.mail");
+        excluded.add("org.apache.geronimo.osgi");
+        excluded.add("org.apache.geronimo.specs");
+        excluded.add("org.apache.http");
+        excluded.add("org.apache.jcp");
+        excluded.add("org.apache.johnzon");
+        excluded.add("org.apache.juli");
+        excluded.add("org.apache.logging.log4j.core");
+        excluded.add("org.apache.logging.log4j.jul");
+        excluded.add("org.apache.logging.log4j.util");
+        excluded.add("org.apache.logging.slf4j");
+        excluded.add("org.apache.meecrowave");
+        excluded.add("org.apache.myfaces");
+        excluded.add("org.apache.naming");
+        excluded.add("org.apache.neethi");
+        excluded.add("org.apache.openejb");
+        excluded.add("org.apache.openjpa");
+        excluded.add("org.apache.oro");
+        excluded.add("org.apache.tomcat");
+        excluded.add("org.apache.tomee");
+        excluded.add("org.apache.velocity");
+        excluded.add("org.apache.webbeans");
+        excluded.add("org.apache.ws");
+        excluded.add("org.apache.wss4j");
+        excluded.add("org.apache.xbean");
+        excluded.add("org.apache.xml");
+        excluded.add("org.apache.xml.resolver");
+        excluded.add("org.bouncycastle");
+        excluded.add("org.codehaus.stax2");
+        excluded.add("org.codehaus.swizzle.Grep");
+        excluded.add("org.codehaus.swizzle.Lexer");
+        excluded.add("org.cryptacular");
+        excluded.add("org.eclipse.jdt.core");
+        excluded.add("org.eclipse.jdt.internal");
+        excluded.add("org.fusesource.hawtbuf");
+        excluded.add("org.h2");
+        excluded.add("org.hamcrest");
+        excluded.add("org.hsqldb");
+        excluded.add("org.jasypt");
+        excluded.add("org.jboss.marshalling");
+        excluded.add("org.joda.time");
+        excluded.add("org.jose4j");
+        excluded.add("org.junit");
+        excluded.add("org.jvnet.mimepull");
+        excluded.add("org.metatype.sxc");
+        excluded.add("org.objectweb.asm");
+        excluded.add("org.objectweb.howl");
+        excluded.add("org.openejb");
+        excluded.add("org.opensaml");
+        excluded.add("org.slf4j");
+        excluded.add("org.swizzle");
+        excluded.add("org.terracotta.context");
+        excluded.add("org.terracotta.entity");
+        excluded.add("org.terracotta.modules.ehcache");
+        excluded.add("org.terracotta.statistics");
+        excluded.add("org.yaml.snakeyaml");
+        excluded.add("serp");
+
+        excluded.add("META-INF.versions"); // mjar is not yet supported
+
+        final Set<String> included = new HashSet<>();
+        included.add("org.apache.camel.cdi");
+        included.add("org.apache.myfaces.cdi");
+        // included.add("org.apache.myfaces.application.cdi");
+        included.add("org.apache.myfaces.flow.cdi");
+        included.add("org.apache.meecrowave.oauth2");
+
+        delegateSkip = new OptimizedExclusionFilter(excluded);
+        delegateAccept = new OptimizedExclusionFilter(included);
+    }
+
+    public void init(final Meecrowave.Builder config) {
+        forced = buildArray(config.getScanningPackageIncludes()).orElse(forced);
+        skipped = buildArray(config.getScanningPackageExcludes()).orElse(skipped);
+    }
+
+    private Optional<String[]> buildArray(final String config) {
+        return ofNullable(config)
+                .map(v -> Stream.of(v.split(","))
+                        .map(String::trim)
+                        .filter(i -> !i.isEmpty())
+                        .toArray(String[]::new));
+    }
+
+    @Override
+    public boolean accept(final String name) {
+        if (forced != null && startsWith(forced, name)) {
+            return true;
+        }
+
+        // skip has the same logic than forced + the fact that if we have some forced packaged we skip all others
+        // this is not symmetric but often what is desired
+        if ((skipped != null && skipped.length > 0 && startsWith(skipped, name)) || (skipped != null && skipped.length == 0 && forced != null && forced.length > 0)) {
+            return false;
+        }
+
+        return delegateAccept.accept(name) || !delegateSkip.accept(name);
+    }
+
+    private static boolean startsWith(final String[] array, String name) {
+        for (final String prefix : array) {
+            if (name.startsWith(prefix)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private static class OptimizedExclusionFilter implements Filter {
+        private final Set<String> included;
+
+        private OptimizedExclusionFilter(final Set<String> exclusions) {
+            included = exclusions;
+        }
+
+        @Override
+        public boolean accept(final String name) {
+            int dot = name.indexOf('.');
+            while (dot > 0) {
+                if (included.contains(name.substring(0, dot))) {
+                    return true;
+                }
+                dot = name.indexOf('.', dot + 1);
+            }
+            return included.contains(name);
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownJarsFilter.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownJarsFilter.java
new file mode 100644
index 0000000..1898071
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/KnownJarsFilter.java
@@ -0,0 +1,347 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.openwebbeans;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.tomcat.JarScanFilter;
+import org.apache.tomcat.JarScanType;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toSet;
+
+public class KnownJarsFilter implements JarScanFilter {
+    private final Collection<String> forceIncludes = new HashSet<String>() {{
+        add("cxf-integration-cdi");
+    }};
+
+    private final Collection<String> excludes = new HashSet<String>() {{
+        add("tools.jar");
+        add("bootstrap.jar");
+        add("ApacheJMeter");
+        add("XmlSchema-");
+        add("activation-");
+        add("activeio-");
+        add("activemq-");
+        add("aether-");
+        add("akka-actor-");
+        add("akka-cluster-");
+        add("akka-remote-");
+        add("ant-");
+        add("antlr-");
+        add("aopalliance-");
+        add("args4j-");
+        add("arquillian-core.jar");
+        add("arquillian-testng.jar");
+        add("arquillian-junit.jar");
+        add("arquillian-transaction.jar");
+        add("arquillian-common");
+        add("arquillian-config-");
+        add("arquillian-core-api-");
+        add("arquillian-core-impl-base");
+        add("arquillian-core-spi-");
+        add("arquillian-container-");
+        add("arquillian-junit-");
+        add("arquillian-test-api");
+        add("arquillian-test-impl-base");
+        add("arquillian-test-spi");
+        add("arquillian-tomee-");
+        add("asciidoctorj-");
+        add("async-http-client-");
+        add("asm-");
+        add("avalon-framework-");
+        add("axis-");
+        add("axis2-");
+        add("batchee-jbatch");
+        add("batik-");
+        add("bcprov-");
+        add("bootstrap.jar");
+        add("bsf-");
+        add("bval-core");
+        add("bval-jsr");
+        add("c3p0-");
+        add("cassandra-driver-core");
+        add("catalina-");
+        add("catalina.jar");
+        add("cglib-");
+        add("charsets.jar");
+        add("commons-beanutils");
+        add("commons-cli-");
+        add("commons-codec-");
+        add("commons-collections-");
+        add("commons-compress-");
+        add("commons-configuration-");
+        add("commons-dbcp");
+        add("commons-dbcp-all-1.3-");
+        add("commons-digester-");
+        add("commons-discovery-");
+        add("commons-fileupload-");
+        add("commons-httpclient-");
+        add("commons-io-");
+        add("commons-jcs-core-");
+        add("commons-lang-");
+        add("commons-lang3-");
+        add("commons-logging-");
+        add("commons-logging-api-");
+        add("commons-net-");
+        add("commons-pool-");
+        add("commons-pool2-");
+        add("commons-text-");
+        add("cryptacular-");
+        add("cssparser-");
+        add("cxf-");
+        add("deploy.jar");
+        add("derby-");
+        add("derbyclient-");
+        add("derbynet-");
+        add("dom4j");
+        add("ecj-");
+        add("el-api");
+        add("eclipselink-");
+        add("ehcache-");
+        add("FastInfoset");
+        add("jaxb-");
+        add("jce.jar");
+        add("jfr.jar");
+        add("jfxrt.jar");
+        add("jna-");
+        add("jnr-");
+        add("johnzon-");
+        add("jolokia-core-");
+        add("jolokia-jvm-");
+        add("jolokia-serv");
+        add("json-simple-");
+        add("fusemq-leveldb-");
+        add("geronimo-");
+        add("google-");
+        add("gpars-");
+        add("gragent.jar");
+        add("groovy-");
+        add("gson-");
+        add("guava-");
+        add("guice-");
+        add("h2-");
+        add("hamcrest-");
+        add("hawtbuf-");
+        add("hawtdispatch-");
+        add("hawtio-");
+        add("hawtjni-runtime");
+        add("hibernate-");
+        add("howl-");
+        add("hsqldb-");
+        add("htmlunit-");
+        add("httpclient-");
+        add("httpcore-");
+        add("icu4j-");
+        add("idb-");
+        add("idea_rt.jar");
+        add("istack-commons-runtime-");
+        add("ivy-");
+        add("jackson-annotations-");
+        add("jackson-core-");
+        add("jackson-databind-");
+        add("jackson-mapper-asl-");
+        add("jackson-module-jaxb-annotations-");
+        add("janino-");
+        add("jansi-");
+        add("jasper.jar");
+        add("jasper-el.jar");
+        add("jasypt-");
+        add("java-atk-wrapper");
+        add("java-support-");
+        add("javaee-");
+        add("javaee-api");
+        add("javassist-");
+        add("javaws.jar");
+        add("javax.");
+        add("jaxb-");
+        add("jaxp-");
+        add("jbake-");
+        add("jboss-");
+        add("jbossall-");
+        add("jbosscx-");
+        add("jbossjts-");
+        add("jbosssx-");
+        add("jcommander-");
+        add("jersey-");
+        add("jettison-");
+        add("jetty-");
+        add("jline");
+        add("jmdns-");
+        add("joda-time-");
+        add("johnzon-");
+        add("jruby-");
+        add("jsoup-");
+        add("jsonb-api");
+        add("jsp-api");
+        add("jsr166");
+        add("jsr299-");
+        add("jsr311-");
+        add("jsse.jar");
+        add("jul-to-slf4j-");
+        add("juli-");
+        add("junit-");
+        add("kahadb-");
+        add("kotlin-runtime");
+        add("leveldb");
+        add("log4j-");
+        add("logkit-");
+        add("lombok-");
+        add("lucene-analyzers-");
+        add("lucene-core-");
+        add("management-agent.jar");
+        add("maven-");
+        add("mbean-annotation-api-");
+        add("meecrowave-maven-");
+        add("meecrowave-gradle-");
+        add("mimepull-");
+        add("mina-");
+        add("mqtt-client-");
+        add("multiverse-core-");
+        add("myfaces-api");
+        add("myfaces-impl");
+        add("mysql-connector-java-");
+        add("neethi-");
+        add("nekohtml-");
+        add("netty-");
+        add("openjpa-");
+        add("openmdx-");
+        add("opensaml-");
+        add("opentest4j-");
+        add("openwebbeans-");
+        add("openws-");
+        add("ops4j-");
+        add("org.eclipse.");
+        add("org.junit.");
+        add("org.apache.aries.blueprint.noosgi");
+        add("org.apache.aries.blueprint.web");
+        add("org.osgi.core-");
+        add("org.osgi.enterprise");
+        add("orient-commons-");
+        add("orientdb-core-");
+        add("orientdb-nativeos-");
+        add("oro-");
+        add("pax-url");
+        add("PDFBox");
+        add("plexus-");
+        add("plugin.jar");
+        add("poi-");
+        add("quartz-2");
+        add("qdox-");
+        add("quartz-openejb-");
+        add("resources.jar");
+        add("rmock-");
+        add("rt.jar");
+        add("saaj-");
+        add("sac-");
+        add("scala-library-");
+        add("scalatest");
+        add("scannotation-");
+        add("serializer-");
+        add("serp-");
+        add("servlet-api-");
+        add("sisu-inject");
+        add("sisu-guice");
+        add("shrinkwrap-");
+        add("slf4j-");
+        add("smack-");
+        add("smackx-");
+        add("snappy-");
+        add("spring-");
+        add("sshd-");
+        add("stax-api-");
+        add("stax2-api-");
+        add("sunec.jar");
+        add("surefire-");
+        add("swizzle-");
+        add("sxc-");
+        add("testng-");
+        add("tomcat-annotations");
+        add("tomcat-api");
+        add("tomcat-catalina");
+        add("tomcat-coyote");
+        add("tomcat-dbcp");
+        add("tomcat-el");
+        add("tomcat-i18n");
+        add("tomcat-jasper");
+        add("tomcat-jaspic");
+        add("tomcat-jdbc");
+        add("tomcat-jni");
+        add("tomcat-jsp");
+        add("tomcat-juli");
+        add("tomcat-tribes");
+        add("tomcat-servlet");
+        add("tomcat-spdy");
+        add("tomcat-util");
+        add("tomcat-websocket-api");
+        add("tomee-");
+        add("tools.jar");
+        add("twitter4j-");
+        add("validation-api-");
+        add("velocity-");
+        add("wagon-");
+        add("webbeans-ee");
+        add("webbeans-ejb");
+        add("webbeans-impl");
+        add("webbeans-spi");
+        add("websocket-api");
+        add("woodstox-core-");
+        add("ws-commons-util-");
+        add("wsdl4j-");
+        add("wss4j-");
+        add("wstx-asl-");
+        add("xalan-");
+        add("xbean-");
+        add("xercesImpl-");
+        add("xml-apis-");
+        add("xml-resolver-");
+        add("xmlbeans-");
+        add("xmlgraphics-");
+        add("xmlpull-");
+        add("xmlrpc-");
+        add("xmlschema-");
+        add("xmlsec-");
+        add("xmltooling-");
+        add("xmlunit-");
+        add("xstream-");
+        add("ziplock-");
+        add("zipfs.jar");
+    }};
+
+    public KnownJarsFilter() {
+        // no-op
+    }
+
+    KnownJarsFilter(final Meecrowave.Builder config) {
+        ofNullable(config.getScanningIncludes()).ifPresent(i -> {
+            forceIncludes.clear();
+            forceIncludes.addAll(Stream.of(i.split(",")).map(String::trim).filter(j -> !j.isEmpty()).collect(toSet()));
+        });
+        ofNullable(config.getScanningExcludes())
+                .ifPresent(i -> excludes.addAll(Stream.of(i.split(",")).map(String::trim).filter(j -> !j.isEmpty()).collect(toSet())));
+    }
+
+    @Override
+    public boolean check(final JarScanType jarScanType, final String jarName) {
+        return forceIncludes.stream().anyMatch(jarName::startsWith) || excludes.stream().noneMatch(jarName::startsWith);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveExtension.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveExtension.java
new file mode 100644
index 0000000..2dab110
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveExtension.java
@@ -0,0 +1,76 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.openwebbeans;
+
+import org.apache.meecrowave.cxf.JAXRSFieldInjectionInterceptor;
+import org.apache.meecrowave.cxf.MeecrowaveBus;
+import org.apache.webbeans.container.AnnotatedTypeWrapper;
+
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.ws.rs.Path;
+import java.lang.annotation.Annotation;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Stream;
+
+public class MeecrowaveExtension implements Extension {
+    void addBeansFromJava(@Observes final BeforeBeanDiscovery bbd, final BeanManager bm) {
+        // stream not really needed but here for the pattern in case we need other beans
+        Stream.of(MeecrowaveBus.class).forEach(type -> bbd.addAnnotatedType(bm.createAnnotatedType(type)));
+    }
+
+    void enableContextFieldInjectionWorks(@Observes final ProcessAnnotatedType<?> pat, final BeanManager bm) {
+        final AnnotatedType<?> at = pat.getAnnotatedType();
+        if (at.isAnnotationPresent(Path.class) && !at.isAnnotationPresent(JAXRSFieldInjectionInterceptor.Binding.class)
+                && at.getAnnotations().stream().anyMatch(a -> bm.isNormalScope(a.annotationType()))) {
+            pat.setAnnotatedType(new JAXRSFIeldInjectionAT(this, at));
+        }
+    }
+
+    private static class JAXRSFIeldInjectionAT<T> extends AnnotatedTypeWrapper<T> {
+        private final Set<Annotation> annotations;
+
+        private JAXRSFIeldInjectionAT(final Extension extension, final AnnotatedType<T> original) {
+            super(extension, original);
+            this.annotations = new HashSet<>(original.getAnnotations().size() + 1);
+            this.annotations.addAll(original.getAnnotations());
+            this.annotations.add(JAXRSFieldInjectionInterceptor.Binding.INSTANCE);
+        }
+
+        @Override
+        public Set<Annotation> getAnnotations() {
+            return annotations;
+        }
+
+        @Override
+        public <T1 extends Annotation> T1 getAnnotation(final Class<T1> t1Class) {
+            return t1Class == JAXRSFieldInjectionInterceptor.Binding.class ? t1Class.cast(JAXRSFieldInjectionInterceptor.Binding.INSTANCE) : super.getAnnotation(t1Class);
+        }
+
+        @Override
+        public boolean isAnnotationPresent(final Class<? extends Annotation> aClass) {
+            return JAXRSFieldInjectionInterceptor.Binding.class == aClass || super.isAnnotationPresent(aClass);
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveSecurityService.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveSecurityService.java
new file mode 100644
index 0000000..d61712b
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/MeecrowaveSecurityService.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.openwebbeans;
+
+import org.apache.webbeans.corespi.security.SimpleSecurityService;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.servlet.http.HttpServletRequest;
+import java.security.Principal;
+
+public class MeecrowaveSecurityService extends SimpleSecurityService {
+    @Override // reason of that class
+    public Principal getCurrentPrincipal() {
+        return new MeecrowavePrincipal();
+    }
+
+    // ensure it is contextual
+    private static class MeecrowavePrincipal implements Principal {
+        @Override
+        public String getName() {
+            return unwrap().getName();
+        }
+
+        private Principal unwrap() {
+            final BeanManager beanManager = CDI.current().getBeanManager();
+            return HttpServletRequest.class.cast(
+                    beanManager.getReference(
+                            beanManager.resolve(beanManager.getBeans(HttpServletRequest.class)), HttpServletRequest.class,
+                            beanManager.createCreationalContext(null)))
+                    .getUserPrincipal();
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBAutoSetup.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBAutoSetup.java
new file mode 100644
index 0000000..56a3d88
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBAutoSetup.java
@@ -0,0 +1,110 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.openwebbeans;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.cxf.JAXRSFieldInjectionInterceptor;
+import org.apache.webbeans.annotation.DefaultLiteral;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.configurator.BeanConfiguratorImpl;
+import org.apache.webbeans.container.BeanManagerImpl;
+import org.apache.webbeans.intercept.InterceptorsManager;
+import org.apache.webbeans.servlet.WebBeansConfigurationListener;
+import org.apache.webbeans.web.context.WebConversationFilter;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.configurator.BeanConfigurator;
+import javax.servlet.DispatcherType;
+import javax.servlet.FilterRegistration;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletException;
+import java.util.EnumSet;
+import java.util.Set;
+import java.util.function.Consumer;
+
+public class OWBAutoSetup implements ServletContainerInitializer {
+    @Override
+    public void onStartup(final Set<Class<?>> c, final ServletContext ctx) throws ServletException {
+        final Meecrowave.Builder builder = Meecrowave.Builder.class.cast(ctx.getAttribute("meecrowave.configuration"));
+        final Meecrowave instance = Meecrowave.class.cast(ctx.getAttribute("meecrowave.instance"));
+        if (builder.isCdiConversation()) {
+            final FilterRegistration.Dynamic filter = ctx.addFilter("owb-conversation", WebConversationFilter.class);
+            filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/*");
+        }
+
+        // eager boot to let injections work in listeners
+        final EagerBootListener bootListener = new EagerBootListener(instance);
+        bootListener.doContextInitialized(new ServletContextEvent(ctx));
+        ctx.addListener(bootListener);
+    }
+
+    public static class EagerBootListener extends WebBeansConfigurationListener implements Extension {
+        private final Meecrowave meecrowave;
+
+        private EagerBootListener(final Meecrowave meecrowave) {
+            this.meecrowave = meecrowave;
+        }
+
+        @Override
+        public void contextInitialized(final ServletContextEvent event) {
+            // skip
+        }
+
+        private void doContextInitialized(final ServletContextEvent event) {
+            try {
+                final WebBeansContext instance = WebBeansContext.getInstance();
+                customizeContext(instance);
+            } catch (final IllegalStateException ise) {
+                // lifecycle not supporting it
+            }
+            super.contextInitialized(event);
+        }
+
+        private void customizeContext(final WebBeansContext instance) {
+            final BeanManagerImpl beanManager = instance.getBeanManagerImpl();
+            final InterceptorsManager interceptorsManager = instance.getInterceptorsManager();
+
+            beanManager.addInternalBean(newBean(instance, configurator ->
+                    configurator.beanClass(Meecrowave.Builder.class)
+                            .scope(ApplicationScoped.class)
+                            .qualifiers(DefaultLiteral.INSTANCE)
+                            .types(Meecrowave.Builder.class, Object.class)
+                            .createWith(cc -> meecrowave.getConfiguration())));
+            beanManager.addInternalBean(newBean(instance, configurator ->
+                    configurator.beanClass(Meecrowave.class)
+                            .scope(ApplicationScoped.class)
+                            .qualifiers(DefaultLiteral.INSTANCE)
+                            .types(Meecrowave.class, AutoCloseable.class, Object.class)
+                            .createWith(cc -> meecrowave)));
+
+            interceptorsManager.addInterceptorBindingType(JAXRSFieldInjectionInterceptor.Binding.class);
+            beanManager.addAdditionalAnnotatedType(this, beanManager.createAnnotatedType(JAXRSFieldInjectionInterceptor.class));
+        }
+
+        private <T> Bean<?> newBean(final WebBeansContext instance, final Consumer<BeanConfigurator<T>> configurer) {
+            final BeanConfiguratorImpl<T> meecrowaveBeanBuilder = new BeanConfiguratorImpl<>(instance);
+            configurer.accept(meecrowaveBeanBuilder);
+            return meecrowaveBeanBuilder.getBean();
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBTomcatWebScannerService.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBTomcatWebScannerService.java
new file mode 100644
index 0000000..ffb61d2
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/openwebbeans/OWBTomcatWebScannerService.java
@@ -0,0 +1,336 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.openwebbeans;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.logging.tomcat.LogFacade;
+import org.apache.openwebbeans.se.CDISeScannerService;
+import org.apache.tomcat.JarScanFilter;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.corespi.scanner.xbean.CdiArchive;
+import org.apache.webbeans.corespi.scanner.xbean.OwbAnnotationFinder;
+import org.apache.webbeans.spi.BeanArchiveService;
+import org.apache.webbeans.util.WebBeansUtil;
+import org.apache.webbeans.web.scanner.WebScannerService;
+import org.apache.xbean.finder.AnnotationFinder;
+import org.apache.xbean.finder.filter.Filter;
+
+import javax.servlet.ServletContext;
+import java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Consumer;
+import java.util.stream.Stream;
+
+import static java.util.Optional.of;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toSet;
+import static org.apache.tomcat.JarScanType.PLUGGABILITY;
+
+public class OWBTomcatWebScannerService extends WebScannerService {
+    private final LogFacade logger = new LogFacade(OWBTomcatWebScannerService.class.getName());
+    private final CDISeScannerService delegate;
+
+    protected JarScanFilter filter;
+    private String jreBase;
+
+    // just for logging (== temp)
+    private final Set<String> urls = new HashSet<>();
+    private String docBase;
+    private String shared;
+    private Consumer<File> fileVisitor;
+
+    public OWBTomcatWebScannerService() {
+        this(null);
+    }
+
+
+    public OWBTomcatWebScannerService(final CDISeScannerService delegate) {
+        this.delegate = delegate;
+    }
+
+    @Override
+    public void init(final Object context) {
+        if (delegate != null) {
+            delegate.init(context);
+        }
+    }
+
+    @Override
+    public OwbAnnotationFinder getFinder() {
+        if (delegate != null) {
+            return delegate.getFinder();
+        }
+        return super.getFinder();
+    }
+
+    @Override
+    public Map<BeanArchiveService.BeanArchiveInformation, Set<Class<?>>> getBeanClassesPerBda() {
+        if (delegate != null) {
+            return delegate.getBeanClassesPerBda();
+        }
+        return super.getBeanClassesPerBda();
+    }
+
+    @Override
+    public void release() {
+        if (delegate != null) {
+            delegate.release();
+        } else {
+            super.release();
+        }
+    }
+
+    @Override
+    public Set<Class<?>> getBeanClasses() {
+        if (delegate != null) {
+            return delegate.getBeanClasses();
+        }
+        return super.getBeanClasses();
+    }
+
+    @Override
+    public void scan() {
+        if (delegate != null) {
+            if (getFinder() == null) {
+                delegate.scan();
+            }
+            if (finder == null) {
+                finder = getFinder();
+            }
+        }
+
+        if (finder != null) {
+            return;
+        }
+
+        super.scan();
+        scanGroovy(WebBeansUtil.getCurrentClassLoader());
+        if (!urls.isEmpty()) {
+            logger.info("OpenWebBeans scanning:");
+            final String m2 = new File(System.getProperty("user.home", "."), ".m2/repository").getAbsolutePath();
+            final String base = ofNullable(docBase).orElse("$$$");
+            final String sharedBase = ofNullable(shared).orElse("$$$");
+            final String runnerBase = ofNullable(System.getProperty("meecrowave.base")).orElse("$$$");
+            final String runnerHome = ofNullable(System.getProperty("meecrowave.home")).orElse("$$$");
+            urls.stream().map(u -> {
+                String shownValue = u
+                        // protocol
+                        .replace("file://", "")
+                        .replace("file:", "")
+                        .replace("jar:", "")
+                        // URL suffix
+                        .replace("!/META-INF/beans.xml", "")
+                        .replace("!/", "")
+                        // beans.xml
+                        .replace("META-INF/beans.xml", "");
+
+                // try to make it shorter
+                if (shownValue.startsWith(m2)) {
+                    shownValue = "${maven}/" + shownValue.substring(shownValue.replace(File.separatorChar, '/').lastIndexOf('/') + 1);
+                } else if (shownValue.startsWith(base)) {
+                    shownValue = "${app}" + shownValue.replace(base, "");
+                } else if (shownValue.startsWith(sharedBase)) {
+                    shownValue = "${shared}" + shownValue.replace(sharedBase, "");
+                } else if (shownValue.startsWith(runnerBase)) {
+                    shownValue = "${base}" + shownValue.replace(runnerBase, "");
+                } else if (shownValue.startsWith(runnerHome)) {
+                    shownValue = "${home}" + shownValue.replace(runnerHome, "");
+                }
+
+                return shownValue;
+            }).sorted().forEach(v -> logger.info("    " + v));
+
+            if (fileVisitor != null) {
+                urls.stream()
+                        .filter(this::isFile)
+                        .map(this::toFile)
+                        .filter(File::isDirectory)
+                        .forEach(fileVisitor);
+            }
+        }
+        urls.clear(); // no more needed
+        filter = null;
+        docBase = null;
+        shared = null;
+    }
+
+    private File toFile(final String url) {
+        try {
+            return new File(new URL(url).getFile());
+        } catch (final MalformedURLException e) {
+            return new File(url.substring("file://".length(), url.length()));
+        }
+    }
+
+    private boolean isFile(final String url) {
+        return url.startsWith("file:") && !url.endsWith("!/") && !url.endsWith("!/META-INF/beans.xml");
+    }
+
+    private void scanGroovy(final ClassLoader currentClassLoader) {
+        if (currentClassLoader == null || !currentClassLoader.getClass().getName().equals("groovy.lang.GroovyClassLoader")) {
+            return;
+        }
+        try {
+            final Class<?>[] getLoadedClasses = Class[].class.cast(
+                    currentClassLoader.getClass()
+                            .getMethod("getLoadedClasses")
+                            .invoke(currentClassLoader));
+            addClassesToDefault(getLoadedClasses);
+        } catch (final Exception e) {
+            new LogFacade(OWBTomcatWebScannerService.class.getName()).warn(e.getMessage());
+        }
+    }
+
+    private void addClassesToDefault(final Class<?>[] all) throws Exception {
+        if (all == null || all.length == 0) {
+            return;
+        }
+
+        final Field linking = AnnotationFinder.class.getDeclaredField("linking");
+        final Method readClassDef = AnnotationFinder.class.getDeclaredMethod("readClassDef", Class.class);
+        if (!readClassDef.isAccessible()) {
+            readClassDef.setAccessible(true);
+        }
+        if (!linking.isAccessible()) {
+            linking.setAccessible(true);
+        }
+
+        final URI uri = URI.create("jar:file://!/"); // we'll never find it during scanning and it avoids to create a custom handler
+        final URL url = uri.toURL();
+        final String key = uri.toASCIIString();
+        CdiArchive.FoundClasses foundClasses = archive.classesByUrl().get(key);
+        if (foundClasses == null) {
+            final BeanArchiveService beanArchiveService = webBeansContext().getBeanArchiveService();
+            foundClasses = CdiArchive.FoundClasses.class.cast(
+                    CdiArchive.FoundClasses.class.getConstructor(CdiArchive.class, URL.class, Collection.class, BeanArchiveService.BeanArchiveInformation.class)
+                            .newInstance(null, url, new HashSet<>(), beanArchiveService.getBeanArchiveInformation(url)));
+            archive.classesByUrl().put(key, foundClasses);
+        }
+
+        foundClasses.getClassNames().addAll(Stream.of(all).map(Class::getName).collect(toSet()));
+
+        try {
+            linking.set(finder, true);
+
+            Stream.of(all).forEach(c -> { // populate classInfos map to support annotated mode which relies on ClassInfo
+                try {
+                    readClassDef.invoke(finder, c);
+                } catch (final IllegalAccessException e) {
+                    throw new IllegalStateException(e);
+                } catch (final InvocationTargetException e) {
+                    throw new IllegalStateException(e.getCause());
+                }
+            });
+        } finally {
+            try {
+                linking.set(finder, false);
+            } catch (final IllegalAccessException e) {
+                // no-op
+            }
+        }
+    }
+
+    @Override
+    protected void filterExcludedJars(final Set<URL> classPathUrls) {
+        String jreBaseTmp;
+        try {
+            jreBaseTmp = new File(System.getProperty("java.home")).toURI().toURL().toExternalForm();
+        } catch (MalformedURLException e) {
+            jreBaseTmp = System.getProperty("java.home");
+        }
+        jreBase = jreBaseTmp;
+
+        super.filterExcludedJars(classPathUrls);
+    }
+
+    @Override
+    protected int isExcludedJar(final String path) {
+        if (path.startsWith(jreBase) || (path.startsWith("jar:") && path.indexOf(jreBase) == 4)) {
+            return jreBase.length();
+        }
+
+        // jar:file:spring-boot-cdi-launcher-1.0-SNAPSHOT.jar!/BOOT-INF/lib/x.jar!/
+        if (path.startsWith("jar:file:") && path.endsWith(".jar!/")) {
+            final int lastSep = path.substring(0, path.length() - 2).lastIndexOf('/');
+            if (lastSep > 0) {
+                return filter != null && filter.check(PLUGGABILITY, path.substring(lastSep + 1, path.length() - 2)) ?
+                        -1 : (path.indexOf(".jar") - 1 /*should be lastIndexOf but filterExcludedJar logic would be broken*/);
+            }
+        }
+
+        final int filenameIdx = path.replace(File.separatorChar, '/').replace("!/", "").lastIndexOf('/') + 1;
+        if (filenameIdx < 0 || filenameIdx >= path.length()) { // unlikely
+            return -1;
+        }
+
+        return filter!= null && filter.check(PLUGGABILITY, path.substring(filenameIdx)) ? -1 : (path.indexOf(".jar") - 1);
+    }
+
+    // replace init
+    public void setFilter(final JarScanFilter filter, final ServletContext ctx) {
+        this.filter = filter;
+
+        super.init(ctx);
+        final Meecrowave.Builder config = Meecrowave.Builder.class.cast(ServletContext.class.cast(ctx).getAttribute("meecrowave.configuration"));
+        if (this.filter == null) {
+            this.filter = new KnownJarsFilter(config);
+        }
+
+        final Filter userFilter = webBeansContext().getService(Filter.class);
+        if (KnowClassesFilter.class.isInstance(userFilter)) {
+            KnowClassesFilter.class.cast(userFilter).init(config);
+        }
+    }
+
+    @Override
+    protected void addWebBeansXmlLocation(final URL beanArchiveUrl) {
+        final String url = beanArchiveUrl.toExternalForm();
+        if (urls.add(of(url)
+                .map(s -> s.startsWith("jar:") && s.endsWith("!/META-INF/beans.xml") ? s.substring("jar:".length(), s.length() - "!/META-INF/beans.xml".length()) : s)
+                .get())) {
+            super.doAddWebBeansXmlLocation(beanArchiveUrl);
+        }
+    }
+
+    public void setShared(final String shared) {
+        this.shared = ofNullable(shared).map(File::new).filter(File::isDirectory).map(File::getAbsolutePath).orElse(null);
+    }
+
+    public void setDocBase(final String docBase) {
+        this.docBase = docBase;
+    }
+
+    public void setFileVisitor(final Consumer<File> fileVisitor) {
+        this.fileVisitor = fileVisitor;
+    }
+
+    //don't rename this method - in case of owb2 it overrides the method defined in AbstractMetaDataDiscovery
+    protected WebBeansContext webBeansContext() {
+        return WebBeansContext.getInstance(); //only way to be compatible with owb 1.7.x and 2.x (without reflection)
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/runner/Cli.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/runner/Cli.java
new file mode 100644
index 0000000..1885875
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/runner/Cli.java
@@ -0,0 +1,296 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.runner;
+
+import org.apache.catalina.connector.Connector;
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.DefaultParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.ParseException;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.runner.cli.CliOption;
+import org.apache.xbean.recipe.ObjectRecipe;
+
+import javax.enterprise.inject.Vetoed;
+import java.io.File;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Properties;
+import java.util.ServiceLoader;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+import static java.util.Optional.ofNullable;
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.Collectors.toMap;
+
+@Vetoed
+public class Cli implements Runnable {
+    private final String[] args;
+
+    public Cli(final String[] args) {
+        this.args = args;
+    }
+
+    public void run() {
+        final ParsedCommand parsedCommand = new ParsedCommand(args).invoke();
+        if (parsedCommand.isFailed()) {
+            return;
+        }
+
+        final Meecrowave.Builder builder = parsedCommand.getBuilder();
+        final CommandLine line = parsedCommand.getLine();
+        try (final Meecrowave meecrowave = new Meecrowave(builder)) {
+            final String ctx = line.getOptionValue("context", "");
+            final String fixedCtx = !ctx.isEmpty() && !ctx.startsWith("/") ? '/' + ctx : ctx;
+            final String war = line.getOptionValue("webapp");
+            meecrowave.start();
+            if (war == null) {
+                meecrowave.deployClasspath(new Meecrowave.DeploymentMeta(ctx, ofNullable(line.getOptionValue("docbase")).map(File::new).orElse(null), null));
+            } else {
+                meecrowave.deployWebapp(fixedCtx, new File(war));
+            }
+            doWait(meecrowave, line);
+        }
+    }
+
+    protected void doWait(final Meecrowave meecrowave, final CommandLine line) {
+        meecrowave.getTomcat().getServer().await();
+    }
+
+    public static void main(final String[] args) {
+        new Cli(args).run();
+    }
+
+    // utility when user wraps the command, it enables him to manage the instance but reuse most of our options
+    public static Meecrowave.Builder create(final String[] args) {
+        final ParsedCommand command = new ParsedCommand(args).invoke();
+        if (command.isFailed()) {
+            return null;
+        }
+        return command.getBuilder();
+    }
+
+    private static void bind(final Meecrowave.Builder builder, final CommandLine line, final List<Field> fields, final Object config) {
+        fields.forEach(f -> {
+            final CliOption opt = f.getAnnotation(CliOption.class);
+            final Optional<String> first = Stream.of(Stream.of(opt.name()), Stream.of(opt.alias()))
+                    .flatMap(a -> a)
+                    .filter(line::hasOption)
+                    .findFirst();
+            if (first.isPresent()) {
+                final String name = first.get();
+                ofNullable(f.getType() == boolean.class ?
+                        ofNullable(line.getOptionValue(name)).map(Boolean::parseBoolean).orElse(true) :
+                        toValue(builder, name, line.getOptionValues(name), f.getType()))
+                        .ifPresent(v -> {
+                            if (!f.isAccessible()) {
+                                f.setAccessible(true);
+                            }
+                            try {
+                                f.set(config, v);
+                            } catch (final IllegalAccessException e) {
+                                throw new IllegalStateException(e);
+                            }
+                        });
+            }
+        });
+    }
+
+    private static Object toValue(final Meecrowave.Builder builder, final String name, final String[] optionValues, final Class<?> type) {
+        if (optionValues == null || optionValues.length == 0) {
+            return null;
+        }
+
+        // decode options while it is strings
+        IntStream.range(0, optionValues.length)
+                .forEach(i -> optionValues[i] = builder.getExtension(Meecrowave.ValueTransformers.class).apply(optionValues[i]));
+
+        if (String.class == type) {
+            return optionValues[0];
+        }
+        if (int.class == type) {
+            return Integer.parseInt(optionValues[0]);
+        }
+        if (File.class == type) {
+            return new File(optionValues[0]);
+        }
+        if (Properties.class == type) {
+            final Properties props = new Properties();
+            Stream.of(optionValues).map(v -> v.split("=")).forEach(v -> props.setProperty(v[0], v[1]));
+            return props;
+        }
+        if (Map.class == type) {
+            final Map<String, String> props = new HashMap<>();
+            Stream.of(optionValues).map(v -> v.split("=")).forEach(v -> props.put(v[0], v[1]));
+            return props;
+        }
+
+        final ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        switch (name) {
+            case "realm": // org.foo.Impl:attr1=val1;attr2=val2
+                try {
+                    int end = optionValues[0].indexOf(':');
+                    if (end < 0) {
+                        return loader.loadClass(optionValues[0]).newInstance();
+                    }
+                    final ObjectRecipe recipe = new ObjectRecipe(optionValues[0].substring(0, end));
+                    Stream.of(optionValues[0].substring(end + 1, optionValues[0].length()).split(";"))
+                            .map(v -> v.split("="))
+                            .forEach(v -> recipe.setProperty(v[0], v[1]));
+                    return recipe.create(loader);
+                } catch (final Exception cnfe) {
+                    throw new IllegalArgumentException(optionValues[0]);
+                }
+            case "security-constraint": // attr1=val1;attr2=val2
+                return Stream.of(optionValues)
+                        .map(item -> {
+                            try {
+                                final ObjectRecipe recipe = new ObjectRecipe(Meecrowave.SecurityConstaintBuilder.class);
+                                Stream.of(item.split(";"))
+                                        .map(v -> v.split("="))
+                                        .forEach(v -> recipe.setProperty(v[0], v[1]));
+                                return recipe.create(loader);
+                            } catch (final Exception cnfe) {
+                                throw new IllegalArgumentException(optionValues[0]);
+                            }
+                        }).collect(toList());
+            case "login-config":
+                try {
+                    final ObjectRecipe recipe = new ObjectRecipe(Meecrowave.LoginConfigBuilder.class);
+                    Stream.of(optionValues[0].split(";"))
+                            .map(v -> v.split("="))
+                            .forEach(v -> recipe.setProperty(v[0], v[1]));
+                    return recipe.create(loader);
+                } catch (final Exception cnfe) {
+                    throw new IllegalArgumentException(optionValues[0]);
+                }
+            case "connector": // org.foo.Impl:attr1=val1;attr2=val2
+                return Stream.of(optionValues)
+                        .map(v -> {
+                            try {
+                                int end = v.indexOf(':');
+                                if (end < 0) {
+                                    return new Connector(v);
+                                }
+                                final Connector connector = new Connector(optionValues[0].substring(0, end));
+                                Stream.of(v.substring(end + 1, v.length()).split(";"))
+                                        .map(i -> i.split("="))
+                                        .forEach(i -> connector.setProperty(i[0], i[1]));
+                                return connector;
+                            } catch (final Exception cnfe) {
+                                throw new IllegalArgumentException(optionValues[0]);
+                            }
+                        }).collect(toList());
+            default:
+                throw new IllegalArgumentException("Unsupported " + name);
+        }
+    }
+
+    public interface Options {
+    }
+
+    private static final class ParsedCommand {
+        private final String[] args;
+        private boolean failed;
+        private CommandLine line;
+        private Meecrowave.Builder builder;
+
+        private ParsedCommand(final String... args) {
+            this.args = args;
+        }
+
+        private static void help(final org.apache.commons.cli.Options options) {
+            new HelpFormatter().printHelp("java -jar meecrowave-runner.jar", options);
+        }
+
+        private static Meecrowave.Builder buildConfig(final CommandLine line, final List<Field> fields,
+                                                      final Map<Object, List<Field>> propertiesOptions) {
+            final Meecrowave.Builder config = new Meecrowave.Builder();
+            bind(config, line, fields, config);
+            propertiesOptions.forEach((o, f) -> {
+                bind(config, line, f, o);
+                config.setExtension(o.getClass(), o);
+            });
+            return config;
+        }
+
+        boolean isFailed() {
+            return failed;
+        }
+
+        public CommandLine getLine() {
+            return line;
+        }
+
+        public Meecrowave.Builder getBuilder() {
+            return builder;
+        }
+
+        public ParsedCommand invoke() {
+            final org.apache.commons.cli.Options options = new org.apache.commons.cli.Options();
+            options.addOption(null, "help", false, "Show help");
+            options.addOption(null, "context", true, "The context to use to deploy the webapp");
+            options.addOption(null, "webapp", true, "Location of the webapp, if not set the classpath will be deployed");
+            options.addOption(null, "docbase", true, "Location of the docbase for a classpath deployment");
+            final List<Field> fields = Stream.of(Meecrowave.Builder.class.getDeclaredFields())
+                    .filter(f -> f.isAnnotationPresent(CliOption.class))
+                    .collect(toList());
+            final Map<Object, List<Field>> propertiesOptions = StreamSupport.stream(ServiceLoader.load(Options.class).spliterator(), false)
+                    .collect(toMap(identity(), o -> Stream.of(o.getClass().getDeclaredFields()).filter(f -> f.isAnnotationPresent(CliOption.class)).collect(toList())));
+            fields.forEach(f -> {
+                final CliOption opt = f.getAnnotation(CliOption.class);
+                final String description = opt.description();
+                options.addOption(null, opt.name(), true /*even for booleans otherwise no way to set false for true by default ones*/, description);
+                Stream.of(opt.alias()).forEach(a -> options.addOption(null, a, true, description));
+            });
+            propertiesOptions.values().forEach(all -> all.forEach(f -> {
+                final CliOption opt = f.getAnnotation(CliOption.class);
+                final String description = opt.description();
+                options.addOption(null, opt.name(), true, description);
+                Stream.of(opt.alias()).forEach(a -> options.addOption(null, a, true, description));
+            }));
+
+            final CommandLineParser parser = new DefaultParser();
+            try {
+                line = parser.parse(options, args, true);
+            } catch (final ParseException exp) {
+                help(options);
+                failed = true;
+                return this;
+            }
+
+            if (line.hasOption("help")) {
+                help(options);
+                failed = true;
+                return this;
+            }
+
+            builder = buildConfig(line, fields, propertiesOptions);
+            failed = false;
+            return this;
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/runner/cli/CliOption.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/runner/cli/CliOption.java
new file mode 100644
index 0000000..7fe2ac0
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/runner/cli/CliOption.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.runner.cli;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target(FIELD)
+@Retention(RUNTIME)
+public @interface CliOption {
+    String name();
+    String description();
+    String[] alias() default {};
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/service/ValueTransformer.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/service/ValueTransformer.java
new file mode 100644
index 0000000..dc109b6
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/service/ValueTransformer.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.service;
+
+import java.util.function.Function;
+
+/**
+ * Implementation transforming a configuration value to a clear value.
+ * Ex: --foo=decode:bar:val will decode val with the ValueTransformer bar (name).
+ */
+public interface ValueTransformer extends Function<String, String> {
+    /**
+     * @return name used to mark this transformer in values.
+     */
+    String name();
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/CDIInstanceManager.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/CDIInstanceManager.java
new file mode 100644
index 0000000..ab9b15a
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/CDIInstanceManager.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tomcat;
+
+import org.apache.tomcat.InstanceManager;
+import org.apache.webbeans.servlet.WebBeansConfigurationListener;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.inject.spi.InjectionTarget;
+import javax.naming.NamingException;
+import java.lang.reflect.InvocationTargetException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static java.util.Optional.ofNullable;
+
+public class CDIInstanceManager implements InstanceManager {
+    private final Map<Object, Runnable> destroyables = new ConcurrentHashMap<>();
+
+    @Override
+    public Object newInstance(final Class<?> clazz) throws IllegalAccessException, InvocationTargetException,
+            NamingException, InstantiationException {
+        final Object newInstance = clazz.newInstance();
+        newInstance(newInstance);
+        return newInstance;
+    }
+
+    @Override
+    public Object newInstance(final String className) throws IllegalAccessException, InvocationTargetException,
+            NamingException, InstantiationException, ClassNotFoundException {
+        return newInstance(className, Thread.currentThread().getContextClassLoader());
+    }
+
+    @Override
+    public Object newInstance(final String fqcn, final ClassLoader classLoader) throws IllegalAccessException,
+            InvocationTargetException, NamingException, InstantiationException, ClassNotFoundException {
+        return newInstance(classLoader.loadClass(fqcn));
+    }
+
+    @Override
+    public void newInstance(final Object o) throws IllegalAccessException, InvocationTargetException, NamingException {
+        if (WebBeansConfigurationListener.class.isInstance(o) || o.getClass().getName().startsWith("org.apache.catalina.servlets.")) {
+            return;
+        }
+
+        final BeanManager bm = CDI.current().getBeanManager();
+        final AnnotatedType<?> annotatedType = bm.createAnnotatedType(o.getClass());
+        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final CreationalContext<Object> creationalContext = bm.createCreationalContext(null);
+        injectionTarget.inject(o, creationalContext);
+        try {
+            injectionTarget.postConstruct(o);
+        } catch (final RuntimeException e) {
+            creationalContext.release();
+            throw e;
+        }
+        destroyables.put(o, () -> {
+            try {
+                injectionTarget.preDestroy(o);
+            } finally {
+                creationalContext.release();
+            }
+        });
+    }
+
+    @Override
+    public void destroyInstance(final Object o) throws IllegalAccessException, InvocationTargetException {
+        ofNullable(destroyables.remove(o)).ifPresent(Runnable::run);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/LoggingAccessLogPattern.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/LoggingAccessLogPattern.java
new file mode 100644
index 0000000..4f8d30c
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/LoggingAccessLogPattern.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tomcat;
+
+import org.apache.catalina.valves.AbstractAccessLogValve;
+import org.apache.meecrowave.logging.tomcat.LogFacade;
+
+import java.io.CharArrayWriter;
+
+public class LoggingAccessLogPattern extends AbstractAccessLogValve {
+    private final LogFacade logger;
+
+    public LoggingAccessLogPattern(final String pattern) {
+        logger = new LogFacade(LoggingAccessLogPattern.class.getName());
+        setAsyncSupported(true);
+        setPattern(pattern);
+    }
+
+    @Override
+    protected void log(final CharArrayWriter message) {
+        logger.info(message);
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/NoDescriptorRegistry.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/NoDescriptorRegistry.java
new file mode 100644
index 0000000..ffcd0e2
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/NoDescriptorRegistry.java
@@ -0,0 +1,311 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tomcat;
+
+import org.apache.tomcat.util.modeler.ManagedBean;
+import org.apache.tomcat.util.modeler.Registry;
+
+import javax.management.Attribute;
+import javax.management.AttributeList;
+import javax.management.AttributeNotFoundException;
+import javax.management.InstanceAlreadyExistsException;
+import javax.management.InstanceNotFoundException;
+import javax.management.IntrospectionException;
+import javax.management.InvalidAttributeValueException;
+import javax.management.ListenerNotFoundException;
+import javax.management.MBeanException;
+import javax.management.MBeanInfo;
+import javax.management.MBeanOperationInfo;
+import javax.management.MBeanRegistrationException;
+import javax.management.MBeanServer;
+import javax.management.NotCompliantMBeanException;
+import javax.management.NotificationFilter;
+import javax.management.NotificationListener;
+import javax.management.ObjectInstance;
+import javax.management.ObjectName;
+import javax.management.OperationsException;
+import javax.management.QueryExp;
+import javax.management.ReflectionException;
+import javax.management.loading.ClassLoaderRepository;
+import java.io.ObjectInputStream;
+import java.util.List;
+import java.util.Set;
+
+import static java.util.Collections.emptyList;
+
+// skip Tomcat MBeans, goal is really to skip mbean-descriptors.xml reading which is slow for small apps.
+public class NoDescriptorRegistry extends Registry {
+    private final MBeanServer mBeanServer = new NoJmxMBeanServer();
+    private final ManagedBean defaultMBean = new PassthroughMBean();
+
+    @Override
+    public void registerComponent(final Object bean, final String oname, final String type) throws Exception {
+        // no-op
+    }
+
+    @Override
+    public void unregisterComponent(final String oname) {
+        // no-op
+    }
+
+    @Override
+    public void invoke(final List<ObjectName> mbeans, final String operation, final boolean failFirst) throws Exception {
+        // no-op
+    }
+
+    @Override
+    public int getId(final String domain, final String name) {
+        return 0;
+    }
+
+    @Override
+    public void addManagedBean(final ManagedBean bean) {
+        // no-op
+    }
+
+    @Override
+    public ManagedBean findManagedBean(final String name) {
+        return defaultMBean;
+    }
+
+    @Override
+    public String getType(final ObjectName oname, final String attName) {
+        return null;
+    }
+
+    @Override
+    public MBeanOperationInfo getMethodInfo(final ObjectName oname, final String opName) {
+        return null;
+    }
+
+    @Override
+    public ManagedBean findManagedBean(final Object bean, final Class<?> beanClass, final String type) throws Exception {
+        return null;
+    }
+
+    @Override
+    public List<ObjectName> load(final String sourceType, final Object source, final String param) throws Exception {
+        return emptyList();
+    }
+
+    @Override
+    public void loadDescriptors(final String packageName, final ClassLoader classLoader) {
+        // no-op
+    }
+
+    @Override
+    public void registerComponent(final Object bean, final ObjectName oname, final String type) throws Exception {
+        // no-op
+    }
+
+    @Override
+    public void unregisterComponent(final ObjectName oname) {
+        // no-op
+    }
+
+    @Override
+    public MBeanServer getMBeanServer() {
+        return mBeanServer;
+    }
+
+    private static class NoJmxMBeanServer implements MBeanServer {
+        @Override
+        public ObjectInstance createMBean(String className, ObjectName name) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, MBeanRegistrationException {
+            return null;
+        }
+
+        @Override
+        public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, InstanceNotFoundException, MBeanRegistrationException {
+            return null;
+        }
+
+        @Override
+        public ObjectInstance createMBean(String className, ObjectName name, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, MBeanRegistrationException {
+            return null;
+        }
+
+        @Override
+        public ObjectInstance createMBean(String className, ObjectName name, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException, InstanceNotFoundException, MBeanRegistrationException {
+            return null;
+        }
+
+        @Override
+        public ObjectInstance registerMBean(Object object, ObjectName name) throws InstanceAlreadyExistsException, MBeanRegistrationException, NotCompliantMBeanException {
+            return null;
+        }
+
+        @Override
+        public void unregisterMBean(ObjectName name) throws InstanceNotFoundException, MBeanRegistrationException {
+
+        }
+
+        @Override
+        public ObjectInstance getObjectInstance(ObjectName name) throws InstanceNotFoundException {
+            return null;
+        }
+
+        @Override
+        public Set<ObjectInstance> queryMBeans(ObjectName name, QueryExp query) {
+            return null;
+        }
+
+        @Override
+        public Set<ObjectName> queryNames(ObjectName name, QueryExp query) {
+            return null;
+        }
+
+        @Override
+        public boolean isRegistered(ObjectName name) {
+            return false;
+        }
+
+        @Override
+        public Integer getMBeanCount() {
+            return null;
+        }
+
+        @Override
+        public Object getAttribute(ObjectName name, String attribute) throws MBeanException, AttributeNotFoundException, InstanceNotFoundException, ReflectionException {
+            return null;
+        }
+
+        @Override
+        public AttributeList getAttributes(ObjectName name, String[] attributes) throws InstanceNotFoundException, ReflectionException {
+            return null;
+        }
+
+        @Override
+        public void setAttribute(ObjectName name, Attribute attribute) throws InstanceNotFoundException, AttributeNotFoundException, InvalidAttributeValueException, MBeanException, ReflectionException {
+
+        }
+
+        @Override
+        public AttributeList setAttributes(ObjectName name, AttributeList attributes) throws InstanceNotFoundException, ReflectionException {
+            return null;
+        }
+
+        @Override
+        public Object invoke(ObjectName name, String operationName, Object[] params, String[] signature) throws InstanceNotFoundException, MBeanException, ReflectionException {
+            return null;
+        }
+
+        @Override
+        public String getDefaultDomain() {
+            return null;
+        }
+
+        @Override
+        public String[] getDomains() {
+            return new String[0];
+        }
+
+        @Override
+        public void addNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException {
+
+        }
+
+        @Override
+        public void addNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException {
+
+        }
+
+        @Override
+        public void removeNotificationListener(ObjectName name, ObjectName listener) throws InstanceNotFoundException, ListenerNotFoundException {
+
+        }
+
+        @Override
+        public void removeNotificationListener(ObjectName name, ObjectName listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException {
+
+        }
+
+        @Override
+        public void removeNotificationListener(ObjectName name, NotificationListener listener) throws InstanceNotFoundException, ListenerNotFoundException {
+
+        }
+
+        @Override
+        public void removeNotificationListener(ObjectName name, NotificationListener listener, NotificationFilter filter, Object handback) throws InstanceNotFoundException, ListenerNotFoundException {
+
+        }
+
+        @Override
+        public MBeanInfo getMBeanInfo(ObjectName name) throws InstanceNotFoundException, IntrospectionException, ReflectionException {
+            return null;
+        }
+
+        @Override
+        public boolean isInstanceOf(ObjectName name, String className) throws InstanceNotFoundException {
+            return false;
+        }
+
+        @Override
+        public Object instantiate(String className) throws ReflectionException, MBeanException {
+            return null;
+        }
+
+        @Override
+        public Object instantiate(String className, ObjectName loaderName) throws ReflectionException, MBeanException, InstanceNotFoundException {
+            return null;
+        }
+
+        @Override
+        public Object instantiate(String className, Object[] params, String[] signature) throws ReflectionException, MBeanException {
+            return null;
+        }
+
+        @Override
+        public Object instantiate(String className, ObjectName loaderName, Object[] params, String[] signature) throws ReflectionException, MBeanException, InstanceNotFoundException {
+            return null;
+        }
+
+        @Override
+        public ObjectInputStream deserialize(ObjectName name, byte[] data) throws InstanceNotFoundException, OperationsException {
+            return null;
+        }
+
+        @Override
+        public ObjectInputStream deserialize(String className, byte[] data) throws OperationsException, ReflectionException {
+            return null;
+        }
+
+        @Override
+        public ObjectInputStream deserialize(String className, ObjectName loaderName, byte[] data) throws InstanceNotFoundException, OperationsException, ReflectionException {
+            return null;
+        }
+
+        @Override
+        public ClassLoader getClassLoaderFor(ObjectName mbeanName) throws InstanceNotFoundException {
+            return null;
+        }
+
+        @Override
+        public ClassLoader getClassLoader(ObjectName loaderName) throws InstanceNotFoundException {
+            return null;
+        }
+
+        @Override
+        public ClassLoaderRepository getClassLoaderRepository() {
+            return null;
+        }
+    }
+
+    private static class PassthroughMBean extends ManagedBean {
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
new file mode 100644
index 0000000..ac2651b
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/OWBJarScanner.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tomcat;
+
+import org.apache.tomcat.Jar;
+import org.apache.tomcat.JarScanFilter;
+import org.apache.tomcat.JarScanType;
+import org.apache.tomcat.JarScanner;
+import org.apache.tomcat.JarScannerCallback;
+import org.apache.tomcat.util.buf.UriUtil;
+import org.apache.tomcat.util.scan.Constants;
+import org.apache.tomcat.util.scan.JarFactory;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.corespi.scanner.xbean.CdiArchive;
+import org.apache.webbeans.web.scanner.WebScannerService;
+
+import javax.servlet.ServletContext;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+public class OWBJarScanner implements JarScanner {
+    private JarScanFilter filter; // not yet used
+
+    @Override
+    public void scan(final JarScanType jarScanType, final ServletContext servletContext, final JarScannerCallback callback) {
+        switch (jarScanType) {
+            case PLUGGABILITY:
+                CdiArchive.class.cast(WebScannerService.class.cast(WebBeansContext.getInstance().getScannerService()).getFinder().getArchive())
+                        .classesByUrl().keySet().stream()
+                        .filter(u -> !"jar:file://!/".equals(u)) // not a fake in memory url
+                        .forEach(u -> {
+                            try {
+                                final URL url = new URL(u);
+                                if ("jar".equals(url.getProtocol()) || url.getPath().endsWith(Constants.JAR_EXT)) {
+                                    try (final Jar jar = JarFactory.newInstance(url)) {
+                                        callback.scan(jar, u, true);
+                                    }
+                                } else if ("file".equals(url.getProtocol())) {
+                                    final File f = new File(url.toURI());
+                                    if (f.isFile()) {
+                                        try (final Jar jar = JarFactory.newInstance(UriUtil.buildJarUrl(f))) {
+                                            callback.scan(jar, f.getAbsolutePath(), true);
+                                        }
+                                    } else if (f.isDirectory()) {
+                                        callback.scan(f, f.getAbsolutePath(), true);
+                                    }
+                                }
+                            } catch (final MalformedURLException e) {
+                                // skip
+                            } catch (final IOException | URISyntaxException ioe) {
+                                throw new IllegalArgumentException(ioe);
+                            }
+                        });
+                return;
+
+            case TLD:
+            default:
+        }
+    }
+
+    @Override
+    public JarScanFilter getJarScanFilter() {
+        return filter;
+    }
+
+    @Override
+    public void setJarScanFilter(final JarScanFilter jarScanFilter) {
+        this.filter = jarScanFilter;
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/ProvidedLoader.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/ProvidedLoader.java
new file mode 100644
index 0000000..f13bcf2
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/ProvidedLoader.java
@@ -0,0 +1,149 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tomcat;
+
+import org.apache.catalina.Context;
+import org.apache.catalina.LifecycleException;
+import org.apache.catalina.LifecycleState;
+import org.apache.catalina.Loader;
+import org.apache.catalina.util.LifecycleBase;
+
+import java.beans.PropertyChangeListener;
+
+// used to not recreate another classloader,
+// it has a small workaround cause tomcat set properties (clear*) on the classloader
+// and AppLoader doesnt support it leading to warnings we don't want
+public class ProvidedLoader extends LifecycleBase implements Loader {
+    private static final ClassLoader MOCK = new TomcatSettersClassLoader(ProvidedLoader.class.getClassLoader());
+
+    private final ClassLoader delegate;
+    private Context context;
+    private int mockReturns = -1;
+
+    public ProvidedLoader(final ClassLoader loader, final boolean wrap) {
+        // use another classloader cause tomcat set properties on the classloader
+        final ClassLoader impl = loader == null ? ClassLoader.getSystemClassLoader() : loader;
+        this.delegate = wrap ? new TomcatSettersClassLoader(impl) : impl;
+    }
+
+    @Override
+    public void backgroundProcess() {
+        // no-op
+    }
+
+    @Override
+    public ClassLoader getClassLoader() {
+        if (mockReturns > 0) {
+            mockReturns--;
+            return MOCK;
+        }
+        return delegate;
+    }
+
+    @Override
+    public Context getContext() {
+        return context;
+    }
+
+    @Override
+    public void setContext(final Context context) {
+        this.context = context;
+    }
+
+    @Override
+    public boolean modified() {
+        return false;
+    }
+
+    @Override
+    public boolean getDelegate() {
+        return false;
+    }
+
+    @Override
+    public void setDelegate(final boolean delegate) {
+        // ignore
+    }
+
+    @Override
+    public boolean getReloadable() {
+        return false;
+    }
+
+    @Override
+    public void setReloadable(final boolean reloadable) {
+        // no-op
+    }
+
+    @Override
+    public void addPropertyChangeListener(final PropertyChangeListener listener) {
+        // no-op
+    }
+
+    @Override
+    public void removePropertyChangeListener(final PropertyChangeListener listener) {
+        // no-op
+    }
+
+    @Override
+    protected void startInternal() throws LifecycleException {
+        mockReturns = 4; // check StandardContext.startInternal, while there is no warnings in the log and tests pass we are good
+        setState(LifecycleState.STARTING);
+    }
+
+    @Override
+    protected void initInternal() throws LifecycleException {
+        // no-op
+    }
+
+    @Override
+    protected void stopInternal() throws LifecycleException {
+        setState(LifecycleState.STOPPING);
+    }
+
+    @Override
+    protected void destroyInternal() throws LifecycleException {
+        // no-op
+    }
+
+    // avoid warnings cause AppLoader doesn't support these setters but tomcat expects it
+    public static class TomcatSettersClassLoader extends ClassLoader {
+        private TomcatSettersClassLoader(final ClassLoader classLoader) {
+            super(classLoader);
+        }
+
+
+        public void setClearReferencesHttpClientKeepAliveThread(final boolean ignored) {
+            // no-op
+        }
+
+        public void setClearReferencesRmiTargets(final boolean ignored) {
+            // no-op
+        }
+
+        public void setClearReferencesStopThreads(final boolean ignored) {
+            // no-op
+        }
+
+        public void setClearReferencesStopTimerThreads(final boolean ignored) {
+            // no-op
+        }
+    }
+}
+
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/TomcatAutoInitializer.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/TomcatAutoInitializer.java
new file mode 100644
index 0000000..ac90026
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/tomcat/TomcatAutoInitializer.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.tomcat;
+
+import org.apache.catalina.servlets.DefaultServlet;
+import org.apache.meecrowave.Meecrowave;
+
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import java.util.Set;
+
+public class TomcatAutoInitializer implements ServletContainerInitializer {
+    @Override
+    public void onStartup(final Set<Class<?>> c, final ServletContext ctx) throws ServletException {
+        final Meecrowave.Builder builder = Meecrowave.Builder.class.cast(ctx.getAttribute("meecrowave.configuration"));
+        if (!builder.isTomcatAutoSetup()) {
+            return;
+        }
+
+        final ServletRegistration.Dynamic def = ctx.addServlet("default", DefaultServlet.class);
+        def.setInitParameter("listings", "false");
+        def.setInitParameter("debug", "0");
+        def.setLoadOnStartup(1);
+        def.addMapping("/");
+
+        try {
+            final String jsp = "org.apache.jasper.servlet.JspServlet";
+            TomcatAutoInitializer.class.getClassLoader().loadClass(jsp);
+            final ServletRegistration.Dynamic jspDef = ctx.addServlet("jsp", jsp);
+            if (jspDef != null) {
+                jspDef.setInitParameter("fork", "false");
+                jspDef.setInitParameter("xpoweredBy", "false");
+                jspDef.setInitParameter("development", "false");
+                jspDef.setLoadOnStartup(3);
+                jspDef.addMapping("*.jsp");
+                jspDef.addMapping("*.jspx");
+            }
+        } catch (final NoClassDefFoundError | ClassNotFoundException e) {
+            // not there, skip
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/watching/ReloadOnChangeController.java b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/watching/ReloadOnChangeController.java
new file mode 100644
index 0000000..e76816a
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/java/org/apache/meecrowave/watching/ReloadOnChangeController.java
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.watching;
+
+import org.apache.catalina.Context;
+import org.apache.meecrowave.logging.tomcat.LogFacade;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardWatchEventKinds;
+import java.nio.file.WatchEvent;
+import java.nio.file.WatchKey;
+import java.nio.file.WatchService;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import static java.util.Arrays.asList;
+
+public class ReloadOnChangeController implements AutoCloseable, Runnable {
+    private final Context context;
+    private final long bouncing;
+    private final Collection<Path> paths = new ArrayList<>();
+    private WatchService watchService;
+    private Thread bouncer;
+    private Thread watcher;
+    private volatile boolean running = true;
+    private volatile long redeployMarker = System.nanoTime();
+
+    public ReloadOnChangeController(final Context context, final int watcherBouncing) {
+        this.context = context;
+        this.bouncing = (long) watcherBouncing;
+    }
+
+    public void register(final File folder) {
+        paths.add(folder.toPath());
+    }
+
+    public void start() {
+        if (paths.isEmpty()) {
+            return;
+        }
+        try {
+            watchService = paths.iterator().next().getFileSystem().newWatchService(); // assuming all share the same FS
+            for (final Path p : paths) {
+                p.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
+                        StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
+            }
+        } catch (final IOException ex) {
+            new LogFacade(ReloadOnChangeController.class.getName())
+                    .warn("Hot reloading will not be available", ex);
+        }
+
+        watcher = new Thread(this);
+        watcher.setName("meecrowave-watcher-controller");
+        watcher.start();
+    }
+
+    protected synchronized void redeploy() {
+        context.reload();
+    }
+
+    @Override
+    public void close() {
+        if (!running) {
+            return;
+        }
+        running = false;
+        final long waitMs = bouncing * 2 + 5000 /*margin if redeploying, we can make it configurable later*/;
+        if (bouncer != null) {
+            try {
+                bouncer.join(waitMs);
+            } catch (final InterruptedException e) {
+                Thread.interrupted();
+            }
+        }
+        if (watcher != null) {
+            try {
+                watcher.join(waitMs);
+            } catch (final InterruptedException e) {
+                Thread.interrupted();
+            }
+        }
+    }
+
+    public boolean shouldRun() {
+        return !paths.isEmpty();
+    }
+
+    @Override
+    public void run() {
+        if (watchService == null) {
+            return;
+        }
+
+        final CountDownLatch latch = new CountDownLatch(1);
+        bouncer = new Thread(() -> { // simple bouncing impl
+            long last = redeployMarker;
+            latch.countDown();
+
+            boolean needsRedeploy = false;
+            long antepenultiem = -1;
+            while (running) {
+                if (redeployMarker > last) {
+                    antepenultiem = last;
+                    last = redeployMarker;
+                    needsRedeploy = true;
+                } else if (needsRedeploy) {
+                    antepenultiem = last;
+                }
+
+                try {
+                    Thread.sleep(bouncing);
+                } catch (final InterruptedException e) {
+                    Thread.interrupted();
+                    break;
+                }
+
+                if (needsRedeploy && last == antepenultiem) {
+                    new LogFacade(ReloadOnChangeController.class.getName()).info("Redeploying " + context.getName());
+                    redeploy();
+                }
+            }
+        });
+        bouncer.setName("meecrowave-watcher-redeployer");
+        bouncer.start();
+        try {
+            latch.await(1, TimeUnit.MINUTES);
+        } catch (final InterruptedException e) {
+            Thread.interrupted();
+            return;
+        }
+
+        paths.forEach(p -> {
+            try {
+                Files.walkFileTree(p, new SimpleFileVisitor<Path>() {
+                    @Override
+                    public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) throws IOException {
+                        dir.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY);
+                        return FileVisitResult.CONTINUE;
+                    }
+                });
+            } catch (final IOException e) {
+                new LogFacade(ReloadOnChangeController.class.getName()).warn(e.getMessage());
+            }
+        });
+
+        try {
+            while (running) {
+                final WatchKey watchKey = watchService.poll(bouncing, TimeUnit.MILLISECONDS);
+                if (watchKey == null) {
+                    Thread.sleep(bouncing);
+                    continue;
+                }
+
+                boolean foundNew = false;
+                for (final WatchEvent<?> event : watchKey.pollEvents()) {
+                    final Path path = Path.class.cast(event.context());
+                    final WatchEvent.Kind<?> kind = event.kind();
+                    if (!isIgnored(kind, path)) {
+                        foundNew = true;
+
+                        final File file = path.toAbsolutePath().toFile();
+                        if (file.isDirectory()) {
+                            if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
+                                try {
+                                    path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
+                                            StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);
+                                } catch (final IOException e) {
+                                    new LogFacade(ReloadOnChangeController.class.getName()).warn(e.getMessage());
+                                }
+                            }
+                        }
+                        break;
+                    }
+                }
+
+                if (foundNew) {
+                    new LogFacade(ReloadOnChangeController.class.getName()).info("Marking to redeploy " + context.getName());
+                    redeployMarker = System.nanoTime();
+                }
+
+                if (!watchKey.reset()) { // deletion
+                    watchKey.cancel();
+                }
+            }
+        } catch (final InterruptedException ie) {
+            Thread.interrupted();
+        }
+    }
+
+    private boolean isIgnored(final WatchEvent.Kind<?> kind, final Path path) {
+        final String pathStr = path.toString();
+        return pathStr.endsWith("___jb_tmp___") || pathStr.endsWith("___jb_old___") || pathStr.endsWith("~") || isResource(pathStr);
+    }
+
+    private boolean isResource(final String pathStr) {
+        final int idx = pathStr.lastIndexOf('.');
+        return idx > 0 && asList(".html", ".xhtml", ".js", ".ts", ".css", ".png", ".svg", ".jpg", ".jpeg").contains(pathStr.substring(idx));
+    }
+}
diff --git a/trunk/meecrowave-core/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-core/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/trunk/meecrowave-core/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-core/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..442fa94
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,5 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/meecrowave-core/src/main/resources/META-INF/beans.xml b/trunk/meecrowave-core/src/main/resources/META-INF/beans.xml
new file mode 100644
index 0000000..2bb54d8
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/META-INF/beans.xml
@@ -0,0 +1,19 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<beans />
diff --git a/trunk/meecrowave-core/src/main/resources/META-INF/openwebbeans/openwebbeans.properties b/trunk/meecrowave-core/src/main/resources/META-INF/openwebbeans/openwebbeans.properties
new file mode 100644
index 0000000..a9e7d83
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/META-INF/openwebbeans/openwebbeans.properties
@@ -0,0 +1,20 @@
+#Licensed to the Apache Software Foundation (ASF) under one
+#or more contributor license agreements.  See the NOTICE file
+#distributed with this work for additional information
+#regarding copyright ownership.  The ASF licenses this file
+#to you under the Apache License, Version 2.0 (the
+#"License"); you may not use this file except in compliance
+#with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing,
+#software distributed under the License is distributed on an
+#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#KIND, either express or implied.  See the License for the
+#specific language governing permissions and limitations
+#under the License.
+configuration.ordinal=1000
+org.apache.xbean.finder.filter.Filter=org.apache.meecrowave.openwebbeans.KnowClassesFilter
+org.apache.webbeans.spi.ScannerService=org.apache.meecrowave.openwebbeans.OWBTomcatWebScannerService
+org.apache.webbeans.spi.SecurityService=org.apache.meecrowave.openwebbeans.MeecrowaveSecurityService
diff --git a/trunk/meecrowave-core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/trunk/meecrowave-core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
new file mode 100644
index 0000000..8da3b6b
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
@@ -0,0 +1,2 @@
+org.apache.meecrowave.openwebbeans.MeecrowaveExtension
+org.apache.meecrowave.cxf.JAXWSCdiExtension
diff --git a/trunk/meecrowave-core/src/main/resources/META-INF/services/org.apache.juli.logging.Log b/trunk/meecrowave-core/src/main/resources/META-INF/services/org.apache.juli.logging.Log
new file mode 100644
index 0000000..c337232
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/META-INF/services/org.apache.juli.logging.Log
@@ -0,0 +1 @@
+org.apache.meecrowave.logging.tomcat.LogFacade
diff --git a/trunk/meecrowave-core/src/main/resources/META-INF/services/org.apache.openwebbeans.se.SeContainerSelector b/trunk/meecrowave-core/src/main/resources/META-INF/services/org.apache.openwebbeans.se.SeContainerSelector
new file mode 100644
index 0000000..90bcba9
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/META-INF/services/org.apache.openwebbeans.se.SeContainerSelector
@@ -0,0 +1 @@
+org.apache.meecrowave.cdi.MeecrowaveSeContainerSelector
\ No newline at end of file
diff --git a/trunk/meecrowave-core/src/main/resources/log4j2.component.properties b/trunk/meecrowave-core/src/main/resources/log4j2.component.properties
new file mode 100644
index 0000000..0dbc0bc
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/log4j2.component.properties
@@ -0,0 +1,17 @@
+#Licensed to the Apache Software Foundation (ASF) under one
+#or more contributor license agreements.  See the NOTICE file
+#distributed with this work for additional information
+#regarding copyright ownership.  The ASF licenses this file
+#to you under the Apache License, Version 2.0 (the
+#"License"); you may not use this file except in compliance
+#with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing,
+#software distributed under the License is distributed on an
+#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#KIND, either express or implied.  See the License for the
+#specific language governing permissions and limitations
+#under the License.
+Log4jLogEventFactory = org.apache.meecrowave.logging.log4j2.MeecrowaveLogEventFactory
diff --git a/trunk/meecrowave-core/src/main/resources/log4j2.meecrowave-logging b/trunk/meecrowave-core/src/main/resources/log4j2.meecrowave-logging
new file mode 100644
index 0000000..587fa35
--- /dev/null
+++ b/trunk/meecrowave-core/src/main/resources/log4j2.meecrowave-logging
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<Configuration status="INFO">
+  <Appenders>
+    <Console name="Console" target="SYSTEM_OUT">
+      <PatternLayout pattern="[%d{HH:mm:ss.SSS}][%highlight{%-5level}][%15.15t][%30.30logger] %msg%n"/>
+    </Console>
+  </Appenders>
+  <Loggers>
+    <Root level="INFO">
+      <AppenderRef ref="Console"/>
+    </Root>
+  </Loggers>
+</Configuration>
+
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/Classes.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/Classes.java
new file mode 100644
index 0000000..da583a8
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/Classes.java
@@ -0,0 +1,306 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.cxf.helpers.FileUtils;
+import org.apache.meecrowave.io.IO;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import static org.junit.Assert.fail;
+
+// some in memory files to avoid to load them from the classpath and have tests working by luck (classpath leak actually)
+// see meecrowave-core/src/test/third-party for sources
+public class Classes {
+    private static final byte[] OTHER_FILTER = new byte[]{
+            -54,
+            -2, -70, -66, 0, 0, 0, 52, 0, 75, 10,
+            0, 12, 0, 46, 11, 0, 47, 0, 48, 7,
+            0, 49, 10, 0, 3, 0, 46, 8, 0, 50,
+            10, 0, 3, 0, 51, 9, 0, 11, 0, 52,
+            10, 0, 53, 0, 54, 10, 0, 3, 0, 55,
+            10, 0, 56, 0, 57, 7, 0, 58, 7, 0,
+            59, 7, 0, 60, 1, 0, 10, 105, 110, 106,
+            101, 99, 116, 97, 98, 108, 101, 1, 0, 29,
+            76, 111, 114, 103, 47, 115, 117, 112, 101, 114,
+            98, 105, 122, 47, 97, 112, 112, 47, 73, 110,
+            106, 101, 99, 116, 97, 98, 108, 101, 59, 1,
+            0, 25, 82, 117, 110, 116, 105, 109, 101, 86,
+            105, 115, 105, 98, 108, 101, 65, 110, 110, 111,
+            116, 97, 116, 105, 111, 110, 115, 1, 0, 21,
+            76, 106, 97, 118, 97, 120, 47, 105, 110, 106,
+            101, 99, 116, 47, 73, 110, 106, 101, 99, 116,
+            59, 1, 0, 6, 60, 105, 110, 105, 116, 62,
+            1, 0, 3, 40, 41, 86, 1, 0, 4, 67,
+            111, 100, 101, 1, 0, 15, 76, 105, 110, 101,
+            78, 117, 109, 98, 101, 114, 84, 97, 98, 108,
+            101, 1, 0, 18, 76, 111, 99, 97, 108, 86,
+            97, 114, 105, 97, 98, 108, 101, 84, 97, 98,
+            108, 101, 1, 0, 4, 116, 104, 105, 115, 1,
+            0, 30, 76, 111, 114, 103, 47, 115, 117, 112,
+            101, 114, 98, 105, 122, 47, 97, 112, 112, 47,
+            79, 116, 104, 101, 114, 70, 105, 108, 116, 101,
+            114, 59, 1, 0, 4, 105, 110, 105, 116, 1,
+            0, 31, 40, 76, 106, 97, 118, 97, 120, 47,
+            115, 101, 114, 118, 108, 101, 116, 47, 70, 105,
+            108, 116, 101, 114, 67, 111, 110, 102, 105, 103,
+            59, 41, 86, 1, 0, 12, 102, 105, 108, 116,
+            101, 114, 67, 111, 110, 102, 105, 103, 1, 0,
+            28, 76, 106, 97, 118, 97, 120, 47, 115, 101,
+            114, 118, 108, 101, 116, 47, 70, 105, 108, 116,
+            101, 114, 67, 111, 110, 102, 105, 103, 59, 1,
+            0, 10, 69, 120, 99, 101, 112, 116, 105, 111,
+            110, 115, 7, 0, 61, 1, 0, 8, 100, 111,
+            70, 105, 108, 116, 101, 114, 1, 0, 91, 40,
+            76, 106, 97, 118, 97, 120, 47, 115, 101, 114,
+            118, 108, 101, 116, 47, 83, 101, 114, 118, 108,
+            101, 116, 82, 101, 113, 117, 101, 115, 116, 59,
+            76, 106, 97, 118, 97, 120, 47, 115, 101, 114,
+            118, 108, 101, 116, 47, 83, 101, 114, 118, 108,
+            101, 116, 82, 101, 115, 112, 111, 110, 115, 101,
+            59, 76, 106, 97, 118, 97, 120, 47, 115, 101,
+            114, 118, 108, 101, 116, 47, 70, 105, 108, 116,
+            101, 114, 67, 104, 97, 105, 110, 59, 41, 86,
+            1, 0, 7, 114, 101, 113, 117, 101, 115, 116,
+            1, 0, 30, 76, 106, 97, 118, 97, 120, 47,
+            115, 101, 114, 118, 108, 101, 116, 47, 83, 101,
+            114, 118, 108, 101, 116, 82, 101, 113, 117, 101,
+            115, 116, 59, 1, 0, 8, 114, 101, 115, 112,
+            111, 110, 115, 101, 1, 0, 31, 76, 106, 97,
+            118, 97, 120, 47, 115, 101, 114, 118, 108, 101,
+            116, 47, 83, 101, 114, 118, 108, 101, 116, 82,
+            101, 115, 112, 111, 110, 115, 101, 59, 1, 0,
+            5, 99, 104, 97, 105, 110, 1, 0, 27, 76,
+            106, 97, 118, 97, 120, 47, 115, 101, 114, 118,
+            108, 101, 116, 47, 70, 105, 108, 116, 101, 114,
+            67, 104, 97, 105, 110, 59, 7, 0, 62, 1,
+            0, 7, 100, 101, 115, 116, 114, 111, 121, 1,
+            0, 10, 83, 111, 117, 114, 99, 101, 70, 105,
+            108, 101, 1, 0, 16, 79, 116, 104, 101, 114,
+            70, 105, 108, 116, 101, 114, 46, 106, 97, 118,
+            97, 1, 0, 36, 76, 106, 97, 118, 97, 120,
+            47, 115, 101, 114, 118, 108, 101, 116, 47, 97,
+            110, 110, 111, 116, 97, 116, 105, 111, 110, 47,
+            87, 101, 98, 70, 105, 108, 116, 101, 114, 59,
+            1, 0, 5, 118, 97, 108, 117, 101, 1, 0,
+            6, 47, 111, 116, 104, 101, 114, 12, 0, 18,
+            0, 19, 7, 0, 63, 12, 0, 64, 0, 65,
+            1, 0, 23, 106, 97, 118, 97, 47, 108, 97,
+            110, 103, 47, 83, 116, 114, 105, 110, 103, 66,
+            117, 105, 108, 100, 101, 114, 1, 0, 6, 102,
+            105, 108, 116, 101, 114, 12, 0, 66, 0, 67,
+            12, 0, 14, 0, 15, 7, 0, 68, 12, 0,
+            69, 0, 70, 12, 0, 71, 0, 70, 7, 0,
+            72, 12, 0, 73, 0, 74, 1, 0, 28, 111,
+            114, 103, 47, 115, 117, 112, 101, 114, 98, 105,
+            122, 47, 97, 112, 112, 47, 79, 116, 104, 101,
+            114, 70, 105, 108, 116, 101, 114, 1, 0, 16,
+            106, 97, 118, 97, 47, 108, 97, 110, 103, 47,
+            79, 98, 106, 101, 99, 116, 1, 0, 20, 106,
+            97, 118, 97, 120, 47, 115, 101, 114, 118, 108,
+            101, 116, 47, 70, 105, 108, 116, 101, 114, 1,
+            0, 30, 106, 97, 118, 97, 120, 47, 115, 101,
+            114, 118, 108, 101, 116, 47, 83, 101, 114, 118,
+            108, 101, 116, 69, 120, 99, 101, 112, 116, 105,
+            111, 110, 1, 0, 19, 106, 97, 118, 97, 47,
+            105, 111, 47, 73, 79, 69, 120, 99, 101, 112,
+            116, 105, 111, 110, 1, 0, 29, 106, 97, 118,
+            97, 120, 47, 115, 101, 114, 118, 108, 101, 116,
+            47, 83, 101, 114, 118, 108, 101, 116, 82, 101,
+            115, 112, 111, 110, 115, 101, 1, 0, 9, 103,
+            101, 116, 87, 114, 105, 116, 101, 114, 1, 0,
+            23, 40, 41, 76, 106, 97, 118, 97, 47, 105,
+            111, 47, 80, 114, 105, 110, 116, 87, 114, 105,
+            116, 101, 114, 59, 1, 0, 6, 97, 112, 112,
+            101, 110, 100, 1, 0, 45, 40, 76, 106, 97,
+            118, 97, 47, 108, 97, 110, 103, 47, 83, 116,
+            114, 105, 110, 103, 59, 41, 76, 106, 97, 118,
+            97, 47, 108, 97, 110, 103, 47, 83, 116, 114,
+            105, 110, 103, 66, 117, 105, 108, 100, 101, 114,
+            59, 1, 0, 27, 111, 114, 103, 47, 115, 117,
+            112, 101, 114, 98, 105, 122, 47, 97, 112, 112,
+            47, 73, 110, 106, 101, 99, 116, 97, 98, 108,
+            101, 1, 0, 8, 105, 110, 106, 101, 99, 116,
+            101, 100, 1, 0, 20, 40, 41, 76, 106, 97,
+            118, 97, 47, 108, 97, 110, 103, 47, 83, 116,
+            114, 105, 110, 103, 59, 1, 0, 8, 116, 111,
+            83, 116, 114, 105, 110, 103, 1, 0, 19, 106,
+            97, 118, 97, 47, 105, 111, 47, 80, 114, 105,
+            110, 116, 87, 114, 105, 116, 101, 114, 1, 0,
+            5, 119, 114, 105, 116, 101, 1, 0, 21, 40,
+            76, 106, 97, 118, 97, 47, 108, 97, 110, 103,
+            47, 83, 116, 114, 105, 110, 103, 59, 41, 86,
+            0, 33, 0, 11, 0, 12, 0, 1, 0, 13,
+            0, 1, 0, 2, 0, 14, 0, 15, 0, 1,
+            0, 16, 0, 0, 0, 6, 0, 1, 0, 17,
+            0, 0, 0, 4, 0, 1, 0, 18, 0, 19,
+            0, 1, 0, 20, 0, 0, 0, 47, 0, 1,
+            0, 1, 0, 0, 0, 5, 42, -73, 0, 1,
+            -79, 0, 0, 0, 2, 0, 21, 0, 0, 0,
+            6, 0, 1, 0, 0, 0, 32, 0, 22, 0,
+            0, 0, 12, 0, 1, 0, 0, 0, 5, 0,
+            23, 0, 24, 0, 0, 0, 1, 0, 25, 0,
+            26, 0, 2, 0, 20, 0, 0, 0, 53, 0,
+            0, 0, 2, 0, 0, 0, 1, -79, 0, 0,
+            0, 2, 0, 21, 0, 0, 0, 6, 0, 1,
+            0, 0, 0, 39, 0, 22, 0, 0, 0, 22,
+            0, 2, 0, 0, 0, 1, 0, 23, 0, 24,
+            0, 0, 0, 0, 0, 1, 0, 27, 0, 28,
+            0, 1, 0, 29, 0, 0, 0, 4, 0, 1,
+            0, 30, 0, 1, 0, 31, 0, 32, 0, 2,
+            0, 20, 0, 0, 0, 111, 0, 3, 0, 4,
+            0, 0, 0, 35, 44, -71, 0, 2, 1, 0,
+            -69, 0, 3, 89, -73, 0, 4, 18, 5, -74,
+            0, 6, 42, -76, 0, 7, -74, 0, 8, -74,
+            0, 6, -74, 0, 9, -74, 0, 10, -79, 0,
+            0, 0, 2, 0, 21, 0, 0, 0, 10, 0,
+            2, 0, 0, 0, 43, 0, 34, 0, 44, 0,
+            22, 0, 0, 0, 42, 0, 4, 0, 0, 0,
+            35, 0, 23, 0, 24, 0, 0, 0, 0, 0,
+            35, 0, 33, 0, 34, 0, 1, 0, 0, 0,
+            35, 0, 35, 0, 36, 0, 2, 0, 0, 0,
+            35, 0, 37, 0, 38, 0, 3, 0, 29, 0,
+            0, 0, 6, 0, 2, 0, 39, 0, 30, 0,
+            1, 0, 40, 0, 19, 0, 1, 0, 20, 0,
+            0, 0, 43, 0, 0, 0, 1, 0, 0, 0,
+            1, -79, 0, 0, 0, 2, 0, 21, 0, 0,
+            0, 6, 0, 1, 0, 0, 0, 49, 0, 22,
+            0, 0, 0, 12, 0, 1, 0, 0, 0, 1,
+            0, 23, 0, 24, 0, 0, 0, 2, 0, 41,
+            0, 0, 0, 2, 0, 42, 0, 16, 0, 0,
+            0, 14, 0, 1, 0, 43, 0, 1, 0, 44,
+            91, 0, 1, 115, 0, 45
+    };
+    private static final byte[] OTHER_ENDPOINT = new byte[]{
+            -54,
+            -2, -70, -66, 0, 0, 0, 52, 0, 48, 10,
+            0, 8, 0, 33, 9, 0, 7, 0, 34, 10,
+            0, 35, 0, 36, 10, 0, 37, 0, 38, 8,
+            0, 20, 8, 0, 39, 7, 0, 40, 7, 0,
+            41, 1, 0, 10, 105, 110, 106, 101, 99, 116,
+            97, 98, 108, 101, 1, 0, 29, 76, 111, 114,
+            103, 47, 115, 117, 112, 101, 114, 98, 105, 122,
+            47, 97, 112, 112, 47, 73, 110, 106, 101, 99,
+            116, 97, 98, 108, 101, 59, 1, 0, 25, 82,
+            117, 110, 116, 105, 109, 101, 86, 105, 115, 105,
+            98, 108, 101, 65, 110, 110, 111, 116, 97, 116,
+            105, 111, 110, 115, 1, 0, 21, 76, 106, 97,
+            118, 97, 120, 47, 105, 110, 106, 101, 99, 116,
+            47, 73, 110, 106, 101, 99, 116, 59, 1, 0,
+            6, 60, 105, 110, 105, 116, 62, 1, 0, 3,
+            40, 41, 86, 1, 0, 4, 67, 111, 100, 101,
+            1, 0, 15, 76, 105, 110, 101, 78, 117, 109,
+            98, 101, 114, 84, 97, 98, 108, 101, 1, 0,
+            18, 76, 111, 99, 97, 108, 86, 97, 114, 105,
+            97, 98, 108, 101, 84, 97, 98, 108, 101, 1,
+            0, 4, 116, 104, 105, 115, 1, 0, 32, 76,
+            111, 114, 103, 47, 115, 117, 112, 101, 114, 98,
+            105, 122, 47, 97, 112, 112, 47, 79, 116, 104,
+            101, 114, 69, 110, 100, 112, 111, 105, 110, 116,
+            59, 1, 0, 6, 115, 105, 109, 112, 108, 101,
+            1, 0, 20, 40, 41, 76, 106, 97, 118, 97,
+            47, 108, 97, 110, 103, 47, 83, 116, 114, 105,
+            110, 103, 59, 1, 0, 13, 83, 116, 97, 99,
+            107, 77, 97, 112, 84, 97, 98, 108, 101, 7,
+            0, 42, 1, 0, 17, 76, 106, 97, 118, 97,
+            120, 47, 119, 115, 47, 114, 115, 47, 71, 69,
+            84, 59, 1, 0, 22, 76, 106, 97, 118, 97,
+            120, 47, 119, 115, 47, 114, 115, 47, 80, 114,
+            111, 100, 117, 99, 101, 115, 59, 1, 0, 5,
+            118, 97, 108, 117, 101, 1, 0, 10, 116, 101,
+            120, 116, 47, 112, 108, 97, 105, 110, 1, 0,
+            10, 83, 111, 117, 114, 99, 101, 70, 105, 108,
+            101, 1, 0, 18, 79, 116, 104, 101, 114, 69,
+            110, 100, 112, 111, 105, 110, 116, 46, 106, 97,
+            118, 97, 1, 0, 18, 76, 106, 97, 118, 97,
+            120, 47, 119, 115, 47, 114, 115, 47, 80, 97,
+            116, 104, 59, 1, 0, 5, 111, 116, 104, 101,
+            114, 1, 0, 44, 76, 106, 97, 118, 97, 120,
+            47, 101, 110, 116, 101, 114, 112, 114, 105, 115,
+            101, 47, 99, 111, 110, 116, 101, 120, 116, 47,
+            65, 112, 112, 108, 105, 99, 97, 116, 105, 111,
+            110, 83, 99, 111, 112, 101, 100, 59, 12, 0,
+            13, 0, 14, 12, 0, 9, 0, 10, 7, 0,
+            43, 12, 0, 44, 0, 21, 7, 0, 45, 12,
+            0, 46, 0, 47, 1, 0, 4, 102, 97, 105,
+            108, 1, 0, 30, 111, 114, 103, 47, 115, 117,
+            112, 101, 114, 98, 105, 122, 47, 97, 112, 112,
+            47, 79, 116, 104, 101, 114, 69, 110, 100, 112,
+            111, 105, 110, 116, 1, 0, 16, 106, 97, 118,
+            97, 47, 108, 97, 110, 103, 47, 79, 98, 106,
+            101, 99, 116, 1, 0, 16, 106, 97, 118, 97,
+            47, 108, 97, 110, 103, 47, 83, 116, 114, 105,
+            110, 103, 1, 0, 27, 111, 114, 103, 47, 115,
+            117, 112, 101, 114, 98, 105, 122, 47, 97, 112,
+            112, 47, 73, 110, 106, 101, 99, 116, 97, 98,
+            108, 101, 1, 0, 8, 105, 110, 106, 101, 99,
+            116, 101, 100, 1, 0, 17, 106, 97, 118, 97,
+            47, 108, 97, 110, 103, 47, 66, 111, 111, 108,
+            101, 97, 110, 1, 0, 12, 112, 97, 114, 115,
+            101, 66, 111, 111, 108, 101, 97, 110, 1, 0,
+            21, 40, 76, 106, 97, 118, 97, 47, 108, 97,
+            110, 103, 47, 83, 116, 114, 105, 110, 103, 59,
+            41, 90, 0, 33, 0, 7, 0, 8, 0, 0,
+            0, 1, 0, 2, 0, 9, 0, 10, 0, 1,
+            0, 11, 0, 0, 0, 6, 0, 1, 0, 12,
+            0, 0, 0, 2, 0, 1, 0, 13, 0, 14,
+            0, 1, 0, 15, 0, 0, 0, 47, 0, 1,
+            0, 1, 0, 0, 0, 5, 42, -73, 0, 1,
+            -79, 0, 0, 0, 2, 0, 16, 0, 0, 0,
+            6, 0, 1, 0, 0, 0, 30, 0, 17, 0,
+            0, 0, 12, 0, 1, 0, 0, 0, 5, 0,
+            18, 0, 19, 0, 0, 0, 1, 0, 20, 0,
+            21, 0, 2, 0, 15, 0, 0, 0, 76, 0,
+            1, 0, 1, 0, 0, 0, 21, 42, -76, 0,
+            2, -74, 0, 3, -72, 0, 4, -103, 0, 8,
+            18, 5, -89, 0, 5, 18, 6, -80, 0, 0,
+            0, 3, 0, 16, 0, 0, 0, 6, 0, 1,
+            0, 0, 0, 37, 0, 17, 0, 0, 0, 12,
+            0, 1, 0, 0, 0, 21, 0, 18, 0, 19,
+            0, 0, 0, 22, 0, 0, 0, 7, 0, 2,
+            18, 65, 7, 0, 23, 0, 11, 0, 0, 0,
+            18, 0, 2, 0, 24, 0, 0, 0, 25, 0,
+            1, 0, 26, 91, 0, 1, 115, 0, 27, 0,
+            2, 0, 28, 0, 0, 0, 2, 0, 29, 0,
+            11, 0, 0, 0, 15, 0, 2, 0, 30, 0,
+            1, 0, 26, 115, 0, 31, 0, 32, 0, 0
+    };
+
+    public static void dump(final File file) {
+        doDump(file, "OtherEndpoint", OTHER_ENDPOINT);
+        doDump(file, "OtherFilter", OTHER_FILTER);
+    }
+
+    private static void doDump(final File base, final String name, final byte[] content) {
+        final String target = "org/superbiz/app/" + name + ".class";
+        final File targetFile = new File(base, target);
+        FileUtils.mkDir(targetFile.getParentFile());
+        try (final InputStream from = new ByteArrayInputStream(content);
+             final OutputStream to = new FileOutputStream(targetFile)) {
+            IO.copy(from, to);
+        } catch (final IOException e) {
+            fail();
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ConfigInjection.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ConfigInjection.java
new file mode 100644
index 0000000..6fc5153
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ConfigInjection.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.inject.OWBInjector;
+import org.junit.Test;
+
+import javax.inject.Inject;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class ConfigInjection {
+    @Inject
+    private Meecrowave.Builder builder;
+
+    @Test
+    public void inject() {
+        try (final Meecrowave meecrowave = new Meecrowave(
+                new Meecrowave.Builder()
+                        .randomHttpPort()
+                        .includePackages(ConfigInjection.class.getName())).bake()) {
+            OWBInjector.inject(WebBeansContext.currentInstance().getBeanManagerImpl(), this, null);
+            assertNotNull(builder);
+            assertEquals(ConfigInjection.class.getName(), builder.getScanningPackageIncludes());
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ContextInProxiedInstancesTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ContextInProxiedInstancesTest.java
new file mode 100644
index 0000000..7873f4e
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ContextInProxiedInstancesTest.java
@@ -0,0 +1,127 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.tomcat.util.http.fileupload.util.Streams;
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.context.Initialized;
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.CDI;
+import javax.servlet.ServletContext;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriInfo;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Serializable;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+
+public class ContextInProxiedInstancesTest {
+    @Test
+    public void fields() throws IOException {
+        try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder()
+                .randomHttpPort()
+                .includePackages(ContextInProxiedInstancesTest.class.getName())).bake()) {
+            // proxies can use @Context
+            try (final InputStream stream = new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/app").openStream()) {
+                assertEquals("app", Streams.asString(stream, "UTF-8"));
+            }
+            try (final InputStream stream = new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/req").openStream()) {
+                assertEquals("req", Streams.asString(stream, "UTF-8"));
+            }
+            // not proxied can also
+            try (final InputStream stream = new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/dep").openStream()) {
+                assertEquals("dep", Streams.asString(stream, "UTF-8"));
+            }
+            assertEquals(Dep.class, CDI.current().select(Dep.class).get().getClass()); // ensure it is not proxied but injection works (thanks CXF)
+        }
+    }
+
+    @Path("app")
+    @ApplicationScoped
+    public static class App {
+        @Context
+        private UriInfo uri;
+
+        public void init(@Observes @Initialized(ApplicationScoped.class) final ServletContext sc) {
+            // init without a Message
+        }
+
+        @GET
+        public String get() {
+            return uri.getPath();
+        }
+    }
+
+    @Path("req")
+    @RequestScoped
+    public static class Req {
+        @Context
+        private UriInfo uri;
+
+        @GET
+        public String get() {
+            return uri.getPath();
+        }
+    }
+
+    @Path("dep")
+    @Dependent
+    public static class Dep {
+        @Context
+        private UriInfo uri;
+
+        @GET
+        public String get() {
+            return uri.getPath();
+        }
+
+        @Produces
+        @RequestScoped
+        public MyRestApi createMyApi() {
+            return new MyRestApi() {
+                @Override
+                public String get() {
+                    return null;
+                }
+
+                @Override
+                public void close() throws Exception {
+
+                }
+            };
+        }
+    }
+
+    @Path("myapi")
+    public  interface MyRestApi extends Serializable, AutoCloseable {
+        @GET
+        String get();
+    }
+
+
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/InstanceCustomizerTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/InstanceCustomizerTest.java
new file mode 100644
index 0000000..4d5f218
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/InstanceCustomizerTest.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.catalina.connector.Request;
+import org.apache.catalina.connector.Response;
+import org.apache.catalina.valves.ValveBase;
+import org.apache.tomcat.util.http.fileupload.util.Streams;
+import org.junit.Test;
+
+import javax.servlet.ServletException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+
+public class InstanceCustomizerTest {
+    @Test
+    public void instanceCustomizer() throws IOException {
+        try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder()
+                .randomHttpPort()
+                .instanceCustomizer(t -> t.getHost().getPipeline().addValve(new ValveBase() {
+                    @Override
+                    public void invoke(final Request request, final Response response) throws IOException, ServletException {
+                        response.getWriter().write("custom");
+                    }
+                }))
+                .includePackages(InstanceCustomizerTest.class.getName())).bake()) {
+            try (final InputStream stream = new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/whatever").openStream()) {
+                assertEquals("custom", Streams.asString(stream, "UTF-8"));
+            }
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/MeecrowaveTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/MeecrowaveTest.java
new file mode 100644
index 0000000..9a4df35
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/MeecrowaveTest.java
@@ -0,0 +1,161 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.cxf.helpers.FileUtils;
+import org.apache.meecrowave.io.IO;
+import org.apache.meecrowave.runner.cli.CliOption;
+import org.junit.Test;
+import org.superbiz.app.Bounced;
+import org.superbiz.app.Endpoint;
+import org.superbiz.app.RsApp;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.net.URL;
+import java.util.Properties;
+import java.util.stream.Stream;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class MeecrowaveTest {
+    @Test
+    public void configBinding() {
+        final MyConfig config = new Meecrowave.Builder()
+                .property("my-prefix-port", "1234")
+                .property("my-prefix-another-port", "5678")
+                .property("my-prefix-a-last-port-value", "9632")
+                .property("my-prefix-passthrough", "any value")
+                .property("my-prefix-bool", "true")
+                .bind(new MyConfig());
+        assertNotNull(config);
+        assertEquals(1234, config.port);
+        assertEquals(5678, config.anotherPort);
+        assertEquals(9632, config.aLastPortValue);
+        assertEquals("any value", config.passthrough);
+        assertTrue(config.bool);
+    }
+
+    @Test
+    public void valueTransformationMainConfig() {
+        assertEquals(1234, new Meecrowave.Builder() {{
+            loadFromProperties(new Properties() {{
+                setProperty("http", "decode:Static3DES:+yYyC7Lb5+k=");
+            }});
+        }}.getHttpPort());
+    }
+
+    @Test
+    public void valueTransformationExtension() {
+        assertEquals(1234, new Meecrowave.Builder()
+                .property("my-prefix-port", "decode:Static3DES:+yYyC7Lb5+k=")
+                .bind(new MyConfig()).port);
+    }
+
+    @Test
+    public void simpleWebapp() {
+        final File root = new File("target/MeecrowaveTest/simpleWebapp/app");
+        FileUtils.mkDir(root);
+        Stream.of(Endpoint.class, RsApp.class).forEach(type -> {
+            final String target = type.getName().replace(".", "/");
+            File targetFile = new File(root, "WEB-INF/classes/" + target + ".class");
+            FileUtils.mkDir(targetFile.getParentFile());
+            try (final InputStream from = Thread.currentThread().getContextClassLoader().getResourceAsStream(target + ".class");
+                 final OutputStream to = new FileOutputStream(targetFile)) {
+                IO.copy(from, to);
+            } catch (final IOException e) {
+                fail();
+            }
+        });
+        Classes.dump(new File(root, "WEB-INF/classes/"));
+        try (final Writer indexHtml = new FileWriter(new File(root, "index.html"))) {
+            indexHtml.write("hello");
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+        try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder().randomHttpPort().includePackages("org.superbiz.app")).start()) {
+            meecrowave.deployWebapp("", root);
+            assertEquals("hello", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/index.html")));
+            assertEquals("simple", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/api/test")));
+            assertEquals("simplepathinfo", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort()
+                    + "/api/test?checkcustom=pathinfo#is=fine")));
+            assertEquals("simple", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/api/other")));
+            assertEquals("simplefiltertrue", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/filter")));
+            assertEquals("filtertrue", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/other")));
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+    }
+
+    @Test
+    public void classpath() {
+        try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder().randomHttpPort().includePackages("org.superbiz.app")).bake()) {
+            assertEquals("simple", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/api/test")));
+            assertEquals("simplefiltertrue", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/filter")));
+            assertEquals(
+                    "sci:" + Bounced.class.getName() + Endpoint.class.getName() + RsApp.class.getName(),
+                    slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/sci")));
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+    }
+
+    @Test
+    public void json() {
+        try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder().randomHttpPort().includePackages("org.superbiz.app")).bake()) {
+            assertEquals("{\"name\":\"test\"}", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/api/test/json")));
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+    }
+
+    private String slurp(final URL url) {
+        try (final InputStream is = url.openStream()) {
+            return IO.toString(is);
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+        return null;
+    }
+
+    public static class MyConfig {
+        @CliOption(name = "my-prefix-port", description = "")
+        private int port;
+
+        @CliOption(name = "my-prefix-another-port", description = "")
+        private int anotherPort;
+
+        @CliOption(name = "my-prefix-a-last-port-value", description = "")
+        private int aLastPortValue;
+
+        @CliOption(name = "my-prefix-passthrough", description = "")
+        private String passthrough;
+
+        @CliOption(name = "my-prefix-bool", description = "")
+        private boolean bool;
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/MultipartTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/MultipartTest.java
new file mode 100644
index 0000000..5229c7a
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/MultipartTest.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.johnzon.mapper.reflection.JohnzonParameterizedType;
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.json.bind.annotation.JsonbProperty;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.core.GenericType;
+import javax.ws.rs.core.MediaType;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import static org.junit.Assert.assertEquals;
+
+// just a sample using multiparts
+public class MultipartTest {
+    @Test
+    public void configBinding() {
+        try (final Meecrowave meecrowave = new Meecrowave(
+                new Meecrowave.Builder()
+                        .randomHttpPort()
+                        .includePackages(MultipartTest.MultiEndpoint.class.getName())).bake()) {
+            final Client client = ClientBuilder.newClient();
+            try {
+                // for mixed types use org.apache.cxf.jaxrs.ext.multipart.MultipartBody
+                final Map<String, JsonbModel> response = client.target("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/MultipartTest")
+                        .request()
+                        .get(new GenericType<Map<String, JsonbModel>>(new JohnzonParameterizedType(Map.class, String.class, JsonbModel.class)) {{}});
+                assertEquals(1, response.size());
+                assertEquals("ok", response.get(MediaType.APPLICATION_JSON).value);
+            } finally {
+                client.close();
+            }
+        }
+    }
+
+    @ApplicationScoped
+    @Path("MultipartTest")
+    public static class MultiEndpoint {
+        @Produces("multipart/mixed")
+        @GET
+        public Map<String, Object> getBooks() {
+            final JsonbModel jsonbModel = new JsonbModel();
+            jsonbModel.value = "ok";
+
+            final Map<String, Object> map = new LinkedHashMap<>();
+            map.put("application/json", jsonbModel);
+
+            return map;
+        }
+    }
+
+    public static class JsonbModel {
+        @JsonbProperty("test")
+        public String value;
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/NoConnectorTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/NoConnectorTest.java
new file mode 100644
index 0000000..c6af7ae
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/NoConnectorTest.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import java.io.IOException;
+import java.net.Socket;
+import java.util.stream.IntStream;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+public class NoConnectorTest {
+    @Test
+    public void run() {
+        final Meecrowave.Builder config = new Meecrowave.Builder();
+        config.setSkipHttp(true);
+        try (final Meecrowave meecrowave = new Meecrowave(config.includePackages(NoConnectorTest.class.getName())).bake()) {
+            final BeanManager beanManager = CDI.current().getBeanManager();
+            assertEquals("yeah", SomeBean.class.cast(
+                    beanManager.getReference(
+                            beanManager.resolve(beanManager.getBeans(SomeBean.class)),
+                            SomeBean.class,
+                            beanManager.createCreationalContext(null)))
+                    .get());
+            IntStream.of(config.getHttpPort(), config.getHttpsPort()).forEach(port -> {
+                try (final Socket socket = new Socket("localhost", port)) {
+                    fail("port " + port + " is opened");
+                } catch (final IOException e) {
+                    // ok
+                }
+            });
+            assertEquals(0, meecrowave.getTomcat().getService().findConnectors().length);
+        }
+    }
+
+    @ApplicationScoped
+    public static class SomeBean {
+        String get() {
+            return "yeah";
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/OctetStreamMediaTypeTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/OctetStreamMediaTypeTest.java
new file mode 100644
index 0000000..170ae9f
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/OctetStreamMediaTypeTest.java
@@ -0,0 +1,105 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.tomcat.util.http.fileupload.util.Streams;
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.StreamingOutput;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.Assert.assertEquals;
+
+public class OctetStreamMediaTypeTest {
+    @Test
+    public void fields() throws IOException {
+        try (final Meecrowave meecrowave = new Meecrowave(new Meecrowave.Builder()
+            .randomHttpPort()
+            .includePackages(OctetStreamMediaTypeTest.class.getName())).bake()) {
+            try (final InputStream stream = new URL(
+                "http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/OctetStreamMediaTypeTest/response").openStream()) {
+                assertEquals("resp", Streams.asString(stream, "UTF-8"));
+            }
+            try (final InputStream stream = new URL(
+                "http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/OctetStreamMediaTypeTest/responseBytes").openStream()) {
+                assertEquals("resp", Streams.asString(stream, "UTF-8"));
+            }
+            try (final InputStream stream = new URL(
+                "http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/OctetStreamMediaTypeTest/streaming").openStream()) {
+                assertEquals("stream", Streams.asString(stream, "UTF-8"));
+            }
+            try (final InputStream stream = new URL(
+                "http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/OctetStreamMediaTypeTest/string").openStream()) {
+                assertEquals("string", Streams.asString(stream, "UTF-8"));
+            }
+            try (final InputStream stream = new URL(
+                    "http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/OctetStreamMediaTypeTest/bytes").openStream()) {
+                assertEquals("bytes", Streams.asString(stream, "UTF-8"));
+            }
+        }
+    }
+
+    @Path("OctetStreamMediaTypeTest")
+    @ApplicationScoped
+    public static class App {
+        @GET
+        @Path("response")
+        @Produces(MediaType.APPLICATION_OCTET_STREAM)
+        public Response getResponse() {
+            return Response.ok("resp").build();
+        }
+
+        @GET
+        @Path("responseBytes")
+        @Produces(MediaType.APPLICATION_OCTET_STREAM)
+        public Response getResponseBytes() {
+            return Response.ok("resp".getBytes()).build();
+        }
+
+        @GET
+        @Path("streaming")
+        @Produces(MediaType.APPLICATION_OCTET_STREAM)
+        public StreamingOutput getStreamingOutput() {
+            return output -> output.write("stream".getBytes(StandardCharsets.UTF_8));
+        }
+
+        @GET
+        @Path("string")
+        @Produces(MediaType.APPLICATION_OCTET_STREAM)
+        public String getString() {
+            return "string";
+        }
+
+        @GET
+        @Path("bytes")
+        @Produces(MediaType.APPLICATION_OCTET_STREAM)
+        public byte[] getBytes() {
+            return "bytes".getBytes(StandardCharsets.UTF_8);
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/PrincipalTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/PrincipalTest.java
new file mode 100644
index 0000000..13e1367
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/PrincipalTest.java
@@ -0,0 +1,83 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.catalina.realm.RealmBase;
+import org.apache.meecrowave.io.IO;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.StandardCharsets;
+import java.security.Principal;
+
+import static javax.xml.bind.DatatypeConverter.printBase64Binary;
+import static org.junit.Assert.assertEquals;
+
+public class PrincipalTest {
+    @Test
+    public void run() throws IOException {
+        try (final Meecrowave container = new Meecrowave(new Meecrowave.Builder()
+                .randomHttpPort()
+                .includePackages("org.superbiz.app")
+                .realm(new RealmBase() {
+                    @Override
+                    protected String getPassword(final String username) {
+                        return "foo".equals(username) ? "pwd" : null;
+                    }
+
+                    @Override
+                    protected Principal getPrincipal(final String username) {
+                        return new MyPrincipal(username);
+                    }
+                }).loginConfig(new Meecrowave.LoginConfigBuilder()
+                        .basic()
+                        .realmName("basic realm"))
+                .securityConstraints(new Meecrowave.SecurityConstaintBuilder()
+                        .authConstraint(true)
+                        .addAuthRole("**")
+                        .addCollection("secured", "/*")))
+                .bake()) {
+            assertEquals(
+                    "org.apache.meecrowave.PrincipalTest$MyPrincipal_foo  org.apache.webbeans.custom.security.Principal_foo",
+                    slurp(new URL("http://localhost:" + container.getConfiguration().getHttpPort() + "/api/test/principal")));
+        }
+    }
+
+    private String slurp(final URL url) throws IOException {
+        final URLConnection is = HttpURLConnection.class.cast(url.openConnection());
+        is.setRequestProperty("Authorization", "Basic " + printBase64Binary("foo:pwd".getBytes(StandardCharsets.UTF_8)));
+        return IO.toString(is.getInputStream());
+    }
+
+    private static class MyPrincipal implements Principal {
+        private final String name;
+
+        private MyPrincipal(final String username) {
+            this.name = username;
+        }
+
+        @Override
+        public String getName() {
+            return name;
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerInitialierInjectionTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerInitialierInjectionTest.java
new file mode 100644
index 0000000..5520c5d
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerInitialierInjectionTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import java.util.Set;
+
+import static org.junit.Assert.assertTrue;
+
+// just a sample using multiparts
+public class ServletContainerInitialierInjectionTest {
+    @Inject
+    private ServletContext context;
+
+    @Test
+    public void configBinding() {
+        try (final Meecrowave meecrowave = new Meecrowave(
+                new Meecrowave.Builder()
+                        .randomHttpPort()
+                        .includePackages(ServletContainerInitialierInjectionTest.class.getName())).bake()) {
+            meecrowave.inject(this);
+            assertTrue(Boolean.class.cast(context.getAttribute("ServletContainerInitialierInjectionTest")));
+        }
+    }
+
+    public static class Init implements ServletContainerInitializer {
+        @Inject
+        private AService bean;
+
+        @Override
+        public void onStartup(final Set<Class<?>> set, final ServletContext servletContext) throws ServletException {
+            servletContext.setAttribute("ServletContainerInitialierInjectionTest", bean != null && bean.isOk());
+        }
+    }
+
+    @ApplicationScoped
+    public static class AService {
+        public boolean isOk() {
+            return true;
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerProgrammaticRegistrationTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerProgrammaticRegistrationTest.java
new file mode 100644
index 0000000..adec41a
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/ServletContainerProgrammaticRegistrationTest.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import java.util.Set;
+
+import static java.util.Collections.emptySet;
+import static org.junit.Assert.assertEquals;
+
+// just a sample using multiparts
+public class ServletContainerProgrammaticRegistrationTest {
+    @Inject
+    private ServletContext context;
+
+    @Test
+    public void configBinding() {
+        try (final Meecrowave meecrowave = new Meecrowave(
+                new Meecrowave.Builder()
+                        .randomHttpPort()
+                        .includePackages(ServletContainerProgrammaticRegistrationTest.class.getName()))
+                .bake(c -> c.addServletContainerInitializer(new ProgrammaticInit(), emptySet()))) {
+            meecrowave.inject(this);
+            assertEquals("> yeah", String.valueOf(context.getAttribute("ServletContainerProgrammaticRegistrationTest")));
+        }
+    }
+
+    @Dependent
+    public static class ProgrammaticInit implements ServletContainerInitializer {
+        @Inject
+        private AService bean;
+
+        @Override
+        public void onStartup(final Set<Class<?>> set, final ServletContext servletContext) throws ServletException {
+            servletContext.setAttribute(
+                    "ServletContainerProgrammaticRegistrationTest", ">" + (bean != null ? bean.isOk() : "no"));
+        }
+    }
+
+    @ApplicationScoped
+    public static class AService {
+        public String isOk() {
+            return " yeah";
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/SharedLibTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/SharedLibTest.java
new file mode 100644
index 0000000..59bce14
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/SharedLibTest.java
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.apache.meecrowave.io.IO;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+
+public class SharedLibTest {
+    @Test
+    public void run() throws IOException {
+        try (final Meecrowave container = new Meecrowave(new Meecrowave.Builder()
+                .randomHttpPort()
+                .includePackages("org.superbiz.app,org.apache.deltaspike")
+                .sharedLibraries("target/shared-test"))
+                .bake()) {
+            assertEquals(
+                    "org.apache.deltaspike.core.api.config.ConfigProperty",
+                    slurp(new URL("http://localhost:" + container.getConfiguration().getHttpPort() + "/api/test/load/org.apache.deltaspike.core.api.config.ConfigProperty")));
+        }
+    }
+
+    private String slurp(final URL url) throws IOException {
+        return IO.toString(HttpURLConnection.class.cast(url.openConnection()).getInputStream());
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/WatcherTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/WatcherTest.java
new file mode 100644
index 0000000..27e5e1a
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/WatcherTest.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave;
+
+import org.junit.Test;
+import org.superbiz.app.Bounced;
+
+import javax.ws.rs.ProcessingException;
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import java.io.File;
+import java.io.IOException;
+
+import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
+import static org.junit.Assert.fail;
+
+// you can need to mvn test-compile before running this test if it was executed once already
+public class WatcherTest {
+    @Test
+    public void watch() throws IOException {
+        final String bouncedFile = "target/test-classes/" + Bounced.class.getName().replace(".", "/") + ".class";
+        final Meecrowave.Builder builder = new Meecrowave.Builder() {{
+            setWatcherBouncing(250);
+        }}.randomHttpPort().includePackages(Bounced.class.getPackage().getName());
+        try (final Meecrowave meecrowave = new Meecrowave(builder).bake()) {
+            final String endpoint = String.format("http://localhost:%d/api/bounced", builder.getHttpPort());
+
+            final Client client = ClientBuilder.newClient();
+            try {
+                final String original = client.target(endpoint)
+                        .request(TEXT_PLAIN_TYPE)
+                        .get(String.class);
+
+                try {
+                    Thread.sleep(1000);
+                } catch (final InterruptedException e) {
+                    fail(e.getMessage());
+                }
+
+                // now replace it by "replaced", not we don't reload classes yet so we just check we redeployed, should we integ with fakereplace?
+                new File(bouncedFile).setLastModified(System.currentTimeMillis());
+
+                long max = 15000 /* deployment max */ + 250 /* bouncing */ * 4 /* wait in watcher + 3 loops in bouncer */;
+                while (max > 0) {
+                    try {
+                        Thread.sleep(1000);
+                    } catch (final InterruptedException e) {
+                        fail(e.getMessage());
+                    }
+                    max -= 1000;
+
+                    try {
+                        final String reloaded = client.target(endpoint)
+                                .request(TEXT_PLAIN_TYPE)
+                                .get(String.class);
+                        if (!original.equals(reloaded)) {
+                            return;
+                        }
+                        System.out.println("Got " + reloaded + " instead of something more recent.");
+                    } catch (final WebApplicationException | ProcessingException e) {
+                        // redeploying pby
+                    }
+                }
+                fail("didn't see Bounced endpoint reloaded");
+            } finally {
+                client.close();
+            }
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/api/ListeningTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/api/ListeningTest.java
new file mode 100644
index 0000000..7aa57e6
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/api/ListeningTest.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.api;
+
+import org.apache.catalina.LifecycleException;
+import org.apache.meecrowave.Meecrowave;
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.CDI;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.core.MediaType;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.junit.Assert.assertEquals;
+
+public class ListeningTest {
+    @Test
+    public void events() throws LifecycleException {
+        final Listener listener;
+        final String base;
+        int count = 0;
+        try (final Meecrowave meecrowave = new Meecrowave(
+                new Meecrowave.Builder()
+                        .randomHttpPort()
+                        .includePackages(ListeningTest.class.getName())).bake()) {
+            count++;
+            listener = CDI.current().select(Listener.class).get();
+            assertEquals(count, listener.getEvents().size());
+
+            base = "http://localhost:" + meecrowave.getConfiguration().getHttpPort();
+            assertEquals(base, listener.getEvents().iterator().next().getFirstBase());
+        }
+
+        count++;
+        assertEquals(count, listener.getEvents().size());
+        assertEquals(base, listener.getEvents().get(count - 1).getFirstBase());
+    }
+
+    @Path("ping")
+    @ApplicationScoped
+    public static class Ping {
+        @GET
+        @Produces(MediaType.TEXT_PLAIN)
+        public String get() {
+            return "ping";
+        }
+    }
+
+    @ApplicationScoped
+    public static class Listener {
+        private final List<ListeningBase> events = new ArrayList<>();
+
+        public synchronized void onStart(@Observes final StartListening listening) {
+            events.add(listening);
+            assertPing(listening);
+        }
+
+        public synchronized void onStop(@Observes final StopListening listening) {
+            events.add(listening);
+            assertPing(listening);
+        }
+
+        private void assertPing(final ListeningBase listening) {
+            final Client actual = ClientBuilder.newClient();
+            try {
+                assertEquals("ping", actual.target(listening.getFirstBase())
+                        .path("ping")
+                        .request(MediaType.TEXT_PLAIN_TYPE)
+                        .get(String.class).trim());
+            } finally {
+                actual.close();
+            }
+        }
+
+        List<ListeningBase> getEvents() {
+            return events;
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializerTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializerTest.java
new file mode 100644
index 0000000..e6b6a99
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/cdi/MeecrowaveSeContainerInitializerTest.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.cdi;
+
+import org.apache.meecrowave.Meecrowave;
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.se.SeContainer;
+import javax.enterprise.inject.se.SeContainerInitializer;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.core.MediaType;
+
+import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+public class MeecrowaveSeContainerInitializerTest {
+    @Test
+    public void run() {
+        try (final SeContainer container = SeContainerInitializer.newInstance()
+                .addProperty("httpPort", new Meecrowave.Builder().randomHttpPort().getHttpPort())
+                .disableDiscovery()
+                .addBeanClasses(Configured.class)
+                .initialize()) {
+            final Client client = ClientBuilder.newClient();
+            assertNotNull(container.select(Meecrowave.class).get());
+            assertEquals("configured", client
+                    .target(String.format("http://localhost:%d/configured", container.select(Meecrowave.Builder.class).get().getHttpPort()))
+                    .request(TEXT_PLAIN_TYPE)
+                    .get(String.class));
+        }
+    }
+
+    @ApplicationScoped
+    @Path("configured")
+    public static class Configured {
+        @GET
+        @Produces(MediaType.TEXT_PLAIN)
+        public String get() {
+            return "configured";
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/runner/CliTest.java b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/runner/CliTest.java
new file mode 100644
index 0000000..b3b639a
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/apache/meecrowave/runner/CliTest.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.runner;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.io.IO;
+import org.apache.meecrowave.runner.cli.CliOption;
+import org.junit.Test;
+
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class CliTest {
+    private static final AtomicBoolean OPTS_SET = new AtomicBoolean();
+
+    @Test
+    public void bake() throws IOException {
+        OPTS_SET.set(false);
+
+        int stop;
+        int http;
+        try (final ServerSocket s1 = new ServerSocket(0)) {
+            stop = s1.getLocalPort();
+            try (final ServerSocket s2 = new ServerSocket(0)) {
+                http = s2.getLocalPort();
+            }
+        }
+        final Thread runner = new Thread() {
+            {
+                setName("CLI thread");
+            }
+
+            @Override
+            public void run() {
+                Cli.main(new String[]{
+                        "--context", "app",
+                        "--stop", Integer.toString(stop),
+                        "--http", Integer.toString(http),
+                        "--tmp-dir", "target/CliTest/simple",
+                        "--my-config", "val"
+                });
+            }
+        };
+        try {
+            runner.start();
+            boolean jsonOk = false;
+            for (int i = 0; i < 60; i++) {
+                try {
+                    assertEquals("{\"name\":\"test\"}", slurp(new URL("http://localhost:" + http + "/app/api/test/json")));
+                    jsonOk = true;
+                    break;
+                } catch (final AssertionError notYet) {
+                    try {
+                        Thread.sleep(1000);
+                    } catch (final InterruptedException e) {
+                        Thread.interrupted();
+                        fail();
+                    }
+                }
+            }
+            assertTrue(jsonOk);
+            assertTrue(OPTS_SET.get());
+        } finally {
+            try (final Socket client = new Socket("localhost", stop)) {
+                client.getOutputStream().write("SHUTDOWN".getBytes(StandardCharsets.UTF_8));
+            } catch (final IOException ioe) {
+                // ok, container is down now
+            } finally {
+                try {
+                    runner.join(TimeUnit.MINUTES.toMillis(1));
+                } catch (final InterruptedException e) {
+                    Thread.interrupted();
+                }
+            }
+        }
+    }
+
+    private String slurp(final URL url) {
+        try (final InputStream is = url.openStream()) {
+            return IO.toString(is);
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+        return null;
+    }
+
+    public static class MyOpts implements Cli.Options {
+        @CliOption(name = "my-config", description = "test")
+        private String opt;
+    }
+
+    public static class BeanTester implements ServletContainerInitializer {
+        @Override
+        public void onStartup(final Set<Class<?>> set, final ServletContext servletContext) throws ServletException {
+            OPTS_SET.set("val".equals(
+                    Meecrowave.Builder.class.cast(servletContext.getAttribute("meecrowave.configuration")).getExtension(MyOpts.class).opt));
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/superbiz/app/Bounced.java b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Bounced.java
new file mode 100644
index 0000000..8bf2e10
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Bounced.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.ApplicationScoped;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("bounced")
+@ApplicationScoped
+public class Bounced {
+    private String time;
+
+    @PostConstruct
+    private void init() {
+        time = Long.toString(System.nanoTime());
+    }
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String app() {
+        return time;
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/superbiz/app/Endpoint.java b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Endpoint.java
new file mode 100644
index 0000000..597e497
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Endpoint.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.MediaType;
+import java.security.Principal;
+
+import static java.util.Optional.ofNullable;
+import static org.junit.Assert.assertNotNull;
+
+@Path("test")
+@ApplicationScoped
+public class Endpoint {
+    @Inject
+    private Injectable injectable;
+
+    @Inject
+    private Principal pcp;
+
+    @Inject
+    private HttpServletRequest request;
+
+    @Inject
+    private BeanManager bm;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String simple(@QueryParam("checkcustom") final String query) {
+        return Boolean.parseBoolean(injectable.injected()) ? "simple" + ofNullable(query).orElse("") : "fail";
+    }
+
+    @GET
+    @Path("json")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Simple json() {
+        return new Simple("test");
+    }
+
+    @GET
+    @Path("principal")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String principal() {
+        return request.getUserPrincipal().getClass().getName() + "_" + request.getUserPrincipal().getName() + "  " +
+                pcp.getClass().getName().replaceAll("\\$\\$OwbNormalScopeProxy[0-9]+", "") + "_" + pcp.getName();
+    }
+
+    @GET
+    @Path("load/{name}")
+    @Produces(MediaType.TEXT_PLAIN)
+    public String load(@PathParam("name") final String fqn) {
+        try {
+            final ClassLoader loader = Thread.currentThread().getContextClassLoader(); // if sharedlib is set should be MeecrowaveClassloader
+            if (fqn.contains("deltaspike")) {
+                final Class<?> ce = loader.loadClass("org.apache.deltaspike.core.impl.config.ConfigurationExtension");
+                final Object extensionBeanInstance = bm.getReference(bm.resolve(bm.getBeans(ce)), ce, bm.createCreationalContext(null));
+                assertNotNull(extensionBeanInstance);
+            }
+            return loader.loadClass(fqn).getName();
+        } catch (final ClassNotFoundException cnfe) {
+            return "oops";
+        }
+    }
+
+    public static class Simple {
+        private String name;
+
+        public Simple() {
+            // no-op
+        }
+
+        public Simple(final String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(final String name) {
+            this.name = name;
+        }
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/superbiz/app/Init.java b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Init.java
new file mode 100644
index 0000000..346d524
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Init.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import javax.servlet.DispatcherType;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.HandlesTypes;
+import javax.ws.rs.Path;
+import javax.ws.rs.core.Application;
+import java.io.IOException;
+import java.util.EnumSet;
+import java.util.Set;
+
+import static java.util.stream.Collectors.joining;
+
+@HandlesTypes({Path.class, Application.class})
+public class Init implements ServletContainerInitializer {
+    @Override
+    public void onStartup(final Set<Class<?>> c, final ServletContext ctx) throws ServletException {
+        ctx.addFilter("sci", new Filter() {
+            @Override
+            public void init(final FilterConfig filterConfig) throws ServletException {
+                // no-op
+            }
+
+            @Override
+            public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
+                response.getWriter().write("sci:" + c.stream().map(Class::getName).sorted().collect(joining()));
+            }
+
+            @Override
+            public void destroy() {
+                // no-op
+            }
+        }).addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, "/sci");
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/superbiz/app/Injectable.java b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Injectable.java
new file mode 100644
index 0000000..dd2758d
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/superbiz/app/Injectable.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class Injectable {
+    public String injected() {
+        return "true";
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/superbiz/app/RsApp.java b/trunk/meecrowave-core/src/test/java/org/superbiz/app/RsApp.java
new file mode 100644
index 0000000..d04e798
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/superbiz/app/RsApp.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@Dependent
+@ApplicationPath("api")
+public class RsApp extends Application {
+}
diff --git a/trunk/meecrowave-core/src/test/java/org/superbiz/app/SomeFilter.java b/trunk/meecrowave-core/src/test/java/org/superbiz/app/SomeFilter.java
new file mode 100644
index 0000000..84c3c9a
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/java/org/superbiz/app/SomeFilter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import javax.inject.Inject;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+import java.io.IOException;
+
+@WebFilter("/filter")
+public class SomeFilter implements Filter {
+    @Inject
+    private Injectable injectable;
+
+    @Override
+    public void init(final FilterConfig filterConfig) throws ServletException {
+        // no-op
+    }
+
+    @Override
+    public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException {
+        response.getWriter().write("simplefilter" + injectable.injected());
+    }
+
+    @Override
+    public void destroy() {
+        // no-op
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/resources/META-INF/services/javax.servlet.ServletContainerInitializer b/trunk/meecrowave-core/src/test/resources/META-INF/services/javax.servlet.ServletContainerInitializer
new file mode 100644
index 0000000..cc82ae3
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/resources/META-INF/services/javax.servlet.ServletContainerInitializer
@@ -0,0 +1,3 @@
+org.superbiz.app.Init
+org.apache.meecrowave.runner.CliTest$BeanTester
+org.apache.meecrowave.ServletContainerInitialierInjectionTest$Init
diff --git a/trunk/meecrowave-core/src/test/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options b/trunk/meecrowave-core/src/test/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options
new file mode 100644
index 0000000..532f9fc
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options
@@ -0,0 +1 @@
+org.apache.meecrowave.runner.CliTest$MyOpts
diff --git a/trunk/meecrowave-core/src/test/resources/sirona.properties b/trunk/meecrowave-core/src/test/resources/sirona.properties
new file mode 100644
index 0000000..fb4c524
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/resources/sirona.properties
@@ -0,0 +1,31 @@
+#Licensed to the Apache Software Foundation (ASF) under one
+#or more contributor license agreements.  See the NOTICE file
+#distributed with this work for additional information
+#regarding copyright ownership.  The ASF licenses this file
+#to you under the Apache License, Version 2.0 (the
+#"License"); you may not use this file except in compliance
+#with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing,
+#software distributed under the License is distributed on an
+#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#KIND, either express or implied.  See the License for the
+#specific language governing permissions and limitations
+#under the License.
+
+#
+# to use add to the launcher
+#  -javaagent:/.../sirona-javaagent-0.5-incubating-SNAPSHOT-shaded.jar=dumpOnExit=/tmp/sirona.csv
+#
+
+org.apache.sirona.javaagent.listener.CounterListener.excludes = \
+  container:jvm,\
+  prefix:org.apache.logging.log4j,\
+  prefix:org.apache.catalina.core.ContainerBase,\
+  prefix:org.apache.tomcat.util.descriptor.web.WebXml,\
+  prefix:org.apache.cxf.common.util.Spring,\
+  prefix:org.apache.sirona
+
+org.apache.sirona.javaagent.path.tracking.activate=false
diff --git a/trunk/meecrowave-core/src/test/third-party/OtherEndpoint.java b/trunk/meecrowave-core/src/test/third-party/OtherEndpoint.java
new file mode 100644
index 0000000..4e9249c
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/third-party/OtherEndpoint.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+@Path("other")
+@ApplicationScoped
+public class OtherEndpoint
+{
+    @Inject
+    private Injectable injectable;
+
+    @GET
+    @Produces({"text/plain"})
+    public String simple()
+    {
+        return Boolean.parseBoolean(this.injectable.injected()) ? "simple" : "fail";
+    }
+}
diff --git a/trunk/meecrowave-core/src/test/third-party/OtherFilter.java b/trunk/meecrowave-core/src/test/third-party/OtherFilter.java
new file mode 100644
index 0000000..077d4b4
--- /dev/null
+++ b/trunk/meecrowave-core/src/test/third-party/OtherFilter.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.superbiz.app;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.inject.Inject;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.annotation.WebFilter;
+
+@WebFilter({"/other"})
+public class OtherFilter
+        implements Filter
+{
+    @Inject
+    private Injectable injectable;
+
+    public void init(FilterConfig filterConfig)
+            throws ServletException
+    {}
+
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException
+    {
+        response.getWriter().write("filter" + this.injectable.injected());
+    }
+
+    public void destroy() {}
+}
diff --git a/trunk/meecrowave-doc/pom.xml b/trunk/meecrowave-doc/pom.xml
new file mode 100644
index 0000000..b43d5cb
--- /dev/null
+++ b/trunk/meecrowave-doc/pom.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-doc</artifactId>
+  <name>Meecrowave :: Doc</name>
+  <description>A module building the static website in ${project.build.directory}/${project.build.finalName}</description>
+
+  <properties>
+    <jbake.http>false</jbake.http>
+    <jbake.pdf>true</jbake.pdf>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.asciidoctor</groupId>
+      <artifactId>asciidoctorj-pdf</artifactId>
+      <version>1.5.0-alpha.16</version>
+    </dependency>
+    <dependency>
+      <groupId>org.asciidoctor</groupId>
+      <artifactId>asciidoctorj</artifactId>
+      <version>1.6.0-alpha.5</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jruby</groupId>
+      <artifactId>jruby-complete</artifactId>
+      <version>9.1.12.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>ziplock</artifactId>
+      <version>7.0.1</version>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.tomee</groupId>
+          <artifactId>javaee-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.tomee</groupId>
+          <artifactId>openejb-jee</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.jboss.shrinkwrap</groupId>
+          <artifactId>shrinkwrap-api</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-maven-plugin</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-gradle-plugin</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-arquillian</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-oauth2</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jbake</groupId>
+      <artifactId>jbake-core</artifactId>
+      <version>2.4.0</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.groovy</groupId>
+      <artifactId>groovy</artifactId>
+      <version>2.3.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.groovy</groupId>
+      <artifactId>groovy-templates</artifactId>
+      <version>2.3.6</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <version>${log4j2.version}</version>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>exec-maven-plugin</artifactId>
+        <version>1.4.0</version>
+        <executions>
+          <execution>
+            <id>meecrowave-site</id>
+            <phase>compile</phase>
+            <goals>
+              <goal>java</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <includeProjectDependencies>true</includeProjectDependencies>
+          <mainClass>org.apache.meecrowave.doc.JBake</mainClass>
+          <arguments>
+            <argument>${project.basedir}/src/main/jbake/</argument>
+            <argument>${project.build.directory}/${project.build.finalName}</argument>
+            <argument>${jbake.http}</argument>
+            <argument>${jbake.pdf}</argument>
+          </arguments>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <!--
+  Don't deliver it yet.
+  -->
+  <distributionManagement>
+    <repository>
+      <id>localhost</id>
+      <url>file://${project.basedir}/target/repo/</url>
+    </repository>
+    <snapshotRepository>
+      <id>localhost</id>
+      <url>file://${project.basedir}/target/snapshot-repo/</url>
+    </snapshotRepository>
+  </distributionManagement>
+</project>
diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/JBake.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/JBake.java
new file mode 100755
index 0000000..22993a5
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/JBake.java
@@ -0,0 +1,228 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements. See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership. The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License. You may obtain a copy of the License at

+ *

+ * http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied. See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.meecrowave.doc;

+

+import com.orientechnologies.orient.core.Orient;

+import org.apache.commons.configuration.CompositeConfiguration;

+import org.apache.commons.configuration.MapConfiguration;

+import org.apache.meecrowave.Meecrowave;

+import org.apache.meecrowave.doc.generator.ArquillianConfiguration;

+import org.apache.meecrowave.doc.generator.CliConfiguration;

+import org.apache.meecrowave.doc.generator.Configuration;

+import org.apache.meecrowave.doc.generator.MavenConfiguration;

+import org.apache.meecrowave.doc.generator.OAuth2Configuration;

+import org.jbake.app.ConfigUtil;

+import org.jbake.app.Oven;

+

+import java.io.File;

+import java.io.IOException;

+import java.nio.file.ClosedWatchServiceException;

+import java.nio.file.Path;

+import java.nio.file.WatchEvent;

+import java.nio.file.WatchKey;

+import java.nio.file.WatchService;

+import java.util.ArrayList;

+import java.util.HashMap;

+import java.util.Scanner;

+import java.util.concurrent.TimeUnit;

+import java.util.concurrent.atomic.AtomicBoolean;

+import java.util.concurrent.atomic.AtomicLong;

+import java.util.stream.Stream;

+

+import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;

+import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;

+import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;

+

+public class JBake {

+    private JBake() {

+        // no-op

+    }

+

+    // if you want to switch off PDF generation use as arguments: src/main/jbake target/site-tmp true false

+    public static void main(final String[] args) throws Exception {

+        System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "64"); // try to have parallelStream better than default

+

+        final File source = args == null || args.length < 1 ? new File("src/main/jbake") : new File(args[0]);

+        final File pdfSource = new File(source, "content");

+        final File destination = args == null || args.length < 2 ? new File("target/site-tmp") : new File(args[1]);

+        final boolean startHttp = args == null || args.length < 2 || Boolean.parseBoolean(args[2]); // by default we dev

+        final boolean skipPdf = args != null && args.length > 3 && !Boolean.parseBoolean(args[3]); // by default...too slow sorry

+

+        // generation of dynamic content

+        new Configuration().run();

+        new CliConfiguration().run();

+        new ArquillianConfiguration().run();

+        new MavenConfiguration().run();

+        new OAuth2Configuration().run();

+

+        final Runnable build = () -> {

+            System.out.println("Building Meecrowave website in " + destination);

+            final Orient orient = Orient.instance();

+            try {

+                orient.startup();

+

+                final Oven oven = new Oven(source, destination, new CompositeConfiguration() {{

+                    final CompositeConfiguration config = new CompositeConfiguration();

+                    config.addConfiguration(new MapConfiguration(new HashMap<String, Object>() {{

+                        put("asciidoctor.attributes", new ArrayList<String>() {{

+                            add("source-highlighter=highlightjs");

+                            add("highlightjs-theme=idea");

+                            add("context_rootpath=/meecrowave");

+                        }});

+                    }}));

+                    config.addConfiguration(ConfigUtil.load(source));

+                    addConfiguration(config);

+                }}, true);

+                oven.setupPaths();

+

+                System.out.println("  > baking");

+                oven.bake();

+

+                if (!skipPdf) {

+                    System.out.println("  > pdfifying");

+                    PDFify.generatePdf(pdfSource, destination);

+                }

+

+                System.out.println("  > done :)");

+            } catch (final Exception e) {

+                e.printStackTrace();

+            } finally {

+                orient.shutdown();

+            }

+        };

+

+        build.run();

+        if (startHttp) {

+            final Path watched = source.toPath();

+            final WatchService watchService = watched.getFileSystem().newWatchService();

+            watched.register(watchService, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);

+            final AtomicBoolean run = new AtomicBoolean(true);

+            final AtomicLong render = new AtomicLong(-1);

+            final Thread renderingThread = new Thread() {

+                {

+                    setName("jbake-renderer");

+                }

+

+                @Override

+                public void run() {

+                    long last = System.currentTimeMillis();

+                    while (run.get()) {

+                        if (render.get() > last) {

+                            last = System.currentTimeMillis();

+                            try {

+                                build.run();

+                            } catch (final Throwable oops) {

+                                oops.printStackTrace();

+                            }

+                        }

+                        try {

+                            sleep(TimeUnit.SECONDS.toMillis(1));

+                        } catch (final InterruptedException e) {

+                            Thread.interrupted();

+                            break;

+                        }

+                    }

+                    System.out.println("Exiting renderer");

+                }

+            };

+            final Thread watcherThread = new Thread() {

+                {

+                    setName("jbake-file-watcher");

+                }

+

+                @Override

+                public void run() {

+                    while (run.get()) {

+                        try {

+                            final WatchKey key = watchService.poll(1, TimeUnit.SECONDS);

+                            if (key == null) {

+                                continue;

+                            }

+

+                            for (final WatchEvent<?> event : key.pollEvents()) {

+                                final WatchEvent.Kind<?> kind = event.kind();

+                                if (kind != ENTRY_CREATE && kind != ENTRY_DELETE && kind != ENTRY_MODIFY) {

+                                    continue; // unlikely but better to protect ourself

+                                }

+

+                                final Path updatedPath = Path.class.cast(event.context());

+                                if (kind == ENTRY_DELETE || updatedPath.toFile().isFile()) {

+                                    final String path = updatedPath.toString();

+                                    if (!path.contains("___jb") && !path.endsWith("~")) {

+                                        render.set(System.currentTimeMillis());

+                                    }

+                                }

+                            }

+                            key.reset();

+                        } catch (final InterruptedException e) {

+                            Thread.interrupted();

+                            run.compareAndSet(true, false);

+                        } catch (final ClosedWatchServiceException cwse) {

+                            if (!run.get()) {

+                                throw new IllegalStateException(cwse);

+                            }

+                        }

+                    }

+                    System.out.println("Exiting file watcher");

+                }

+            };

+

+            renderingThread.start();

+            watcherThread.start();

+

+            final Runnable onQuit = () -> {

+                run.compareAndSet(true, false);

+                Stream.of(watcherThread, renderingThread).forEach(thread -> {

+                    try {

+                        thread.join();

+                    } catch (final InterruptedException e) {

+                        Thread.interrupted();

+                    }

+                });

+                try {

+                    watchService.close();

+                } catch (final IOException ioe) {

+                    // not important

+                }

+            };

+

+            try (final Meecrowave container = new Meecrowave(new Meecrowave.Builder() {{

+                setWebResourceCached(false);

+            }}) {{

+                start();

+                deployWebapp("/meecrowave", destination);

+            }}) {

+                System.out.println("Started on http://localhost:" + container.getConfiguration().getHttpPort() + "/meecrowave");

+

+                final Scanner console = new Scanner(System.in);

+                String cmd;

+                while (((cmd = console.nextLine())) != null) {

+                    if ("quit".equals(cmd)) {

+                        break;

+                    } else if ("r".equals(cmd) || "rebuild".equals(cmd) || "build".equals(cmd) || "b".equals(cmd)) {

+                        render.set(System.currentTimeMillis());

+                    } else {

+                        System.err.println("Ignoring " + cmd + ", please use 'build' or 'quit'");

+                    }

+                }

+            }

+            onQuit.run();

+        }

+    }

+}

diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/PDFify.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/PDFify.java
new file mode 100755
index 0000000..eb62a51
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/PDFify.java
@@ -0,0 +1,83 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one or more

+ * contributor license agreements.  See the NOTICE file distributed with

+ * this work for additional information regarding copyright ownership.

+ * The ASF licenses this file to You under the Apache License, Version 2.0

+ * (the "License"); you may not use this file except in compliance with

+ * the License.  You may obtain a copy of the License at

+ *

+ *     http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+package org.apache.meecrowave.doc;

+

+import org.asciidoctor.Asciidoctor;

+import org.asciidoctor.AttributesBuilder;

+

+import java.io.File;

+import java.io.IOException;

+import java.nio.file.FileVisitResult;

+import java.nio.file.Files;

+import java.nio.file.Path;

+import java.nio.file.SimpleFileVisitor;

+import java.nio.file.attribute.BasicFileAttributes;

+import java.util.Map;

+import java.util.concurrent.ExecutorService;

+import java.util.concurrent.Executors;

+import java.util.concurrent.TimeUnit;

+

+import static org.asciidoctor.OptionsBuilder.options;

+import static org.asciidoctor.SafeMode.UNSAFE;

+

+public class PDFify {

+    private PDFify() {

+        // no-op

+    }

+

+    public static void generatePdf(final File from, final File targetBase) throws IOException {

+        final Path sourceBase = from.toPath();

+        final Asciidoctor asciidoctor = Asciidoctor.Factory.create();

+        final ExecutorService pool = Executors.newFixedThreadPool(16);

+        Files.walkFileTree(sourceBase, new SimpleFileVisitor<Path>() {

+            @Override

+            public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException {

+                final String fileName = file.getFileName().toString();

+                if (fileName.endsWith(".adoc")) {

+                    pool.submit(() -> {

+                        final String path = sourceBase.relativize(file).toString();

+                        final File target = new File(targetBase, path.substring(0, path.length() - "adoc".length()) + "pdf");

+                        final File asFile = file.toFile();

+                        final Map<String, Object> attributes = asciidoctor.readDocumentHeader(asFile).getAttributes();

+                        // if we generate the PDF link we need to create the PDF excepted if it is expected to be manual

+                        if (attributes.containsKey("jbake-meecrowavepdf") && !attributes.containsKey("jbake-meecrowavepdf-manual")) {

+                            target.getParentFile().mkdirs();

+                            asciidoctor.convertFile(

+                                    asFile,

+                                    options()

+                                            //.baseDir(asFile.getParentFile())

+                                            .safe(UNSAFE)

+                                            .backend("pdf")

+                                            .attributes(AttributesBuilder.attributes()

+                                                    .attribute("source-highlighter", "coderay")

+                                                    .attribute("context_rootpath", "http://openwebbeans.apache.org/meecrowave"))

+                                            .toFile(target).get());

+                            System.out.println("Generated " + target);

+                        }

+                    });

+                }

+                return super.visitFile(file, attrs);

+            }

+        });

+        pool.shutdown();

+        try {

+            pool.awaitTermination(1, TimeUnit.HOURS);

+        } catch (final InterruptedException e) {

+            Thread.interrupted();

+        }

+    }

+}

diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/ArquillianConfiguration.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/ArquillianConfiguration.java
new file mode 100644
index 0000000..6b91f2e
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/ArquillianConfiguration.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.doc.generator;
+
+import org.apache.meecrowave.arquillian.MeecrowaveConfiguration;
+
+import java.lang.reflect.Field;
+import java.util.Comparator;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.joining;
+
+public class ArquillianConfiguration extends BaseGenerator {
+    @Override
+    protected String generate() {
+        return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                "<arquillian xmlns=\"http://jboss.org/schema/arquillian\"\n" +
+                "            xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" +
+                "            xsi:schemaLocation=\"http://jboss.org/schema/arquillian http://jboss.org/schema/arquillian/arquillian_1_0.xsd\">\n" +
+                "  <container qualifier=\"meecrowave\" default=\"true\">\n" +
+                "    <configuration>\n" +
+                Stream.of(MeecrowaveConfiguration.class.getDeclaredFields())
+                        .sorted(Comparator.comparing(Field::getName))
+                        .map(opt -> "      <property name=\"" + opt.getName() + "\">" + valueFor(opt) + "</property>")
+                        .collect(joining("\n")) +
+                "\n    </configuration>\n" +
+                "  </container>\n" +
+                "</arquillian>\n";
+    }
+
+    private String valueFor(final Field opt) {
+        switch (opt.getName()) {
+            case "properties":
+                return "\n        jpa.property.openjpa.RuntimeUnenhancedClasses=supported\n" +
+                    "        jpa.property.openjpa.jdbc.SynchronizeMappings=buildSchema\n" +
+                    "      ";
+            case "users":
+                return "\n        admin=adminpwd\n" +
+                    "        other=secret\n" +
+                    "      ";
+            case "roles":
+                return "\n        admin=admin\n" +
+                    "        limited=admin,other\n" +
+                    "      ";
+            case "cxfServletParams":
+                return "\n        hide-service-list-page=true\n" +
+                    "      ";
+            case "realm":
+                return "org.apache.catalina.realm.JAASRealm:configFile=jaas.config;appName=app";
+            case "securityConstraints":
+                return "collection=sc1:/api/*:POST;authRole=**|collection=sc2:/priv/*:GET;authRole=*";
+            case "loginConfig":
+                return "authMethod=BASIC;realmName=app";
+            default:
+        }
+
+        opt.setAccessible(true);
+        try {
+            return ofNullable(opt.get(new MeecrowaveConfiguration())).map(v -> v == null ? "" : v.toString()).orElse("");
+        } catch (final IllegalAccessException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+}
diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/BaseGenerator.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/BaseGenerator.java
new file mode 100644
index 0000000..dddf19b
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/BaseGenerator.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.doc.generator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Writer;
+
+import static org.apache.ziplock.JarLocation.jarLocation;
+
+public abstract class BaseGenerator implements Runnable {
+    @Override
+    public void run() {
+        final File output = new File(jarLocation(BaseGenerator.class).getParentFile()/*target*/, "generated-doc/" + getClass().getSimpleName() + ".adoc");
+        output.getParentFile().mkdirs();
+        try (final Writer w = new FileWriter(output)) {
+            w.write(generate());
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    protected abstract String generate();
+
+    protected String tableConfig() {
+        return "[opts=\"header\",role=\"table table-bordered\"]\n";
+    }
+}
diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/CliConfiguration.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/CliConfiguration.java
new file mode 100644
index 0000000..bd2922d
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/CliConfiguration.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.doc.generator;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.runner.cli.CliOption;
+
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.util.Comparator;
+import java.util.stream.Stream;
+
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.joining;
+
+public class CliConfiguration extends BaseGenerator {
+    @Override
+    protected String generate() {
+        return super.tableConfig() + "|===\n|Name|Description\n" +
+                Stream.of(
+                        Stream.of(Meecrowave.Builder.class.getDeclaredFields())
+                                .filter(f -> f.isAnnotationPresent(CliOption.class))
+                                .sorted(Comparator.comparing(Field::getName))
+                                .map(f -> f.getAnnotation(CliOption.class)),
+                        Stream.of(
+                                new DocCliOption("help", "Show the CLI help/usage"),
+                                new DocCliOption("context", "The context to use to deploy the webapp"),
+                                new DocCliOption("webapp", "Location of the webapp, if not set the classpath will be deployed"),
+                                new DocCliOption("docbase", "Location of the docbase for a classpath deployment")))
+                        .flatMap(identity())
+                        .map(opt -> "|--" + opt.name() + "|" + opt.description())
+                        .collect(joining("\n")) + "\n|===\n";
+    }
+
+    private static final class DocCliOption implements CliOption {
+        private final String description;
+        private final String name;
+
+        private DocCliOption(final String name, final String description) {
+            this.description = description;
+            this.name = name;
+        }
+
+        @Override
+        public Class<? extends Annotation> annotationType() {
+            return CliOption.class;
+        }
+
+        @Override
+        public String name() {
+            return name;
+        }
+
+        @Override
+        public String description() {
+            return description;
+        }
+
+        @Override
+        public String[] alias() {
+            return new String[0];
+        }
+    }
+}
diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/Configuration.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/Configuration.java
new file mode 100644
index 0000000..8806ef8
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/Configuration.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.doc.generator;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.runner.cli.CliOption;
+
+import java.lang.reflect.Field;
+import java.util.Comparator;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.joining;
+
+public class Configuration extends BaseGenerator {
+    @Override
+    protected String generate() {
+        return super.tableConfig() + "|===\n|Name|Description\n" +
+                Stream.of(Meecrowave.Builder.class.getDeclaredFields())
+                        .filter(f -> f.isAnnotationPresent(CliOption.class))
+                        .sorted(Comparator.comparing(Field::getName))
+                        .map(f -> "|" + f.getName() + "|" + f.getAnnotation(CliOption.class).description())
+                        .collect(joining("\n")) + "\n|===\n";
+    }
+}
diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/Downloads.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/Downloads.java
new file mode 100755
index 0000000..9b3eb3e
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/Downloads.java
@@ -0,0 +1,278 @@
+/*

+ * Licensed to the Apache Software Foundation (ASF) under one

+ * or more contributor license agreements. See the NOTICE file

+ * distributed with this work for additional information

+ * regarding copyright ownership. The ASF licenses this file

+ * to you under the Apache License, Version 2.0 (the

+ * "License"); you may not use this file except in compliance

+ * with the License. You may obtain a copy of the License at

+ *

+ * http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing,

+ * software distributed under the License is distributed on an

+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY

+ * KIND, either express or implied. See the License for the

+ * specific language governing permissions and limitations

+ * under the License.

+ */

+package org.apache.meecrowave.doc.generator;

+

+import org.apache.commons.lang3.text.WordUtils;

+import org.xml.sax.Attributes;

+import org.xml.sax.SAXException;

+import org.xml.sax.helpers.DefaultHandler;

+

+import javax.xml.parsers.SAXParser;

+import javax.xml.parsers.SAXParserFactory;

+import java.io.IOException;

+import java.io.InputStream;

+import java.net.HttpURLConnection;

+import java.net.URL;

+import java.time.LocalDateTime;

+import java.time.ZoneOffset;

+import java.util.ArrayList;

+import java.util.Collection;

+import java.util.Objects;

+import java.util.concurrent.TimeUnit;

+import java.util.stream.Stream;

+

+import static java.time.format.DateTimeFormatter.RFC_1123_DATE_TIME;

+import static java.util.Arrays.asList;

+import static java.util.Optional.ofNullable;

+import static java.util.stream.Collectors.toList;

+

+// helper to generate the download table content

+public class Downloads {

+    private static final SAXParserFactory FACTORY = SAXParserFactory.newInstance();

+    private static final String MVN_BASE = "http://repo.maven.apache.org/maven2/";

+    private static final long MEGA_RATIO = 1024 * 1024;

+    private static final long KILO_RATIO = 1024;

+

+    static {

+        FACTORY.setNamespaceAware(false);

+        FACTORY.setValidating(false);

+    }

+

+    private Downloads() {

+        // no-op

+    }

+

+    public static void main(final String[] args) {

+        System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism", "32");

+        Stream.of(

+                Stream.of("org/apache/meecrowave/meecrowave")

+                        .flatMap(Downloads::toVersions)

+                        .map(v -> v.extensions("zip"))

+                        .map(v -> v.classifiers("source-release")),

+                versionStream("meecrowave-core")

+                        .map(v -> v.classifiers("", "runner"))

+                        .map(v -> v.extensions("jar")))

+                .flatMap(s -> s)

+                .flatMap(Downloads::toDownloadable)

+                .parallel()

+                .map(Downloads::fillDownloadable)

+                .filter(Objects::nonNull)

+                .sorted((o1, o2) -> {

+                    final int versionComp = o2.version.compareTo(o1.version);

+                    if (versionComp != 0) {

+                        if (o2.version.startsWith(o1.version) && o2.version.contains("-M")) { // milestone

+                            return -1;

+                        }

+                        if (o1.version.startsWith(o2.version) && o1.version.contains("-M")) { // milestone

+                            return 1;

+                        }

+                        return versionComp;

+                    }

+

+

+                    final int nameComp = o1.name.compareTo(o2.name);

+                    if (nameComp != 0) {

+                        return nameComp;

+                    }

+

+                    final long dateComp = LocalDateTime.parse(o2.date, RFC_1123_DATE_TIME).toInstant(ZoneOffset.UTC).toEpochMilli()

+                            - LocalDateTime.parse(o1.date, RFC_1123_DATE_TIME).toInstant(ZoneOffset.UTC).toEpochMilli();

+                    if (dateComp != 0) {

+                        return (int) dateComp;

+                    }

+

+                    return o1.url.compareTo(o2.url);

+                })

+                .collect(toList())

+                .forEach(d ->

+                        System.out.println("" +

+                                "|" + d.name + (d.classifier.isEmpty() ? "" : (" " + d.classifier)).replace("source-release", "Source Release") +

+                                "|" + d.version +

+                                "|" + d.date +

+                                "|" + d.size +

+                                "|" + d.format +

+                                "| " + d.url + "[icon:download[] " + d.format + "] " + d.sha1 + "[icon:download[] sha1] " + d.md5 + "[icon:download[] md5] " + d.asc + "[icon:download[] asc]"));

+    }

+

+    private static Download fillDownloadable(final Download download) {

+        try {

+            final URL url = new URL(download.url);

+            final HttpURLConnection connection = HttpURLConnection.class.cast(url.openConnection());

+            connection.setConnectTimeout((int) TimeUnit.SECONDS.toMillis(30));

+            final int responseCode = connection.getResponseCode();

+            if (responseCode != HttpURLConnection.HTTP_OK) {

+                if (HttpURLConnection.HTTP_NOT_FOUND != responseCode) {

+                    System.err.println("Got " + responseCode + " for " + download.url);

+                }

+                return null;

+            }

+

+            download.date = connection.getHeaderField("Last-Modified").replaceAll(" +", " ");

+            download.size = toSize(ofNullable(connection.getHeaderField("Content-Length"))

+                    .map(Long::parseLong).orElse(0L), ofNullable(connection.getHeaderField("Accept-Ranges")).orElse("bytes"));

+

+            connection.getInputStream().close();

+        } catch (final IOException e) {

+            e.printStackTrace();

+            return null;

+        }

+        return download;

+    }

+

+    private static String toSize(final long length, final String bytes) {

+        if (!"bytes".equalsIgnoreCase(bytes)) {

+            throw new IllegalArgumentException("Not handled unit: " + bytes);

+        }

+        final long meg = length / MEGA_RATIO;

+        final long kilo = (length - (meg * MEGA_RATIO)) / KILO_RATIO;

+        return (meg > 0 ? meg + " MB " : "") + (kilo > 0 ? kilo + " kB" : "");

+    }

+

+    private static Stream<Version> versionStream(final String artifactId) {

+        return Stream.of("org/apache/meecrowave/" + artifactId)

+                .flatMap(Downloads::toVersions);

+    }

+

+    private static Stream<Download> toDownloadable(final Version version) {

+        final String base = version.base;

+        final String artifactId = base.substring(base.lastIndexOf('/') + 1, base.length());

+        final String artifactBase = version.base + "/" + version.version + "/" + artifactId + "-" + version.version;

+        return version.extensions.stream()

+                .flatMap(e -> (version.classifiers.isEmpty() ? Stream.of(new ArtifactDescription("", e)) : version.classifiers.stream().map(c -> new ArtifactDescription(c, e))))

+                .map(a -> toDownload(artifactId, a.classifier, version.version, a.extension, artifactBase + (a.classifier.isEmpty() ? '.' + a.extension : ('-' + a.classifier + '.' + a.extension))));

+    }

+

+    private static Download toDownload(final String artifactId, final String classifier, final String version, final String format, final String url) {

+        return new Download(

+                WordUtils.capitalize(artifactId.replace('-', ' ')),

+                classifier,

+                version,

+                format,

+                url,

+                url + ".md5",

+                url + ".sha1",

+                url + ".asc");

+    }

+

+    private static Stream<Version> toVersions(final String baseUrl) {

+        final QuickMvnMetadataParser handler = new QuickMvnMetadataParser();

+        final String base = MVN_BASE + baseUrl;

+        try (final InputStream stream = new URL(base + "/maven-metadata.xml").openStream()) {

+            final SAXParser parser = FACTORY.newSAXParser();

+            parser.parse(stream, handler);

+            return handler.foundVersions.stream().map(v -> new Version(base, v)).parallel();

+        } catch (final Exception e) {

+            e.printStackTrace();

+            return Stream.empty();

+        }

+    }

+

+    public static class Version {

+        private final String base;

+        private final String version;

+        private final Collection<String> classifiers = new ArrayList<>();

+        private final Collection<String> extensions = new ArrayList<>();

+

+        public Version(final String base, final String version) {

+            this.base = base;

+            this.version = version;

+        }

+

+        private Version extensions(final String... values) {

+            extensions.addAll(asList(values));

+            return this;

+        }

+

+        private Version classifiers(final String... values) {

+            classifiers.addAll(asList(values));

+            return this;

+        }

+    }

+

+    public static class ArtifactDescription {

+        private final String classifier;

+        private final String extension;

+

+        private ArtifactDescription(final String classifier, final String extension) {

+            this.classifier = classifier;

+            this.extension = extension;

+        }

+    }

+

+    public static class Download {

+        private final String name;

+        private final String classifier;

+        private final String version;

+        private final String format;

+        private final String url;

+        private final String md5;

+        private final String sha1;

+        private final String asc;

+        private String date;

+        private String size;

+

+        public Download(final String name, final String classifier, final String version,

+                        final String format, final String url, final String md5, final String sha1, final String asc) {

+            this.name = name;

+            this.classifier = classifier;

+            this.version = version;

+            this.format = format;

+            this.url = url;

+            this.md5 = md5;

+            this.sha1 = sha1;

+            this.asc = asc;

+        }

+    }

+

+    private static class QuickMvnMetadataParser extends DefaultHandler {

+        private boolean versioning = false;

+        private boolean versions = false;

+        private StringBuilder version;

+        private final Collection<String> foundVersions = new ArrayList<>();

+

+        @Override

+        public void startElement(final String uri, final String localName,

+                                 final String name, final Attributes attributes) throws SAXException {

+            if ("versioning".equalsIgnoreCase(name)) {

+                versioning = true;

+            } else if ("versions".equalsIgnoreCase(name)) {

+                versions = true;

+            } else if (versioning && versions && "version".equalsIgnoreCase(name)) {

+                version = new StringBuilder();

+            }

+        }

+

+        @Override

+        public void characters(final char[] ch, final int start, final int length) throws SAXException {

+            if (version != null) {

+                version.append(new String(ch, start, length));

+            }

+        }

+

+        public void endElement(final String uri, final String localName, final String name) throws SAXException {

+            if ("versioning".equalsIgnoreCase(name)) {

+                versioning = false;

+            } else if ("versions".equalsIgnoreCase(name)) {

+                versions = false;

+            } else if ("version".equalsIgnoreCase(name)) {

+                foundVersions.add(version.toString());

+            }

+        }

+    }

+}

diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/MavenConfiguration.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/MavenConfiguration.java
new file mode 100644
index 0000000..861f0c7
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/MavenConfiguration.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.doc.generator;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.helpers.DefaultHandler;
+
+import javax.xml.parsers.SAXParser;
+import javax.xml.parsers.SAXParserFactory;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Comparator;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.joining;
+import static org.apache.ziplock.JarLocation.jarLocation;
+
+public class MavenConfiguration extends BaseGenerator {
+    @Override
+    protected String generate() {
+        return super.tableConfig() + "|===\n|Name|Default|Property\n" +
+                loadConfiguration()
+                        .sorted(Comparator.comparing(o -> o.name))
+                        .map(opt -> "|" + opt.name + "|" + ofNullable(opt.defaultValue).orElse("-") + '|' + opt.property)
+                        .collect(joining("\n")) + "\n|===\n";
+    }
+
+    private Stream<Config> loadConfiguration() {
+        try (final InputStream stream = new FileInputStream(new File(
+                jarLocation(MavenConfiguration.class).getParentFile().getParentFile().getParentFile(),
+                "meecrowave-maven-plugin/target/classes/META-INF/maven/plugin.xml"))) {
+            final SAXParserFactory factory = SAXParserFactory.newInstance();
+            factory.setNamespaceAware(true);
+            factory.setValidating(false);
+            final SAXParser parser = factory.newSAXParser();
+            final Collection<Config> configs = new ArrayList<>();
+            parser.parse(stream, new DefaultHandler() {
+                public Config config;
+                private boolean inMojo;
+                private boolean inConfiguration;
+                private StringBuilder builder;
+                private String goal;
+
+                @Override
+                public void startElement(final String uri, final String localName,
+                                         final String qName, final Attributes attributes) throws SAXException {
+                    if ("mojo".equals(localName)) {
+                        inMojo = true;
+                    } else if ("goal".equals(localName)) {
+                        builder = new StringBuilder();
+                    } else if ("run".equals(goal) && "configuration".equals(localName)) {
+                        inConfiguration = true;
+                    } else if (inConfiguration) {
+                        config = new Config();
+                        configs.add(config);
+                        config.name = localName;
+                        config.defaultValue = attributes.getValue("default-value");
+                        builder = new StringBuilder();
+                    }
+                }
+
+                @Override
+                public void characters(final char[] ch, final int start, final int length) throws SAXException {
+                    if (builder != null) {
+                        builder.append(ch, start, length);
+                    }
+                }
+
+                @Override
+                public void endElement(final String uri, final String localName, final String qName) throws SAXException {
+                    if ("mojo".equals(localName)) {
+                        inMojo = false;
+                        goal = null;
+                    } else if ("goal".equals(localName)) {
+                        goal = builder.toString();
+                        builder = null;
+                    } else if ("run".equals(goal) && "configuration".equals(localName)) {
+                        inConfiguration = false;
+                    } else if (inConfiguration) {
+                        config.property = builder.toString();
+                        builder = null;
+                        config = null;
+                    }
+                }
+            });
+            return configs.stream();
+        } catch (final Exception e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    public static final class Config {
+        private String name;
+        private String defaultValue;
+        private String property;
+    }
+}
diff --git a/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/OAuth2Configuration.java b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/OAuth2Configuration.java
new file mode 100644
index 0000000..004f60b
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/java/org/apache/meecrowave/doc/generator/OAuth2Configuration.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.doc.generator;
+
+import org.apache.meecrowave.oauth2.configuration.OAuth2Options;
+import org.apache.meecrowave.runner.cli.CliOption;
+
+import java.util.Comparator;
+import java.util.stream.Stream;
+
+import static java.util.stream.Collectors.joining;
+
+public class OAuth2Configuration extends BaseGenerator {
+    @Override
+    protected String generate() {
+        return super.tableConfig() + "|===\n|Name|Description\n" +
+                Stream.of(OAuth2Options.class.getDeclaredFields())
+                        .filter(f -> f.isAnnotationPresent(CliOption.class))
+                        .map(f -> f.getAnnotation(CliOption.class))
+                        .sorted(Comparator.comparing(CliOption::name))
+                        .map(f -> "|--" + f.name() + "|" + f.description())
+                        .collect(joining("\n")) + "\n|===\n";
+    }
+}
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/css/styles.css b/trunk/meecrowave-doc/src/main/jbake/assets/assets/css/styles.css
new file mode 100644
index 0000000..edb6c74
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/css/styles.css
@@ -0,0 +1,1263 @@
+/*   
+ * Template Name: PrettyDocs - Responsive Website Template for documentations
+ * Version: 1.0
+ * Author: Xiaoying Riley
+ * License: Creative Commons Attribution 3.0 License - https://creativecommons.org/licenses/by/3.0/
+ * Twitter: @3rdwave_themes
+ * Website: http://themes.3rdwavemedia.com/
+*/
+/* Theme default */
+/* ======= Base ======= */
+body {
+  font-family: 'Open Sans', arial, sans-serif;
+  color: #494d55;
+  font-size: 14px;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+html,
+body {
+  height: 100%;
+}
+.page-wrapper {
+  min-height: 100%;
+  /* equal to footer height */
+  margin-bottom: -50px;
+}
+.page-wrapper:after {
+  content: "";
+  display: block;
+  height: 50px;
+}
+.footer {
+  height: 50px;
+}
+p {
+  line-height: 1.5;
+}
+a {
+  color: #3aa7aa;
+  -webkit-transition: all 0.4s ease-in-out;
+  -moz-transition: all 0.4s ease-in-out;
+  -ms-transition: all 0.4s ease-in-out;
+  -o-transition: all 0.4s ease-in-out;
+}
+a:hover {
+  text-decoration: underline;
+  color: #339597;
+}
+a:focus {
+  text-decoration: none;
+}
+.btn,
+a.btn {
+  -webkit-transition: all 0.4s ease-in-out;
+  -moz-transition: all 0.4s ease-in-out;
+  -ms-transition: all 0.4s ease-in-out;
+  -o-transition: all 0.4s ease-in-out;
+  font-weight: 600;
+  font-size: 14px;
+  line-height: 1.5;
+}
+.btn .fa,
+a.btn .fa {
+  margin-right: 5px;
+}
+.btn-primary,
+a.btn-primary {
+  background: #40babd;
+  border: 1px solid #40babd;
+  color: #fff !important;
+}
+.btn-primary:hover,
+a.btn-primary:hover,
+.btn-primary:focus,
+a.btn-primary:focus,
+.btn-primary:active,
+a.btn-primary:active,
+.btn-primary.active,
+a.btn-primary.active,
+.btn-primary.hover,
+a.btn-primary.hover {
+  background: #3aa7aa;
+  color: #fff !important;
+  border: 1px solid #3aa7aa;
+}
+.btn-green,
+a.btn-green {
+  background: #75c181;
+  border: 1px solid #75c181;
+  color: #fff !important;
+}
+.btn-green:hover,
+a.btn-green:hover,
+.btn-green:focus,
+a.btn-green:focus,
+.btn-green:active,
+a.btn-green:active,
+.btn-green.active,
+a.btn-green.active,
+.btn-green.hover,
+a.btn-green.hover {
+  background: #63b971;
+  color: #fff !important;
+  border: 1px solid #63b971;
+}
+.body-green .btn-green,
+.body-green a.btn-green {
+  color: #fff !important;
+}
+.body-green .btn-green:hover,
+.body-green a.btn-green:hover,
+.body-green .btn-green:focus,
+.body-green a.btn-green:focus,
+.body-green .btn-green:active,
+.body-green a.btn-green:active,
+.body-green .btn-green.active,
+.body-green a.btn-green.active,
+.body-green .btn-green.hover,
+.body-green a.btn-green.hover {
+  color: #fff !important;
+}
+.btn-blue,
+a.btn-blue {
+  background: #58bbee;
+  border: 1px solid #58bbee;
+  color: #fff !important;
+}
+.btn-blue:hover,
+a.btn-blue:hover,
+.btn-blue:focus,
+a.btn-blue:focus,
+.btn-blue:active,
+a.btn-blue:active,
+.btn-blue.active,
+a.btn-blue.active,
+.btn-blue.hover,
+a.btn-blue.hover {
+  background: #41b2ec;
+  color: #fff !important;
+  border: 1px solid #41b2ec;
+}
+.btn-orange,
+a.btn-orange {
+  background: #F88C30;
+  border: 1px solid #F88C30;
+  color: #fff !important;
+}
+.btn-orange:hover,
+a.btn-orange:hover,
+.btn-orange:focus,
+a.btn-orange:focus,
+.btn-orange:active,
+a.btn-orange:active,
+.btn-orange.active,
+a.btn-orange.active,
+.btn-orange.hover,
+a.btn-orange.hover {
+  background: #f77e17;
+  color: #fff !important;
+  border: 1px solid #f77e17;
+}
+.btn-red,
+a.btn-red {
+  background: #f77b6b;
+  border: 1px solid #f77b6b;
+  color: #fff !important;
+}
+.btn-red:hover,
+a.btn-red:hover,
+.btn-red:focus,
+a.btn-red:focus,
+.btn-red:active,
+a.btn-red:active,
+.btn-red.active,
+a.btn-red.active,
+.btn-red.hover,
+a.btn-red.hover {
+  background: #f66553;
+  color: #fff !important;
+  border: 1px solid #f66553;
+}
+.btn-pink,
+a.btn-pink {
+  background: #EA5395;
+  border: 1px solid #EA5395;
+  color: #fff !important;
+}
+.btn-pink:hover,
+a.btn-pink:hover,
+.btn-pink:focus,
+a.btn-pink:focus,
+.btn-pink:active,
+a.btn-pink:active,
+.btn-pink.active,
+a.btn-pink.active,
+.btn-pink.hover,
+a.btn-pink.hover {
+  background: #e73c87;
+  color: #fff !important;
+  border: 1px solid #e73c87;
+}
+.btn-purple,
+a.btn-purple {
+  background: #8A40A7;
+  border: 1px solid #8A40A7;
+  color: #fff !important;
+}
+.btn-purple:hover,
+a.btn-purple:hover,
+.btn-purple:focus,
+a.btn-purple:focus,
+.btn-purple:active,
+a.btn-purple:active,
+.btn-purple.active,
+a.btn-purple.active,
+.btn-purple.hover,
+a.btn-purple.hover {
+  background: #7b3995;
+  color: #fff !important;
+  border: 1px solid #7b3995;
+}
+.btn-cta {
+  padding: 7px 15px;
+}
+.form-control {
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  height: 40px;
+  border-color: #f0f0f0;
+}
+.form-control::-webkit-input-placeholder {
+  /* WebKit browsers */
+  color: #afb3bb;
+}
+.form-control:-moz-placeholder {
+  /* Mozilla Firefox 4 to 18 */
+  color: #afb3bb;
+}
+.form-control::-moz-placeholder {
+  /* Mozilla Firefox 19+ */
+  color: #afb3bb;
+}
+.form-control:-ms-input-placeholder {
+  /* Internet Explorer 10+ */
+  color: #afb3bb;
+}
+.form-control:focus {
+  border-color: #e3e3e3;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+input[type="text"],
+input[type="email"],
+input[type="password"],
+input[type="submit"],
+input[type="button"],
+textarea,
+select {
+  appearance: none;
+  /* for mobile safari */
+  -webkit-appearance: none;
+}
+#topcontrol {
+  background: #40babd;
+  color: #fff;
+  text-align: center;
+  display: inline-block;
+  width: 35px;
+  height: 35px;
+  border: none;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  -webkit-transition: all 0.4s ease-in-out;
+  -moz-transition: all 0.4s ease-in-out;
+  -ms-transition: all 0.4s ease-in-out;
+  -o-transition: all 0.4s ease-in-out;
+  z-index: 30;
+}
+#topcontrol:hover {
+  background: #52c2c4;
+}
+#topcontrol .fa {
+  position: relative;
+  top: 3px;
+  font-size: 25px;
+}
+.video-container iframe {
+  max-width: 100%;
+}
+/* ====== Header ====== */
+.header {
+  background: #494d55;
+  color: rgba(255, 255, 255, 0.85);
+  border-top: 5px solid #40babd;
+  padding: 30px 0;
+}
+.header a {
+  color: #fff;
+}
+.branding {
+  text-transform: uppercase;
+  margin-bottom: 10px;
+}
+.branding .logo {
+  font-size: 28px;
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.branding .logo a {
+  text-decoration: none;
+}
+.branding .text-highlight {
+  color: #40babd;
+}
+.body-green .branding .text-highlight {
+  color: #75c181;
+}
+.body-blue .branding .text-highlight {
+  color: #58bbee;
+}
+.body-orange .branding .text-highlight {
+  color: #F88C30;
+}
+.body-red .branding .text-highlight {
+  color: #f77b6b;
+}
+.body-pink .branding .text-highlight {
+  color: #EA5395;
+}
+.body-purple .branding .text-highlight {
+  color: #8A40A7;
+}
+.branding .text-bold {
+  font-weight: 800;
+  color: #fff;
+}
+.branding .icon {
+  font-size: 24px;
+  color: #40babd;
+}
+.body-green .branding .icon {
+  color: #75c181;
+}
+.body-blue .branding .icon {
+  color: #58bbee;
+}
+.body-orange .branding .icon {
+  color: #F88C30;
+}
+.body-red .branding .icon {
+  color: #f77b6b;
+}
+.body-pink .branding .icon {
+  color: #EA5395;
+}
+.body-purple .branding .icon {
+  color: #8A40A7;
+}
+.breadcrumb {
+  background: none;
+  margin-bottom: 0;
+  padding: 0;
+}
+.breadcrumb li {
+  color: rgba(255, 255, 255, 0.5);
+}
+.breadcrumb li.active {
+  color: rgba(255, 255, 255, 0.5);
+}
+.breadcrumb li a {
+  color: rgba(255, 255, 255, 0.5);
+}
+.breadcrumb li a:hover {
+  color: #fff;
+}
+.breadcrumb > li + li:before {
+  color: rgba(0, 0, 0, 0.4);
+}
+/* ====== Footer ====== */
+.footer {
+  background: #26282c;
+  color: rgba(255, 255, 255, 0.6);
+  padding: 15px 0;
+}
+.footer a {
+  color: #40babd;
+}
+.footer .fa-heart {
+  color: #EA5395;
+}
+/* ======= Doc Styling ======= */
+.doc-wrapper {
+  padding: 45px 0;
+  background: #f9f9fb;
+}
+.doc-body {
+  position: relative;
+  min-height: 200px;
+}
+.doc-header {
+  margin-bottom: 30px;
+}
+.doc-header .doc-title {
+  color: #40babd;
+  margin-top: 0;
+  font-size: 36px;
+}
+.body-green .doc-header .doc-title {
+  color: #75c181;
+}
+.body-blue .doc-header .doc-title {
+  color: #58bbee;
+}
+.body-orange .doc-header .doc-title {
+  color: #F88C30;
+}
+.body-red .doc-header .doc-title {
+  color: #f77b6b;
+}
+.body-pink .doc-header .doc-title {
+  color: #EA5395;
+}
+.body-purple .doc-header .doc-title {
+  color: #8A40A7;
+}
+.doc-header .icon {
+  font-size: 30px;
+}
+.doc-header .meta {
+  color: #a2a6af;
+}
+.doc-content {
+  margin-left: 230px;
+}
+.doc-section {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+.doc-section .section-title {
+  font-size: 26px;
+  margin-top: 0;
+  margin-bottom: 0;
+  font-weight: bold;
+  padding-bottom: 10px;
+  border-bottom: 1px solid #d7d7d7;
+}
+.doc-section h1 {
+  font-size: 24px;
+  font-weight: bold;
+}
+.doc-section h2 {
+  font-size: 22px;
+  font-weight: bold;
+}
+.doc-section h3 {
+  font-size: 20px;
+  font-weight: bold;
+}
+.doc-section h4 {
+  font-size: 18px;
+  font-weight: bold;
+}
+.doc-section h5 {
+  font-size: 16px;
+  font-weight: bold;
+}
+.doc-section h6 {
+  font-size: 14px;
+  font-weight: bold;
+}
+.section-block {
+  padding-top: 15px;
+  padding-bottom: 15px;
+}
+.section-block .block-title {
+  margin-top: 0;
+}
+.section-block .list > li {
+  margin-bottom: 10px;
+}
+.section-block .list ul > li {
+  margin-top: 5px;
+}
+.question {
+  font-weight: 400 !important;
+  color: #3aa7aa;
+}
+.question .body-green {
+  color: #63b971;
+}
+.body-blue .question {
+  color: #41b2ec;
+}
+.body-orange .question {
+  color: #f77e17;
+}
+.body-pink .question {
+  color: #e73c87;
+}
+.body-purple .question {
+  color: #7b3995;
+}
+.question .fa {
+  -webkit-opacity: 0.6;
+  -moz-opacity: 0.6;
+  opacity: 0.6;
+}
+.question .label {
+  font-size: 11px;
+  vertical-align: middle;
+}
+.answer {
+  color: #616670;
+}
+.code-block {
+  margin-top: 30px;
+  margin-bottom: 30px;
+}
+.callout-block {
+  padding: 30px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  position: relative;
+  margin-bottom: 30px;
+}
+.callout-block a {
+  color: rgba(0, 0, 0, 0.55) !important;
+}
+.callout-block a:hover {
+  color: rgba(0, 0, 0, 0.65) !important;
+}
+.callout-block .icon-holder {
+  font-size: 30px;
+  position: absolute;
+  left: 30px;
+  top: 30px;
+  color: rgba(0, 0, 0, 0.25);
+}
+.callout-block .content {
+  margin-left: 60px;
+}
+.callout-block .content p:last-child {
+  margin-bottom: 0;
+}
+.callout-block .callout-title {
+  margin-top: 0;
+  margin-bottom: 5px;
+  color: rgba(0, 0, 0, 0.65);
+}
+.callout-info {
+  background: #58bbee;
+  color: #fff;
+}
+.callout-success {
+  background: #75c181;
+  color: #fff;
+}
+.callout-warning {
+  background: #F88C30;
+  color: #fff;
+}
+.callout-danger {
+  background: #f77b6b;
+  color: #fff;
+}
+.table > thead > tr > th {
+  border-bottom-color: #8bd6d8;
+}
+.body-green .table > thead > tr > th {
+  border-bottom-color: #bbe1c1;
+}
+.body-blue .table > thead > tr > th {
+  border-bottom-color: #b5e1f7;
+}
+.body-orange .table > thead > tr > th {
+  border-bottom-color: #fbc393;
+}
+.body-pink .table > thead > tr > th {
+  border-bottom-color: #f5aecd;
+}
+.body-purple .table > thead > tr > th {
+  border-bottom-color: #b87fce;
+}
+.table-bordered > thead > tr > th {
+  border-bottom-color: inherit;
+}
+.table-striped > tbody > tr:nth-of-type(odd) {
+  background-color: #f5f5f5;
+}
+.screenshot-holder {
+  margin-top: 15px;
+  margin-bottom: 15px;
+  position: relative;
+  text-align: center;
+}
+.screenshot-holder img {
+  border: 1px solid #f0f0f0;
+}
+.screenshot-holder .mask {
+  display: block;
+  visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  background: rgba(0, 0, 0, 0.25);
+  cursor: pointer;
+  text-decoration: none;
+}
+.screenshot-holder .mask .icon {
+  color: #fff;
+  font-size: 42px;
+  display: block;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 50%;
+  margin-top: -21px;
+}
+.screenshot-holder:hover .mask {
+  visibility: visible;
+}
+.jumbotron h1 {
+  font-size: 28px;
+  margin-top: 0;
+  margin-bottom: 30px;
+}
+.author-profile {
+  margin-top: 30px;
+}
+.author-profile img {
+  width: 100px;
+  height: 100px;
+}
+.speech-bubble {
+  background: #fff;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  padding: 30px;
+  margin-top: 20px;
+  margin-bottom: 30px;
+  position: relative;
+}
+.speech-bubble .speech-title {
+  font-size: 16px;
+}
+.jumbotron .speech-bubble p {
+  font-size: 14px;
+  font-weight: normal;
+  color: #616670;
+}
+.speech-bubble:before {
+  content: "";
+  display: inline-block;
+  position: absolute;
+  left: 50%;
+  top: -10px;
+  margin-left: -10px;
+  width: 0;
+  height: 0;
+  border-left: 10px solid transparent;
+  border-right: 10px solid transparent;
+  border-bottom: 10px solid #fff;
+}
+.card {
+  text-align: center;
+  border: 1px solid #e3e3e3;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+  margin-bottom: 30px;
+  position: relative;
+}
+.card .card-block {
+  padding: 15px;
+}
+.card .mask {
+  display: block;
+  visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  background: rgba(0, 0, 0, 0.25);
+  cursor: pointer;
+  text-decoration: none;
+}
+.card .mask .icon {
+  color: #fff;
+  font-size: 42px;
+  margin-top: 25%;
+}
+.card:hover .mask {
+  visibility: visible;
+}
+/* Color Schemes */
+.body-green .header {
+  border-color: #75c181;
+}
+.body-green a {
+  color: #75c181;
+}
+.body-green a:hover {
+  color: #52b161;
+}
+.body-blue .header {
+  border-color: #58bbee;
+}
+.body-blue a {
+  color: #58bbee;
+}
+.body-blue a:hover {
+  color: #2aa8e9;
+}
+.body-orange .header {
+  border-color: #F88C30;
+}
+.body-orange a {
+  color: #F88C30;
+}
+.body-orange a:hover {
+  color: #ed7108;
+}
+.body-pink .header {
+  border-color: #EA5395;
+}
+.body-pink a {
+  color: #EA5395;
+}
+.body-pink a:hover {
+  color: #e42679;
+}
+.body-purple .header {
+  border-color: #8A40A7;
+}
+.body-purple a {
+  color: #8A40A7;
+}
+.body-purple a:hover {
+  color: #6c3282;
+}
+.body-red .header {
+  border-color: #f77b6b;
+}
+.body-red a {
+  color: #f77b6b;
+}
+.body-red a:hover {
+  color: #f4503b;
+}
+/* Sidebar */
+.doc-sidebar {
+  width: 200px;
+}
+.doc-menu {
+  list-style: none;
+  padding-left: 0;
+}
+.doc-menu > li {
+  margin-bottom: 5px;
+}
+.doc-menu > li > a {
+  display: block;
+  padding: 5px 15px;
+  border-left: 4px solid transparent;
+  color: #616670;
+}
+.doc-menu > li > a:hover,
+.doc-menu > li > a:focus {
+  color: #40babd;
+  text-decoration: none;
+  background: none;
+}
+.body-green .doc-menu > li > a:hover,
+.body-green .doc-menu > li > a:focus {
+  color: #75c181;
+}
+.body-blue .doc-menu > li > a:hover,
+.body-blue .doc-menu > li > a:focus {
+  color: #58bbee;
+}
+.body-orange .doc-menu > li > a:hover,
+.body-orange .doc-menu > li > a:focus {
+  color: #F88C30;
+}
+.body-red .doc-menu > li > a:hover,
+.body-red .doc-menu > li > a:focus {
+  color: #f77b6b;
+}
+.body-pink .doc-menu > li > a:hover,
+.body-pink .doc-menu > li > a:focus {
+  color: #EA5395;
+}
+.body-purple .doc-menu > li > a:hover,
+.body-purple .doc-menu > li > a:focus {
+  color: #8A40A7;
+}
+.doc-menu > li.active > a {
+  background: none;
+  border-left: 4px solid #40babd;
+  color: #40babd;
+  font-weight: 600;
+}
+.body-green .doc-menu > li.active > a {
+  color: #75c181;
+  border-color: #75c181;
+}
+.body-blue .doc-menu > li.active > a {
+  color: #58bbee;
+  border-color: #58bbee;
+}
+.body-orange .doc-menu > li.active > a {
+  color: #F88C30;
+  border-color: #F88C30;
+}
+.body-red .doc-menu > li.active > a {
+  color: #f77b6b;
+  border-color: #f77b6b;
+}
+.body-pink .doc-menu > li.active > a {
+  color: #EA5395;
+  border-color: #EA5395;
+}
+.body-purple .doc-menu > li.active > a {
+  color: #8A40A7;
+  border-color: #8A40A7;
+}
+.doc-sub-menu {
+  list-style: none;
+  padding-left: 0;
+}
+.doc-sub-menu > li {
+  margin-bottom: 10px;
+  font-size: 12px;
+}
+.doc-sub-menu > li:first-child {
+  padding-top: 5px;
+}
+.doc-sub-menu > li > a {
+  display: block;
+  color: #616670;
+  padding: 0;
+  padding-left: 34px;
+  background: none;
+}
+.doc-sub-menu > li > a:hover {
+  color: #40babd;
+  text-decoration: none;
+  background: none;
+}
+.body-green .doc-sub-menu > li > a:hover {
+  color: #75c181;
+}
+.body-blue .doc-sub-menu > li > a:hover {
+  color: #58bbee;
+}
+.body-orange .doc-sub-menu > li > a:hover {
+  color: #F88C30;
+}
+.body-red .doc-sub-menu > li > a:hover {
+  color: #f77b6b;
+}
+.body-pink .doc-sub-menu > li > a:hover {
+  color: #EA5395;
+}
+.body-purple .doc-sub-menu > li > a:hover {
+  color: #8A40A7;
+}
+.doc-sub-menu > li > a:focus {
+  background: none;
+}
+.doc-sub-menu > li.active > a {
+  background: none;
+  color: #40babd;
+}
+.body-green .doc-sub-menu > li.active > a {
+  color: #75c181;
+}
+.body-blue .doc-sub-menu > li.active > a {
+  color: #58bbee;
+}
+.body-orange .doc-sub-menu > li.active > a {
+  color: #F88C30;
+}
+.body-red .doc-sub-menu > li.active > a {
+  color: #f77b6b;
+}
+.body-pink .doc-sub-menu > li.active > a {
+  color: #EA5395;
+}
+.body-purple .doc-sub-menu > li.active > a {
+  color: #8A40A7;
+}
+.affix-top {
+  position: absolute;
+  top: 15px;
+}
+.affix {
+  top: 15px;
+}
+.affix,
+.affix-bottom {
+  width: 230px;
+}
+.affix-bottom {
+  position: absolute;
+}
+/* ===== Promo block ===== */
+.promo-block {
+  background: #3aa7aa;
+}
+.body-green .promo-block {
+  background: #63b971;
+}
+.body-blue .promo-block {
+  background: #41b2ec;
+}
+.body-orange .promo-block {
+  background: #f77e17;
+}
+.body-pink .promo-block {
+  background: #e73c87;
+}
+.body-purple .promo-block {
+  background: #7b3995;
+}
+.promo-block a {
+  color: rgba(0, 0, 0, 0.5);
+}
+.promo-block a:hover {
+  color: rgba(0, 0, 0, 0.6);
+}
+.promo-block .promo-block-inner {
+  padding: 45px;
+  color: #fff;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+}
+.promo-block .promo-title {
+  font-size: 20px;
+  font-weight: 800;
+  margin-top: 0;
+  margin-bottom: 45px;
+}
+.promo-block .promo-title .fa {
+  color: rgba(0, 0, 0, 0.5);
+}
+.promo-block .figure-holder-inner {
+  background: #fff;
+  margin-bottom: 30px;
+  position: relative;
+  text-align: center;
+}
+.promo-block .figure-holder-inner img {
+  border: 5px solid #fff;
+}
+.promo-block .figure-holder-inner .mask {
+  display: block;
+  visibility: hidden;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  left: 0;
+  top: 0;
+  background: rgba(255, 255, 255, 0.65);
+  cursor: pointer;
+  text-decoration: none;
+}
+.promo-block .figure-holder-inner .mask .icon {
+  color: #fff;
+  font-size: 42px;
+  display: block;
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 50%;
+  margin-top: -21px;
+}
+.promo-block .figure-holder-inner .mask .icon.pink {
+  color: #EA5395;
+}
+.promo-block .figure-holder-inner:hover .mask {
+  visibility: visible;
+}
+.promo-block .content-holder-inner {
+  padding-left: 15px;
+  padding-right: 15px;
+}
+.promo-block .content-title {
+  font-size: 16px;
+  font-weight: 600;
+  margin-top: 0;
+}
+.promo-block .highlight {
+  color: rgba(0, 0, 0, 0.4);
+}
+.promo-block .btn-cta {
+  background: rgba(0, 0, 0, 0.35);
+  border: none;
+  color: #fff !important;
+  margin-bottom: 15px;
+}
+.promo-block .btn-cta:hover {
+  background: rgba(0, 0, 0, 0.5);
+  border: none;
+  color: #fff !important;
+}
+/* Extra small devices (phones, less than 768px) */
+@media (max-width: 767px) {
+  .doc-content {
+    margin-left: 0;
+  }
+  .jumbotron {
+    padding: 30px 15px;
+  }
+  .jumbotron h1 {
+    font-size: 24px;
+    margin-bottom: 15px;
+  }
+  .jumbotron p {
+    font-size: 18px;
+  }
+  .promo-block .promo-block-inner {
+    padding: 30px 15px;
+  }
+  .promo-block .content-holder-inner {
+    padding: 0;
+  }
+  .promo-block .promo-title {
+    margin-bottom: 30px;
+  }
+}
+/* Small devices (tablets, 768px and up) */
+/* Medium devices (desktops, 992px and up) */
+/* Large devices (large desktops, 1200px and up) */
+/* ======= Landing Page ======= */
+.landing-page .header {
+  background: #494d55;
+  color: rgba(255, 255, 255, 0.85);
+  padding: 60px 0;
+}
+.landing-page .header a {
+  color: #fff;
+}
+.landing-page .branding {
+  text-transform: uppercase;
+  margin-bottom: 20px;
+}
+.landing-page .branding .logo {
+  font-size: 38px;
+  margin-top: 0;
+  margin-bottom: 0;
+}
+.landing-page .branding .text-bold {
+  font-weight: 800;
+  color: #fff;
+}
+.landing-page .branding .icon {
+  font-size: 32px;
+  color: #40babd;
+}
+.landing-page .tagline {
+  font-weight: 600;
+  font-size: 20px;
+}
+.landing-page .tagline p {
+  margin-bottom: 5px;
+}
+.landing-page .tagline .text-highlight {
+  color: #266f71;
+}
+.landing-page .fa-heart {
+  color: #EA5395;
+}
+.landing-page .cta-container {
+  margin-top: 30px;
+}
+.landing-page .social-container {
+  margin-top: 30px;
+}
+.landing-page .social-container .twitter-tweet {
+  display: inline-block;
+  margin-right: 5px;
+  position: relative;
+  top: 5px;
+}
+.landing-page .social-container .fab-like {
+  display: inline-block;
+}
+.cards-section {
+  padding: 60px 0;
+  background: #f9f9fb;
+}
+.cards-section .title {
+  margin-top: 0;
+  margin-bottom: 15px;
+  font-size: 24px;
+  font-weight: 600;
+}
+.cards-section .intro {
+  margin: 0 auto;
+  max-width: 800px;
+  margin-bottom: 60px;
+  color: #616670;
+}
+.cards-section .cards-wrapper {
+  max-width: 860px;
+  margin-left: auto;
+  margin-right: auto;
+}
+.cards-section .item {
+  margin-bottom: 30px;
+}
+.cards-section .item .icon-holder {
+  margin-bottom: 15px;
+}
+.cards-section .item .icon {
+  font-size: 36px;
+}
+.cards-section .item .title {
+  font-size: 16px;
+  font-weight: 600;
+}
+.cards-section .item .intro {
+  margin-bottom: 15px;
+}
+.cards-section .item-inner {
+  padding: 45px 30px;
+  background: #fff;
+  position: relative;
+  border: 1px solid #f0f0f0;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  -ms-border-radius: 4px;
+  -o-border-radius: 4px;
+  border-radius: 4px;
+  -moz-background-clip: padding;
+  -webkit-background-clip: padding-box;
+  background-clip: padding-box;
+}
+.cards-section .item-inner .link {
+  position: absolute;
+  width: 100%;
+  height: 100%;
+  top: 0;
+  left: 0;
+  z-index: 1;
+  background-image: url("../images/empty.gif");
+  /* for IE8 */
+}
+.cards-section .item-inner:hover {
+  background: #f5f5f5;
+}
+.cards-section .item-primary .item-inner {
+  border-top: 3px solid #40babd;
+}
+.cards-section .item-primary .item-inner:hover .title {
+  color: #2d8284;
+}
+.cards-section .item-primary .icon {
+  color: #40babd;
+}
+.cards-section .item-green .item-inner {
+  border-top: 3px solid #75c181;
+}
+.cards-section .item-green .item-inner:hover .title {
+  color: #48a156;
+}
+.cards-section .item-green .icon {
+  color: #75c181;
+}
+.cards-section .item-blue .item-inner {
+  border-top: 3px solid #58bbee;
+}
+.cards-section .item-blue .item-inner:hover .title {
+  color: #179de2;
+}
+.cards-section .item-blue .icon {
+  color: #58bbee;
+}
+.cards-section .item-orange .item-inner {
+  border-top: 3px solid #F88C30;
+}
+.cards-section .item-orange .item-inner:hover .title {
+  color: #d46607;
+}
+.cards-section .item-orange .icon {
+  color: #F88C30;
+}
+.cards-section .item-red .item-inner {
+  border-top: 3px solid #f77b6b;
+}
+.cards-section .item-red .item-inner:hover .title {
+  color: #f33a22;
+}
+.cards-section .item-red .icon {
+  color: #f77b6b;
+}
+.cards-section .item-pink .item-inner {
+  border-top: 3px solid #EA5395;
+}
+.cards-section .item-pink .item-inner:hover .title {
+  color: #d61a6c;
+}
+.cards-section .item-pink .icon {
+  color: #EA5395;
+}
+.cards-section .item-purple .item-inner {
+  border-top: 3px solid #8A40A7;
+}
+.cards-section .item-purple .item-inner:hover .title {
+  color: #5c2b70;
+}
+.cards-section .item-purple .icon {
+  color: #8A40A7;
+}
+/* Extra small devices (phones, less than 768px) */
+@media (max-width: 767px) {
+  .cards-section .item-inner {
+    padding: 30px 15px;
+  }
+}
+/* Small devices (tablets, 768px and up) */
+/* Medium devices (desktops, 992px and up) */
+/* Large devices (large desktops, 1200px and up) */
+
+
+pre {
+    padding: 0;
+}
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/images/empty.gif b/trunk/meecrowave-doc/src/main/jbake/assets/assets/images/empty.gif
new file mode 100644
index 0000000..0f3a0a4
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/images/empty.gif
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/js/main.js b/trunk/meecrowave-doc/src/main/jbake/assets/assets/js/main.js
new file mode 100644
index 0000000..da07fe8
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/js/main.js
@@ -0,0 +1,49 @@
+$(document).ready(function() {
+	
+	/* ===== Affix Sidebar ===== */
+	/* Ref: http://getbootstrap.com/javascript/#affix-examples */
+
+    	
+	$('#doc-menu').affix({
+        offset: {
+            top: ($('#header').outerHeight(true) + $('#doc-header').outerHeight(true)) + 45,
+            bottom: ($('#footer').outerHeight(true) + $('#promo-block').outerHeight(true)) + 75
+        }
+    });
+    
+    /* Hack related to: https://github.com/twbs/bootstrap/issues/10236 */
+    $(window).on('load resize', function() {
+        $(window).trigger('scroll'); 
+    });
+
+    /* Activate scrollspy menu */
+    $('body').scrollspy({target: '#doc-nav', offset: 100});
+
+    /*
+    // Smooth scrolling
+	$('a.scrollto').on('click', function(e){
+        //store hash
+        var target = this.hash;    
+        e.preventDefault();
+		$('body').scrollTo(target, 800, {offset: 0, 'axis':'y'});
+		
+	});
+	*/
+	
+    
+    /* ======= jQuery Responsive equal heights plugin ======= */
+    /* Ref: https://github.com/liabru/jquery-match-height */
+    
+     $('#cards-wrapper .item-inner').matchHeight();
+     $('#showcase .card').matchHeight();
+     
+    /* Bootstrap lightbox */
+    /* Ref: http://ashleydw.github.io/lightbox/ */
+
+    $(document).delegate('*[data-toggle="lightbox"]', 'click', function(e) {
+        e.preventDefault();
+        $(this).ekkoLightbox();
+    });    
+
+    hljs.initHighlightingOnLoad();
+});
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css
new file mode 100755
index 0000000..4cf729e
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css
@@ -0,0 +1,6 @@
+/*!
+ * Bootstrap v3.3.6 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
+ *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);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')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.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-md-1,.col-md-10,.col-md-11,.col-md-12,.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-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.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-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-top:4px\9;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.form-control-static{min-height:34px;padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#337ab7;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-timing-function:ease;-o-transition-timing-function:ease;transition-timing-function:ease;-webkit-transition-duration:.35s;-o-transition-duration:.35s;transition-duration:.35s;-webkit-transition-property:height,visibility;-o-transition-property:height,visibility;transition-property:height,visibility}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid\9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{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);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);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);-webkit-background-size:40px 40px;background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{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);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);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)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{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);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);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)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{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);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);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)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{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);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);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)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#777;cursor:not-allowed;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%)}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;filter:alpha(opacity=0);opacity:0;line-break:auto}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;font-style:normal;font-weight:400;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);line-break:auto}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{left:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{left:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{left:0;-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000\9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}
+/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css.map b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css.map
new file mode 100755
index 0000000..5f49bb3
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/css/bootstrap.min.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["less/normalize.less","less/print.less","bootstrap.css","dist/css/bootstrap.css","less/glyphicons.less","less/scaffolding.less","less/mixins/vendor-prefixes.less","less/mixins/tab-focus.less","less/mixins/image.less","less/type.less","less/mixins/text-emphasis.less","less/mixins/background-variant.less","less/mixins/text-overflow.less","less/code.less","less/grid.less","less/mixins/grid.less","less/mixins/grid-framework.less","less/tables.less","less/mixins/table-row.less","less/forms.less","less/mixins/forms.less","less/buttons.less","less/mixins/buttons.less","less/mixins/opacity.less","less/component-animations.less","less/dropdowns.less","less/mixins/nav-divider.less","less/mixins/reset-filter.less","less/button-groups.less","less/mixins/border-radius.less","less/input-groups.less","less/navs.less","less/navbar.less","less/mixins/nav-vertical-align.less","less/utilities.less","less/breadcrumbs.less","less/pagination.less","less/mixins/pagination.less","less/pager.less","less/labels.less","less/mixins/labels.less","less/badges.less","less/jumbotron.less","less/thumbnails.less","less/alerts.less","less/mixins/alerts.less","less/progress-bars.less","less/mixins/gradients.less","less/mixins/progress-bar.less","less/media.less","less/list-group.less","less/mixins/list-group.less","less/panels.less","less/mixins/panels.less","less/responsive-embed.less","less/wells.less","less/close.less","less/modals.less","less/tooltip.less","less/mixins/reset-text.less","less/popovers.less","less/carousel.less","less/mixins/clearfix.less","less/mixins/center-block.less","less/mixins/hide-text.less","less/responsive-utilities.less","less/mixins/responsive-visibility.less"],"names":[],"mappings":";;;;4EAQA,KACE,YAAA,WACA,yBAAA,KACA,qBAAA,KAOF,KACE,OAAA,EAaF,QAAA,MAAA,QAAA,WAAA,OAAA,OAAA,OAAA,OAAA,KAAA,KAAA,IAAA,QAAA,QAaE,QAAA,MAQF,MAAA,OAAA,SAAA,MAIE,QAAA,aACA,eAAA,SAQF,sBACE,QAAA,KACA,OAAA,EAQF,SAAA,SAEE,QAAA,KAUF,EACE,iBAAA,YAQF,SAAA,QAEE,QAAA,EAUF,YACE,cAAA,IAAA,OAOF,EAAA,OAEE,YAAA,IAOF,IACE,WAAA,OAQF,GACE,OAAA,MAAA,EACA,UAAA,IAOF,KACE,MAAA,KACA,WAAA,KAOF,MACE,UAAA,IAOF,IAAA,IAEE,SAAA,SACA,UAAA,IACA,YAAA,EACA,eAAA,SAGF,IACE,IAAA,MAGF,IACE,OAAA,OAUF,IACE,OAAA,EAOF,eACE,SAAA,OAUF,OACE,OAAA,IAAA,KAOF,GACE,OAAA,EAAA,mBAAA,YAAA,gBAAA,YACA,WAAA,YAOF,IACE,SAAA,KAOF,KAAA,IAAA,IAAA,KAIE,YAAA,UAAA,UACA,UAAA,IAkBF,OAAA,MAAA,SAAA,OAAA,SAKE,OAAA,EACA,KAAA,QACA,MAAA,QAOF,OACE,SAAA,QAUF,OAAA,OAEE,eAAA,KAWF,OAAA,wBAAA,kBAAA,mBAIE,mBAAA,OACA,OAAA,QAOF,iBAAA,qBAEE,OAAA,QAOF,yBAAA,wBAEE,QAAA,EACA,OAAA,EAQF,MACE,YAAA,OAWF,qBAAA,kBAEE,mBAAA,WAAA,gBAAA,WAAA,WAAA,WACA,QAAA,EASF,8CAAA,8CAEE,OAAA,KAQF,mBACE,mBAAA,YACA,gBAAA,YAAA,WAAA,YAAA,mBAAA,UASF,iDAAA,8CAEE,mBAAA,KAOF,SACE,QAAA,MAAA,OAAA,MACA,OAAA,EAAA,IACA,OAAA,IAAA,MAAA,OAQF,OACE,QAAA,EACA,OAAA,EAOF,SACE,SAAA,KAQF,SACE,YAAA,IAUF,MACE,eAAA,EACA,gBAAA,SAGF,GAAA,GAEE,QAAA,uFCjUF,aA7FI,EAAA,OAAA,QAGI,MAAA,eACA,YAAA,eACA,WAAA,cAAA,mBAAA,eACA,WAAA,eAGJ,EAAA,UAEI,gBAAA,UAGJ,cACI,QAAA,KAAA,WAAA,IAGJ,kBACI,QAAA,KAAA,YAAA,IAKJ,6BAAA,mBAEI,QAAA,GAGJ,WAAA,IAEI,OAAA,IAAA,MAAA,KC4KL,kBAAA,MDvKK,MC0KL,QAAA,mBDrKK,IE8KN,GDLC,kBAAA,MDrKK,ICwKL,UAAA,eCUD,GF5KM,GE2KN,EF1KM,QAAA,ECuKL,OAAA,ECSD,GF3KM,GCsKL,iBAAA,MD/JK,QCkKL,QAAA,KCSD,YFtKU,oBCiKT,iBAAA,eD7JK,OCgKL,OAAA,IAAA,MAAA,KD5JK,OC+JL,gBAAA,mBCSD,UFpKU,UC+JT,iBAAA,eDzJS,mBEkKV,mBDLC,OAAA,IAAA,MAAA,gBEjPD,WACA,YAAA,uBFsPD,IAAA,+CE7OC,IAAK,sDAAuD,4BAA6B,iDAAkD,gBAAiB,gDAAiD,eAAgB,+CAAgD,mBAAoB,2EAA4E,cAE7W,WACA,SAAA,SACA,IAAA,IACA,QAAA,aACA,YAAA,uBACA,WAAA,OACA,YAAA,IACA,YAAA,EAIkC,uBAAA,YAAW,wBAAA,UACX,2BAAW,QAAA,QAEX,uBDuPlC,QAAS,QCtPyB,sBFiPnC,uBEjP8C,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,qBAAW,QAAA,QACX,0BAAW,QAAA,QACX,qBAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,2BAAW,QAAA,QACX,sBAAW,QAAA,QACX,yBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,+BAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,8BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,yBAAW,QAAA,QACX,8BAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,gCAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,iCAAW,QAAA,QACX,0BAAW,QAAA,QACX,6BAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,gCAAW,QAAA,QACX,gCAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,0BAAW,QAAA,QACX,+BAAW,QAAA,QACX,+BAAW,QAAA,QACX,wBAAW,QAAA,QACX,+BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,0BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,gCAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,6BAAW,QAAA,QACX,8BAAW,QAAA,QACX,2BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,mCAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,+BAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,yBAAW,QAAA,QACX,0BAAW,QAAA,QACX,yBAAW,QAAA,QACX,6BAAW,QAAA,QACX,+BAAW,QAAA,QACX,0BAAW,QAAA,QACX,gCAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,kCAAW,QAAA,QACX,oCAAW,QAAA,QACX,sBAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,0BAAW,QAAA,QACX,4BAAW,QAAA,QACX,qCAAW,QAAA,QACX,oCAAW,QAAA,QACX,kCAAW,QAAA,QACX,oCAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,8BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,uBAAW,QAAA,QACX,mCAAW,QAAA,QACX,uCAAW,QAAA,QACX,gCAAW,QAAA,QACX,oCAAW,QAAA,QACX,qCAAW,QAAA,QACX,yCAAW,QAAA,QACX,4BAAW,QAAA,QACX,yBAAW,QAAA,QACX,gCAAW,QAAA,QACX,8BAAW,QAAA,QACX,yBAAW,QAAA,QACX,wBAAW,QAAA,QACX,0BAAW,QAAA,QACX,6BAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,yBAAW,QAAA,QACX,yBAAW,QAAA,QACX,uBAAW,QAAA,QACX,8BAAW,QAAA,QACX,+BAAW,QAAA,QACX,gCAAW,QAAA,QACX,8BAAW,QAAA,QACX,8BAAW,QAAA,QACX,8BAAW,QAAA,QACX,2BAAW,QAAA,QACX,0BAAW,QAAA,QACX,yBAAW,QAAA,QACX,6BAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,2BAAW,QAAA,QACX,2BAAW,QAAA,QACX,4BAAW,QAAA,QACX,+BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,iCAAW,QAAA,QACX,oCAAW,QAAA,QACX,iCAAW,QAAA,QACX,+BAAW,QAAA,QACX,+BAAW,QAAA,QACX,iCAAW,QAAA,QACX,qBAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,2BAAW,QAAA,QACX,uBAAW,QAAA,QASX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,uBAAW,QAAA,QACX,wBAAW,QAAA,QACX,uBAAW,QAAA,QACX,yBAAW,QAAA,QACX,yBAAW,QAAA,QACX,+BAAW,QAAA,QACX,uBAAW,QAAA,QACX,6BAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,uBAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,2BAAW,QAAA,QACX,0BAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,4BAAW,QAAA,QACX,mCAAW,QAAA,QACX,4BAAW,QAAA,QACX,oCAAW,QAAA,QACX,kCAAW,QAAA,QACX,iCAAW,QAAA,QACX,+BAAW,QAAA,QACX,sBAAW,QAAA,QACX,wBAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,kCAAW,QAAA,QACX,mCAAW,QAAA,QACX,sCAAW,QAAA,QACX,0CAAW,QAAA,QACX,oCAAW,QAAA,QACX,wCAAW,QAAA,QACX,qCAAW,QAAA,QACX,iCAAW,QAAA,QACX,gCAAW,QAAA,QACX,kCAAW,QAAA,QACX,+BAAW,QAAA,QACX,0BAAW,QAAA,QACX,8BAAW,QAAA,QACX,4BAAW,QAAA,QACX,4BAAW,QAAA,QACX,6BAAW,QAAA,QACX,4BAAW,QAAA,QCtS/C,0BCgEE,QAAA,QHi+BF,EDNC,mBAAA,WGxhCI,gBAAiB,WFiiCZ,WAAY,WGl+BZ,OADL,QJg+BJ,mBAAA,WGthCI,gBAAiB,WACpB,WAAA,WHyhCD,KGrhCC,UAAW,KAEX,4BAAA,cAEA,KACA,YAAA,iBAAA,UAAA,MAAA,WHuhCD,UAAA,KGnhCC,YAAa,WF4hCb,MAAO,KACP,iBAAkB,KExhClB,OADA,MAEA,OHqhCD,SG/gCC,YAAa,QACb,UAAA,QACA,YAAA,QAEA,EFwhCA,MAAO,QEthCL,gBAAA,KAIF,QH8gCD,QKnkCC,MAAA,QAEA,gBAAA,ULskCD,QGxgCC,QAAS,KAAK,OACd,QAAA,IAAA,KAAA,yBH0gCD,eAAA,KGngCC,OHsgCD,OAAA,ECSD,IACE,eAAgB,ODDjB,4BMhlCC,0BLmlCF,gBKplCE,iBADA,eH4EA,QAAS,MACT,UAAA,KHwgCD,OAAA,KGjgCC,aACA,cAAA,IAEA,eACA,QAAA,aC6FA,UAAA,KACK,OAAA,KACG,QAAA,IEvLR,YAAA,WACA,iBAAA,KACA,OAAA,IAAA,MAAA,KNgmCD,cAAA,IGlgCC,mBAAoB,IAAI,IAAI,YAC5B,cAAA,IAAA,IAAA,YHogCD,WAAA,IAAA,IAAA,YG7/BC,YACA,cAAA,IAEA,GHggCD,WAAA,KGx/BC,cAAe,KACf,OAAA,EACA,WAAA,IAAA,MAAA,KAEA,SACA,SAAA,SACA,MAAA,IACA,OAAA,IACA,QAAA,EH0/BD,OAAA,KGl/BC,SAAA,OF2/BA,KAAM,cEz/BJ,OAAA,EAEA,0BACA,yBACA,SAAA,OACA,MAAA,KHo/BH,OAAA,KGz+BC,OAAQ,EACR,SAAA,QH2+BD,KAAA,KCSD,cACE,OAAQ,QAQV,IACA,IMnpCE,IACA,IACA,IACA,INyoCF,GACA,GACA,GACA,GACA,GACA,GDAC,YAAA,QOnpCC,YAAa,IN4pCb,YAAa,IACb,MAAO,QAoBT,WAZA,UAaA,WAZA,UM7pCI,WN8pCJ,UM7pCI,WN8pCJ,UM7pCI,WN8pCJ,UDMC,WCLD,UACA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SAaA,UAZA,SMrpCE,YAAa,INyqCb,YAAa,EACb,MAAO,KAGT,IMzqCE,IAJF,IN4qCA,GAEA,GDLC,GCSC,WAAY,KACZ,cAAe,KASjB,WANA,UDCC,WCCD,UM7qCA,WN+qCA,UACA,UANA,SM7qCI,UN+qCJ,SM5qCA,UN8qCA,SAQE,UAAW,IAGb,IMrrCE,IAJF,INwrCA,GAEA,GDLC,GCSC,WAAY,KACZ,cAAe,KASjB,WANA,UDCC,WCCD,UMxrCA,WN0rCA,UACA,UANA,SMzrCI,UN2rCJ,SMvrCA,UNyrCA,SMzrCU,UAAA,IACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KACV,IAAA,GAAU,UAAA,KAOR,IADF,GPusCC,UAAA,KCSD,EM1sCE,OAAA,EAAA,EAAA,KAEA,MPqsCD,cAAA,KOhsCC,UAAW,KAwOX,YAAa,IA1OX,YAAA,IPusCH,yBO9rCC,MNusCE,UAAW,MMlsCf,OAAA,MAEE,UAAA,IAKF,MP2rCC,KO3rCsB,QAAA,KP8rCtB,iBAAA,QO7rCsB,WPgsCtB,WAAA,KO/rCsB,YPksCtB,WAAA,MOjsCsB,aPosCtB,WAAA,OOnsCsB,cPssCtB,WAAA,QOnsCsB,aPssCtB,YAAA,OOrsCsB,gBPwsCtB,eAAA,UOvsCsB,gBP0sCtB,eAAA,UOtsCC,iBPysCD,eAAA,WQ5yCC,YR+yCD,MAAA,KCSD,cOrzCI,MAAA,QAHF,qBDwGF,qBP8sCC,MAAA,QCSD,cO5zCI,MAAA,QAHF,qBD2GF,qBPktCC,MAAA,QCSD,WOn0CI,MAAA,QAHF,kBD8GF,kBPstCC,MAAA,QCSD,cO10CI,MAAA,QAHF,qBDiHF,qBP0tCC,MAAA,QCSD,aOj1CI,MAAA,QDwHF,oBAHF,oBExHE,MAAA,QACA,YR21CA,MAAO,KQz1CL,iBAAA,QAHF,mBF8HF,mBP4tCC,iBAAA,QCSD,YQh2CI,iBAAA,QAHF,mBFiIF,mBPguCC,iBAAA,QCSD,SQv2CI,iBAAA,QAHF,gBFoIF,gBPouCC,iBAAA,QCSD,YQ92CI,iBAAA,QAHF,mBFuIF,mBPwuCC,iBAAA,QCSD,WQr3CI,iBAAA,QF6IF,kBADF,kBAEE,iBAAA,QPuuCD,aO9tCC,eAAgB,INuuChB,OAAQ,KAAK,EAAE,KMruCf,cAAA,IAAA,MAAA,KAFF,GPmuCC,GCSC,WAAY,EACZ,cAAe,KM/tCf,MP2tCD,MO5tCD,MAPI,MASF,cAAA,EAIF,eALE,aAAA,EACA,WAAA,KPmuCD,aO/tCC,aAAc,EAKZ,YAAA,KACA,WAAA,KP8tCH,gBOxtCC,QAAS,aACT,cAAA,IACA,aAAA,IAEF,GNiuCE,WAAY,EM/tCZ,cAAA,KAGA,GADF,GP2tCC,YAAA,WOvtCC,GP0tCD,YAAA,IOpnCD,GAvFM,YAAA,EAEA,yBACA,kBGtNJ,MAAA,KACA,MAAA,MACA,SAAA,OVs6CC,MAAA,KO9nCC,WAAY,MAhFV,cAAA,SPitCH,YAAA,OOvsCD,kBNitCE,YAAa,OM3sCjB,0BPusCC,YOtsCC,OAAA,KA9IqB,cAAA,IAAA,OAAA,KAmJvB,YACE,UAAA,IACA,eAAA,UAEA,WPusCD,QAAA,KAAA,KOlsCG,OAAA,EAAA,EAAA,KN2sCF,UAAW,OACX,YAAa,IAAI,MAAM,KMrtCzB,yBPgtCC,wBOhtCD,yBN0tCE,cAAe,EMpsCb,kBAFA,kBACA,iBPmsCH,QAAA,MOhsCG,UAAA,INysCF,YAAa,WACb,MAAO,KMjsCT,yBP4rCC,yBO5rCD,wBAEE,QAAA,cAEA,oBACA,sBACA,cAAA,KP8rCD,aAAA,EOxrCG,WAAA,MNisCF,aAAc,IAAI,MAAM,KACxB,YAAa,EMjsCX,kCNmsCJ,kCMpsCe,iCACX,oCNosCJ,oCDLC,mCCUC,QAAS,GMlsCX,iCNosCA,iCM1sCM,gCAOJ,mCNosCF,mCDLC,kCO9rCC,QAAA,cPmsCD,QWx+CC,cAAe,KVi/Cf,WAAY,OACZ,YAAa,WU9+Cb,KX0+CD,IWt+CD,IACE,KACA,YAAA,MAAA,OAAA,SAAA,cAAA,UAEA,KACA,QAAA,IAAA,IXw+CD,UAAA,IWp+CC,MAAO,QACP,iBAAA,QACA,cAAA,IAEA,IACA,QAAA,IAAA,IACA,UAAA,IV6+CA,MU7+CA,KXs+CD,iBAAA,KW5+CC,cAAe,IASb,mBAAA,MAAA,EAAA,KAAA,EAAA,gBACA,WAAA,MAAA,EAAA,KAAA,EAAA,gBAEA,QV8+CF,QU9+CE,EXs+CH,UAAA,KWj+CC,YAAa,IACb,mBAAA,KACA,WAAA,KAEA,IACA,QAAA,MACA,QAAA,MACA,OAAA,EAAA,EAAA,KACA,UAAA,KACA,YAAA,WACA,MAAA,KACA,WAAA,UXm+CD,UAAA,WW9+CC,iBAAkB,QAehB,OAAA,IAAA,MAAA,KACA,cAAA,IAEA,SACA,QAAA,EACA,UAAA,QXk+CH,MAAA,QW79CC,YAAa,SACb,iBAAA,YACA,cAAA,EC1DF,gBCHE,WAAA,MACA,WAAA,OAEA,Wb+hDD,cAAA,KYzhDC,aAAA,KAqEA,aAAc,KAvEZ,YAAA,KZgiDH,yBY3hDC,WAkEE,MAAO,OZ89CV,yBY7hDC,WA+DE,MAAO,OZm+CV,0BY1hDC,WCvBA,MAAA,QAGA,iBbojDD,cAAA,KYvhDC,aAAc,KCvBd,aAAA,KACA,YAAA,KCAE,KACE,aAAA,MAEA,YAAA,MAGA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UdijDL,SAAA,ScjiDG,WAAA,IACE,cAAA,KdmiDL,aAAA,Kc3hDG,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Ud8hDH,MAAA,Kc9hDG,WdiiDH,MAAA,KcjiDG,WdoiDH,MAAA,acpiDG,WduiDH,MAAA,acviDG,Ud0iDH,MAAA,Ic1iDG,Ud6iDH,MAAA,ac7iDG,UdgjDH,MAAA,achjDG,UdmjDH,MAAA,IcnjDG,UdsjDH,MAAA,actjDG,UdyjDH,MAAA,aczjDG,Ud4jDH,MAAA,Ic5jDG,Ud+jDH,MAAA,achjDG,UdmjDH,MAAA,YcnjDG,gBdsjDH,MAAA,KctjDG,gBdyjDH,MAAA,aczjDG,gBd4jDH,MAAA,ac5jDG,ed+jDH,MAAA,Ic/jDG,edkkDH,MAAA,aclkDG,edqkDH,MAAA,acrkDG,edwkDH,MAAA,IcxkDG,ed2kDH,MAAA,ac3kDG,ed8kDH,MAAA,ac9kDG,edilDH,MAAA,IcjlDG,edolDH,MAAA,ac/kDG,edklDH,MAAA,YcjmDG,edomDH,MAAA,KcpmDG,gBdumDH,KAAA,KcvmDG,gBd0mDH,KAAA,ac1mDG,gBd6mDH,KAAA,ac7mDG,edgnDH,KAAA,IchnDG,edmnDH,KAAA,acnnDG,edsnDH,KAAA,actnDG,edynDH,KAAA,IcznDG,ed4nDH,KAAA,ac5nDG,ed+nDH,KAAA,ac/nDG,edkoDH,KAAA,IcloDG,edqoDH,KAAA,achoDG,edmoDH,KAAA,YcpnDG,edunDH,KAAA,KcvnDG,kBd0nDH,YAAA,Kc1nDG,kBd6nDH,YAAA,ac7nDG,kBdgoDH,YAAA,achoDG,iBdmoDH,YAAA,IcnoDG,iBdsoDH,YAAA,actoDG,iBdyoDH,YAAA,aczoDG,iBd4oDH,YAAA,Ic5oDG,iBd+oDH,YAAA,ac/oDG,iBdkpDH,YAAA,aclpDG,iBdqpDH,YAAA,IcrpDG,iBdwpDH,YAAA,acxpDG,iBd2pDH,YAAA,Yc7rDG,iBACE,YAAA,EAOJ,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Ud2rDD,MAAA,Kc3rDC,Wd8rDD,MAAA,Kc9rDC,WdisDD,MAAA,acjsDC,WdosDD,MAAA,acpsDC,UdusDD,MAAA,IcvsDC,Ud0sDD,MAAA,ac1sDC,Ud6sDD,MAAA,ac7sDC,UdgtDD,MAAA,IchtDC,UdmtDD,MAAA,acntDC,UdstDD,MAAA,acttDC,UdytDD,MAAA,IcztDC,Ud4tDD,MAAA,ac7sDC,UdgtDD,MAAA,YchtDC,gBdmtDD,MAAA,KcntDC,gBdstDD,MAAA,acttDC,gBdytDD,MAAA,acztDC,ed4tDD,MAAA,Ic5tDC,ed+tDD,MAAA,ac/tDC,edkuDD,MAAA,acluDC,edquDD,MAAA,IcruDC,edwuDD,MAAA,acxuDC,ed2uDD,MAAA,ac3uDC,ed8uDD,MAAA,Ic9uDC,edivDD,MAAA,ac5uDC,ed+uDD,MAAA,Yc9vDC,ediwDD,MAAA,KcjwDC,gBdowDD,KAAA,KcpwDC,gBduwDD,KAAA,acvwDC,gBd0wDD,KAAA,ac1wDC,ed6wDD,KAAA,Ic7wDC,edgxDD,KAAA,achxDC,edmxDD,KAAA,acnxDC,edsxDD,KAAA,IctxDC,edyxDD,KAAA,aczxDC,ed4xDD,KAAA,ac5xDC,ed+xDD,KAAA,Ic/xDC,edkyDD,KAAA,ac7xDC,edgyDD,KAAA,YcjxDC,edoxDD,KAAA,KcpxDC,kBduxDD,YAAA,KcvxDC,kBd0xDD,YAAA,ac1xDC,kBd6xDD,YAAA,ac7xDC,iBdgyDD,YAAA,IchyDC,iBdmyDD,YAAA,acnyDC,iBdsyDD,YAAA,actyDC,iBdyyDD,YAAA,IczyDC,iBd4yDD,YAAA,ac5yDC,iBd+yDD,YAAA,ac/yDC,iBdkzDD,YAAA,IclzDC,iBdqzDD,YAAA,acrzDC,iBdwzDD,YAAA,YY/yDD,iBE3CE,YAAA,GAQF,yBACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Udy1DD,MAAA,Kcz1DC,Wd41DD,MAAA,Kc51DC,Wd+1DD,MAAA,ac/1DC,Wdk2DD,MAAA,acl2DC,Udq2DD,MAAA,Icr2DC,Udw2DD,MAAA,acx2DC,Ud22DD,MAAA,ac32DC,Ud82DD,MAAA,Ic92DC,Udi3DD,MAAA,acj3DC,Udo3DD,MAAA,acp3DC,Udu3DD,MAAA,Icv3DC,Ud03DD,MAAA,ac32DC,Ud82DD,MAAA,Yc92DC,gBdi3DD,MAAA,Kcj3DC,gBdo3DD,MAAA,acp3DC,gBdu3DD,MAAA,acv3DC,ed03DD,MAAA,Ic13DC,ed63DD,MAAA,ac73DC,edg4DD,MAAA,ach4DC,edm4DD,MAAA,Icn4DC,eds4DD,MAAA,act4DC,edy4DD,MAAA,acz4DC,ed44DD,MAAA,Ic54DC,ed+4DD,MAAA,ac14DC,ed64DD,MAAA,Yc55DC,ed+5DD,MAAA,Kc/5DC,gBdk6DD,KAAA,Kcl6DC,gBdq6DD,KAAA,acr6DC,gBdw6DD,KAAA,acx6DC,ed26DD,KAAA,Ic36DC,ed86DD,KAAA,ac96DC,edi7DD,KAAA,acj7DC,edo7DD,KAAA,Icp7DC,edu7DD,KAAA,acv7DC,ed07DD,KAAA,ac17DC,ed67DD,KAAA,Ic77DC,edg8DD,KAAA,ac37DC,ed87DD,KAAA,Yc/6DC,edk7DD,KAAA,Kcl7DC,kBdq7DD,YAAA,Kcr7DC,kBdw7DD,YAAA,acx7DC,kBd27DD,YAAA,ac37DC,iBd87DD,YAAA,Ic97DC,iBdi8DD,YAAA,acj8DC,iBdo8DD,YAAA,acp8DC,iBdu8DD,YAAA,Icv8DC,iBd08DD,YAAA,ac18DC,iBd68DD,YAAA,ac78DC,iBdg9DD,YAAA,Ich9DC,iBdm9DD,YAAA,acn9DC,iBds9DD,YAAA,YY18DD,iBE9CE,YAAA,GAQF,0BACE,UAAA,WAAA,WAAA,WAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,UAAA,Udu/DD,MAAA,Kcv/DC,Wd0/DD,MAAA,Kc1/DC,Wd6/DD,MAAA,ac7/DC,WdggED,MAAA,achgEC,UdmgED,MAAA,IcngEC,UdsgED,MAAA,actgEC,UdygED,MAAA,aczgEC,Ud4gED,MAAA,Ic5gEC,Ud+gED,MAAA,ac/gEC,UdkhED,MAAA,aclhEC,UdqhED,MAAA,IcrhEC,UdwhED,MAAA,aczgEC,Ud4gED,MAAA,Yc5gEC,gBd+gED,MAAA,Kc/gEC,gBdkhED,MAAA,aclhEC,gBdqhED,MAAA,acrhEC,edwhED,MAAA,IcxhEC,ed2hED,MAAA,ac3hEC,ed8hED,MAAA,ac9hEC,ediiED,MAAA,IcjiEC,edoiED,MAAA,acpiEC,eduiED,MAAA,acviEC,ed0iED,MAAA,Ic1iEC,ed6iED,MAAA,acxiEC,ed2iED,MAAA,Yc1jEC,ed6jED,MAAA,Kc7jEC,gBdgkED,KAAA,KchkEC,gBdmkED,KAAA,acnkEC,gBdskED,KAAA,actkEC,edykED,KAAA,IczkEC,ed4kED,KAAA,ac5kEC,ed+kED,KAAA,ac/kEC,edklED,KAAA,IcllEC,edqlED,KAAA,acrlEC,edwlED,KAAA,acxlEC,ed2lED,KAAA,Ic3lEC,ed8lED,KAAA,aczlEC,ed4lED,KAAA,Yc7kEC,edglED,KAAA,KchlEC,kBdmlED,YAAA,KcnlEC,kBdslED,YAAA,actlEC,kBdylED,YAAA,aczlEC,iBd4lED,YAAA,Ic5lEC,iBd+lED,YAAA,ac/lEC,iBdkmED,YAAA,aclmEC,iBdqmED,YAAA,IcrmEC,iBdwmED,YAAA,acxmEC,iBd2mED,YAAA,ac3mEC,iBd8mED,YAAA,Ic9mEC,iBdinED,YAAA,acjnEC,iBdonED,YAAA,YevrED,iBACA,YAAA,GAGA,MACA,iBAAA,YAEA,Qf0rED,YAAA,IexrEC,eAAgB,IAChB,MAAA,Kf0rED,WAAA,KenrEC,GACA,WAAA,KfurED,OezrEC,MAAO,KdosEP,UAAW,KACX,cAAe,KcxrET,mBd2rER,mBc1rEQ,mBAHA,mBACA,mBd2rER,mBDHC,QAAA,IepsEC,YAAa,WAoBX,eAAA,IACA,WAAA,IAAA,MAAA,KArBJ,mBdmtEE,eAAgB,OAChB,cAAe,IAAI,MAAM,KDJ1B,uCCMD,uCcttEA,wCdutEA,wCcnrEI,2CANI,2CfqrEP,WAAA,Ee1qEG,mBf6qEH,WAAA,IAAA,MAAA,KCWD,cACE,iBAAkB,KchqEpB,6BdmqEA,6BclqEE,6BAZM,6BfuqEP,6BCMD,6BDHC,QAAA,ICWD,gBACE,OAAQ,IAAI,MAAM,Kc3qEpB,4Bd8qEA,4Bc9qEA,4BAQQ,4Bf+pEP,4BCMD,4Bc9pEM,OAAA,IAAA,MAAA,KAYF,4BAFJ,4BfqpEC,oBAAA,IexoEG,yCf2oEH,iBAAA,QejoEC,4BACA,iBAAA,QfqoED,uBe/nEG,SAAA,Od0oEF,QAAS,aczoEL,MAAA,KAEA,sBfkoEL,sBgB9wEC,SAAA,OfyxEA,QAAS,WACT,MAAO,KAST,0BetxEE,0BfgxEF,0BAGA,0BezxEM,0BAMJ,0BfixEF,0BAGA,0BACA,0BDNC,0BCAD,0BAGA,0BASE,iBAAkB,QDLnB,sCgBnyEC,sCAAA,oCf0yEF,sCevxEM,sCf4xEJ,iBAAkB,QASpB,2Be3yEE,2BfqyEF,2BAGA,2Be9yEM,2BAMJ,2BfsyEF,2BAGA,2BACA,2BDNC,2BCAD,2BAGA,2BASE,iBAAkB,QDLnB,uCgBxzEC,uCAAA,qCf+zEF,uCe5yEM,uCfizEJ,iBAAkB,QASpB,wBeh0EE,wBf0zEF,wBAGA,wBen0EM,wBAMJ,wBf2zEF,wBAGA,wBACA,wBDNC,wBCAD,wBAGA,wBASE,iBAAkB,QDLnB,oCgB70EC,oCAAA,kCfo1EF,oCej0EM,oCfs0EJ,iBAAkB,QASpB,2Ber1EE,2Bf+0EF,2BAGA,2Bex1EM,2BAMJ,2Bfg1EF,2BAGA,2BACA,2BDNC,2BCAD,2BAGA,2BASE,iBAAkB,QDLnB,uCgBl2EC,uCAAA,qCfy2EF,uCet1EM,uCf21EJ,iBAAkB,QASpB,0Be12EE,0Bfo2EF,0BAGA,0Be72EM,0BAMJ,0Bfq2EF,0BAGA,0BACA,0BDNC,0BCAD,0BAGA,0BASE,iBAAkB,QDLnB,sCejtEC,sCADF,oCdytEA,sCe32EM,sCDoJJ,iBAAA,QA6DF,kBACE,WAAY,KA3DV,WAAA,KAEA,oCACA,kBACA,MAAA,KfqtED,cAAA,Ke9pEC,WAAY,OAnDV,mBAAA,yBfotEH,OAAA,IAAA,MAAA,KCWD,yBACE,cAAe,Ec7qEjB,qCdgrEA,qCcltEI,qCARM,qCfmtET,qCCMD,qCDHC,YAAA,OCWD,kCACE,OAAQ,EcxrEV,0Dd2rEA,0Dc3rEA,0DAzBU,0Df6sET,0DCMD,0DAME,YAAa,EchsEf,yDdmsEA,yDcnsEA,yDArBU,yDfitET,yDCMD,yDAME,aAAc,EDLjB,yDe3sEW,yDEzNV,yDjBm6EC,yDiBl6ED,cAAA,GAMA,SjBm6ED,UAAA,EiBh6EC,QAAS,EACT,OAAA,EACA,OAAA,EAEA,OACA,QAAA,MACA,MAAA,KACA,QAAA,EACA,cAAA,KACA,UAAA,KjBk6ED,YAAA,QiB/5EC,MAAO,KACP,OAAA,EACA,cAAA,IAAA,MAAA,QAEA,MjBi6ED,QAAA,aiBt5EC,UAAW,Kb4BX,cAAA,IACG,YAAA,IJ83EJ,mBiBt5EC,mBAAoB,WhBi6EjB,gBAAiB,WgB/5EpB,WAAA,WjB05ED,qBiBx5EC,kBAGA,OAAQ,IAAI,EAAE,EACd,WAAA,MjBu5ED,YAAA,OiBl5EC,iBACA,QAAA,MAIF,kBhB45EE,QAAS,MgB15ET,MAAA,KAIF,iBAAA,ahB25EE,OAAQ,KIh+ER,uBL29ED,2BK19EC,wBY2EA,QAAS,KAAK,OACd,QAAA,IAAA,KAAA,yBACA,eAAA,KAEA,OACA,QAAA,MjBi5ED,YAAA,IiBv3EC,UAAW,KACX,YAAA,WACA,MAAA,KAEA,cACA,QAAA,MACA,MAAA,KACA,OAAA,KACA,QAAA,IAAA,KACA,UAAA,KACA,YAAA,WACA,MAAA,KbxDA,iBAAA,KACQ,iBAAA,KAyHR,OAAA,IAAA,MAAA,KACK,cAAA,IACG,mBAAA,MAAA,EAAA,IAAA,IAAA,iBJ0zET,WAAA,MAAA,EAAA,IAAA,IAAA,iBkBl8EC,mBAAA,aAAA,YAAA,KAAA,mBAAA,YAAA,KACE,cAAA,aAAA,YAAA,KAAA,WAAA,YAAA,KACA,WAAA,aAAA,YAAA,KAAA,WAAA,YAAA,KdWM,oBJ27ET,aAAA,QI15EC,QAAA,EACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,qBACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,qBAEF,gCAA0B,MAAA,KJ65E3B,QAAA,EI55EiC,oCJ+5EjC,MAAA,KiBl4EG,yCACA,MAAA,KAQF,0BhBw4EA,iBAAkB,YAClB,OAAQ,EgBr4EN,wBjB+3EH,wBiB53EC,iChBu4EA,iBAAkB,KgBr4EhB,QAAA,EAIF,wBACE,iCjB43EH,OAAA,YiB/2EC,sBjBk3ED,OAAA,KiBh2EG,mBhB42EF,mBAAoB,KAEtB,qDgB72EM,8BjBs2EH,8BiBn2EC,wCAAA,+BhB+2EA,YAAa,KgB72EX,iCjB22EH,iCiBx2EC,2CAAA,kChB42EF,0BACA,0BACA,oCACA,2BAKE,YAAa,KgBl3EX,iCjBg3EH,iCACF,2CiBt2EC,kChBy2EA,0BACA,0BACA,oCACA,2BgB32EA,YAAA,MhBm3EF,YgBz2EE,cAAA,KAGA,UADA,OjBm2ED,SAAA,SiBv2EC,QAAS,MhBk3ET,WAAY,KgB12EV,cAAA,KAGA,gBADA,aAEA,WAAA,KjBm2EH,aAAA,KiBh2EC,cAAe,EhB22Ef,YAAa,IACb,OAAQ,QgBt2ER,+BjBk2ED,sCiBp2EC,yBACA,gCAIA,SAAU,ShB02EV,WAAY,MgBx2EZ,YAAA,MAIF,oBAAA,cAEE,WAAA,KAGA,iBADA,cAEA,SAAA,SACA,QAAA,aACA,aAAA,KjB+1ED,cAAA,EiB71EC,YAAa,IhBw2Eb,eAAgB,OgBt2EhB,OAAA,QAUA,kCjBs1ED,4BCWC,WAAY,EACZ,YAAa,KgBz1Eb,wCAAA,qCjBq1ED,8BCOD,+BgBl2EI,2BhBi2EJ,4BAME,OAAQ,YDNT,0BiBz1EG,uBAMF,oCAAA,iChB+1EA,OAAQ,YDNT,yBiBt1EK,sBAaJ,mCAFF,gCAGE,OAAA,YAGA,qBjB20ED,WAAA,KiBz0EC,YAAA,IhBo1EA,eAAgB,IgBl1Ed,cAAA,EjB40EH,8BiB9zED,8BCnQE,cAAA,EACA,aAAA,EAEA,UACA,OAAA,KlBokFD,QAAA,IAAA,KkBlkFC,UAAA,KACE,YAAA,IACA,cAAA,IAGF,gBjB4kFA,OAAQ,KiB1kFN,YAAA,KD2PA,0BAFJ,kBAGI,OAAA,KAEA,6BACA,OAAA,KjB20EH,QAAA,IAAA,KiBj1EC,UAAW,KAST,YAAA,IACA,cAAA,IAVJ,mChBg2EE,OAAQ,KgBl1EN,YAAA,KAGA,6CAjBJ,qCAkBI,OAAA,KAEA,oCACA,OAAA,KjB20EH,WAAA,KiBv0EC,QAAS,IAAI,KC/Rb,UAAA,KACA,YAAA,IAEA,UACA,OAAA,KlBymFD,QAAA,KAAA,KkBvmFC,UAAA,KACE,YAAA,UACA,cAAA,IAGF,gBjBinFA,OAAQ,KiB/mFN,YAAA,KDuRA,0BAFJ,kBAGI,OAAA,KAEA,6BACA,OAAA,KjBo1EH,QAAA,KAAA,KiB11EC,UAAW,KAST,YAAA,UACA,cAAA,IAVJ,mChBy2EE,OAAQ,KgB31EN,YAAA,KAGA,6CAjBJ,qCAkBI,OAAA,KAEA,oCACA,OAAA,KjBo1EH,WAAA,KiB30EC,QAAS,KAAK,KAEd,UAAA,KjB40ED,YAAA,UiBx0EG,cjB20EH,SAAA,SiBt0EC,4BACA,cAAA,OAEA,uBACA,SAAA,SACA,IAAA,EACA,MAAA,EACA,QAAA,EACA,QAAA,MACA,MAAA,KjBy0ED,OAAA,KiBv0EC,YAAa,KhBk1Eb,WAAY,OACZ,eAAgB,KDLjB,oDiBz0EC,uCADA,iCAGA,MAAO,KhBk1EP,OAAQ,KACR,YAAa,KDLd,oDiBz0EC,uCADA,iCAKA,MAAO,KhBg1EP,OAAQ,KACR,YAAa,KAKf,uBAEA,8BAJA,4BADA,yBAEA,oBAEA,2BDNC,4BkBvuFG,mCAJA,yBD0ZJ,gCbvWE,MAAA,QJ6rFD,2BkB1uFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJksFD,iCiB31EC,aAAc,QC5YZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlB2uFH,gCiBh2EC,MAAO,QCtYL,iBAAA,QlByuFH,aAAA,QCWD,oCACE,MAAO,QAKT,uBAEA,8BAJA,4BADA,yBAEA,oBAEA,2BDNC,4BkBrwFG,mCAJA,yBD6ZJ,gCb1WE,MAAA,QJ2tFD,2BkBxwFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJguFD,iCiBt3EC,aAAc,QC/YZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlBywFH,gCiB33EC,MAAO,QCzYL,iBAAA,QlBuwFH,aAAA,QCWD,oCACE,MAAO,QAKT,qBAEA,4BAJA,0BADA,uBAEA,kBAEA,yBDNC,0BkBnyFG,iCAJA,uBDgaJ,8Bb7WE,MAAA,QJyvFD,yBkBtyFG,aAAA,QACE,mBAAA,MAAA,EAAA,IAAA,IAAA,iBd4CJ,WAAA,MAAA,EAAA,IAAA,IAAA,iBJ8vFD,+BiBj5EC,aAAc,QClZZ,mBAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QACA,WAAA,MAAA,EAAA,IAAA,IAAA,iBAAA,EAAA,EAAA,IAAA,QlBuyFH,8BiBt5EC,MAAO,QC5YL,iBAAA,QlBqyFH,aAAA,QiBj5EG,kCjBo5EH,MAAA,QiBj5EG,2CjBo5EH,IAAA,KiBz4EC,mDACA,IAAA,EAEA,YjB44ED,QAAA,MiBzzEC,WAAY,IAwEZ,cAAe,KAtIX,MAAA,QAEA,yBjB23EH,yBiBvvEC,QAAS,aA/HP,cAAA,EACA,eAAA,OjB03EH,2BiB5vEC,QAAS,aAxHP,MAAA,KjBu3EH,eAAA,OiBn3EG,kCACA,QAAA,aAmHJ,0BhB8wEE,QAAS,aACT,eAAgB,OgBv3Ed,wCjBg3EH,6CiBxwED,2CjB2wEC,MAAA,KiB/2EG,wCACA,MAAA,KAmGJ,4BhB0xEE,cAAe,EgBt3Eb,eAAA,OAGA,uBADA,oBjBg3EH,QAAA,aiBtxEC,WAAY,EhBiyEZ,cAAe,EgBv3EX,eAAA,OAsFN,6BAAA,0BAjFI,aAAA,EAiFJ,4CjB+xEC,sCiB12EG,SAAA,SjB62EH,YAAA,EiBl2ED,kDhB82EE,IAAK,GgBp2EL,2BjBi2EH,kCiBl2EG,wBAEA,+BAXF,YAAa,IhBs3Eb,WAAY,EgBr2EV,cAAA,EJviBF,2BIshBF,wBJrhBE,WAAA,KI4jBA,6BAyBA,aAAc,MAnCV,YAAA,MAEA,yBjB01EH,gCACF,YAAA,IiB13EG,cAAe,EAwCf,WAAA,OAwBJ,sDAdQ,MAAA,KjBg1EL,yBACF,+CiBr0EC,YAAA,KAEE,UAAW,MjBw0EZ,yBACF,+CmBt6FG,YAAa,IACf,UAAA,MAGA,KACA,QAAA,aACA,QAAA,IAAA,KAAA,cAAA,EACA,UAAA,KACA,YAAA,IACA,YAAA,WACA,WAAA,OC0CA,YAAA,OACA,eAAA,OACA,iBAAA,aACA,aAAA,ahB+JA,OAAA,QACG,oBAAA,KACC,iBAAA,KACI,gBAAA,KJiuFT,YAAA,KmBz6FG,iBAAA,KlBq7FF,OAAQ,IAAI,MAAM,YAClB,cAAe,IDHhB,kBKx8FC,kBAEA,WACA,kBJ28FF,kBADA,WkBl7FE,QAAA,KAAA,OlBy7FA,QAAS,IAAI,KAAK,yBAClB,eAAgB,KkBn7FhB,WnB46FD,WmB/6FG,WlB27FF,MAAO,KkBt7FL,gBAAA,Kf6BM,YADR,YJq5FD,iBAAA,KmB56FC,QAAA,ElBw7FA,mBAAoB,MAAM,EAAE,IAAI,IAAI,iBAC5B,WAAY,MAAM,EAAE,IAAI,IAAI,iBoBn+FpC,cAGA,ejB8DA,wBACQ,OAAA,YJ65FT,OAAA,kBmB56FG,mBAAA,KlBw7FM,WAAY,KkBt7FhB,QAAA,IASN,eC3DE,yBACA,eAAA,KpBo+FD,aoBj+FC,MAAA,KnB6+FA,iBAAkB,KmB3+FhB,aAAA,KpBq+FH,mBoBn+FO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBo+FH,mBoBj+FC,MAAA,KnB6+FA,iBAAkB,QAClB,aAAc,QmBz+FR,oBADJ,oBpBo+FH,mCoBj+FG,MAAA,KnB6+FF,iBAAkB,QAClB,aAAc,QmBz+FN,0BnB++FV,0BAHA,0BmB7+FM,0BnB++FN,0BAHA,0BDFC,yCoB3+FK,yCnB++FN,yCmB1+FE,MAAA,KnBk/FA,iBAAkB,QAClB,aAAc,QmB3+FZ,oBpBm+FH,oBoBn+FG,mCnBg/FF,iBAAkB,KmB5+FV,4BnBi/FV,4BAHA,4BDHC,6BCOD,6BAHA,6BkB99FA,sCClBM,sCnBi/FN,sCmB3+FI,iBAAA,KACA,aAAA,KDcJ,oBC9DE,MAAA,KACA,iBAAA,KpB6hGD,aoB1hGC,MAAA,KnBsiGA,iBAAkB,QmBpiGhB,aAAA,QpB8hGH,mBoB5hGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB6hGH,mBoB1hGC,MAAA,KnBsiGA,iBAAkB,QAClB,aAAc,QmBliGR,oBADJ,oBpB6hGH,mCoB1hGG,MAAA,KnBsiGF,iBAAkB,QAClB,aAAc,QmBliGN,0BnBwiGV,0BAHA,0BmBtiGM,0BnBwiGN,0BAHA,0BDFC,yCoBpiGK,yCnBwiGN,yCmBniGE,MAAA,KnB2iGA,iBAAkB,QAClB,aAAc,QmBpiGZ,oBpB4hGH,oBoB5hGG,mCnByiGF,iBAAkB,KmBriGV,4BnB0iGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBphGA,sCCrBM,sCnB0iGN,sCmBpiGI,iBAAA,QACA,aAAA,QDkBJ,oBClEE,MAAA,QACA,iBAAA,KpBslGD,aoBnlGC,MAAA,KnB+lGA,iBAAkB,QmB7lGhB,aAAA,QpBulGH,mBoBrlGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBslGH,mBoBnlGC,MAAA,KnB+lGA,iBAAkB,QAClB,aAAc,QmB3lGR,oBADJ,oBpBslGH,mCoBnlGG,MAAA,KnB+lGF,iBAAkB,QAClB,aAAc,QmB3lGN,0BnBimGV,0BAHA,0BmB/lGM,0BnBimGN,0BAHA,0BDFC,yCoB7lGK,yCnBimGN,yCmB5lGE,MAAA,KnBomGA,iBAAkB,QAClB,aAAc,QmB7lGZ,oBpBqlGH,oBoBrlGG,mCnBkmGF,iBAAkB,KmB9lGV,4BnBmmGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBzkGA,sCCzBM,sCnBmmGN,sCmB7lGI,iBAAA,QACA,aAAA,QDsBJ,oBCtEE,MAAA,QACA,iBAAA,KpB+oGD,UoB5oGC,MAAA,KnBwpGA,iBAAkB,QmBtpGhB,aAAA,QpBgpGH,gBoB9oGO,gBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpB+oGH,gBoB5oGC,MAAA,KnBwpGA,iBAAkB,QAClB,aAAc,QmBppGR,iBADJ,iBpB+oGH,gCoB5oGG,MAAA,KnBwpGF,iBAAkB,QAClB,aAAc,QmBppGN,uBnB0pGV,uBAHA,uBmBxpGM,uBnB0pGN,uBAHA,uBDFC,sCoBtpGK,sCnB0pGN,sCmBrpGE,MAAA,KnB6pGA,iBAAkB,QAClB,aAAc,QmBtpGZ,iBpB8oGH,iBoB9oGG,gCnB2pGF,iBAAkB,KmBvpGV,yBnB4pGV,yBAHA,yBDHC,0BCOD,0BAHA,0BkB9nGA,mCC7BM,mCnB4pGN,mCmBtpGI,iBAAA,QACA,aAAA,QD0BJ,iBC1EE,MAAA,QACA,iBAAA,KpBwsGD,aoBrsGC,MAAA,KnBitGA,iBAAkB,QmB/sGhB,aAAA,QpBysGH,mBoBvsGO,mBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBwsGH,mBoBrsGC,MAAA,KnBitGA,iBAAkB,QAClB,aAAc,QmB7sGR,oBADJ,oBpBwsGH,mCoBrsGG,MAAA,KnBitGF,iBAAkB,QAClB,aAAc,QmB7sGN,0BnBmtGV,0BAHA,0BmBjtGM,0BnBmtGN,0BAHA,0BDFC,yCoB/sGK,yCnBmtGN,yCmB9sGE,MAAA,KnBstGA,iBAAkB,QAClB,aAAc,QmB/sGZ,oBpBusGH,oBoBvsGG,mCnBotGF,iBAAkB,KmBhtGV,4BnBqtGV,4BAHA,4BDHC,6BCOD,6BAHA,6BkBnrGA,sCCjCM,sCnBqtGN,sCmB/sGI,iBAAA,QACA,aAAA,QD8BJ,oBC9EE,MAAA,QACA,iBAAA,KpBiwGD,YoB9vGC,MAAA,KnB0wGA,iBAAkB,QmBxwGhB,aAAA,QpBkwGH,kBoBhwGO,kBAEN,MAAA,KACE,iBAAA,QACA,aAAA,QpBiwGH,kBoB9vGC,MAAA,KnB0wGA,iBAAkB,QAClB,aAAc,QmBtwGR,mBADJ,mBpBiwGH,kCoB9vGG,MAAA,KnB0wGF,iBAAkB,QAClB,aAAc,QmBtwGN,yBnB4wGV,yBAHA,yBmB1wGM,yBnB4wGN,yBAHA,yBDFC,wCoBxwGK,wCnB4wGN,wCmBvwGE,MAAA,KnB+wGA,iBAAkB,QAClB,aAAc,QmBxwGZ,mBpBgwGH,mBoBhwGG,kCnB6wGF,iBAAkB,KmBzwGV,2BnB8wGV,2BAHA,2BDHC,4BCOD,4BAHA,4BkBxuGA,qCCrCM,qCnB8wGN,qCmBxwGI,iBAAA,QACA,aAAA,QDuCJ,mBACE,MAAA,QACA,iBAAA,KnBkuGD,UmB/tGC,YAAA,IlB2uGA,MAAO,QACP,cAAe,EAEjB,UG5wGE,iBemCE,iBflCM,oBJqwGT,6BmBhuGC,iBAAA,YlB4uGA,mBAAoB,KACZ,WAAY,KkBzuGlB,UAEF,iBAAA,gBnBguGD,gBmB9tGG,aAAA,YnBouGH,gBmBluGG,gBAIA,MAAA,QlB0uGF,gBAAiB,UACjB,iBAAkB,YDNnB,0BmBnuGK,0BAUN,mCATM,mClB8uGJ,MAAO,KmB7yGP,gBAAA,KAGA,mBADA,QpBsyGD,QAAA,KAAA,KmB5tGC,UAAW,KlBwuGX,YAAa,UmBpzGb,cAAA,IAGA,mBADA,QpB6yGD,QAAA,IAAA,KmB/tGC,UAAW,KlB2uGX,YAAa,ImB3zGb,cAAA,IAGA,mBADA,QpBozGD,QAAA,IAAA,ImB9tGC,UAAW,KACX,YAAA,IACA,cAAA,IAIF,WACE,QAAA,MnB8tGD,MAAA,KCYD,sBACE,WAAY,IqB53GZ,6BADF,4BtBq3GC,6BIhsGC,MAAA,KAEQ,MJosGT,QAAA,EsBx3GC,mBAAA,QAAA,KAAA,OACE,cAAA,QAAA,KAAA,OtB03GH,WAAA,QAAA,KAAA,OsBr3GC,StBw3GD,QAAA,EsBt3Ga,UtBy3Gb,QAAA,KsBx3Ga,atB23Gb,QAAA,MsB13Ga,etB63Gb,QAAA,UsBz3GC,kBACA,QAAA,gBlBwKA,YACQ,SAAA,SAAA,OAAA,EAOR,SAAA,OACQ,mCAAA,KAAA,8BAAA,KAGR,2BAAA,KACQ,4BAAA,KAAA,uBAAA,KJ8sGT,oBAAA,KuBx5GC,4BAA6B,OAAQ,WACrC,uBAAA,OAAA,WACA,oBAAA,OAAA,WAEA,OACA,QAAA,aACA,MAAA,EACA,OAAA,EACA,YAAA,IACA,eAAA,OvB05GD,WAAA,IAAA,OuBt5GC,WAAY,IAAI,QtBq6GhB,aAAc,IAAI,MAAM,YsBn6GxB,YAAA,IAAA,MAAA,YAKA,UADF,QvBu5GC,SAAA,SuBj5GC,uBACA,QAAA,EAEA,eACA,SAAA,SACA,IAAA,KACA,KAAA,EACA,QAAA,KACA,QAAA,KACA,MAAA,KACA,UAAA,MACA,QAAA,IAAA,EACA,OAAA,IAAA,EAAA,EACA,UAAA,KACA,WAAA,KACA,WAAA,KnBsBA,iBAAA,KACQ,wBAAA,YmBrBR,gBAAA,YtBk6GA,OsBl6GA,IAAA,MAAA,KvBq5GD,OAAA,IAAA,MAAA,gBuBh5GC,cAAA,IACE,mBAAA,EAAA,IAAA,KAAA,iBACA,WAAA,EAAA,IAAA,KAAA,iBAzBJ,0BCzBE,MAAA,EACA,KAAA,KAEA,wBxBu8GD,OAAA,IuBj7GC,OAAQ,IAAI,EAmCV,SAAA,OACA,iBAAA,QAEA,oBACA,QAAA,MACA,QAAA,IAAA,KACA,MAAA,KvBi5GH,YAAA,IuB34GC,YAAA,WtB25GA,MAAO,KsBz5GL,YAAA,OvB+4GH,0BuB74GG,0BAMF,MAAA,QtBu5GA,gBAAiB,KACjB,iBAAkB,QsBp5GhB,yBAEA,+BADA,+BvB04GH,MAAA,KuBh4GC,gBAAA,KtBg5GA,iBAAkB,QAClB,QAAS,EDZV,2BuB93GC,iCAAA,iCAEE,MAAA,KEzGF,iCF2GE,iCAEA,gBAAA,KvBg4GH,OAAA,YuB33GC,iBAAkB,YAGhB,iBAAA,KvB23GH,OAAA,0DuBt3GG,qBvBy3GH,QAAA,MuBh3GC,QACA,QAAA,EAQF,qBACE,MAAA,EACA,KAAA,KAIF,oBACE,MAAA,KACA,KAAA,EAEA,iBACA,QAAA,MACA,QAAA,IAAA,KvB22GD,UAAA,KuBv2GC,YAAa,WACb,MAAA,KACA,YAAA,OAEA,mBACA,SAAA,MACA,IAAA,EvBy2GD,MAAA,EuBr2GC,OAAQ,EACR,KAAA,EACA,QAAA,IAQF,2BtB+2GE,MAAO,EsB32GL,KAAA,KAEA,eACA,sCvB+1GH,QAAA,GuBt2GC,WAAY,EtBs3GZ,cAAe,IAAI,OsB32GjB,cAAA,IAAA,QAEA,uBvB+1GH,8CuB10GC,IAAK,KAXL,OAAA,KApEA,cAAA,IvB85GC,yBuB11GD,6BA1DA,MAAA,EACA,KAAA,KvBw5GD,kC0BviHG,MAAO,KzBujHP,KAAM,GyBnjHR,W1ByiHD,oB0B7iHC,SAAU,SzB6jHV,QAAS,ayBvjHP,eAAA,OAGA,yB1ByiHH,gBCgBC,SAAU,SACV,MAAO,KyBhjHT,gC1ByiHC,gCCYD,+BAFA,+ByBnjHA,uBANM,uBzB0jHN,sBAFA,sBAQE,QAAS,EyBrjHP,qB1B0iHH,2B0BriHD,2BACE,iC1BuiHD,YAAA,KCgBD,aACE,YAAa,KDZd,kB0B7iHD,wBAAA,0BzB8jHE,MAAO,KDZR,kB0BliHD,wBACE,0B1BoiHD,YAAA,I0B/hHC,yE1BkiHD,cAAA,E2BnlHC,4BACG,YAAA,EDsDL,mEzBgjHE,wBAAyB,E0B/lHzB,2BAAA,E3BolHD,6C0B/hHD,8CACE,uBAAA,E1BiiHD,0BAAA,E0B9hHC,sB1BiiHD,MAAA,KCgBD,8D0BlnHE,cAAA,E3BumHD,mE0B9hHD,oECjEE,wBAAA,EACG,2BAAA,EDqEL,oEzB6iHE,uBAAwB,EyB3iHxB,0BAAA,EAiBF,mCACE,iCACA,QAAA,EAEF,iCACE,cAAA,IACA,aAAA,IAKF,oCtB/CE,cAAA,KACQ,aAAA,KsBkDR,iCtBnDA,mBAAA,MAAA,EAAA,IAAA,IAAA,iBACQ,WAAA,MAAA,EAAA,IAAA,IAAA,iBsByDV,0CACE,mBAAA,K1B0gHD,WAAA,K0BtgHC,YACA,YAAA,EAGF,eACE,aAAA,IAAA,IAAA,E1BwgHD,oBAAA,ECgBD,uBACE,aAAc,EAAE,IAAI,IyB7gHlB,yBACA,+BACA,oC1BkgHH,QAAA,M0BzgHC,MAAO,KAcH,MAAA,K1B8/GL,UAAA,KCgBD,oCACE,MAAO,KyBvgHL,8BACA,oC1B4/GH,oC0Bv/GC,0CACE,WAAA,K1By/GH,YAAA,E2BlqHC,4DACC,cAAA,EAQA,sD3B+pHF,uBAAA,I0Bz/GC,wBAAA,IC/KA,2BAAA,EACC,0BAAA,EAQA,sD3BqqHF,uBAAA,E0B1/GC,wBAAyB,EACzB,2BAAA,I1B4/GD,0BAAA,ICgBD,uE0BzrHE,cAAA,E3B8qHD,4E0Bz/GD,6EC7LE,2BAAA,EACC,0BAAA,EDoMH,6EACE,uBAAA,EACA,wBAAA,EAEA,qB1Bu/GD,QAAA,M0B3/GC,MAAO,KzB2gHP,aAAc,MyBpgHZ,gBAAA,SAEA,0B1Bw/GH,gC0BjgHC,QAAS,WAYP,MAAA,K1Bw/GH,MAAA,G0Bp/GG,qC1Bu/GH,MAAA,KCgBD,+CACE,KAAM,KyBh/GF,gDAFA,6C1By+GL,2D0Bx+GK,wDEzOJ,SAAU,SACV,KAAA,cACA,eAAA,K5BotHD,a4BhtHC,SAAA,SACE,QAAA,MACA,gBAAA,S5BmtHH,0B4B3tHC,MAAO,KAeL,cAAA,EACA,aAAA,EAOA,2BACA,SAAA,S5B0sHH,QAAA,E4BxsHG,MAAA,KACE,MAAA,K5B0sHL,cAAA,ECgBD,iCACE,QAAS,EiBtrHT,8BACA,mCACA,sCACA,OAAA,KlB2qHD,QAAA,KAAA,KkBzqHC,UAAA,KjByrHA,YAAa,UACb,cAAe,IiBxrHb,oClB6qHH,yCkB1qHC,4CjB0rHA,OAAQ,KACR,YAAa,KDTd,8C4BltHD,mDAAA,sD3B6tHA,sCACA,2CiB5rHI,8CjBisHF,OAAQ,KiB7sHR,8BACA,mCACA,sCACA,OAAA,KlBksHD,QAAA,IAAA,KkBhsHC,UAAA,KjBgtHA,YAAa,IACb,cAAe,IiB/sHb,oClBosHH,yCkBjsHC,4CjBitHA,OAAQ,KACR,YAAa,KDTd,8C4BhuHD,mDAAA,sD3B2uHA,sCACA,2CiBntHI,8CjBwtHF,OAAQ,K2B5uHR,2B5BguHD,mB4BhuHC,iB3BivHA,QAAS,W2B5uHX,8D5BguHC,sD4BhuHD,oDAEE,cAAA,EAEA,mB5BkuHD,iB4B7tHC,MAAO,GACP,YAAA,OACA,eAAA,OAEA,mBACA,QAAA,IAAA,KACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,K5B+tHD,WAAA,O4B5tHC,iBAAA,KACE,OAAA,IAAA,MAAA,KACA,cAAA,I5B+tHH,4B4B5tHC,QAAA,IAAA,KACE,UAAA,KACA,cAAA,I5B+tHH,4B4BlvHC,QAAS,KAAK,K3BkwHd,UAAW,K2BxuHT,cAAA,IAKJ,wCAAA,qC3BwuHE,WAAY,EAEd,uCACA,+BACA,kC0Bh1HE,6CACG,8CC4GL,6D5BwtHC,wE4BvtHC,wBAAA,E5B0tHD,2BAAA,ECgBD,+BACE,aAAc,EAEhB,sCACA,8B2BnuHA,+D5BytHC,oDCWD,iC0Br1HE,4CACG,6CCiHH,uBAAA,E5B2tHD,0BAAA,E4BrtHC,8BAGA,YAAA,E5ButHD,iB4B3tHC,SAAU,SAUR,UAAA,E5BotHH,YAAA,O4BltHK,sB5BqtHL,SAAA,SCgBD,2BACE,YAAa,K2B3tHb,6BAAA,4B5B+sHD,4B4B5sHK,QAAA,EAGJ,kCAAA,wCAGI,aAAA,K5B+sHL,iC6B72HD,uCACE,QAAA,EACA,YAAA,K7Bg3HD,K6Bl3HC,aAAc,EAOZ,cAAA,EACA,WAAA,KARJ,QAWM,SAAA,SACA,QAAA,M7B+2HL,U6B72HK,SAAA,S5B63HJ,QAAS,M4B33HH,QAAA,KAAA,KAMJ,gB7B02HH,gB6Bz2HK,gBAAA,K7B42HL,iBAAA,KCgBD,mB4Bx3HQ,MAAA,KAGA,yBADA,yB7B62HP,MAAA,K6Br2HG,gBAAA,K5Bq3HF,OAAQ,YACR,iBAAkB,Y4Bl3Hd,aAzCN,mB7Bg5HC,mBwBn5HC,iBAAA,KACA,aAAA,QAEA,kBxBs5HD,OAAA,I6Bt5HC,OAAQ,IAAI,EA0DV,SAAA,O7B+1HH,iBAAA,Q6Br1HC,c7Bw1HD,UAAA,K6Bt1HG,UAEA,cAAA,IAAA,MAAA,KALJ,aASM,MAAA,KACA,cAAA,KAEA,e7Bu1HL,aAAA,I6Bt1HK,YAAA,WACE,OAAA,IAAA,MAAA,Y7Bw1HP,cAAA,IAAA,IAAA,EAAA,ECgBD,qBACE,aAAc,KAAK,KAAK,K4B/1HlB,sBAEA,4BADA,4BAEA,MAAA,K7Bo1HP,OAAA,Q6B/0HC,iBAAA,KAqDA,OAAA,IAAA,MAAA,KA8BA,oBAAA,YAnFA,wBAwDE,MAAA,K7B8xHH,cAAA,E6B5xHK,2BACA,MAAA,KA3DJ,6BAgEE,cAAA,IACA,WAAA,OAYJ,iDA0DE,IAAK,KAjED,KAAA,K7B6xHH,yB6B5tHD,2BA9DM,QAAA,W7B6xHL,MAAA,G6Bt2HD,6BAuFE,cAAA,GAvFF,6B5B23HA,aAAc,EACd,cAAe,IDZhB,kC6BzuHD,wCA3BA,wCATM,OAAA,IAAA,MAAA,K7BkxHH,yB6B9uHD,6B5B8vHE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,kC6Bj3HD,wC7Bk3HD,wC6Bh3HG,oBAAA,MAIE,c7Bk3HL,MAAA,K6B/2HK,gB7Bk3HL,cAAA,ICgBD,iBACE,YAAa,I4B13HP,uBAQR,6B7Bu2HC,6B6Br2HG,MAAA,K7Bw2HH,iBAAA,Q6Bt2HK,gBACA,MAAA,KAYN,mBACE,WAAA,I7B+1HD,YAAA,E6B51HG,e7B+1HH,MAAA,K6B71HK,kBACA,MAAA,KAPN,oBAYI,cAAA,IACA,WAAA,OAYJ,wCA0DE,IAAK,KAjED,KAAA,K7B81HH,yB6B7xHD,kBA9DM,QAAA,W7B81HL,MAAA,G6Br1HD,oBACA,cAAA,GAIE,oBACA,cAAA,EANJ,yB5B62HE,aAAc,EACd,cAAe,IDZhB,8B6B7yHD,oCA3BA,oCATM,OAAA,IAAA,MAAA,K7Bs1HH,yB6BlzHD,yB5Bk0HE,cAAe,IAAI,MAAM,KACzB,cAAe,IAAI,IAAI,EAAE,EDZ1B,8B6B30HD,oC7B40HD,oC6B10HG,oBAAA,MAGA,uB7B60HH,QAAA,K6Bl0HC,qBF3OA,QAAA,M3BkjID,yB8B3iIC,WAAY,KACZ,uBAAA,EACA,wBAAA,EAEA,Q9B6iID,SAAA,S8BriIC,WAAY,KA8nBZ,cAAe,KAhoBb,OAAA,IAAA,MAAA,Y9B4iIH,yB8B5hIC,QAgnBE,cAAe,K9Bi7GlB,yB8BphIC,eACA,MAAA,MAGA,iBACA,cAAA,KAAA,aAAA,KAEA,WAAA,Q9BqhID,2BAAA,M8BnhIC,WAAA,IAAA,MAAA,YACE,mBAAA,MAAA,EAAA,IAAA,EAAA,qB9BqhIH,WAAA,MAAA,EAAA,IAAA,EAAA,qB8B57GD,oBArlBI,WAAA,KAEA,yBAAA,iB9BqhID,MAAA,K8BnhIC,WAAA,EACE,mBAAA,KACA,WAAA,KAEA,0B9BqhIH,QAAA,gB8BlhIC,OAAA,eACE,eAAA,E9BohIH,SAAA,kBCkBD,oBACE,WAAY,QDZf,sC8BlhIK,mC9BihIH,oC8B5gIC,cAAe,E7B+hIf,aAAc,G6Bp+GlB,sCAnjBE,mC7B4hIA,WAAY,MDdX,4D8BtgID,sC9BugID,mCCkBG,WAAY,O6B9gId,kCANE,gC9BygIH,4B8B1gIG,0BAuiBF,aAAc,M7Bs/Gd,YAAa,MAEf,yBDZC,kC8B9gIK,gC9B6gIH,4B8B9gIG,0BAcF,aAAc,EAChB,YAAA,GAMF,mBA8gBE,QAAS,KAhhBP,aAAA,EAAA,EAAA,I9BqgIH,yB8BhgIC,mB7BkhIE,cAAe,G6B7gIjB,qBADA,kB9BmgID,SAAA,M8B5/HC,MAAO,EAggBP,KAAM,E7B+gHN,QAAS,KDdR,yB8BhgID,qB9BigID,kB8BhgIC,cAAA,GAGF,kBACE,IAAA,EACA,aAAA,EAAA,EAAA,I9BogID,qB8B7/HC,OAAQ,EACR,cAAA,EACA,aAAA,IAAA,EAAA,EAEA,cACA,MAAA,K9B+/HD,OAAA,K8B7/HC,QAAA,KAAA,K7B+gIA,UAAW,K6B7gIT,YAAA,KAIA,oBAbJ,oB9B2gIC,gBAAA,K8B1/HG,kB7B6gIF,QAAS,MDdR,yBACF,iC8Bn/HC,uCACA,YAAA,OAGA,eC9LA,SAAA,SACA,MAAA,MD+LA,QAAA,IAAA,KACA,WAAA,IACA,aAAA,KACA,cAAA,I9Bs/HD,iBAAA,Y8Bl/HC,iBAAA,KACE,OAAA,IAAA,MAAA,Y9Bo/HH,cAAA,I8B/+HG,qBACA,QAAA,EAEA,yB9Bk/HH,QAAA,M8BxgIC,MAAO,KAyBL,OAAA,I9Bk/HH,cAAA,I8BvjHD,mCAvbI,WAAA,I9Bm/HH,yB8Bz+HC,eACA,QAAA,MAGE,YACA,OAAA,MAAA,M9B4+HH,iB8B/8HC,YAAA,KA2YA,eAAgB,KAjaZ,YAAA,KAEA,yBACA,iCACA,SAAA,OACA,MAAA,KACA,MAAA,KAAA,WAAA,E9By+HH,iBAAA,Y8B9kHC,OAAQ,E7BimHR,mBAAoB,K6Bz/HhB,WAAA,KAGA,kDAqZN,sC9BqlHC,QAAA,IAAA,KAAA,IAAA,KCmBD,sC6B1/HQ,YAAA,KAmBR,4C9By9HD,4C8B1lHG,iBAAkB,M9B+lHnB,yB8B/lHD,YAtYI,MAAA,K9Bw+HH,OAAA,E8Bt+HK,eACA,MAAA,K9B0+HP,iB8B99HG,YAAa,KACf,eAAA,MAGA,aACA,QAAA,KAAA,K1B9NA,WAAA,IACQ,aAAA,M2B/DR,cAAA,IACA,YAAA,M/B+vID,WAAA,IAAA,MAAA,YiBzuHC,cAAe,IAAI,MAAM,YAwEzB,mBAAoB,MAAM,EAAE,IAAI,EAAE,qBAAyB,EAAE,IAAI,EAAE,qBAtI/D,WAAA,MAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,IAAA,EAAA,qBAEA,yBjB2yHH,yBiBvqHC,QAAS,aA/HP,cAAA,EACA,eAAA,OjB0yHH,2BiB5qHC,QAAS,aAxHP,MAAA,KjBuyHH,eAAA,OiBnyHG,kCACA,QAAA,aAmHJ,0BhBssHE,QAAS,aACT,eAAgB,OgB/yHd,wCjBgyHH,6CiBxrHD,2CjB2rHC,MAAA,KiB/xHG,wCACA,MAAA,KAmGJ,4BhBktHE,cAAe,EgB9yHb,eAAA,OAGA,uBADA,oBjBgyHH,QAAA,aiBtsHC,WAAY,EhBytHZ,cAAe,EgB/yHX,eAAA,OAsFN,6BAAA,0BAjFI,aAAA,EAiFJ,4CjB+sHC,sCiB1xHG,SAAA,SjB6xHH,YAAA,E8BtgID,kDAmWE,IAAK,GAvWH,yBACE,yB9BihIL,cAAA,I8B//HD,oCAoVE,cAAe,GA1Vf,yBACA,aACA,MAAA,KACA,YAAA,E1BzPF,eAAA,EACQ,aAAA,EJswIP,YAAA,EACF,OAAA,E8BtgIG,mBAAoB,KACtB,WAAA,M9B0gID,8B8BtgIC,WAAY,EACZ,uBAAA,EHzUA,wBAAA,EAQA,mDACC,cAAA,E3B40IF,uBAAA,I8BlgIC,wBAAyB,IChVzB,2BAAA,EACA,0BAAA,EDkVA,YCnVA,WAAA,IACA,cAAA,IDqVA,mBCtVA,WAAA,KACA,cAAA,KD+VF,mBChWE,WAAA,KACA,cAAA,KDuWF,aAsSE,WAAY,KA1SV,cAAA,KAEA,yB9BkgID,aACF,MAAA,K8Br+HG,aAAc,KAhBhB,YAAA,MACA,yBE5WA,aF8WE,MAAA,eAFF,cAKI,MAAA,gB9B0/HH,aAAA,M8Bh/HD,4BACA,aAAA,GADF,gBAKI,iBAAA,Q9Bm/HH,aAAA,QCmBD,8B6BngIM,MAAA,KARN,oC9B6/HC,oC8B/+HG,MAAA,Q9Bk/HH,iBAAA,Y8B7+HK,6B9Bg/HL,MAAA,KCmBD,iC6B//HQ,MAAA,KAKF,uC9B4+HL,uCCmBC,MAAO,KACP,iBAAkB,Y6B5/HZ,sCAIF,4C9B0+HL,4CCmBC,MAAO,KACP,iBAAkB,Q6B1/HZ,wCAxCR,8C9BohIC,8C8Bt+HG,MAAA,K9By+HH,iBAAA,YCmBD,+B6Bz/HM,aAAA,KAGA,qCApDN,qC9B8hIC,iBAAA,KCmBD,yC6Bv/HI,iBAAA,KAOE,iCAAA,6B7Bq/HJ,aAAc,Q6Bj/HR,oCAiCN,0C9Bk8HD,0C8B9xHC,MAAO,KA7LC,iBAAA,QACA,yB7Bi/HR,sD6B/+HU,MAAA,KAKF,4D9B49HP,4DCmBC,MAAO,KACP,iBAAkB,Y6B5+HV,2DAIF,iE9B09HP,iECmBC,MAAO,KACP,iBAAkB,Q6B1+HV,6D9B69HX,mEADE,mE8B7jIC,MAAO,KA8GP,iBAAA,aAEE,6B9Bo9HL,MAAA,K8B/8HG,mC9Bk9HH,MAAA,KCmBD,0B6Bl+HM,MAAA,KAIA,gCAAA,gC7Bm+HJ,MAAO,K6Bz9HT,0CARQ,0CASN,mD9B08HD,mD8Bz8HC,MAAA,KAFF,gBAKI,iBAAA,K9B68HH,aAAA,QCmBD,8B6B79HM,MAAA,QARN,oC9Bu9HC,oC8Bz8HG,MAAA,K9B48HH,iBAAA,Y8Bv8HK,6B9B08HL,MAAA,QCmBD,iC6Bz9HQ,MAAA,QAKF,uC9Bs8HL,uCCmBC,MAAO,KACP,iBAAkB,Y6Bt9HZ,sCAIF,4C9Bo8HL,4CCmBC,MAAO,KACP,iBAAkB,Q6Bp9HZ,wCAxCR,8C9B8+HC,8C8B/7HG,MAAA,K9Bk8HH,iBAAA,YCmBD,+B6Bl9HM,aAAA,KAGA,qCArDN,qC9Bw/HC,iBAAA,KCmBD,yC6Bh9HI,iBAAA,KAME,iCAAA,6B7B+8HJ,aAAc,Q6B38HR,oCAuCN,0C9Bs5HD,0C8B93HC,MAAO,KAvDC,iBAAA,QAuDV,yBApDU,kE9By7HP,aAAA,Q8Bt7HO,0D9By7HP,iBAAA,QCmBD,sD6Bz8HU,MAAA,QAKF,4D9Bs7HP,4DCmBC,MAAO,KACP,iBAAkB,Y6Bt8HV,2DAIF,iE9Bo7HP,iECmBC,MAAO,KACP,iBAAkB,Q6Bp8HV,6D9Bu7HX,mEADE,mE8B7hIC,MAAO,KA+GP,iBAAA,aAEE,6B9Bm7HL,MAAA,Q8B96HG,mC9Bi7HH,MAAA,KCmBD,0B6Bj8HM,MAAA,QAIA,gCAAA,gC7Bk8HJ,MAAO,KgC1kJT,0CH0oBQ,0CGzoBN,mDjC2jJD,mDiC1jJC,MAAA,KAEA,YACA,QAAA,IAAA,KjC8jJD,cAAA,KiCnkJC,WAAY,KAQV,iBAAA,QjC8jJH,cAAA,IiC3jJK,eACA,QAAA,ajC+jJL,yBiC3kJC,QAAS,EAAE,IAkBT,MAAA,KjC4jJH,QAAA,SkC/kJC,oBACA,MAAA,KAEA,YlCklJD,QAAA,akCtlJC,aAAc,EAOZ,OAAA,KAAA,ElCklJH,cAAA,ICmBD,eiClmJM,QAAA,OAEA,iBACA,oBACA,SAAA,SACA,MAAA,KACA,QAAA,IAAA,KACA,YAAA,KACA,YAAA,WlCmlJL,MAAA,QkCjlJG,gBAAA,KjComJF,iBAAkB,KiCjmJZ,OAAA,IAAA,MAAA,KPVH,6B3B8lJJ,gCkChlJG,YAAA,EjCmmJF,uBAAwB,I0B1nJxB,0BAAA,I3B4mJD,4BkC3kJG,+BjC8lJF,wBAAyB,IACzB,2BAA4B,IiC3lJxB,uBAFA,uBAGA,0BAFA,0BlCilJL,QAAA,EkCzkJG,MAAA,QjC4lJF,iBAAkB,KAClB,aAAc,KAEhB,sBiC1lJM,4BAFA,4BjC6lJN,yBiC1lJM,+BAFA,+BAGA,QAAA,ElC8kJL,MAAA,KkCroJC,OAAQ,QjCwpJR,iBAAkB,QAClB,aAAc,QiCtlJV,wBAEA,8BADA,8BjCulJN,2BiCzlJM,iCjC0lJN,iCDZC,MAAA,KkClkJC,OAAQ,YjCqlJR,iBAAkB,KkChqJd,aAAA,KAEA,oBnCipJL,uBmC/oJG,QAAA,KAAA,KlCkqJF,UAAW,K0B7pJX,YAAA,U3B+oJD,gCmC9oJG,mClCiqJF,uBAAwB,I0B1qJxB,0BAAA,I3B4pJD,+BkC7kJD,kCjCgmJE,wBAAyB,IkChrJrB,2BAAA,IAEA,oBnCiqJL,uBmC/pJG,QAAA,IAAA,KlCkrJF,UAAW,K0B7qJX,YAAA,I3B+pJD,gCmC9pJG,mClCirJF,uBAAwB,I0B1rJxB,0BAAA,I3B4qJD,+BoC9qJD,kCACE,wBAAA,IACA,2BAAA,IAEA,OpCgrJD,aAAA,EoCprJC,OAAQ,KAAK,EAOX,WAAA,OpCgrJH,WAAA,KCmBD,UmChsJM,QAAA,OAEA,YACA,eACA,QAAA,apCirJL,QAAA,IAAA,KoC/rJC,iBAAkB,KnCktJlB,OAAQ,IAAI,MAAM,KmC/rJd,cAAA,KAnBN,kBpCosJC,kBCmBC,gBAAiB,KmC5rJb,iBAAA,KA3BN,eAAA,kBAkCM,MAAA,MAlCN,mBAAA,sBnCguJE,MAAO,KmCrrJH,mBAEA,yBADA,yBpCwqJL,sBqCrtJC,MAAO,KACP,OAAA,YACA,iBAAA,KAEA,OACA,QAAA,OACA,QAAA,KAAA,KAAA,KACA,UAAA,IACA,YAAA,IACA,YAAA,EACA,MAAA,KrCutJD,WAAA,OqCntJG,YAAA,OpCsuJF,eAAgB,SoCpuJZ,cAAA,MrCutJL,cqCrtJK,cAKJ,MAAA,KACE,gBAAA,KrCktJH,OAAA,QqC7sJG,aACA,QAAA,KAOJ,YCtCE,SAAA,StCkvJD,IAAA,KCmBD,eqChwJM,iBAAA,KALJ,2BD0CF,2BrC+sJC,iBAAA,QCmBD,eqCvwJM,iBAAA,QALJ,2BD8CF,2BrCktJC,iBAAA,QCmBD,eqC9wJM,iBAAA,QALJ,2BDkDF,2BrCqtJC,iBAAA,QCmBD,YqCrxJM,iBAAA,QALJ,wBDsDF,wBrCwtJC,iBAAA,QCmBD,eqC5xJM,iBAAA,QALJ,2BD0DF,2BrC2tJC,iBAAA,QCmBD,cqCnyJM,iBAAA,QCDJ,0BADF,0BAEE,iBAAA,QAEA,OACA,QAAA,aACA,UAAA,KACA,QAAA,IAAA,IACA,UAAA,KACA,YAAA,IACA,YAAA,EACA,MAAA,KACA,WAAA,OvCwxJD,YAAA,OuCrxJC,eAAA,OACE,iBAAA,KvCuxJH,cAAA,KuClxJG,aACA,QAAA,KAGF,YtCqyJA,SAAU,SsCnyJR,IAAA,KAMA,0BvC+wJH,eCmBC,IAAK,EsChyJD,QAAA,IAAA,IvCmxJL,cuCjxJK,cAKJ,MAAA,KtC+xJA,gBAAiB,KsC7xJf,OAAA,QvC+wJH,+BuC3wJC,4BACE,MAAA,QvC6wJH,iBAAA,KuCzwJG,wBvC4wJH,MAAA,MuCxwJG,+BvC2wJH,aAAA,IwCp0JC,uBACA,YAAA,IAEA,WACA,YAAA,KxCu0JD,eAAA,KwC50JC,cAAe,KvC+1Jf,MAAO,QuCt1JL,iBAAA,KAIA,eAbJ,cAcI,MAAA,QxCu0JH,awCr1JC,cAAe,KAmBb,UAAA,KxCq0JH,YAAA,ICmBD,cuCn1JI,iBAAA,QAEA,sBxCo0JH,4BwC91JC,cAAe,KA8Bb,aAAA,KxCm0JH,cAAA,IwChzJD,sBAfI,UAAA,KxCo0JD,oCwCj0JC,WvCo1JA,YAAa,KuCl1JX,eAAA,KxCo0JH,sBwC1zJD,4BvC60JE,cAAe,KuCj1Jb,aAAA,KC5CJ,ezC+2JD,cyC92JC,UAAA,MAGA,WACA,QAAA,MACA,QAAA,IACA,cAAA,KrCiLA,YAAA,WACK,iBAAA,KACG,OAAA,IAAA,MAAA,KJisJT,cAAA,IyC33JC,mBAAoB,OAAO,IAAI,YxC84J1B,cAAe,OAAO,IAAI,YwCj4J7B,WAAA,OAAA,IAAA,YAKF,iBzC82JD,eCmBC,aAAc,KACd,YAAa,KwC13JX,mBA1BJ,kBzCq4JC,kByC12JG,aAAA,QCzBJ,oBACE,QAAA,IACA,MAAA,KAEA,O1Cy4JD,QAAA,K0C74JC,cAAe,KAQb,OAAA,IAAA,MAAA,YAEA,cAAA,IAVJ,UAeI,WAAA,E1Cq4JH,MAAA,QCmBD,mByCl5JI,YAAA,IArBJ,SAyBI,U1Ck4JH,cAAA,ECmBD,WyC34JE,WAAA,IAFF,mBAAA,mBAMI,cAAA,KAEA,0BACA,0B1C43JH,SAAA,S0Cp3JC,IAAK,KCvDL,MAAA,MACA,MAAA,Q3C+6JD,e0Cz3JC,MAAO,QClDL,iBAAA,Q3C86JH,aAAA,Q2C36JG,kB3C86JH,iBAAA,Q2Ct7JC,2BACA,MAAA,Q3C07JD,Y0Ch4JC,MAAO,QCtDL,iBAAA,Q3Cy7JH,aAAA,Q2Ct7JG,e3Cy7JH,iBAAA,Q2Cj8JC,wBACA,MAAA,Q3Cq8JD,e0Cv4JC,MAAO,QC1DL,iBAAA,Q3Co8JH,aAAA,Q2Cj8JG,kB3Co8JH,iBAAA,Q2C58JC,2BACA,MAAA,Q3Cg9JD,c0C94JC,MAAO,QC9DL,iBAAA,Q3C+8JH,aAAA,Q2C58JG,iB3C+8JH,iBAAA,Q4Ch9JC,0BAAQ,MAAA,QACR,wCAAQ,K5Cs9JP,oBAAA,KAAA,E4Cl9JD,GACA,oBAAA,EAAA,GACA,mCAAQ,K5Cw9JP,oBAAA,KAAA,E4C19JD,GACA,oBAAA,EAAA,GACA,gCAAQ,K5Cw9JP,oBAAA,KAAA,E4Ch9JD,GACA,oBAAA,EAAA,GAGA,UACA,OAAA,KxCsCA,cAAA,KACQ,SAAA,OJ86JT,iBAAA,Q4Ch9JC,cAAe,IACf,mBAAA,MAAA,EAAA,IAAA,IAAA,eACA,WAAA,MAAA,EAAA,IAAA,IAAA,eAEA,cACA,MAAA,KACA,MAAA,EACA,OAAA,KACA,UAAA,KxCyBA,YAAA,KACQ,MAAA,KAyHR,WAAA,OACK,iBAAA,QACG,mBAAA,MAAA,EAAA,KAAA,EAAA,gBJk0JT,WAAA,MAAA,EAAA,KAAA,EAAA,gB4C78JC,mBAAoB,MAAM,IAAI,K3Cw+JzB,cAAe,MAAM,IAAI,K4Cv+J5B,WAAA,MAAA,IAAA,KDEF,sBCAE,gCDAF,iBAAA,yK5Ci9JD,iBAAA,oK4C18JC,iBAAiB,iK3Cs+JjB,wBAAyB,KAAK,KGlhK9B,gBAAA,KAAA,KJ4/JD,qBI1/JS,+BwCmDR,kBAAmB,qBAAqB,GAAG,OAAO,SErElD,aAAA,qBAAA,GAAA,OAAA,S9C+gKD,UAAA,qBAAA,GAAA,OAAA,S6C59JG,sBACA,iBAAA,Q7Cg+JH,wC4C38JC,iBAAkB,yKEzElB,iBAAA,oK9CuhKD,iBAAA,iK6Cp+JG,mBACA,iBAAA,Q7Cw+JH,qC4C/8JC,iBAAkB,yKE7ElB,iBAAA,oK9C+hKD,iBAAA,iK6C5+JG,sBACA,iBAAA,Q7Cg/JH,wC4Cn9JC,iBAAkB,yKEjFlB,iBAAA,oK9CuiKD,iBAAA,iK6Cp/JG,qBACA,iBAAA,Q7Cw/JH,uC+C/iKC,iBAAkB,yKAElB,iBAAA,oK/CgjKD,iBAAA,iK+C7iKG,O/CgjKH,WAAA,KC4BD,mB8CtkKE,WAAA,E/C+iKD,O+C3iKD,YACE,SAAA,O/C6iKD,KAAA,E+CziKC,Y/C4iKD,MAAA,Q+CxiKG,c/C2iKH,QAAA,MC4BD,4B8CjkKE,UAAA,KAGF,aAAA,mBAEE,aAAA,KAGF,YAAA,kB9CkkKE,cAAe,K8C3jKjB,YAHE,Y/CuiKD,a+CniKC,QAAA,W/CsiKD,eAAA,I+CliKC,c/CqiKD,eAAA,O+ChiKC,cACA,eAAA,OAMF,eACE,WAAA,EACA,cAAA,ICvDF,YAEE,aAAA,EACA,WAAA,KAQF,YACE,aAAA,EACA,cAAA,KAGA,iBACA,SAAA,SACA,QAAA,MhDglKD,QAAA,KAAA,KgD7kKC,cAAA,KrB3BA,iBAAA,KACC,OAAA,IAAA,MAAA,KqB6BD,6BACE,uBAAA,IrBvBF,wBAAA,I3BymKD,4BgDvkKC,cAAe,E/CmmKf,2BAA4B,I+CjmK5B,0BAAA,IAFF,kBAAA,uBAKI,MAAA,KAIF,2CAAA,gD/CmmKA,MAAO,K+C/lKL,wBAFA,wBhD4kKH,6BgD3kKG,6BAKF,MAAO,KACP,gBAAA,KACA,iBAAA,QAKA,uB/C+lKA,MAAO,KACP,WAAY,K+C5lKV,0BhDskKH,gCgDrkKG,gCALF,MAAA,K/CsmKA,OAAQ,YACR,iBAAkB,KDxBnB,mDgD/kKC,yDAAA,yD/C4mKA,MAAO,QDxBR,gDgDnkKC,sDAAA,sD/CgmKA,MAAO,K+C5lKL,wBAEA,8BADA,8BhDskKH,QAAA,EgD3kKC,MAAA,K/CumKA,iBAAkB,QAClB,aAAc,QAEhB,iDDpBC,wDCuBD,uDADA,uD+C5mKE,8DAYI,6D/C+lKN,uD+C3mKE,8D/C8mKF,6DAKE,MAAO,QDxBR,8CiD7qKG,oDADF,oDAEE,MAAA,QAEA,yBhD0sKF,MAAO,QgDxsKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhD2sKJ,MAAO,QDtBR,gCiDnrKO,gCAGF,qCAFE,qChD8sKN,MAAO,QACP,iBAAkB,QAEpB,iCgD1sKQ,uCAFA,uChD6sKR,sCDtBC,4CiDtrKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,sBhDuuKF,MAAO,QgDruKH,iBAAA,QAFF,uBAAA,4BAKI,MAAA,QAGF,gDAAA,qDhDwuKJ,MAAO,QDtBR,6BiDhtKO,6BAGF,kCAFE,kChD2uKN,MAAO,QACP,iBAAkB,QAEpB,8BgDvuKQ,oCAFA,oChD0uKR,mCDtBC,yCiDntKO,yCArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,yBhDowKF,MAAO,QgDlwKH,iBAAA,QAFF,0BAAA,+BAKI,MAAA,QAGF,mDAAA,wDhDqwKJ,MAAO,QDtBR,gCiD7uKO,gCAGF,qCAFE,qChDwwKN,MAAO,QACP,iBAAkB,QAEpB,iCgDpwKQ,uCAFA,uChDuwKR,sCDtBC,4CiDhvKO,4CArBN,MAAA,KACE,iBAAA,QACA,aAAA,QAEA,wBhDiyKF,MAAO,QgD/xKH,iBAAA,QAFF,yBAAA,8BAKI,MAAA,QAGF,kDAAA,uDhDkyKJ,MAAO,QDtBR,+BiD1wKO,+BAGF,oCAFE,oChDqyKN,MAAO,QACP,iBAAkB,QAEpB,gCgDjyKQ,sCAFA,sChDoyKR,qCDtBC,2CiD7wKO,2CDkGN,MAAO,KACP,iBAAA,QACA,aAAA,QAEF,yBACE,WAAA,EACA,cAAA,IE1HF,sBACE,cAAA,EACA,YAAA,IAEA,O9C0DA,cAAA,KACQ,iBAAA,KJgvKT,OAAA,IAAA,MAAA,YkDtyKC,cAAe,IACf,mBAAA,EAAA,IAAA,IAAA,gBlDwyKD,WAAA,EAAA,IAAA,IAAA,gBkDlyKC,YACA,QAAA,KvBnBC,e3B0zKF,QAAA,KAAA,KkDzyKC,cAAe,IAAI,MAAM,YAMvB,uBAAA,IlDsyKH,wBAAA,IkDhyKC,0CACA,MAAA,QAEA,alDmyKD,WAAA,EkDvyKC,cAAe,EjDm0Kf,UAAW,KACX,MAAO,QDtBR,oBkD7xKC,sBjDqzKF,eiD3zKI,mBAKJ,qBAEE,MAAA,QvBvCA,cACC,QAAA,KAAA,K3By0KF,iBAAA,QkDxxKC,WAAY,IAAI,MAAM,KjDozKtB,2BAA4B,IiDjzK1B,0BAAA,IAHJ,mBAAA,mCAMM,cAAA,ElD2xKL,oCkDtxKG,oDjDkzKF,aAAc,IAAI,EiDhzKZ,cAAA,EvBtEL,4D3Bg2KF,4EkDpxKG,WAAA,EjDgzKF,uBAAwB,IiD9yKlB,wBAAA,IvBtEL,0D3B81KF,0EkD7yKC,cAAe,EvB1Df,2BAAA,IACC,0BAAA,IuB0FH,+EAEI,uBAAA,ElDixKH,wBAAA,EkD7wKC,wDlDgxKD,iBAAA,EC4BD,0BACE,iBAAkB,EiDryKpB,8BlD6wKC,ckD7wKD,gCjD0yKE,cAAe,EiD1yKjB,sCAQM,sBlD2wKL,wCC4BC,cAAe,K0Bx5Kf,aAAA,KuByGF,wDlDwxKC,0BC4BC,uBAAwB,IACxB,wBAAyB,IiDrzK3B,yFAoBQ,yFlD2wKP,2DkD5wKO,2DjDwyKN,uBAAwB,IACxB,wBAAyB,IAK3B,wGiDj0KA,wGjD+zKA,wGDtBC,wGCuBD,0EiDh0KA,0EjD8zKA,0EiDtyKU,0EjD8yKR,uBAAwB,IAK1B,uGiD30KA,uGjDy0KA,uGDtBC,uGCuBD,yEiD10KA,yEjDw0KA,yEiD5yKU,yEvB7HR,wBAAA,IuBiGF,sDlDwzKC,yBC4BC,2BAA4B,IAC5B,0BAA2B,IiD3yKrB,qFA1CR,qFAyCQ,wDlDsxKP,wDC4BC,2BAA4B,IAC5B,0BAA2B,IAG7B,oGDtBC,oGCwBD,oGiDj2KA,oGjD81KA,uEiDhzKU,uEjDkzKV,uEiDh2KA,uEjDs2KE,0BAA2B,IAG7B,mGDtBC,mGCwBD,mGiD32KA,mGjDw2KA,sEiDtzKU,sEjDwzKV,sEiD12KA,sEjDg3KE,2BAA4B,IiDrzK1B,0BlD8xKH,qCkDz1KD,0BAAA,qCA+DI,WAAA,IAAA,MAAA,KA/DJ,kDAAA,kDAmEI,WAAA,EAnEJ,uBAAA,yCjD83KE,OAAQ,EiDpzKA,+CjDwzKV,+CiDl4KA,+CjDo4KA,+CAEA,+CANA,+CDjBC,iECoBD,iEiDn4KA,iEjDq4KA,iEAEA,iEANA,iEAWE,YAAa,EiD9zKL,8CjDk0KV,8CiDh5KA,8CjDk5KA,8CAEA,8CANA,8CDjBC,gECoBD,gEiDj5KA,gEjDm5KA,gEAEA,gEANA,gEAWE,aAAc,EAIhB,+CiD95KA,+CjD45KA,+CiDr0KU,+CjDw0KV,iEiD/5KA,iEjD65KA,iEDtBC,iEC6BC,cAAe,EAEjB,8CiDt0KU,8CjDw0KV,8CiDx6KA,8CjDu6KA,gEDtBC,gECwBD,gEiDn0KI,gEACA,cAAA,EAUJ,yBACE,cAAA,ElDsyKD,OAAA,EkDlyKG,aACA,cAAA,KANJ,oBASM,cAAA,ElDqyKL,cAAA,IkDhyKG,2BlDmyKH,WAAA,IC4BD,4BiD3zKM,cAAA,EAKF,wDAvBJ,wDlDwzKC,WAAA,IAAA,MAAA,KkD/xKK,2BlDkyKL,WAAA,EmDrhLC,uDnDwhLD,cAAA,IAAA,MAAA,KmDrhLG,eACA,aAAA,KnDyhLH,8BmD3hLC,MAAA,KAMI,iBAAA,QnDwhLL,aAAA,KmDrhLK,0DACA,iBAAA,KAGJ,qCAEI,MAAA,QnDshLL,iBAAA,KmDviLC,yDnD0iLD,oBAAA,KmDviLG,eACA,aAAA,QnD2iLH,8BmD7iLC,MAAA,KAMI,iBAAA,QnD0iLL,aAAA,QmDviLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnDwiLL,iBAAA,KmDzjLC,yDnD4jLD,oBAAA,QmDzjLG,eACA,aAAA,QnD6jLH,8BmD/jLC,MAAA,QAMI,iBAAA,QnD4jLL,aAAA,QmDzjLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnD0jLL,iBAAA,QmD3kLC,yDnD8kLD,oBAAA,QmD3kLG,YACA,aAAA,QnD+kLH,2BmDjlLC,MAAA,QAMI,iBAAA,QnD8kLL,aAAA,QmD3kLK,uDACA,iBAAA,QAGJ,kCAEI,MAAA,QnD4kLL,iBAAA,QmD7lLC,sDnDgmLD,oBAAA,QmD7lLG,eACA,aAAA,QnDimLH,8BmDnmLC,MAAA,QAMI,iBAAA,QnDgmLL,aAAA,QmD7lLK,0DACA,iBAAA,QAGJ,qCAEI,MAAA,QnD8lLL,iBAAA,QmD/mLC,yDnDknLD,oBAAA,QmD/mLG,cACA,aAAA,QnDmnLH,6BmDrnLC,MAAA,QAMI,iBAAA,QnDknLL,aAAA,QmD/mLK,yDACA,iBAAA,QAGJ,oCAEI,MAAA,QnDgnLL,iBAAA,QoD/nLC,wDACA,oBAAA,QAEA,kBACA,SAAA,SpDkoLD,QAAA,MoDvoLC,OAAQ,EnDmqLR,QAAS,EACT,SAAU,OAEZ,yCmDzpLI,wBADA,yBAEA,yBACA,wBACA,SAAA,SACA,IAAA,EACA,OAAA,EpDkoLH,KAAA,EoD7nLC,MAAO,KACP,OAAA,KpD+nLD,OAAA,EoD1nLC,wBpD6nLD,eAAA,OqDvpLC,uBACA,eAAA,IAEA,MACA,WAAA,KACA,QAAA,KjDwDA,cAAA,KACQ,iBAAA,QJmmLT,OAAA,IAAA,MAAA,QqDlqLC,cAAe,IASb,mBAAA,MAAA,EAAA,IAAA,IAAA,gBACA,WAAA,MAAA,EAAA,IAAA,IAAA,gBAKJ,iBACE,aAAA,KACA,aAAA,gBAEF,SACE,QAAA,KACA,cAAA,ICtBF,SACE,QAAA,IACA,cAAA,IAEA,OACA,MAAA,MACA,UAAA,KjCRA,YAAA,IAGA,YAAA,ErBwrLD,MAAA,KsDhrLC,YAAA,EAAA,IAAA,EAAA,KrD4sLA,OAAQ,kBqD1sLN,QAAA,GjCbF,aiCeE,ajCZF,MAAA,KrBgsLD,gBAAA,KsD5qLC,OAAA,QACE,OAAA,kBACA,QAAA,GAEA,aACA,mBAAA,KtD8qLH,QAAA,EuDnsLC,OAAQ,QACR,WAAA,IvDqsLD,OAAA,EuDhsLC,YACA,SAAA,OAEA,OACA,SAAA,MACA,IAAA,EACA,MAAA,EACA,OAAA,EACA,KAAA,EAIA,QAAA,KvDgsLD,QAAA,KuD7rLC,SAAA,OnD+GA,2BAAA,MACI,QAAA,EAEI,0BAkER,mBAAA,kBAAA,IAAA,SAEK,cAAA,aAAA,IAAA,SACG,WAAA,UAAA,IAAA,SJghLT,kBAAA,kBuDnsLC,cAAA,kBnD2GA,aAAA,kBACI,UAAA,kBAEI,wBJ2lLT,kBAAA,euDvsLK,cAAe,eACnB,aAAA,eACA,UAAA,eAIF,mBACE,WAAA,OACA,WAAA,KvDwsLD,cuDnsLC,SAAU,SACV,MAAA,KACA,OAAA,KAEA,eACA,SAAA,SnDaA,iBAAA,KACQ,wBAAA,YmDZR,gBAAA,YtD+tLA,OsD/tLA,IAAA,MAAA,KAEA,OAAA,IAAA,MAAA,evDqsLD,cAAA,IuDjsLC,QAAS,EACT,mBAAA,EAAA,IAAA,IAAA,eACA,WAAA,EAAA,IAAA,IAAA,eAEA,gBACA,SAAA,MACA,IAAA,EACA,MAAA,EvDmsLD,OAAA,EuDjsLC,KAAA,ElCrEA,QAAA,KAGA,iBAAA,KkCmEA,qBlCtEA,OAAA,iBAGA,QAAA,EkCwEF,mBACE,OAAA,kBACA,QAAA,GAIF,cACE,QAAA,KvDmsLD,cAAA,IAAA,MAAA,QuD9rLC,qBACA,WAAA,KAKF,aACE,OAAA,EACA,YAAA,WAIF,YACE,SAAA,SACA,QAAA,KvD6rLD,cuD/rLC,QAAS,KAQP,WAAA,MACA,WAAA,IAAA,MAAA,QATJ,wBAaI,cAAA,EvDyrLH,YAAA,IuDrrLG,mCvDwrLH,YAAA,KuDlrLC,oCACA,YAAA,EAEA,yBACA,SAAA,SvDqrLD,IAAA,QuDnqLC,MAAO,KAZP,OAAA,KACE,SAAA,OvDmrLD,yBuDhrLD,cnDvEA,MAAA,MACQ,OAAA,KAAA,KmD2ER,eAAY,mBAAA,EAAA,IAAA,KAAA,evDkrLX,WAAA,EAAA,IAAA,KAAA,euD5qLD,UAFA,MAAA,OvDorLD,yBwDl0LC,UACA,MAAA,OCNA,SAEA,SAAA,SACA,QAAA,KACA,QAAA,MACA,YAAA,iBAAA,UAAA,MAAA,WACA,UAAA,KACA,WAAA,OACA,YAAA,IACA,YAAA,WACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KACA,eAAA,ODHA,WAAA,OnCVA,aAAA,OAGA,UAAA,OrBy1LD,YAAA,OwD90LC,OAAA,iBnCdA,QAAA,ErBg2LD,WAAA,KwDj1LY,YAAmB,OAAA,kBxDq1L/B,QAAA,GwDp1LY,aAAmB,QAAA,IAAA,ExDw1L/B,WAAA,KwDv1LY,eAAmB,QAAA,EAAA,IxD21L/B,YAAA,IwD11LY,gBAAmB,QAAA,IAAA,ExD81L/B,WAAA,IwDz1LC,cACA,QAAA,EAAA,IACA,YAAA,KAEA,eACA,UAAA,MxD41LD,QAAA,IAAA,IwDx1LC,MAAO,KACP,WAAA,OACA,iBAAA,KACA,cAAA,IAEA,exD01LD,SAAA,SwDt1LC,MAAA,EACE,OAAA,EACA,aAAA,YACA,aAAA,MAEA,4BxDw1LH,OAAA,EwDt1LC,KAAA,IACE,YAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,iCxDw1LH,MAAA,IwDt1LC,OAAA,EACE,cAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,kCxDw1LH,OAAA,EwDt1LC,KAAA,IACE,cAAA,KACA,aAAA,IAAA,IAAA,EACA,iBAAA,KAEA,8BxDw1LH,IAAA,IwDt1LC,KAAA,EACE,WAAA,KACA,aAAA,IAAA,IAAA,IAAA,EACA,mBAAA,KAEA,6BxDw1LH,IAAA,IwDt1LC,MAAA,EACE,WAAA,KACA,aAAA,IAAA,EAAA,IAAA,IACA,kBAAA,KAEA,+BxDw1LH,IAAA,EwDt1LC,KAAA,IACE,YAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,oCxDw1LH,IAAA,EwDt1LC,MAAA,IACE,WAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,qCxDw1LH,IAAA,E0Dr7LC,KAAM,IACN,WAAA,KACA,aAAA,EAAA,IAAA,IACA,oBAAA,KAEA,SACA,SAAA,SACA,IAAA,EDXA,KAAA,EAEA,QAAA,KACA,QAAA,KACA,UAAA,MACA,QAAA,IACA,YAAA,iBAAA,UAAA,MAAA,WACA,UAAA,KACA,WAAA,OACA,YAAA,IACA,YAAA,WACA,WAAA,KACA,WAAA,MACA,gBAAA,KACA,YAAA,KACA,eAAA,KCAA,eAAA,OAEA,WAAA,OACA,aAAA,OAAA,UAAA,OACA,YAAA,OACA,iBAAA,KACA,wBAAA,YtD8CA,gBAAA,YACQ,OAAA,IAAA,MAAA,KJq5LT,OAAA,IAAA,MAAA,e0Dh8LC,cAAA,IAAY,mBAAA,EAAA,IAAA,KAAA,e1Dm8Lb,WAAA,EAAA,IAAA,KAAA,e0Dl8La,WAAA,KACZ,aAAY,WAAA,MACZ,eAAY,YAAA,KAGd,gBACE,WAAA,KAEA,cACA,YAAA,MAEA,e1Dw8LD,QAAA,IAAA,K0Dr8LC,OAAQ,EACR,UAAA,K1Du8LD,iBAAA,Q0D/7LC,cAAA,IAAA,MAAA,QzD49LA,cAAe,IAAI,IAAI,EAAE,EyDz9LvB,iBACA,QAAA,IAAA,KAEA,gBACA,sB1Di8LH,SAAA,S0D97LC,QAAS,MACT,MAAA,E1Dg8LD,OAAA,E0D97LC,aAAc,YACd,aAAA,M1Di8LD,gB0D57LC,aAAA,KAEE,sBACA,QAAA,GACA,aAAA,KAEA,oB1D87LH,OAAA,M0D77LG,KAAA,IACE,YAAA,MACA,iBAAA,KACA,iBAAA,gBACA,oBAAA,E1Dg8LL,0B0D57LC,OAAA,IACE,YAAA,MACA,QAAA,IACA,iBAAA,KACA,oBAAA,EAEA,sB1D87LH,IAAA,I0D77LG,KAAA,MACE,WAAA,MACA,mBAAA,KACA,mBAAA,gBACA,kBAAA,E1Dg8LL,4B0D57LC,OAAA,MACE,KAAA,IACA,QAAA,IACA,mBAAA,KACA,kBAAA,EAEA,uB1D87LH,IAAA,M0D77LG,KAAA,IACE,YAAA,MACA,iBAAA,EACA,oBAAA,KACA,oBAAA,gB1Dg8LL,6B0D37LC,IAAA,IACE,YAAA,MACA,QAAA,IACA,iBAAA,EACA,oBAAA,KAEA,qB1D67LH,IAAA,I0D57LG,MAAA,MACE,WAAA,MACA,mBAAA,EACA,kBAAA,KACA,kBAAA,gB1D+7LL,2B2DvjMC,MAAO,IACP,OAAA,M3DyjMD,QAAA,I2DtjMC,mBAAoB,EACpB,kBAAA,KAEA,U3DwjMD,SAAA,S2DrjMG,gBACA,SAAA,SvD6KF,MAAA,KACK,SAAA,OJ64LN,sB2DlkMC,SAAU,S1D+lMV,QAAS,K0DjlML,mBAAA,IAAA,YAAA,K3DwjML,cAAA,IAAA,YAAA,K2D9hMC,WAAA,IAAA,YAAA,KvDmKK,4BAFL,0BAGQ,YAAA,EA3JA,qDA+GR,sBAEQ,mBAAA,kBAAA,IAAA,YJi7LP,cAAA,aAAA,IAAA,Y2D5jMG,WAAA,UAAA,IAAA,YvDmHJ,4BAAA,OACQ,oBAAA,OuDjHF,oBAAA,O3D+jML,YAAA,OI/8LD,mCHy+LA,2BGx+LQ,KAAA,EuD5GF,kBAAA,sB3DgkML,UAAA,sBC2BD,kCADA,2BG/+LA,KAAA,EACQ,kBAAA,uBuDtGF,UAAA,uBArCN,6B3DumMD,gC2DvmMC,iC1DkoME,KAAM,E0DrlMN,kBAAA,mB3D+jMH,UAAA,oBAGA,wB2D/mMD,sBAAA,sBAsDI,QAAA,MAEA,wB3D6jMH,KAAA,E2DzjMG,sB3D4jMH,sB2DxnMC,SAAU,SA+DR,IAAA,E3D4jMH,MAAA,KC0BD,sB0DllMI,KAAA,KAnEJ,sBAuEI,KAAA,MAvEJ,2BA0EI,4B3D2jMH,KAAA,E2DljMC,6BACA,KAAA,MAEA,8BACA,KAAA,KtC3FA,kBsC6FA,SAAA,SACA,IAAA,EACA,OAAA,EACA,KAAA,EACA,MAAA,I3DsjMD,UAAA,K2DjjMC,MAAA,KdnGE,WAAA,OACA,YAAA,EAAA,IAAA,IAAA,eACA,iBAAA,cAAA,OAAA,kBACA,QAAA,G7CwpMH,uB2DrjMC,iBAAA,sEACE,iBAAA,iEACA,iBAAA,uFdxGA,iBAAA,kEACA,OAAA,+GACA,kBAAA,SACA,wBACA,MAAA,E7CgqMH,KAAA,K2DvjMC,iBAAA,sE1DmlMA,iBAAiB,iE0DjlMf,iBAAA,uFACA,iBAAA,kEACA,OAAA,+GtCvHF,kBAAA,SsCyFF,wB3DylMC,wBC4BC,MAAO,KACP,gBAAiB,KACjB,OAAQ,kB0DhlMN,QAAA,EACA,QAAA,G3D2jMH,0C2DnmMD,2CA2CI,6BADA,6B1DqlMF,SAAU,S0DhlMR,IAAA,IACA,QAAA,E3DwjMH,QAAA,a2DxmMC,WAAY,MAqDV,0CADA,6B3DyjMH,KAAA,I2D7mMC,YAAa,MA0DX,2CADA,6BAEA,MAAA,IACA,aAAA,MAME,6BADF,6B3DsjMH,MAAA,K2DjjMG,OAAA,KACE,YAAA,M3DmjML,YAAA,E2DxiMC,oCACA,QAAA,QAEA,oCACA,QAAA,QAEA,qBACA,SAAA,SACA,OAAA,K3D2iMD,KAAA,I2DpjMC,QAAS,GAYP,MAAA,IACA,aAAA,EACA,YAAA,KACA,WAAA,OACA,WAAA,KAEA,wBACA,QAAA,aAWA,MAAA,KACA,OAAA,K3DiiMH,OAAA,I2DhkMC,YAAa,OAkCX,OAAA,QACA,iBAAA,OACA,iBAAA,cACA,OAAA,IAAA,MAAA,K3DiiMH,cAAA,K2DzhMC,6BACA,MAAA,KACA,OAAA,KACA,OAAA,EACA,iBAAA,KAEA,kBACA,SAAA,SACA,MAAA,IACA,OAAA,K3D4hMD,KAAA,I2D3hMC,QAAA,GACE,YAAA,K3D6hMH,eAAA,K2Dp/LC,MAAO,KAhCP,WAAA,O1DijMA,YAAa,EAAE,IAAI,IAAI,eAEzB,uB0D9iMM,YAAA,KAEA,oCACA,0C3DshMH,2C2D9hMD,6BAAA,6BAYI,MAAA,K3DshMH,OAAA,K2DliMD,WAAA,M1D8jME,UAAW,KDxBZ,0C2DjhMD,6BACE,YAAA,MAEA,2C3DmhMD,6B2D/gMD,aAAA,M3DkhMC,kBACF,MAAA,I4DhxMC,KAAA,I3D4yME,eAAgB,KAElB,qBACE,OAAQ,MAkBZ,qCADA,sCADA,mBADA,oBAXA,gBADA,iBAOA,uBADA,wBADA,iBADA,kBADA,wBADA,yBASA,mCADA,oC2DvzME,oBAAA,qBAAA,oBAAA,qB3D8zMF,WADA,YAOA,uBADA,wBADA,qBADA,sBADA,cADA,e2Dl0MI,a3Dw0MJ,cDvBC,kB4DhzMG,mB3DwzMJ,WADA,YAwBE,QAAS,MACT,QAAS,IASX,qCADA,mBANA,gBAGA,uBADA,iBADA,wBAIA,mCDhBC,oB6Dl1MC,oB5Dq2MF,W+B/1MA,uBhCu0MC,qB4D/zMG,cChBF,aACA,kB5Dk2MF,W+Bx1ME,MAAO,KhC40MR,cgCz0MC,QAAS,MACT,aAAA,KhC20MD,YAAA,KgCl0MC,YhCq0MD,MAAA,gBgCl0MC,WhCq0MD,MAAA,egCl0MC,MhCq0MD,QAAA,e8D51MC,MACA,QAAA,gBAEA,WACA,WAAA,O9B8BF,WACE,KAAA,EAAA,EAAA,EhCm0MD,MAAA,YgC5zMC,YAAa,KACb,iBAAA,YhC8zMD,OAAA,E+D91MC,Q/Di2MD,QAAA,eC4BD,OACE,SAAU,M+Dt4MV,chE+2MD,MAAA,aC+BD,YADA,YADA,YADA,YAIE,QAAS,e+Dv5MT,kBhEy4MC,mBgEx4MD,yBhEo4MD,kB+Dr1MD,mBA6IA,yB9D+tMA,kBACA,mB8Dp3ME,yB9Dg3MF,kBACA,mBACA,yB+D15MY,QAAA,eACV,yBAAU,YhE64MT,QAAA,gBC4BD,iB+Dv6MU,QAAA,gBhEg5MX,c+D/1MG,QAAS,oB/Dm2MV,c+Dr2MC,c/Ds2MH,QAAA,sB+Dj2MG,yB/Dq2MD,kBACF,QAAA,iB+Dj2MG,yB/Dq2MD,mBACF,QAAA,kBgEn6MC,yBhEu6MC,yBgEt6MD,QAAA,wBACA,+CAAU,YhE26MT,QAAA,gBC4BD,iB+Dr8MU,QAAA,gBhE86MX,c+Dx2MG,QAAS,oB/D42MV,c+D92MC,c/D+2MH,QAAA,sB+D12MG,+C/D82MD,kBACF,QAAA,iB+D12MG,+C/D82MD,mBACF,QAAA,kBgEj8MC,+ChEq8MC,yBgEp8MD,QAAA,wBACA,gDAAU,YhEy8MT,QAAA,gBC4BD,iB+Dn+MU,QAAA,gBhE48MX,c+Dj3MG,QAAS,oB/Dq3MV,c+Dv3MC,c/Dw3MH,QAAA,sB+Dn3MG,gD/Du3MD,kBACF,QAAA,iB+Dn3MG,gD/Du3MD,mBACF,QAAA,kBgE/9MC,gDhEm+MC,yBgEl+MD,QAAA,wBACA,0BAAU,YhEu+MT,QAAA,gBC4BD,iB+DjgNU,QAAA,gBhE0+MX,c+D13MG,QAAS,oB/D83MV,c+Dh4MC,c/Di4MH,QAAA,sB+D53MG,0B/Dg4MD,kBACF,QAAA,iB+D53MG,0B/Dg4MD,mBACF,QAAA,kBgEr/MC,0BhEy/MC,yBACF,QAAA,wBgE1/MC,yBhE8/MC,WACF,QAAA,gBgE//MC,+ChEmgNC,WACF,QAAA,gBgEpgNC,gDhEwgNC,WACF,QAAA,gBAGA,0B+Dn3MC,WA4BE,QAAS,gBC5LX,eAAU,QAAA,eACV,aAAU,ehE4hNT,QAAA,gBC4BD,oB+DtjNU,QAAA,gBhE+hNX,iB+Dj4MG,QAAS,oBAMX,iB/D83MD,iB+Dz2MG,QAAS,sB/D82MZ,qB+Dl4MC,QAAS,e/Dq4MV,a+D/3MC,qBAcE,QAAS,iB/Ds3MZ,sB+Dn4MC,QAAS,e/Ds4MV,a+Dh4MC,sBAOE,QAAS,kB/D83MZ,4B+D/3MC,QAAS,eCpLT,ahEujNC,4BACF,QAAA,wBC6BD,aACE,cACE,QAAS"}
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot
new file mode 100755
index 0000000..b93a495
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.eot
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg
new file mode 100755
index 0000000..94fb549
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.svg
@@ -0,0 +1,288 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="glyphicons_halflingsregular" horiz-adv-x="1200" >
+<font-face units-per-em="1200" ascent="960" descent="-240" />
+<missing-glyph horiz-adv-x="500" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="400" />
+<glyph unicode=" " />
+<glyph unicode="*" d="M600 1100q15 0 34 -1.5t30 -3.5l11 -1q10 -2 17.5 -10.5t7.5 -18.5v-224l158 158q7 7 18 8t19 -6l106 -106q7 -8 6 -19t-8 -18l-158 -158h224q10 0 18.5 -7.5t10.5 -17.5q6 -41 6 -75q0 -15 -1.5 -34t-3.5 -30l-1 -11q-2 -10 -10.5 -17.5t-18.5 -7.5h-224l158 -158 q7 -7 8 -18t-6 -19l-106 -106q-8 -7 -19 -6t-18 8l-158 158v-224q0 -10 -7.5 -18.5t-17.5 -10.5q-41 -6 -75 -6q-15 0 -34 1.5t-30 3.5l-11 1q-10 2 -17.5 10.5t-7.5 18.5v224l-158 -158q-7 -7 -18 -8t-19 6l-106 106q-7 8 -6 19t8 18l158 158h-224q-10 0 -18.5 7.5 t-10.5 17.5q-6 41 -6 75q0 15 1.5 34t3.5 30l1 11q2 10 10.5 17.5t18.5 7.5h224l-158 158q-7 7 -8 18t6 19l106 106q8 7 19 6t18 -8l158 -158v224q0 10 7.5 18.5t17.5 10.5q41 6 75 6z" />
+<glyph unicode="+" d="M450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-350h350q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-350v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v350h-350q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5 h350v350q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xa0;" />
+<glyph unicode="&#xa5;" d="M825 1100h250q10 0 12.5 -5t-5.5 -13l-364 -364q-6 -6 -11 -18h268q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-100h275q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-125v-174q0 -11 -7.5 -18.5t-18.5 -7.5h-148q-11 0 -18.5 7.5t-7.5 18.5v174 h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h125v100h-275q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h118q-5 12 -11 18l-364 364q-8 8 -5.5 13t12.5 5h250q25 0 43 -18l164 -164q8 -8 18 -8t18 8l164 164q18 18 43 18z" />
+<glyph unicode="&#x2000;" horiz-adv-x="650" />
+<glyph unicode="&#x2001;" horiz-adv-x="1300" />
+<glyph unicode="&#x2002;" horiz-adv-x="650" />
+<glyph unicode="&#x2003;" horiz-adv-x="1300" />
+<glyph unicode="&#x2004;" horiz-adv-x="433" />
+<glyph unicode="&#x2005;" horiz-adv-x="325" />
+<glyph unicode="&#x2006;" horiz-adv-x="216" />
+<glyph unicode="&#x2007;" horiz-adv-x="216" />
+<glyph unicode="&#x2008;" horiz-adv-x="162" />
+<glyph unicode="&#x2009;" horiz-adv-x="260" />
+<glyph unicode="&#x200a;" horiz-adv-x="72" />
+<glyph unicode="&#x202f;" horiz-adv-x="260" />
+<glyph unicode="&#x205f;" horiz-adv-x="325" />
+<glyph unicode="&#x20ac;" d="M744 1198q242 0 354 -189q60 -104 66 -209h-181q0 45 -17.5 82.5t-43.5 61.5t-58 40.5t-60.5 24t-51.5 7.5q-19 0 -40.5 -5.5t-49.5 -20.5t-53 -38t-49 -62.5t-39 -89.5h379l-100 -100h-300q-6 -50 -6 -100h406l-100 -100h-300q9 -74 33 -132t52.5 -91t61.5 -54.5t59 -29 t47 -7.5q22 0 50.5 7.5t60.5 24.5t58 41t43.5 61t17.5 80h174q-30 -171 -128 -278q-107 -117 -274 -117q-206 0 -324 158q-36 48 -69 133t-45 204h-217l100 100h112q1 47 6 100h-218l100 100h134q20 87 51 153.5t62 103.5q117 141 297 141z" />
+<glyph unicode="&#x20bd;" d="M428 1200h350q67 0 120 -13t86 -31t57 -49.5t35 -56.5t17 -64.5t6.5 -60.5t0.5 -57v-16.5v-16.5q0 -36 -0.5 -57t-6.5 -61t-17 -65t-35 -57t-57 -50.5t-86 -31.5t-120 -13h-178l-2 -100h288q10 0 13 -6t-3 -14l-120 -160q-6 -8 -18 -14t-22 -6h-138v-175q0 -11 -5.5 -18 t-15.5 -7h-149q-10 0 -17.5 7.5t-7.5 17.5v175h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v100h-267q-10 0 -13 6t3 14l120 160q6 8 18 14t22 6h117v475q0 10 7.5 17.5t17.5 7.5zM600 1000v-300h203q64 0 86.5 33t22.5 119q0 84 -22.5 116t-86.5 32h-203z" />
+<glyph unicode="&#x2212;" d="M250 700h800q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#x231b;" d="M1000 1200v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-50v-100q0 -91 -49.5 -165.5t-130.5 -109.5q81 -35 130.5 -109.5t49.5 -165.5v-150h50q21 0 35.5 -14.5t14.5 -35.5v-150h-800v150q0 21 14.5 35.5t35.5 14.5h50v150q0 91 49.5 165.5t130.5 109.5q-81 35 -130.5 109.5 t-49.5 165.5v100h-50q-21 0 -35.5 14.5t-14.5 35.5v150h800zM400 1000v-100q0 -60 32.5 -109.5t87.5 -73.5q28 -12 44 -37t16 -55t-16 -55t-44 -37q-55 -24 -87.5 -73.5t-32.5 -109.5v-150h400v150q0 60 -32.5 109.5t-87.5 73.5q-28 12 -44 37t-16 55t16 55t44 37 q55 24 87.5 73.5t32.5 109.5v100h-400z" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#x2601;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -206.5q0 -121 -85 -207.5t-205 -86.5h-750q-79 0 -135.5 57t-56.5 137q0 69 42.5 122.5t108.5 67.5q-2 12 -2 37q0 153 108 260.5t260 107.5z" />
+<glyph unicode="&#x26fa;" d="M774 1193.5q16 -9.5 20.5 -27t-5.5 -33.5l-136 -187l467 -746h30q20 0 35 -18.5t15 -39.5v-42h-1200v42q0 21 15 39.5t35 18.5h30l468 746l-135 183q-10 16 -5.5 34t20.5 28t34 5.5t28 -20.5l111 -148l112 150q9 16 27 20.5t34 -5zM600 200h377l-182 112l-195 534v-646z " />
+<glyph unicode="&#x2709;" d="M25 1100h1150q10 0 12.5 -5t-5.5 -13l-564 -567q-8 -8 -18 -8t-18 8l-564 567q-8 8 -5.5 13t12.5 5zM18 882l264 -264q8 -8 8 -18t-8 -18l-264 -264q-8 -8 -13 -5.5t-5 12.5v550q0 10 5 12.5t13 -5.5zM918 618l264 264q8 8 13 5.5t5 -12.5v-550q0 -10 -5 -12.5t-13 5.5 l-264 264q-8 8 -8 18t8 18zM818 482l364 -364q8 -8 5.5 -13t-12.5 -5h-1150q-10 0 -12.5 5t5.5 13l364 364q8 8 18 8t18 -8l164 -164q8 -8 18 -8t18 8l164 164q8 8 18 8t18 -8z" />
+<glyph unicode="&#x270f;" d="M1011 1210q19 0 33 -13l153 -153q13 -14 13 -33t-13 -33l-99 -92l-214 214l95 96q13 14 32 14zM1013 800l-615 -614l-214 214l614 614zM317 96l-333 -112l110 335z" />
+<glyph unicode="&#xe001;" d="M700 650v-550h250q21 0 35.5 -14.5t14.5 -35.5v-50h-800v50q0 21 14.5 35.5t35.5 14.5h250v550l-500 550h1200z" />
+<glyph unicode="&#xe002;" d="M368 1017l645 163q39 15 63 0t24 -49v-831q0 -55 -41.5 -95.5t-111.5 -63.5q-79 -25 -147 -4.5t-86 75t25.5 111.5t122.5 82q72 24 138 8v521l-600 -155v-606q0 -42 -44 -90t-109 -69q-79 -26 -147 -5.5t-86 75.5t25.5 111.5t122.5 82.5q72 24 138 7v639q0 38 14.5 59 t53.5 34z" />
+<glyph unicode="&#xe003;" d="M500 1191q100 0 191 -39t156.5 -104.5t104.5 -156.5t39 -191l-1 -2l1 -5q0 -141 -78 -262l275 -274q23 -26 22.5 -44.5t-22.5 -42.5l-59 -58q-26 -20 -46.5 -20t-39.5 20l-275 274q-119 -77 -261 -77l-5 1l-2 -1q-100 0 -191 39t-156.5 104.5t-104.5 156.5t-39 191 t39 191t104.5 156.5t156.5 104.5t191 39zM500 1022q-88 0 -162 -43t-117 -117t-43 -162t43 -162t117 -117t162 -43t162 43t117 117t43 162t-43 162t-117 117t-162 43z" />
+<glyph unicode="&#xe005;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104z" />
+<glyph unicode="&#xe006;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429z" />
+<glyph unicode="&#xe007;" d="M407 800l131 353q7 19 17.5 19t17.5 -19l129 -353h421q21 0 24 -8.5t-14 -20.5l-342 -249l130 -401q7 -20 -0.5 -25.5t-24.5 6.5l-343 246l-342 -247q-17 -12 -24.5 -6.5t-0.5 25.5l130 400l-347 251q-17 12 -14 20.5t23 8.5h429zM477 700h-240l197 -142l-74 -226 l193 139l195 -140l-74 229l192 140h-234l-78 211z" />
+<glyph unicode="&#xe008;" d="M600 1200q124 0 212 -88t88 -212v-250q0 -46 -31 -98t-69 -52v-75q0 -10 6 -21.5t15 -17.5l358 -230q9 -5 15 -16.5t6 -21.5v-93q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v93q0 10 6 21.5t15 16.5l358 230q9 6 15 17.5t6 21.5v75q-38 0 -69 52 t-31 98v250q0 124 88 212t212 88z" />
+<glyph unicode="&#xe009;" d="M25 1100h1150q10 0 17.5 -7.5t7.5 -17.5v-1050q0 -10 -7.5 -17.5t-17.5 -7.5h-1150q-10 0 -17.5 7.5t-7.5 17.5v1050q0 10 7.5 17.5t17.5 7.5zM100 1000v-100h100v100h-100zM875 1000h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5t17.5 -7.5h550 q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM1000 1000v-100h100v100h-100zM100 800v-100h100v100h-100zM1000 800v-100h100v100h-100zM100 600v-100h100v100h-100zM1000 600v-100h100v100h-100zM875 500h-550q-10 0 -17.5 -7.5t-7.5 -17.5v-350q0 -10 7.5 -17.5 t17.5 -7.5h550q10 0 17.5 7.5t7.5 17.5v350q0 10 -7.5 17.5t-17.5 7.5zM100 400v-100h100v100h-100zM1000 400v-100h100v100h-100zM100 200v-100h100v100h-100zM1000 200v-100h100v100h-100z" />
+<glyph unicode="&#xe010;" d="M50 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM50 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM650 500h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe011;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM850 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 700h200q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM850 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5 t35.5 14.5z" />
+<glyph unicode="&#xe012;" d="M50 1100h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 1100h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200 q0 21 14.5 35.5t35.5 14.5zM50 700h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 700h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700 q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM50 300h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5zM450 300h700q21 0 35.5 -14.5t14.5 -35.5v-200 q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe013;" d="M465 477l571 571q8 8 18 8t17 -8l177 -177q8 -7 8 -17t-8 -18l-783 -784q-7 -8 -17.5 -8t-17.5 8l-384 384q-8 8 -8 18t8 17l177 177q7 8 17 8t18 -8l171 -171q7 -7 18 -7t18 7z" />
+<glyph unicode="&#xe014;" d="M904 1083l178 -179q8 -8 8 -18.5t-8 -17.5l-267 -268l267 -268q8 -7 8 -17.5t-8 -18.5l-178 -178q-8 -8 -18.5 -8t-17.5 8l-268 267l-268 -267q-7 -8 -17.5 -8t-18.5 8l-178 178q-8 8 -8 18.5t8 17.5l267 268l-267 268q-8 7 -8 17.5t8 18.5l178 178q8 8 18.5 8t17.5 -8 l268 -267l268 268q7 7 17.5 7t18.5 -7z" />
+<glyph unicode="&#xe015;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM425 900h150q10 0 17.5 -7.5t7.5 -17.5v-75h75q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5 t-17.5 -7.5h-75v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-75q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v75q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe016;" d="M507 1177q98 0 187.5 -38.5t154.5 -103.5t103.5 -154.5t38.5 -187.5q0 -141 -78 -262l300 -299q8 -8 8 -18.5t-8 -18.5l-109 -108q-7 -8 -17.5 -8t-18.5 8l-300 299q-119 -77 -261 -77q-98 0 -188 38.5t-154.5 103t-103 154.5t-38.5 188t38.5 187.5t103 154.5 t154.5 103.5t188 38.5zM506.5 1023q-89.5 0 -165.5 -44t-120 -120.5t-44 -166t44 -165.5t120 -120t165.5 -44t166 44t120.5 120t44 165.5t-44 166t-120.5 120.5t-166 44zM325 800h350q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-350q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe017;" d="M550 1200h100q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM800 975v166q167 -62 272 -209.5t105 -331.5q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5 t-184.5 123t-123 184.5t-45.5 224q0 184 105 331.5t272 209.5v-166q-103 -55 -165 -155t-62 -220q0 -116 57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5q0 120 -62 220t-165 155z" />
+<glyph unicode="&#xe018;" d="M1025 1200h150q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM725 800h150q10 0 17.5 -7.5t7.5 -17.5v-750q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v750 q0 10 7.5 17.5t17.5 7.5zM425 500h150q10 0 17.5 -7.5t7.5 -17.5v-450q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v450q0 10 7.5 17.5t17.5 7.5zM125 300h150q10 0 17.5 -7.5t7.5 -17.5v-250q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5 v250q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe019;" d="M600 1174q33 0 74 -5l38 -152l5 -1q49 -14 94 -39l5 -2l134 80q61 -48 104 -105l-80 -134l3 -5q25 -44 39 -93l1 -6l152 -38q5 -43 5 -73q0 -34 -5 -74l-152 -38l-1 -6q-15 -49 -39 -93l-3 -5l80 -134q-48 -61 -104 -105l-134 81l-5 -3q-44 -25 -94 -39l-5 -2l-38 -151 q-43 -5 -74 -5q-33 0 -74 5l-38 151l-5 2q-49 14 -94 39l-5 3l-134 -81q-60 48 -104 105l80 134l-3 5q-25 45 -38 93l-2 6l-151 38q-6 42 -6 74q0 33 6 73l151 38l2 6q13 48 38 93l3 5l-80 134q47 61 105 105l133 -80l5 2q45 25 94 39l5 1l38 152q43 5 74 5zM600 815 q-89 0 -152 -63t-63 -151.5t63 -151.5t152 -63t152 63t63 151.5t-63 151.5t-152 63z" />
+<glyph unicode="&#xe020;" d="M500 1300h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-75h-1100v75q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5zM500 1200v-100h300v100h-300zM1100 900v-800q0 -41 -29.5 -70.5t-70.5 -29.5h-700q-41 0 -70.5 29.5t-29.5 70.5 v800h900zM300 800v-700h100v700h-100zM500 800v-700h100v700h-100zM700 800v-700h100v700h-100zM900 800v-700h100v700h-100z" />
+<glyph unicode="&#xe021;" d="M18 618l620 608q8 7 18.5 7t17.5 -7l608 -608q8 -8 5.5 -13t-12.5 -5h-175v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v375h-300v-375q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v575h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe022;" d="M600 1200v-400q0 -41 29.5 -70.5t70.5 -29.5h300v-650q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5h450zM1000 800h-250q-21 0 -35.5 14.5t-14.5 35.5v250z" />
+<glyph unicode="&#xe023;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h50q10 0 17.5 -7.5t7.5 -17.5v-275h175q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe024;" d="M1300 0h-538l-41 400h-242l-41 -400h-538l431 1200h209l-21 -300h162l-20 300h208zM515 800l-27 -300h224l-27 300h-170z" />
+<glyph unicode="&#xe025;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-450h191q20 0 25.5 -11.5t-7.5 -27.5l-327 -400q-13 -16 -32 -16t-32 16l-327 400q-13 16 -7.5 27.5t25.5 11.5h191v450q0 21 14.5 35.5t35.5 14.5zM1125 400h50q10 0 17.5 -7.5t7.5 -17.5v-350q0 -10 -7.5 -17.5t-17.5 -7.5 h-1050q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h50q10 0 17.5 -7.5t7.5 -17.5v-175h900v175q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe026;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM525 900h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -275q-13 -16 -32 -16t-32 16l-223 275q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z " />
+<glyph unicode="&#xe027;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM632 914l223 -275q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5l223 275q13 16 32 16 t32 -16z" />
+<glyph unicode="&#xe028;" d="M225 1200h750q10 0 19.5 -7t12.5 -17l186 -652q7 -24 7 -49v-425q0 -12 -4 -27t-9 -17q-12 -6 -37 -6h-1100q-12 0 -27 4t-17 8q-6 13 -6 38l1 425q0 25 7 49l185 652q3 10 12.5 17t19.5 7zM878 1000h-556q-10 0 -19 -7t-11 -18l-87 -450q-2 -11 4 -18t16 -7h150 q10 0 19.5 -7t11.5 -17l38 -152q2 -10 11.5 -17t19.5 -7h250q10 0 19.5 7t11.5 17l38 152q2 10 11.5 17t19.5 7h150q10 0 16 7t4 18l-87 450q-2 11 -11 18t-19 7z" />
+<glyph unicode="&#xe029;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM540 820l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe030;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-362q0 -10 -7.5 -17.5t-17.5 -7.5h-362q-11 0 -13 5.5t5 12.5l133 133q-109 76 -238 76q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5h150q0 -117 -45.5 -224 t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117z" />
+<glyph unicode="&#xe031;" d="M947 1060l135 135q7 7 12.5 5t5.5 -13v-361q0 -11 -7.5 -18.5t-18.5 -7.5h-361q-11 0 -13 5.5t5 12.5l134 134q-110 75 -239 75q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5h-150q0 117 45.5 224t123 184.5t184.5 123t224 45.5q192 0 347 -117zM1027 600h150 q0 -117 -45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5q-192 0 -348 118l-134 -134q-7 -8 -12.5 -5.5t-5.5 12.5v360q0 11 7.5 18.5t18.5 7.5h360q10 0 12.5 -5.5t-5.5 -12.5l-133 -133q110 -76 240 -76q116 0 214.5 57t155.5 155.5t57 214.5z" />
+<glyph unicode="&#xe032;" d="M125 1200h1050q10 0 17.5 -7.5t7.5 -17.5v-1150q0 -10 -7.5 -17.5t-17.5 -7.5h-1050q-10 0 -17.5 7.5t-7.5 17.5v1150q0 10 7.5 17.5t17.5 7.5zM1075 1000h-850q-10 0 -17.5 -7.5t-7.5 -17.5v-850q0 -10 7.5 -17.5t17.5 -7.5h850q10 0 17.5 7.5t7.5 17.5v850 q0 10 -7.5 17.5t-17.5 7.5zM325 900h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 900h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 700h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 700h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 500h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 500h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5zM325 300h50q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM525 300h450q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-450q-10 0 -17.5 7.5t-7.5 17.5v50 q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe033;" d="M900 800v200q0 83 -58.5 141.5t-141.5 58.5h-300q-82 0 -141 -59t-59 -141v-200h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h900q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-100zM400 800v150q0 21 15 35.5t35 14.5h200 q20 0 35 -14.5t15 -35.5v-150h-300z" />
+<glyph unicode="&#xe034;" d="M125 1100h50q10 0 17.5 -7.5t7.5 -17.5v-1075h-100v1075q0 10 7.5 17.5t17.5 7.5zM1075 1052q4 0 9 -2q16 -6 16 -23v-421q0 -6 -3 -12q-33 -59 -66.5 -99t-65.5 -58t-56.5 -24.5t-52.5 -6.5q-26 0 -57.5 6.5t-52.5 13.5t-60 21q-41 15 -63 22.5t-57.5 15t-65.5 7.5 q-85 0 -160 -57q-7 -5 -15 -5q-6 0 -11 3q-14 7 -14 22v438q22 55 82 98.5t119 46.5q23 2 43 0.5t43 -7t32.5 -8.5t38 -13t32.5 -11q41 -14 63.5 -21t57 -14t63.5 -7q103 0 183 87q7 8 18 8z" />
+<glyph unicode="&#xe035;" d="M600 1175q116 0 227 -49.5t192.5 -131t131 -192.5t49.5 -227v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v300q0 127 -70.5 231.5t-184.5 161.5t-245 57t-245 -57t-184.5 -161.5t-70.5 -231.5v-300q0 -10 -7.5 -17.5t-17.5 -7.5h-50 q-10 0 -17.5 7.5t-7.5 17.5v300q0 116 49.5 227t131 192.5t192.5 131t227 49.5zM220 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460q0 8 6 14t14 6zM820 500h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14v460 q0 8 6 14t14 6z" />
+<glyph unicode="&#xe036;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM900 668l120 120q7 7 17 7t17 -7l34 -34q7 -7 7 -17t-7 -17l-120 -120l120 -120q7 -7 7 -17 t-7 -17l-34 -34q-7 -7 -17 -7t-17 7l-120 119l-120 -119q-7 -7 -17 -7t-17 7l-34 34q-7 7 -7 17t7 17l119 120l-119 120q-7 7 -7 17t7 17l34 34q7 8 17 8t17 -8z" />
+<glyph unicode="&#xe037;" d="M321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6 l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238q-6 8 -4.5 18t9.5 17l29 22q7 5 15 5z" />
+<glyph unicode="&#xe038;" d="M967 1004h3q11 -1 17 -10q135 -179 135 -396q0 -105 -34 -206.5t-98 -185.5q-7 -9 -17 -10h-3q-9 0 -16 6l-42 34q-8 6 -9 16t5 18q111 150 111 328q0 90 -29.5 176t-84.5 157q-6 9 -5 19t10 16l42 33q7 5 15 5zM321 814l258 172q9 6 15 2.5t6 -13.5v-750q0 -10 -6 -13.5 t-15 2.5l-258 172q-21 14 -46 14h-250q-10 0 -17.5 7.5t-7.5 17.5v350q0 10 7.5 17.5t17.5 7.5h250q25 0 46 14zM766 900h4q10 -1 16 -10q96 -129 96 -290q0 -154 -90 -281q-6 -9 -17 -10l-3 -1q-9 0 -16 6l-29 23q-7 7 -8.5 16.5t4.5 17.5q72 103 72 229q0 132 -78 238 q-6 8 -4.5 18.5t9.5 16.5l29 22q7 5 15 5z" />
+<glyph unicode="&#xe039;" d="M500 900h100v-100h-100v-100h-400v-100h-100v600h500v-300zM1200 700h-200v-100h200v-200h-300v300h-200v300h-100v200h600v-500zM100 1100v-300h300v300h-300zM800 1100v-300h300v300h-300zM300 900h-100v100h100v-100zM1000 900h-100v100h100v-100zM300 500h200v-500 h-500v500h200v100h100v-100zM800 300h200v-100h-100v-100h-200v100h-100v100h100v200h-200v100h300v-300zM100 400v-300h300v300h-300zM300 200h-100v100h100v-100zM1200 200h-100v100h100v-100zM700 0h-100v100h100v-100zM1200 0h-300v100h300v-100z" />
+<glyph unicode="&#xe040;" d="M100 200h-100v1000h100v-1000zM300 200h-100v1000h100v-1000zM700 200h-200v1000h200v-1000zM900 200h-100v1000h100v-1000zM1200 200h-200v1000h200v-1000zM400 0h-300v100h300v-100zM600 0h-100v91h100v-91zM800 0h-100v91h100v-91zM1100 0h-200v91h200v-91z" />
+<glyph unicode="&#xe041;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe042;" d="M500 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-682 682l1 475q0 10 7.5 17.5t17.5 7.5h474zM800 1200l682 -682q8 -8 8 -18t-8 -18l-464 -464q-8 -8 -18 -8t-18 8l-56 56l424 426l-700 700h150zM319.5 1024.5q-29.5 29.5 -71 29.5t-71 -29.5 t-29.5 -71.5t29.5 -71.5t71 -29.5t71 29.5t29.5 71.5t-29.5 71.5z" />
+<glyph unicode="&#xe043;" d="M300 1200h825q75 0 75 -75v-900q0 -25 -18 -43l-64 -64q-8 -8 -13 -5.5t-5 12.5v950q0 10 -7.5 17.5t-17.5 7.5h-700q-25 0 -43 -18l-64 -64q-8 -8 -5.5 -13t12.5 -5h700q10 0 17.5 -7.5t7.5 -17.5v-950q0 -10 -7.5 -17.5t-17.5 -7.5h-850q-10 0 -17.5 7.5t-7.5 17.5v975 q0 25 18 43l139 139q18 18 43 18z" />
+<glyph unicode="&#xe044;" d="M250 1200h800q21 0 35.5 -14.5t14.5 -35.5v-1150l-450 444l-450 -445v1151q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe045;" d="M822 1200h-444q-11 0 -19 -7.5t-9 -17.5l-78 -301q-7 -24 7 -45l57 -108q6 -9 17.5 -15t21.5 -6h450q10 0 21.5 6t17.5 15l62 108q14 21 7 45l-83 301q-1 10 -9 17.5t-19 7.5zM1175 800h-150q-10 0 -21 -6.5t-15 -15.5l-78 -156q-4 -9 -15 -15.5t-21 -6.5h-550 q-10 0 -21 6.5t-15 15.5l-78 156q-4 9 -15 15.5t-21 6.5h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-650q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h750q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5 t7.5 17.5v650q0 10 -7.5 17.5t-17.5 7.5zM850 200h-500q-10 0 -19.5 -7t-11.5 -17l-38 -152q-2 -10 3.5 -17t15.5 -7h600q10 0 15.5 7t3.5 17l-38 152q-2 10 -11.5 17t-19.5 7z" />
+<glyph unicode="&#xe046;" d="M500 1100h200q56 0 102.5 -20.5t72.5 -50t44 -59t25 -50.5l6 -20h150q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5h150q2 8 6.5 21.5t24 48t45 61t72 48t102.5 21.5zM900 800v-100 h100v100h-100zM600 730q-95 0 -162.5 -67.5t-67.5 -162.5t67.5 -162.5t162.5 -67.5t162.5 67.5t67.5 162.5t-67.5 162.5t-162.5 67.5zM600 603q43 0 73 -30t30 -73t-30 -73t-73 -30t-73 30t-30 73t30 73t73 30z" />
+<glyph unicode="&#xe047;" d="M681 1199l385 -998q20 -50 60 -92q18 -19 36.5 -29.5t27.5 -11.5l10 -2v-66h-417v66q53 0 75 43.5t5 88.5l-82 222h-391q-58 -145 -92 -234q-11 -34 -6.5 -57t25.5 -37t46 -20t55 -6v-66h-365v66q56 24 84 52q12 12 25 30.5t20 31.5l7 13l399 1006h93zM416 521h340 l-162 457z" />
+<glyph unicode="&#xe048;" d="M753 641q5 -1 14.5 -4.5t36 -15.5t50.5 -26.5t53.5 -40t50.5 -54.5t35.5 -70t14.5 -87q0 -67 -27.5 -125.5t-71.5 -97.5t-98.5 -66.5t-108.5 -40.5t-102 -13h-500v89q41 7 70.5 32.5t29.5 65.5v827q0 24 -0.5 34t-3.5 24t-8.5 19.5t-17 13.5t-28 12.5t-42.5 11.5v71 l471 -1q57 0 115.5 -20.5t108 -57t80.5 -94t31 -124.5q0 -51 -15.5 -96.5t-38 -74.5t-45 -50.5t-38.5 -30.5zM400 700h139q78 0 130.5 48.5t52.5 122.5q0 41 -8.5 70.5t-29.5 55.5t-62.5 39.5t-103.5 13.5h-118v-350zM400 200h216q80 0 121 50.5t41 130.5q0 90 -62.5 154.5 t-156.5 64.5h-159v-400z" />
+<glyph unicode="&#xe049;" d="M877 1200l2 -57q-83 -19 -116 -45.5t-40 -66.5l-132 -839q-9 -49 13 -69t96 -26v-97h-500v97q186 16 200 98l173 832q3 17 3 30t-1.5 22.5t-9 17.5t-13.5 12.5t-21.5 10t-26 8.5t-33.5 10q-13 3 -19 5v57h425z" />
+<glyph unicode="&#xe050;" d="M1300 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM175 1000h-75v-800h75l-125 -167l-125 167h75v800h-75l125 167z" />
+<glyph unicode="&#xe051;" d="M1100 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-650q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v650h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM1167 50l-167 -125v75h-800v-75l-167 125l167 125v-75h800v75z" />
+<glyph unicode="&#xe052;" d="M50 1100h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe053;" d="M250 1100h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM250 500h700q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe054;" d="M500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000 q-21 0 -35.5 14.5t-14.5 35.5zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5zM0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5z" />
+<glyph unicode="&#xe055;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 800h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 500h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe056;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 1100h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 800h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 500h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 500h800q21 0 35.5 -14.5t14.5 -35.5v-100 q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM350 200h800 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe057;" d="M400 0h-100v1100h100v-1100zM550 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM267 550l-167 -125v75h-200v100h200v75zM550 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM550 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe058;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM900 0h-100v1100h100v-1100zM50 800h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM1100 600h200v-100h-200v-75l-167 125l167 125v-75zM50 500h300q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5zM50 200h600 q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-600q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe059;" d="M75 1000h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53v650q0 31 22 53t53 22zM1200 300l-300 300l300 300v-600z" />
+<glyph unicode="&#xe060;" d="M44 1100h1112q18 0 31 -13t13 -31v-1012q0 -18 -13 -31t-31 -13h-1112q-18 0 -31 13t-13 31v1012q0 18 13 31t31 13zM100 1000v-737l247 182l298 -131l-74 156l293 318l236 -288v500h-1000zM342 884q56 0 95 -39t39 -94.5t-39 -95t-95 -39.5t-95 39.5t-39 95t39 94.5 t95 39z" />
+<glyph unicode="&#xe062;" d="M648 1169q117 0 216 -60t156.5 -161t57.5 -218q0 -115 -70 -258q-69 -109 -158 -225.5t-143 -179.5l-54 -62q-9 8 -25.5 24.5t-63.5 67.5t-91 103t-98.5 128t-95.5 148q-60 132 -60 249q0 88 34 169.5t91.5 142t137 96.5t166.5 36zM652.5 974q-91.5 0 -156.5 -65 t-65 -157t65 -156.5t156.5 -64.5t156.5 64.5t65 156.5t-65 157t-156.5 65z" />
+<glyph unicode="&#xe063;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 173v854q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57z" />
+<glyph unicode="&#xe064;" d="M554 1295q21 -72 57.5 -143.5t76 -130t83 -118t82.5 -117t70 -116t49.5 -126t18.5 -136.5q0 -71 -25.5 -135t-68.5 -111t-99 -82t-118.5 -54t-125.5 -23q-84 5 -161.5 34t-139.5 78.5t-99 125t-37 164.5q0 69 18 136.5t49.5 126.5t69.5 116.5t81.5 117.5t83.5 119 t76.5 131t58.5 143zM344 710q-23 -33 -43.5 -70.5t-40.5 -102.5t-17 -123q1 -37 14.5 -69.5t30 -52t41 -37t38.5 -24.5t33 -15q21 -7 32 -1t13 22l6 34q2 10 -2.5 22t-13.5 19q-5 4 -14 12t-29.5 40.5t-32.5 73.5q-26 89 6 271q2 11 -6 11q-8 1 -15 -10z" />
+<glyph unicode="&#xe065;" d="M1000 1013l108 115q2 1 5 2t13 2t20.5 -1t25 -9.5t28.5 -21.5q22 -22 27 -43t0 -32l-6 -10l-108 -115zM350 1100h400q50 0 105 -13l-187 -187h-368q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v182l200 200v-332 q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM1009 803l-362 -362l-161 -50l55 170l355 355z" />
+<glyph unicode="&#xe066;" d="M350 1100h361q-164 -146 -216 -200h-195q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-103q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M824 1073l339 -301q8 -7 8 -17.5t-8 -17.5l-340 -306q-7 -6 -12.5 -4t-6.5 11v203q-26 1 -54.5 0t-78.5 -7.5t-92 -17.5t-86 -35t-70 -57q10 59 33 108t51.5 81.5t65 58.5t68.5 40.5t67 24.5t56 13.5t40 4.5v210q1 10 6.5 12.5t13.5 -4.5z" />
+<glyph unicode="&#xe067;" d="M350 1100h350q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-219q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5z M643 639l395 395q7 7 17.5 7t17.5 -7l101 -101q7 -7 7 -17.5t-7 -17.5l-531 -532q-7 -7 -17.5 -7t-17.5 7l-248 248q-7 7 -7 17.5t7 17.5l101 101q7 7 17.5 7t17.5 -7l111 -111q8 -7 18 -7t18 7z" />
+<glyph unicode="&#xe068;" d="M318 918l264 264q8 8 18 8t18 -8l260 -264q7 -8 4.5 -13t-12.5 -5h-170v-200h200v173q0 10 5 12t13 -5l264 -260q8 -7 8 -17.5t-8 -17.5l-264 -265q-8 -7 -13 -5t-5 12v173h-200v-200h170q10 0 12.5 -5t-4.5 -13l-260 -264q-8 -8 -18 -8t-18 8l-264 264q-8 8 -5.5 13 t12.5 5h175v200h-200v-173q0 -10 -5 -12t-13 5l-264 265q-8 7 -8 17.5t8 17.5l264 260q8 7 13 5t5 -12v-173h200v200h-175q-10 0 -12.5 5t5.5 13z" />
+<glyph unicode="&#xe069;" d="M250 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe070;" d="M50 1100h100q21 0 35.5 -14.5t14.5 -35.5v-438l464 453q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5 t-14.5 35.5v1000q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe071;" d="M1200 1050v-1000q0 -21 -10.5 -25t-25.5 10l-464 453v-438q0 -21 -10.5 -25t-25.5 10l-492 480q-15 14 -15 35t15 35l492 480q15 14 25.5 10t10.5 -25v-438l464 453q15 14 25.5 10t10.5 -25z" />
+<glyph unicode="&#xe072;" d="M243 1074l814 -498q18 -11 18 -26t-18 -26l-814 -498q-18 -11 -30.5 -4t-12.5 28v1000q0 21 12.5 28t30.5 -4z" />
+<glyph unicode="&#xe073;" d="M250 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM650 1000h200q21 0 35.5 -14.5t14.5 -35.5v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v800 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe074;" d="M1100 950v-800q0 -21 -14.5 -35.5t-35.5 -14.5h-800q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe075;" d="M500 612v438q0 21 10.5 25t25.5 -10l492 -480q15 -14 15 -35t-15 -35l-492 -480q-15 -14 -25.5 -10t-10.5 25v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10z" />
+<glyph unicode="&#xe076;" d="M1048 1102l100 1q20 0 35 -14.5t15 -35.5l5 -1000q0 -21 -14.5 -35.5t-35.5 -14.5l-100 -1q-21 0 -35.5 14.5t-14.5 35.5l-2 437l-463 -454q-14 -15 -24.5 -10.5t-10.5 25.5l-2 437l-462 -455q-15 -14 -25.5 -9.5t-10.5 24.5l-5 1000q0 21 10.5 25.5t25.5 -10.5l466 -450 l-2 438q0 20 10.5 24.5t25.5 -9.5l466 -451l-2 438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe077;" d="M850 1100h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-464 -453q-15 -14 -25.5 -10t-10.5 25v1000q0 21 10.5 25t25.5 -10l464 -453v438q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe078;" d="M686 1081l501 -540q15 -15 10.5 -26t-26.5 -11h-1042q-22 0 -26.5 11t10.5 26l501 540q15 15 36 15t36 -15zM150 400h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe079;" d="M885 900l-352 -353l352 -353l-197 -198l-552 552l552 550z" />
+<glyph unicode="&#xe080;" d="M1064 547l-551 -551l-198 198l353 353l-353 353l198 198z" />
+<glyph unicode="&#xe081;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM650 900h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-150 q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5h150v-150q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v150h150q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-150v150q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe082;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM850 700h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5 t35.5 -14.5h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5z" />
+<glyph unicode="&#xe083;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM741.5 913q-12.5 0 -21.5 -9l-120 -120l-120 120q-9 9 -21.5 9 t-21.5 -9l-141 -141q-9 -9 -9 -21.5t9 -21.5l120 -120l-120 -120q-9 -9 -9 -21.5t9 -21.5l141 -141q9 -9 21.5 -9t21.5 9l120 120l120 -120q9 -9 21.5 -9t21.5 9l141 141q9 9 9 21.5t-9 21.5l-120 120l120 120q9 9 9 21.5t-9 21.5l-141 141q-9 9 -21.5 9z" />
+<glyph unicode="&#xe084;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM546 623l-84 85q-7 7 -17.5 7t-18.5 -7l-139 -139q-7 -8 -7 -18t7 -18 l242 -241q7 -8 17.5 -8t17.5 8l375 375q7 7 7 17.5t-7 18.5l-139 139q-7 7 -17.5 7t-17.5 -7z" />
+<glyph unicode="&#xe085;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM588 941q-29 0 -59 -5.5t-63 -20.5t-58 -38.5t-41.5 -63t-16.5 -89.5 q0 -25 20 -25h131q30 -5 35 11q6 20 20.5 28t45.5 8q20 0 31.5 -10.5t11.5 -28.5q0 -23 -7 -34t-26 -18q-1 0 -13.5 -4t-19.5 -7.5t-20 -10.5t-22 -17t-18.5 -24t-15.5 -35t-8 -46q-1 -8 5.5 -16.5t20.5 -8.5h173q7 0 22 8t35 28t37.5 48t29.5 74t12 100q0 47 -17 83 t-42.5 57t-59.5 34.5t-64 18t-59 4.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe086;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM675 1000h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5 t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5zM675 700h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h75v-200h-75q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h350q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5 t-17.5 7.5h-75v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe087;" d="M525 1200h150q10 0 17.5 -7.5t7.5 -17.5v-194q103 -27 178.5 -102.5t102.5 -178.5h194q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-194q-27 -103 -102.5 -178.5t-178.5 -102.5v-194q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v194 q-103 27 -178.5 102.5t-102.5 178.5h-194q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h194q27 103 102.5 178.5t178.5 102.5v194q0 10 7.5 17.5t17.5 7.5zM700 893v-168q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v168q-68 -23 -119 -74 t-74 -119h168q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-168q23 -68 74 -119t119 -74v168q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-168q68 23 119 74t74 119h-168q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h168 q-23 68 -74 119t-119 74z" />
+<glyph unicode="&#xe088;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM759 823l64 -64q7 -7 7 -17.5t-7 -17.5l-124 -124l124 -124q7 -7 7 -17.5t-7 -17.5l-64 -64q-7 -7 -17.5 -7t-17.5 7l-124 124l-124 -124q-7 -7 -17.5 -7t-17.5 7l-64 64 q-7 7 -7 17.5t7 17.5l124 124l-124 124q-7 7 -7 17.5t7 17.5l64 64q7 7 17.5 7t17.5 -7l124 -124l124 124q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe089;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5t57 -214.5 t155.5 -155.5t214.5 -57t214.5 57t155.5 155.5t57 214.5t-57 214.5t-155.5 155.5t-214.5 57zM782 788l106 -106q7 -7 7 -17.5t-7 -17.5l-320 -321q-8 -7 -18 -7t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l197 197q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe090;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM600 1027q-116 0 -214.5 -57t-155.5 -155.5t-57 -214.5q0 -120 65 -225 l587 587q-105 65 -225 65zM965 819l-584 -584q104 -62 219 -62q116 0 214.5 57t155.5 155.5t57 214.5q0 115 -62 219z" />
+<glyph unicode="&#xe091;" d="M39 582l522 427q16 13 27.5 8t11.5 -26v-291h550q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-550v-291q0 -21 -11.5 -26t-27.5 8l-522 427q-16 13 -16 32t16 32z" />
+<glyph unicode="&#xe092;" d="M639 1009l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291h-550q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h550v291q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe093;" d="M682 1161l427 -522q13 -16 8 -27.5t-26 -11.5h-291v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v550h-291q-21 0 -26 11.5t8 27.5l427 522q13 16 32 16t32 -16z" />
+<glyph unicode="&#xe094;" d="M550 1200h200q21 0 35.5 -14.5t14.5 -35.5v-550h291q21 0 26 -11.5t-8 -27.5l-427 -522q-13 -16 -32 -16t-32 16l-427 522q-13 16 -8 27.5t26 11.5h291v550q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe095;" d="M639 1109l522 -427q16 -13 16 -32t-16 -32l-522 -427q-16 -13 -27.5 -8t-11.5 26v291q-94 -2 -182 -20t-170.5 -52t-147 -92.5t-100.5 -135.5q5 105 27 193.5t67.5 167t113 135t167 91.5t225.5 42v262q0 21 11.5 26t27.5 -8z" />
+<glyph unicode="&#xe096;" d="M850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5zM350 0h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249 q8 7 18 7t18 -7l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5z" />
+<glyph unicode="&#xe097;" d="M1014 1120l106 -106q7 -8 7 -18t-7 -18l-249 -249l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l249 249q8 7 18 7t18 -7zM250 600h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-249 -249q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l249 249l-94 94q-14 14 -10 24.5t25 10.5z" />
+<glyph unicode="&#xe101;" d="M600 1177q117 0 224 -45.5t184.5 -123t123 -184.5t45.5 -224t-45.5 -224t-123 -184.5t-184.5 -123t-224 -45.5t-224 45.5t-184.5 123t-123 184.5t-45.5 224t45.5 224t123 184.5t184.5 123t224 45.5zM704 900h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5 t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM675 400h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe102;" d="M260 1200q9 0 19 -2t15 -4l5 -2q22 -10 44 -23l196 -118q21 -13 36 -24q29 -21 37 -12q11 13 49 35l196 118q22 13 45 23q17 7 38 7q23 0 47 -16.5t37 -33.5l13 -16q14 -21 18 -45l25 -123l8 -44q1 -9 8.5 -14.5t17.5 -5.5h61q10 0 17.5 -7.5t7.5 -17.5v-50 q0 -10 -7.5 -17.5t-17.5 -7.5h-50q-10 0 -17.5 -7.5t-7.5 -17.5v-175h-400v300h-200v-300h-400v175q0 10 -7.5 17.5t-17.5 7.5h-50q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5h61q11 0 18 3t7 8q0 4 9 52l25 128q5 25 19 45q2 3 5 7t13.5 15t21.5 19.5t26.5 15.5 t29.5 7zM915 1079l-166 -162q-7 -7 -5 -12t12 -5h219q10 0 15 7t2 17l-51 149q-3 10 -11 12t-15 -6zM463 917l-177 157q-8 7 -16 5t-11 -12l-51 -143q-3 -10 2 -17t15 -7h231q11 0 12.5 5t-5.5 12zM500 0h-375q-10 0 -17.5 7.5t-7.5 17.5v375h400v-400zM1100 400v-375 q0 -10 -7.5 -17.5t-17.5 -7.5h-375v400h400z" />
+<glyph unicode="&#xe103;" d="M1165 1190q8 3 21 -6.5t13 -17.5q-2 -178 -24.5 -323.5t-55.5 -245.5t-87 -174.5t-102.5 -118.5t-118 -68.5t-118.5 -33t-120 -4.5t-105 9.5t-90 16.5q-61 12 -78 11q-4 1 -12.5 0t-34 -14.5t-52.5 -40.5l-153 -153q-26 -24 -37 -14.5t-11 43.5q0 64 42 102q8 8 50.5 45 t66.5 58q19 17 35 47t13 61q-9 55 -10 102.5t7 111t37 130t78 129.5q39 51 80 88t89.5 63.5t94.5 45t113.5 36t129 31t157.5 37t182 47.5zM1116 1098q-8 9 -22.5 -3t-45.5 -50q-38 -47 -119 -103.5t-142 -89.5l-62 -33q-56 -30 -102 -57t-104 -68t-102.5 -80.5t-85.5 -91 t-64 -104.5q-24 -56 -31 -86t2 -32t31.5 17.5t55.5 59.5q25 30 94 75.5t125.5 77.5t147.5 81q70 37 118.5 69t102 79.5t99 111t86.5 148.5q22 50 24 60t-6 19z" />
+<glyph unicode="&#xe104;" d="M653 1231q-39 -67 -54.5 -131t-10.5 -114.5t24.5 -96.5t47.5 -80t63.5 -62.5t68.5 -46.5t65 -30q-4 7 -17.5 35t-18.5 39.5t-17 39.5t-17 43t-13 42t-9.5 44.5t-2 42t4 43t13.5 39t23 38.5q96 -42 165 -107.5t105 -138t52 -156t13 -159t-19 -149.5q-13 -55 -44 -106.5 t-68 -87t-78.5 -64.5t-72.5 -45t-53 -22q-72 -22 -127 -11q-31 6 -13 19q6 3 17 7q13 5 32.5 21t41 44t38.5 63.5t21.5 81.5t-6.5 94.5t-50 107t-104 115.5q10 -104 -0.5 -189t-37 -140.5t-65 -93t-84 -52t-93.5 -11t-95 24.5q-80 36 -131.5 114t-53.5 171q-2 23 0 49.5 t4.5 52.5t13.5 56t27.5 60t46 64.5t69.5 68.5q-8 -53 -5 -102.5t17.5 -90t34 -68.5t44.5 -39t49 -2q31 13 38.5 36t-4.5 55t-29 64.5t-36 75t-26 75.5q-15 85 2 161.5t53.5 128.5t85.5 92.5t93.5 61t81.5 25.5z" />
+<glyph unicode="&#xe105;" d="M600 1094q82 0 160.5 -22.5t140 -59t116.5 -82.5t94.5 -95t68 -95t42.5 -82.5t14 -57.5t-14 -57.5t-43 -82.5t-68.5 -95t-94.5 -95t-116.5 -82.5t-140 -59t-159.5 -22.5t-159.5 22.5t-140 59t-116.5 82.5t-94.5 95t-68.5 95t-43 82.5t-14 57.5t14 57.5t42.5 82.5t68 95 t94.5 95t116.5 82.5t140 59t160.5 22.5zM888 829q-15 15 -18 12t5 -22q25 -57 25 -119q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 59 23 114q8 19 4.5 22t-17.5 -12q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q22 -36 47 -71t70 -82t92.5 -81t113 -58.5t133.5 -24.5 t133.5 24t113 58.5t92.5 81.5t70 81.5t47 70.5q11 18 9 42.5t-14 41.5q-90 117 -163 189zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l35 34q14 15 12.5 33.5t-16.5 33.5q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe106;" d="M592 0h-148l31 120q-91 20 -175.5 68.5t-143.5 106.5t-103.5 119t-66.5 110t-22 76q0 21 14 57.5t42.5 82.5t68 95t94.5 95t116.5 82.5t140 59t160.5 22.5q61 0 126 -15l32 121h148zM944 770l47 181q108 -85 176.5 -192t68.5 -159q0 -26 -19.5 -71t-59.5 -102t-93 -112 t-129 -104.5t-158 -75.5l46 173q77 49 136 117t97 131q11 18 9 42.5t-14 41.5q-54 70 -107 130zM310 824q-70 -69 -160 -184q-13 -16 -15 -40.5t9 -42.5q18 -30 39 -60t57 -70.5t74 -73t90 -61t105 -41.5l41 154q-107 18 -178.5 101.5t-71.5 193.5q0 59 23 114q8 19 4.5 22 t-17.5 -12zM448 727l-35 -36q-15 -15 -19.5 -38.5t4.5 -41.5q37 -68 93 -116q16 -13 38.5 -11t36.5 17l12 11l22 86l-3 4q-44 44 -89 117q-11 18 -28 20t-32 -12z" />
+<glyph unicode="&#xe107;" d="M-90 100l642 1066q20 31 48 28.5t48 -35.5l642 -1056q21 -32 7.5 -67.5t-50.5 -35.5h-1294q-37 0 -50.5 34t7.5 66zM155 200h345v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h345l-445 723zM496 700h208q20 0 32 -14.5t8 -34.5l-58 -252 q-4 -20 -21.5 -34.5t-37.5 -14.5h-54q-20 0 -37.5 14.5t-21.5 34.5l-58 252q-4 20 8 34.5t32 14.5z" />
+<glyph unicode="&#xe108;" d="M650 1200q62 0 106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -93 100 -113v-64q0 -21 -13 -29t-32 1l-205 128l-205 -128q-19 -9 -32 -1t-13 29v64q0 20 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5v41 q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44z" />
+<glyph unicode="&#xe109;" d="M850 1200h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-150h-1100v150q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-50h500v50q0 21 14.5 35.5t35.5 14.5zM1100 800v-750q0 -21 -14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v750h1100zM100 600v-100h100v100h-100zM300 600v-100h100v100h-100zM500 600v-100h100v100h-100zM700 600v-100h100v100h-100zM900 600v-100h100v100h-100zM100 400v-100h100v100h-100zM300 400v-100h100v100h-100zM500 400 v-100h100v100h-100zM700 400v-100h100v100h-100zM900 400v-100h100v100h-100zM100 200v-100h100v100h-100zM300 200v-100h100v100h-100zM500 200v-100h100v100h-100zM700 200v-100h100v100h-100zM900 200v-100h100v100h-100z" />
+<glyph unicode="&#xe110;" d="M1135 1165l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-159l-600 -600h-291q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h209l600 600h241v150q0 21 10.5 25t24.5 -10zM522 819l-141 -141l-122 122h-209q-21 0 -35.5 14.5 t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h291zM1135 565l249 -230q15 -14 15 -35t-15 -35l-249 -230q-14 -14 -24.5 -10t-10.5 25v150h-241l-181 181l141 141l122 -122h159v150q0 21 10.5 25t24.5 -10z" />
+<glyph unicode="&#xe111;" d="M100 1100h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5v600q0 41 29.5 70.5t70.5 29.5z" />
+<glyph unicode="&#xe112;" d="M150 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM850 1200h200q21 0 35.5 -14.5t14.5 -35.5v-250h-300v250q0 21 14.5 35.5t35.5 14.5zM1100 800v-300q0 -41 -3 -77.5t-15 -89.5t-32 -96t-58 -89t-89 -77t-129 -51t-174 -20t-174 20 t-129 51t-89 77t-58 89t-32 96t-15 89.5t-3 77.5v300h300v-250v-27v-42.5t1.5 -41t5 -38t10 -35t16.5 -30t25.5 -24.5t35 -19t46.5 -12t60 -4t60 4.5t46.5 12.5t35 19.5t25 25.5t17 30.5t10 35t5 38t2 40.5t-0.5 42v25v250h300z" />
+<glyph unicode="&#xe113;" d="M1100 411l-198 -199l-353 353l-353 -353l-197 199l551 551z" />
+<glyph unicode="&#xe114;" d="M1101 789l-550 -551l-551 551l198 199l353 -353l353 353z" />
+<glyph unicode="&#xe115;" d="M404 1000h746q21 0 35.5 -14.5t14.5 -35.5v-551h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v401h-381zM135 984l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-400h385l215 -200h-750q-21 0 -35.5 14.5 t-14.5 35.5v550h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe116;" d="M56 1200h94q17 0 31 -11t18 -27l38 -162h896q24 0 39 -18.5t10 -42.5l-100 -475q-5 -21 -27 -42.5t-55 -21.5h-633l48 -200h535q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50 q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-31q-18 0 -32.5 10t-20.5 19l-5 10l-201 961h-54q-20 0 -35 14.5t-15 35.5t15 35.5t35 14.5z" />
+<glyph unicode="&#xe117;" d="M1200 1000v-100h-1200v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500zM0 800h1200v-800h-1200v800z" />
+<glyph unicode="&#xe118;" d="M200 800l-200 -400v600h200q0 41 29.5 70.5t70.5 29.5h300q42 0 71 -29.5t29 -70.5h500v-200h-1000zM1500 700l-300 -700h-1200l300 700h1200z" />
+<glyph unicode="&#xe119;" d="M635 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-601h150q21 0 25 -10.5t-10 -24.5l-230 -249q-14 -15 -35 -15t-35 15l-230 249q-14 14 -10 24.5t25 10.5h150v601h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe120;" d="M936 864l249 -229q14 -15 14 -35.5t-14 -35.5l-249 -229q-15 -15 -25.5 -10.5t-10.5 24.5v151h-600v-151q0 -20 -10.5 -24.5t-25.5 10.5l-249 229q-14 15 -14 35.5t14 35.5l249 229q15 15 25.5 10.5t10.5 -25.5v-149h600v149q0 21 10.5 25.5t25.5 -10.5z" />
+<glyph unicode="&#xe121;" d="M1169 400l-172 732q-5 23 -23 45.5t-38 22.5h-672q-20 0 -38 -20t-23 -41l-172 -739h1138zM1100 300h-1000q-41 0 -70.5 -29.5t-29.5 -70.5v-100q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v100q0 41 -29.5 70.5t-70.5 29.5zM800 100v100h100v-100h-100 zM1000 100v100h100v-100h-100z" />
+<glyph unicode="&#xe122;" d="M1150 1100q21 0 35.5 -14.5t14.5 -35.5v-850q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v850q0 21 14.5 35.5t35.5 14.5zM1000 200l-675 200h-38l47 -276q3 -16 -5.5 -20t-29.5 -4h-7h-84q-20 0 -34.5 14t-18.5 35q-55 337 -55 351v250v6q0 16 1 23.5t6.5 14 t17.5 6.5h200l675 250v-850zM0 750v-250q-4 0 -11 0.5t-24 6t-30 15t-24 30t-11 48.5v50q0 26 10.5 46t25 30t29 16t25.5 7z" />
+<glyph unicode="&#xe123;" d="M553 1200h94q20 0 29 -10.5t3 -29.5l-18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q19 0 33 -14.5t14 -35t-13 -40.5t-31 -27q-8 -4 -23 -9.5t-65 -19.5t-103 -25t-132.5 -20t-158.5 -9q-57 0 -115 5t-104 12t-88.5 15.5t-73.5 17.5t-54.5 16t-35.5 12l-11 4 q-18 8 -31 28t-13 40.5t14 35t33 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3.5 32t28.5 13zM498 110q50 -6 102 -6q53 0 102 6q-12 -49 -39.5 -79.5t-62.5 -30.5t-63 30.5t-39 79.5z" />
+<glyph unicode="&#xe124;" d="M800 946l224 78l-78 -224l234 -45l-180 -155l180 -155l-234 -45l78 -224l-224 78l-45 -234l-155 180l-155 -180l-45 234l-224 -78l78 224l-234 45l180 155l-180 155l234 45l-78 224l224 -78l45 234l155 -180l155 180z" />
+<glyph unicode="&#xe125;" d="M650 1200h50q40 0 70 -40.5t30 -84.5v-150l-28 -125h328q40 0 70 -40.5t30 -84.5v-100q0 -45 -29 -74l-238 -344q-16 -24 -38 -40.5t-45 -16.5h-250q-7 0 -42 25t-66 50l-31 25h-61q-45 0 -72.5 18t-27.5 57v400q0 36 20 63l145 196l96 198q13 28 37.5 48t51.5 20z M650 1100l-100 -212l-150 -213v-375h100l136 -100h214l250 375v125h-450l50 225v175h-50zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe126;" d="M600 1100h250q23 0 45 -16.5t38 -40.5l238 -344q29 -29 29 -74v-100q0 -44 -30 -84.5t-70 -40.5h-328q28 -118 28 -125v-150q0 -44 -30 -84.5t-70 -40.5h-50q-27 0 -51.5 20t-37.5 48l-96 198l-145 196q-20 27 -20 63v400q0 39 27.5 57t72.5 18h61q124 100 139 100z M50 1000h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM636 1000l-136 -100h-100v-375l150 -213l100 -212h50v175l-50 225h450v125l-250 375h-214z" />
+<glyph unicode="&#xe127;" d="M356 873l363 230q31 16 53 -6l110 -112q13 -13 13.5 -32t-11.5 -34l-84 -121h302q84 0 138 -38t54 -110t-55 -111t-139 -39h-106l-131 -339q-6 -21 -19.5 -41t-28.5 -20h-342q-7 0 -90 81t-83 94v525q0 17 14 35.5t28 28.5zM400 792v-503l100 -89h293l131 339 q6 21 19.5 41t28.5 20h203q21 0 30.5 25t0.5 50t-31 25h-456h-7h-6h-5.5t-6 0.5t-5 1.5t-5 2t-4 2.5t-4 4t-2.5 4.5q-12 25 5 47l146 183l-86 83zM50 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v500 q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe128;" d="M475 1103l366 -230q2 -1 6 -3.5t14 -10.5t18 -16.5t14.5 -20t6.5 -22.5v-525q0 -13 -86 -94t-93 -81h-342q-15 0 -28.5 20t-19.5 41l-131 339h-106q-85 0 -139.5 39t-54.5 111t54 110t138 38h302l-85 121q-11 15 -10.5 34t13.5 32l110 112q22 22 53 6zM370 945l146 -183 q17 -22 5 -47q-2 -2 -3.5 -4.5t-4 -4t-4 -2.5t-5 -2t-5 -1.5t-6 -0.5h-6h-6.5h-6h-475v-100h221q15 0 29 -20t20 -41l130 -339h294l106 89v503l-342 236zM1050 800h100q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5 v500q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe129;" d="M550 1294q72 0 111 -55t39 -139v-106l339 -131q21 -6 41 -19.5t20 -28.5v-342q0 -7 -81 -90t-94 -83h-525q-17 0 -35.5 14t-28.5 28l-9 14l-230 363q-16 31 6 53l112 110q13 13 32 13.5t34 -11.5l121 -84v302q0 84 38 138t110 54zM600 972v203q0 21 -25 30.5t-50 0.5 t-25 -31v-456v-7v-6v-5.5t-0.5 -6t-1.5 -5t-2 -5t-2.5 -4t-4 -4t-4.5 -2.5q-25 -12 -47 5l-183 146l-83 -86l236 -339h503l89 100v293l-339 131q-21 6 -41 19.5t-20 28.5zM450 200h500q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-500 q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe130;" d="M350 1100h500q21 0 35.5 14.5t14.5 35.5v100q0 21 -14.5 35.5t-35.5 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100q0 -21 14.5 -35.5t35.5 -14.5zM600 306v-106q0 -84 -39 -139t-111 -55t-110 54t-38 138v302l-121 -84q-15 -12 -34 -11.5t-32 13.5l-112 110 q-22 22 -6 53l230 363q1 2 3.5 6t10.5 13.5t16.5 17t20 13.5t22.5 6h525q13 0 94 -83t81 -90v-342q0 -15 -20 -28.5t-41 -19.5zM308 900l-236 -339l83 -86l183 146q22 17 47 5q2 -1 4.5 -2.5t4 -4t2.5 -4t2 -5t1.5 -5t0.5 -6v-5.5v-6v-7v-456q0 -22 25 -31t50 0.5t25 30.5 v203q0 15 20 28.5t41 19.5l339 131v293l-89 100h-503z" />
+<glyph unicode="&#xe131;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM914 632l-275 223q-16 13 -27.5 8t-11.5 -26v-137h-275 q-10 0 -17.5 -7.5t-7.5 -17.5v-150q0 -10 7.5 -17.5t17.5 -7.5h275v-137q0 -21 11.5 -26t27.5 8l275 223q16 13 16 32t-16 32z" />
+<glyph unicode="&#xe132;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM561 855l-275 -223q-16 -13 -16 -32t16 -32l275 -223q16 -13 27.5 -8 t11.5 26v137h275q10 0 17.5 7.5t7.5 17.5v150q0 10 -7.5 17.5t-17.5 7.5h-275v137q0 21 -11.5 26t-27.5 -8z" />
+<glyph unicode="&#xe133;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM855 639l-223 275q-13 16 -32 16t-32 -16l-223 -275q-13 -16 -8 -27.5 t26 -11.5h137v-275q0 -10 7.5 -17.5t17.5 -7.5h150q10 0 17.5 7.5t7.5 17.5v275h137q21 0 26 11.5t-8 27.5z" />
+<glyph unicode="&#xe134;" d="M600 1178q118 0 225 -45.5t184.5 -123t123 -184.5t45.5 -225t-45.5 -225t-123 -184.5t-184.5 -123t-225 -45.5t-225 45.5t-184.5 123t-123 184.5t-45.5 225t45.5 225t123 184.5t184.5 123t225 45.5zM675 900h-150q-10 0 -17.5 -7.5t-7.5 -17.5v-275h-137q-21 0 -26 -11.5 t8 -27.5l223 -275q13 -16 32 -16t32 16l223 275q13 16 8 27.5t-26 11.5h-137v275q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe135;" d="M600 1176q116 0 222.5 -46t184 -123.5t123.5 -184t46 -222.5t-46 -222.5t-123.5 -184t-184 -123.5t-222.5 -46t-222.5 46t-184 123.5t-123.5 184t-46 222.5t46 222.5t123.5 184t184 123.5t222.5 46zM627 1101q-15 -12 -36.5 -20.5t-35.5 -12t-43 -8t-39 -6.5 q-15 -3 -45.5 0t-45.5 -2q-20 -7 -51.5 -26.5t-34.5 -34.5q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -91t-29.5 -79q-9 -34 5 -93t8 -87q0 -9 17 -44.5t16 -59.5q12 0 23 -5t23.5 -15t19.5 -14q16 -8 33 -15t40.5 -15t34.5 -12q21 -9 52.5 -32t60 -38t57.5 -11 q7 -15 -3 -34t-22.5 -40t-9.5 -38q13 -21 23 -34.5t27.5 -27.5t36.5 -18q0 -7 -3.5 -16t-3.5 -14t5 -17q104 -2 221 112q30 29 46.5 47t34.5 49t21 63q-13 8 -37 8.5t-36 7.5q-15 7 -49.5 15t-51.5 19q-18 0 -41 -0.5t-43 -1.5t-42 -6.5t-38 -16.5q-51 -35 -66 -12 q-4 1 -3.5 25.5t0.5 25.5q-6 13 -26.5 17.5t-24.5 6.5q1 15 -0.5 30.5t-7 28t-18.5 11.5t-31 -21q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q7 -12 18 -24t21.5 -20.5t20 -15t15.5 -10.5l5 -3q2 12 7.5 30.5t8 34.5t-0.5 32q-3 18 3.5 29 t18 22.5t15.5 24.5q6 14 10.5 35t8 31t15.5 22.5t34 22.5q-6 18 10 36q8 0 24 -1.5t24.5 -1.5t20 4.5t20.5 15.5q-10 23 -31 42.5t-37.5 29.5t-49 27t-43.5 23q0 1 2 8t3 11.5t1.5 10.5t-1 9.5t-4.5 4.5q31 -13 58.5 -14.5t38.5 2.5l12 5q5 28 -9.5 46t-36.5 24t-50 15 t-41 20q-18 -4 -37 0zM613 994q0 -17 8 -42t17 -45t9 -23q-8 1 -39.5 5.5t-52.5 10t-37 16.5q3 11 16 29.5t16 25.5q10 -10 19 -10t14 6t13.5 14.5t16.5 12.5z" />
+<glyph unicode="&#xe136;" d="M756 1157q164 92 306 -9l-259 -138l145 -232l251 126q6 -89 -34 -156.5t-117 -110.5q-60 -34 -127 -39.5t-126 16.5l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5t15 37.5l600 599q-34 101 5.5 201.5t135.5 154.5z" />
+<glyph unicode="&#xe137;" horiz-adv-x="1220" d="M100 1196h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 1096h-200v-100h200v100zM100 796h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 696h-500v-100h500v100zM100 396h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5v100q0 41 29.5 70.5t70.5 29.5zM1100 296h-300v-100h300v100z " />
+<glyph unicode="&#xe138;" d="M150 1200h900q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM700 500v-300l-200 -200v500l-350 500h900z" />
+<glyph unicode="&#xe139;" d="M500 1200h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5zM500 1100v-100h200v100h-200zM1200 400v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5v200h1200z" />
+<glyph unicode="&#xe140;" d="M50 1200h300q21 0 25 -10.5t-10 -24.5l-94 -94l199 -199q7 -8 7 -18t-7 -18l-106 -106q-8 -7 -18 -7t-18 7l-199 199l-94 -94q-14 -14 -24.5 -10t-10.5 25v300q0 21 14.5 35.5t35.5 14.5zM850 1200h300q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -10.5 -25t-24.5 10l-94 94 l-199 -199q-8 -7 -18 -7t-18 7l-106 106q-7 8 -7 18t7 18l199 199l-94 94q-14 14 -10 24.5t25 10.5zM364 470l106 -106q7 -8 7 -18t-7 -18l-199 -199l94 -94q14 -14 10 -24.5t-25 -10.5h-300q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 10.5 25t24.5 -10l94 -94l199 199 q8 7 18 7t18 -7zM1071 271l94 94q14 14 24.5 10t10.5 -25v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -25 10.5t10 24.5l94 94l-199 199q-7 8 -7 18t7 18l106 106q8 7 18 7t18 -7z" />
+<glyph unicode="&#xe141;" d="M596 1192q121 0 231.5 -47.5t190 -127t127 -190t47.5 -231.5t-47.5 -231.5t-127 -190.5t-190 -127t-231.5 -47t-231.5 47t-190.5 127t-127 190.5t-47 231.5t47 231.5t127 190t190.5 127t231.5 47.5zM596 1010q-112 0 -207.5 -55.5t-151 -151t-55.5 -207.5t55.5 -207.5 t151 -151t207.5 -55.5t207.5 55.5t151 151t55.5 207.5t-55.5 207.5t-151 151t-207.5 55.5zM454.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38.5 -16.5t-38.5 16.5t-16 39t16 38.5t38.5 16zM754.5 905q22.5 0 38.5 -16t16 -38.5t-16 -39t-38 -16.5q-14 0 -29 10l-55 -145 q17 -23 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-61.5 25.5t-25.5 61.5q0 32 20.5 56.5t51.5 29.5l122 126l1 1q-9 14 -9 28q0 23 16 39t38.5 16zM345.5 709q22.5 0 38.5 -16t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16zM854.5 709q22.5 0 38.5 -16 t16 -38.5t-16 -38.5t-38.5 -16t-38.5 16t-16 38.5t16 38.5t38.5 16z" />
+<glyph unicode="&#xe142;" d="M546 173l469 470q91 91 99 192q7 98 -52 175.5t-154 94.5q-22 4 -47 4q-34 0 -66.5 -10t-56.5 -23t-55.5 -38t-48 -41.5t-48.5 -47.5q-376 -375 -391 -390q-30 -27 -45 -41.5t-37.5 -41t-32 -46.5t-16 -47.5t-1.5 -56.5q9 -62 53.5 -95t99.5 -33q74 0 125 51l548 548 q36 36 20 75q-7 16 -21.5 26t-32.5 10q-26 0 -50 -23q-13 -12 -39 -38l-341 -338q-15 -15 -35.5 -15.5t-34.5 13.5t-14 34.5t14 34.5q327 333 361 367q35 35 67.5 51.5t78.5 16.5q14 0 29 -1q44 -8 74.5 -35.5t43.5 -68.5q14 -47 2 -96.5t-47 -84.5q-12 -11 -32 -32 t-79.5 -81t-114.5 -115t-124.5 -123.5t-123 -119.5t-96.5 -89t-57 -45q-56 -27 -120 -27q-70 0 -129 32t-93 89q-48 78 -35 173t81 163l511 511q71 72 111 96q91 55 198 55q80 0 152 -33q78 -36 129.5 -103t66.5 -154q17 -93 -11 -183.5t-94 -156.5l-482 -476 q-15 -15 -36 -16t-37 14t-17.5 34t14.5 35z" />
+<glyph unicode="&#xe143;" d="M649 949q48 68 109.5 104t121.5 38.5t118.5 -20t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-150 152.5t-126.5 127.5t-93.5 124.5t-33.5 117.5q0 64 28 123t73 100.5t104 64t119 20 t120.5 -38.5t104.5 -104zM896 972q-33 0 -64.5 -19t-56.5 -46t-47.5 -53.5t-43.5 -45.5t-37.5 -19t-36 19t-40 45.5t-43 53.5t-54 46t-65.5 19q-67 0 -122.5 -55.5t-55.5 -132.5q0 -23 13.5 -51t46 -65t57.5 -63t76 -75l22 -22q15 -14 44 -44t50.5 -51t46 -44t41 -35t23 -12 t23.5 12t42.5 36t46 44t52.5 52t44 43q4 4 12 13q43 41 63.5 62t52 55t46 55t26 46t11.5 44q0 79 -53 133.5t-120 54.5z" />
+<glyph unicode="&#xe144;" d="M776.5 1214q93.5 0 159.5 -66l141 -141q66 -66 66 -160q0 -42 -28 -95.5t-62 -87.5l-29 -29q-31 53 -77 99l-18 18l95 95l-247 248l-389 -389l212 -212l-105 -106l-19 18l-141 141q-66 66 -66 159t66 159l283 283q65 66 158.5 66zM600 706l105 105q10 -8 19 -17l141 -141 q66 -66 66 -159t-66 -159l-283 -283q-66 -66 -159 -66t-159 66l-141 141q-66 66 -66 159.5t66 159.5l55 55q29 -55 75 -102l18 -17l-95 -95l247 -248l389 389z" />
+<glyph unicode="&#xe145;" d="M603 1200q85 0 162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5v953q0 21 30 46.5t81 48t129 37.5t163 15zM300 1000v-700h600v700h-600zM600 254q-43 0 -73.5 -30.5t-30.5 -73.5t30.5 -73.5t73.5 -30.5t73.5 30.5 t30.5 73.5t-30.5 73.5t-73.5 30.5z" />
+<glyph unicode="&#xe146;" d="M902 1185l283 -282q15 -15 15 -36t-14.5 -35.5t-35.5 -14.5t-35 15l-36 35l-279 -267v-300l-212 210l-308 -307l-280 -203l203 280l307 308l-210 212h300l267 279l-35 36q-15 14 -15 35t14.5 35.5t35.5 14.5t35 -15z" />
+<glyph unicode="&#xe148;" d="M700 1248v-78q38 -5 72.5 -14.5t75.5 -31.5t71 -53.5t52 -84t24 -118.5h-159q-4 36 -10.5 59t-21 45t-40 35.5t-64.5 20.5v-307l64 -13q34 -7 64 -16.5t70 -32t67.5 -52.5t47.5 -80t20 -112q0 -139 -89 -224t-244 -97v-77h-100v79q-150 16 -237 103q-40 40 -52.5 93.5 t-15.5 139.5h139q5 -77 48.5 -126t117.5 -65v335l-27 8q-46 14 -79 26.5t-72 36t-63 52t-40 72.5t-16 98q0 70 25 126t67.5 92t94.5 57t110 27v77h100zM600 754v274q-29 -4 -50 -11t-42 -21.5t-31.5 -41.5t-10.5 -65q0 -29 7 -50.5t16.5 -34t28.5 -22.5t31.5 -14t37.5 -10 q9 -3 13 -4zM700 547v-310q22 2 42.5 6.5t45 15.5t41.5 27t29 42t12 59.5t-12.5 59.5t-38 44.5t-53 31t-66.5 24.5z" />
+<glyph unicode="&#xe149;" d="M561 1197q84 0 160.5 -40t123.5 -109.5t47 -147.5h-153q0 40 -19.5 71.5t-49.5 48.5t-59.5 26t-55.5 9q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -26 13.5 -63t26.5 -61t37 -66q6 -9 9 -14h241v-100h-197q8 -50 -2.5 -115t-31.5 -95q-45 -62 -99 -112 q34 10 83 17.5t71 7.5q32 1 102 -16t104 -17q83 0 136 30l50 -147q-31 -19 -58 -30.5t-55 -15.5t-42 -4.5t-46 -0.5q-23 0 -76 17t-111 32.5t-96 11.5q-39 -3 -82 -16t-67 -25l-23 -11l-55 145q4 3 16 11t15.5 10.5t13 9t15.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221v100h166q-23 47 -44 104q-7 20 -12 41.5t-6 55.5t6 66.5t29.5 70.5t58.5 71q97 88 263 88z" />
+<glyph unicode="&#xe150;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM935 1184l230 -249q14 -14 10 -24.5t-25 -10.5h-150v-900h-200v900h-150q-21 0 -25 10.5t10 24.5l230 249q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe151;" d="M1000 700h-100v100h-100v-100h-100v500h300v-500zM400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM801 1100v-200h100v200h-100zM1000 350l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150z " />
+<glyph unicode="&#xe152;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 1050l-200 -250h200v-100h-300v150l200 250h-200v100h300v-150zM1000 0h-100v100h-100v-100h-100v500h300v-500zM801 400v-200h100v200h-100z " />
+<glyph unicode="&#xe153;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1000 700h-100v400h-100v100h200v-500zM1100 0h-100v100h-200v400h300v-500zM901 400v-200h100v200h-100z" />
+<glyph unicode="&#xe154;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1100 700h-100v100h-200v400h300v-500zM901 1100v-200h100v200h-100zM1000 0h-100v400h-100v100h200v-500z" />
+<glyph unicode="&#xe155;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM900 1000h-200v200h200v-200zM1000 700h-300v200h300v-200zM1100 400h-400v200h400v-200zM1200 100h-500v200h500v-200z" />
+<glyph unicode="&#xe156;" d="M400 300h150q21 0 25 -11t-10 -25l-230 -250q-14 -15 -35 -15t-35 15l-230 250q-14 14 -10 25t25 11h150v900h200v-900zM1200 1000h-500v200h500v-200zM1100 700h-400v200h400v-200zM1000 400h-300v200h300v-200zM900 100h-200v200h200v-200z" />
+<glyph unicode="&#xe157;" d="M350 1100h400q162 0 256 -93.5t94 -256.5v-400q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5z" />
+<glyph unicode="&#xe158;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-163 0 -256.5 92.5t-93.5 257.5v400q0 163 94 256.5t256 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM440 770l253 -190q17 -12 17 -30t-17 -30l-253 -190q-16 -12 -28 -6.5t-12 26.5v400q0 21 12 26.5t28 -6.5z" />
+<glyph unicode="&#xe159;" d="M350 1100h400q163 0 256.5 -94t93.5 -256v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 163 92.5 256.5t257.5 93.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM350 700h400q21 0 26.5 -12t-6.5 -28l-190 -253q-12 -17 -30 -17t-30 17l-190 253q-12 16 -6.5 28t26.5 12z" />
+<glyph unicode="&#xe160;" d="M350 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -163 -92.5 -256.5t-257.5 -93.5h-400q-163 0 -256.5 94t-93.5 256v400q0 165 92.5 257.5t257.5 92.5zM800 900h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5 v500q0 41 -29.5 70.5t-70.5 29.5zM580 693l190 -253q12 -16 6.5 -28t-26.5 -12h-400q-21 0 -26.5 12t6.5 28l190 253q12 17 30 17t30 -17z" />
+<glyph unicode="&#xe161;" d="M550 1100h400q165 0 257.5 -92.5t92.5 -257.5v-400q0 -165 -92.5 -257.5t-257.5 -92.5h-400q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h450q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5h-450q-21 0 -35.5 14.5t-14.5 35.5v100 q0 21 14.5 35.5t35.5 14.5zM338 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe162;" d="M793 1182l9 -9q8 -10 5 -27q-3 -11 -79 -225.5t-78 -221.5l300 1q24 0 32.5 -17.5t-5.5 -35.5q-1 0 -133.5 -155t-267 -312.5t-138.5 -162.5q-12 -15 -26 -15h-9l-9 8q-9 11 -4 32q2 9 42 123.5t79 224.5l39 110h-302q-23 0 -31 19q-10 21 6 41q75 86 209.5 237.5 t228 257t98.5 111.5q9 16 25 16h9z" />
+<glyph unicode="&#xe163;" d="M350 1100h400q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-450q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h450q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400 q0 165 92.5 257.5t257.5 92.5zM938 867l324 -284q16 -14 16 -33t-16 -33l-324 -284q-16 -14 -27 -9t-11 26v150h-250q-21 0 -35.5 14.5t-14.5 35.5v200q0 21 14.5 35.5t35.5 14.5h250v150q0 21 11 26t27 -9z" />
+<glyph unicode="&#xe164;" d="M750 1200h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -10.5 -25t-24.5 10l-109 109l-312 -312q-15 -15 -35.5 -15t-35.5 15l-141 141q-15 15 -15 35.5t15 35.5l312 312l-109 109q-14 14 -10 24.5t25 10.5zM456 900h-156q-41 0 -70.5 -29.5t-29.5 -70.5v-500 q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v148l200 200v-298q0 -165 -93.5 -257.5t-256.5 -92.5h-400q-165 0 -257.5 92.5t-92.5 257.5v400q0 165 92.5 257.5t257.5 92.5h300z" />
+<glyph unicode="&#xe165;" d="M600 1186q119 0 227.5 -46.5t187 -125t125 -187t46.5 -227.5t-46.5 -227.5t-125 -187t-187 -125t-227.5 -46.5t-227.5 46.5t-187 125t-125 187t-46.5 227.5t46.5 227.5t125 187t187 125t227.5 46.5zM600 1022q-115 0 -212 -56.5t-153.5 -153.5t-56.5 -212t56.5 -212 t153.5 -153.5t212 -56.5t212 56.5t153.5 153.5t56.5 212t-56.5 212t-153.5 153.5t-212 56.5zM600 794q80 0 137 -57t57 -137t-57 -137t-137 -57t-137 57t-57 137t57 137t137 57z" />
+<glyph unicode="&#xe166;" d="M450 1200h200q21 0 35.5 -14.5t14.5 -35.5v-350h245q20 0 25 -11t-9 -26l-383 -426q-14 -15 -33.5 -15t-32.5 15l-379 426q-13 15 -8.5 26t25.5 11h250v350q0 21 14.5 35.5t35.5 14.5zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe167;" d="M583 1182l378 -435q14 -15 9 -31t-26 -16h-244v-250q0 -20 -17 -35t-39 -15h-200q-20 0 -32 14.5t-12 35.5v250h-250q-20 0 -25.5 16.5t8.5 31.5l383 431q14 16 33.5 17t33.5 -14zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5z M900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe168;" d="M396 723l369 369q7 7 17.5 7t17.5 -7l139 -139q7 -8 7 -18.5t-7 -17.5l-525 -525q-7 -8 -17.5 -8t-17.5 8l-292 291q-7 8 -7 18t7 18l139 139q8 7 18.5 7t17.5 -7zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50 h-100z" />
+<glyph unicode="&#xe169;" d="M135 1023l142 142q14 14 35 14t35 -14l77 -77l-212 -212l-77 76q-14 15 -14 36t14 35zM655 855l210 210q14 14 24.5 10t10.5 -25l-2 -599q-1 -20 -15.5 -35t-35.5 -15l-597 -1q-21 0 -25 10.5t10 24.5l208 208l-154 155l212 212zM50 300h1000q21 0 35.5 -14.5t14.5 -35.5 v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe170;" d="M350 1200l599 -2q20 -1 35 -15.5t15 -35.5l1 -597q0 -21 -10.5 -25t-24.5 10l-208 208l-155 -154l-212 212l155 154l-210 210q-14 14 -10 24.5t25 10.5zM524 512l-76 -77q-15 -14 -36 -14t-35 14l-142 142q-14 14 -14 35t14 35l77 77zM50 300h1000q21 0 35.5 -14.5 t14.5 -35.5v-250h-1100v250q0 21 14.5 35.5t35.5 14.5zM900 200v-50h100v50h-100z" />
+<glyph unicode="&#xe171;" d="M1200 103l-483 276l-314 -399v423h-399l1196 796v-1096zM483 424v-230l683 953z" />
+<glyph unicode="&#xe172;" d="M1100 1000v-850q0 -21 -14.5 -35.5t-35.5 -14.5h-150v400h-700v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200z" />
+<glyph unicode="&#xe173;" d="M1100 1000l-2 -149l-299 -299l-95 95q-9 9 -21.5 9t-21.5 -9l-149 -147h-312v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1132 638l106 -106q7 -7 7 -17.5t-7 -17.5l-420 -421q-8 -7 -18 -7 t-18 7l-202 203q-8 7 -8 17.5t8 17.5l106 106q7 8 17.5 8t17.5 -8l79 -79l297 297q7 7 17.5 7t17.5 -7z" />
+<glyph unicode="&#xe174;" d="M1100 1000v-269l-103 -103l-134 134q-15 15 -33.5 16.5t-34.5 -12.5l-266 -266h-329v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM1202 572l70 -70q15 -15 15 -35.5t-15 -35.5l-131 -131 l131 -131q15 -15 15 -35.5t-15 -35.5l-70 -70q-15 -15 -35.5 -15t-35.5 15l-131 131l-131 -131q-15 -15 -35.5 -15t-35.5 15l-70 70q-15 15 -15 35.5t15 35.5l131 131l-131 131q-15 15 -15 35.5t15 35.5l70 70q15 15 35.5 15t35.5 -15l131 -131l131 131q15 15 35.5 15 t35.5 -15z" />
+<glyph unicode="&#xe175;" d="M1100 1000v-300h-350q-21 0 -35.5 -14.5t-14.5 -35.5v-150h-500v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM850 600h100q21 0 35.5 -14.5t14.5 -35.5v-250h150q21 0 25 -10.5t-10 -24.5 l-230 -230q-14 -14 -35 -14t-35 14l-230 230q-14 14 -10 24.5t25 10.5h150v250q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe176;" d="M1100 1000v-400l-165 165q-14 15 -35 15t-35 -15l-263 -265h-402v-400h-150q-21 0 -35.5 14.5t-14.5 35.5v1000q0 20 14.5 35t35.5 15h250v-300h500v300h100zM700 1000h-100v200h100v-200zM935 565l230 -229q14 -15 10 -25.5t-25 -10.5h-150v-250q0 -20 -14.5 -35 t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35v250h-150q-21 0 -25 10.5t10 25.5l230 229q14 15 35 15t35 -15z" />
+<glyph unicode="&#xe177;" d="M50 1100h1100q21 0 35.5 -14.5t14.5 -35.5v-150h-1200v150q0 21 14.5 35.5t35.5 14.5zM1200 800v-550q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v550h1200zM100 500v-200h400v200h-400z" />
+<glyph unicode="&#xe178;" d="M935 1165l248 -230q14 -14 14 -35t-14 -35l-248 -230q-14 -14 -24.5 -10t-10.5 25v150h-400v200h400v150q0 21 10.5 25t24.5 -10zM200 800h-50q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v-200zM400 800h-100v200h100v-200zM18 435l247 230 q14 14 24.5 10t10.5 -25v-150h400v-200h-400v-150q0 -21 -10.5 -25t-24.5 10l-247 230q-15 14 -15 35t15 35zM900 300h-100v200h100v-200zM1000 500h51q20 0 34.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-34.5 -14.5h-51v200z" />
+<glyph unicode="&#xe179;" d="M862 1073l276 116q25 18 43.5 8t18.5 -41v-1106q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v397q-4 1 -11 5t-24 17.5t-30 29t-24 42t-11 56.5v359q0 31 18.5 65t43.5 52zM550 1200q22 0 34.5 -12.5t14.5 -24.5l1 -13v-450q0 -28 -10.5 -59.5 t-25 -56t-29 -45t-25.5 -31.5l-10 -11v-447q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5v447q-4 4 -11 11.5t-24 30.5t-30 46t-24 55t-11 60v450q0 2 0.5 5.5t4 12t8.5 15t14.5 12t22.5 5.5q20 0 32.5 -12.5t14.5 -24.5l3 -13v-350h100v350v5.5t2.5 12 t7 15t15 12t25.5 5.5q23 0 35.5 -12.5t13.5 -24.5l1 -13v-350h100v350q0 2 0.5 5.5t3 12t7 15t15 12t24.5 5.5z" />
+<glyph unicode="&#xe180;" d="M1200 1100v-56q-4 0 -11 -0.5t-24 -3t-30 -7.5t-24 -15t-11 -24v-888q0 -22 25 -34.5t50 -13.5l25 -2v-56h-400v56q75 0 87.5 6.5t12.5 43.5v394h-500v-394q0 -37 12.5 -43.5t87.5 -6.5v-56h-400v56q4 0 11 0.5t24 3t30 7.5t24 15t11 24v888q0 22 -25 34.5t-50 13.5 l-25 2v56h400v-56q-75 0 -87.5 -6.5t-12.5 -43.5v-394h500v394q0 37 -12.5 43.5t-87.5 6.5v56h400z" />
+<glyph unicode="&#xe181;" d="M675 1000h375q21 0 35.5 -14.5t14.5 -35.5v-150h-105l-295 -98v98l-200 200h-400l100 100h375zM100 900h300q41 0 70.5 -29.5t29.5 -70.5v-500q0 -41 -29.5 -70.5t-70.5 -29.5h-300q-41 0 -70.5 29.5t-29.5 70.5v500q0 41 29.5 70.5t70.5 29.5zM100 800v-200h300v200 h-300zM1100 535l-400 -133v163l400 133v-163zM100 500v-200h300v200h-300zM1100 398v-248q0 -21 -14.5 -35.5t-35.5 -14.5h-375l-100 -100h-375l-100 100h400l200 200h105z" />
+<glyph unicode="&#xe182;" d="M17 1007l162 162q17 17 40 14t37 -22l139 -194q14 -20 11 -44.5t-20 -41.5l-119 -118q102 -142 228 -268t267 -227l119 118q17 17 42.5 19t44.5 -12l192 -136q19 -14 22.5 -37.5t-13.5 -40.5l-163 -162q-3 -1 -9.5 -1t-29.5 2t-47.5 6t-62.5 14.5t-77.5 26.5t-90 42.5 t-101.5 60t-111 83t-119 108.5q-74 74 -133.5 150.5t-94.5 138.5t-60 119.5t-34.5 100t-15 74.5t-4.5 48z" />
+<glyph unicode="&#xe183;" d="M600 1100q92 0 175 -10.5t141.5 -27t108.5 -36.5t81.5 -40t53.5 -37t31 -27l9 -10v-200q0 -21 -14.5 -33t-34.5 -9l-202 34q-20 3 -34.5 20t-14.5 38v146q-141 24 -300 24t-300 -24v-146q0 -21 -14.5 -38t-34.5 -20l-202 -34q-20 -3 -34.5 9t-14.5 33v200q3 4 9.5 10.5 t31 26t54 37.5t80.5 39.5t109 37.5t141 26.5t175 10.5zM600 795q56 0 97 -9.5t60 -23.5t30 -28t12 -24l1 -10v-50l365 -303q14 -15 24.5 -40t10.5 -45v-212q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v212q0 20 10.5 45t24.5 40l365 303v50 q0 4 1 10.5t12 23t30 29t60 22.5t97 10z" />
+<glyph unicode="&#xe184;" d="M1100 700l-200 -200h-600l-200 200v500h200v-200h200v200h200v-200h200v200h200v-500zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5 t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe185;" d="M700 1100h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-1000h300v1000q0 41 -29.5 70.5t-70.5 29.5zM1100 800h-100q-41 0 -70.5 -29.5t-29.5 -70.5v-700h300v700q0 41 -29.5 70.5t-70.5 29.5zM400 0h-300v400q0 41 29.5 70.5t70.5 29.5h100q41 0 70.5 -29.5t29.5 -70.5v-400z " />
+<glyph unicode="&#xe186;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe187;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 300h-100v200h-100v-200h-100v500h100v-200h100v200h100v-500zM900 700v-300l-100 -100h-200v500h200z M700 700v-300h100v300h-100z" />
+<glyph unicode="&#xe188;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-300h200v-100h-300v500h300v-100zM900 700h-200v-300h200v-100h-300v500h300v-100z" />
+<glyph unicode="&#xe189;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 400l-300 150l300 150v-300zM900 550l-300 -150v300z" />
+<glyph unicode="&#xe190;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM900 300h-700v500h700v-500zM800 700h-130q-38 0 -66.5 -43t-28.5 -108t27 -107t68 -42h130v300zM300 700v-300 h130q41 0 68 42t27 107t-28.5 108t-66.5 43h-130z" />
+<glyph unicode="&#xe191;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 700h-200v-100h200v-300h-300v100h200v100h-200v300h300v-100zM900 300h-100v400h-100v100h200v-500z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe192;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM300 700h200v-400h-300v500h100v-100zM900 300h-100v400h-100v100h200v-500zM300 600v-200h100v200h-100z M700 300h-100v100h100v-100z" />
+<glyph unicode="&#xe193;" d="M200 1100h700q124 0 212 -88t88 -212v-500q0 -124 -88 -212t-212 -88h-700q-124 0 -212 88t-88 212v500q0 124 88 212t212 88zM100 900v-700h900v700h-900zM500 500l-199 -200h-100v50l199 200v150h-200v100h300v-300zM900 300h-100v400h-100v100h200v-500zM701 300h-100 v100h100v-100z" />
+<glyph unicode="&#xe194;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700h-300v-200h300v-100h-300l-100 100v200l100 100h300v-100z" />
+<glyph unicode="&#xe195;" d="M600 1191q120 0 229.5 -47t188.5 -126t126 -188.5t47 -229.5t-47 -229.5t-126 -188.5t-188.5 -126t-229.5 -47t-229.5 47t-188.5 126t-126 188.5t-47 229.5t47 229.5t126 188.5t188.5 126t229.5 47zM600 1021q-114 0 -211 -56.5t-153.5 -153.5t-56.5 -211t56.5 -211 t153.5 -153.5t211 -56.5t211 56.5t153.5 153.5t56.5 211t-56.5 211t-153.5 153.5t-211 56.5zM800 700v-100l-50 -50l100 -100v-50h-100l-100 100h-150v-100h-100v400h300zM500 700v-100h200v100h-200z" />
+<glyph unicode="&#xe197;" d="M503 1089q110 0 200.5 -59.5t134.5 -156.5q44 14 90 14q120 0 205 -86.5t85 -207t-85 -207t-205 -86.5h-128v250q0 21 -14.5 35.5t-35.5 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-250h-222q-80 0 -136 57.5t-56 136.5q0 69 43 122.5t108 67.5q-2 19 -2 37q0 100 49 185 t134 134t185 49zM525 500h150q10 0 17.5 -7.5t7.5 -17.5v-275h137q21 0 26 -11.5t-8 -27.5l-223 -244q-13 -16 -32 -16t-32 16l-223 244q-13 16 -8 27.5t26 11.5h137v275q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe198;" d="M502 1089q110 0 201 -59.5t135 -156.5q43 15 89 15q121 0 206 -86.5t86 -206.5q0 -99 -60 -181t-150 -110l-378 360q-13 16 -31.5 16t-31.5 -16l-381 -365h-9q-79 0 -135.5 57.5t-56.5 136.5q0 69 43 122.5t108 67.5q-2 19 -2 38q0 100 49 184.5t133.5 134t184.5 49.5z M632 467l223 -228q13 -16 8 -27.5t-26 -11.5h-137v-275q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v275h-137q-21 0 -26 11.5t8 27.5q199 204 223 228q19 19 31.5 19t32.5 -19z" />
+<glyph unicode="&#xe199;" d="M700 100v100h400l-270 300h170l-270 300h170l-300 333l-300 -333h170l-270 -300h170l-270 -300h400v-100h-50q-21 0 -35.5 -14.5t-14.5 -35.5v-50h400v50q0 21 -14.5 35.5t-35.5 14.5h-50z" />
+<glyph unicode="&#xe200;" d="M600 1179q94 0 167.5 -56.5t99.5 -145.5q89 -6 150.5 -71.5t61.5 -155.5q0 -61 -29.5 -112.5t-79.5 -82.5q9 -29 9 -55q0 -74 -52.5 -126.5t-126.5 -52.5q-55 0 -100 30v-251q21 0 35.5 -14.5t14.5 -35.5v-50h-300v50q0 21 14.5 35.5t35.5 14.5v251q-45 -30 -100 -30 q-74 0 -126.5 52.5t-52.5 126.5q0 18 4 38q-47 21 -75.5 65t-28.5 97q0 74 52.5 126.5t126.5 52.5q5 0 23 -2q0 2 -1 10t-1 13q0 116 81.5 197.5t197.5 81.5z" />
+<glyph unicode="&#xe201;" d="M1010 1010q111 -111 150.5 -260.5t0 -299t-150.5 -260.5q-83 -83 -191.5 -126.5t-218.5 -43.5t-218.5 43.5t-191.5 126.5q-111 111 -150.5 260.5t0 299t150.5 260.5q83 83 191.5 126.5t218.5 43.5t218.5 -43.5t191.5 -126.5zM476 1065q-4 0 -8 -1q-121 -34 -209.5 -122.5 t-122.5 -209.5q-4 -12 2.5 -23t18.5 -14l36 -9q3 -1 7 -1q23 0 29 22q27 96 98 166q70 71 166 98q11 3 17.5 13.5t3.5 22.5l-9 35q-3 13 -14 19q-7 4 -15 4zM512 920q-4 0 -9 -2q-80 -24 -138.5 -82.5t-82.5 -138.5q-4 -13 2 -24t19 -14l34 -9q4 -1 8 -1q22 0 28 21 q18 58 58.5 98.5t97.5 58.5q12 3 18 13.5t3 21.5l-9 35q-3 12 -14 19q-7 4 -15 4zM719.5 719.5q-49.5 49.5 -119.5 49.5t-119.5 -49.5t-49.5 -119.5t49.5 -119.5t119.5 -49.5t119.5 49.5t49.5 119.5t-49.5 119.5zM855 551q-22 0 -28 -21q-18 -58 -58.5 -98.5t-98.5 -57.5 q-11 -4 -17 -14.5t-3 -21.5l9 -35q3 -12 14 -19q7 -4 15 -4q4 0 9 2q80 24 138.5 82.5t82.5 138.5q4 13 -2.5 24t-18.5 14l-34 9q-4 1 -8 1zM1000 515q-23 0 -29 -22q-27 -96 -98 -166q-70 -71 -166 -98q-11 -3 -17.5 -13.5t-3.5 -22.5l9 -35q3 -13 14 -19q7 -4 15 -4 q4 0 8 1q121 34 209.5 122.5t122.5 209.5q4 12 -2.5 23t-18.5 14l-36 9q-3 1 -7 1z" />
+<glyph unicode="&#xe202;" d="M700 800h300v-380h-180v200h-340v-200h-380v755q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM700 300h162l-212 -212l-212 212h162v200h100v-200zM520 0h-395q-10 0 -17.5 7.5t-7.5 17.5v395zM1000 220v-195q0 -10 -7.5 -17.5t-17.5 -7.5h-195z" />
+<glyph unicode="&#xe203;" d="M700 800h300v-520l-350 350l-550 -550v1095q0 10 7.5 17.5t17.5 7.5h575v-400zM1000 900h-200v200zM862 200h-162v-200h-100v200h-162l212 212zM480 0h-355q-10 0 -17.5 7.5t-7.5 17.5v55h380v-80zM1000 80v-55q0 -10 -7.5 -17.5t-17.5 -7.5h-155v80h180z" />
+<glyph unicode="&#xe204;" d="M1162 800h-162v-200h100l100 -100h-300v300h-162l212 212zM200 800h200q27 0 40 -2t29.5 -10.5t23.5 -30t7 -57.5h300v-100h-600l-200 -350v450h100q0 36 7 57.5t23.5 30t29.5 10.5t40 2zM800 400h240l-240 -400h-800l300 500h500v-100z" />
+<glyph unicode="&#xe205;" d="M650 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM1000 850v150q41 0 70.5 -29.5t29.5 -70.5v-800 q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-1 0 -20 4l246 246l-326 326v324q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM412 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe206;" d="M450 1100h100q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-300q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h50v50q0 21 14.5 35.5t35.5 14.5zM800 850v150q41 0 70.5 -29.5t29.5 -70.5v-500 h-200v-300h200q0 -36 -7 -57.5t-23.5 -30t-29.5 -10.5t-40 -2h-600q-41 0 -70.5 29.5t-29.5 70.5v800q0 41 29.5 70.5t70.5 29.5v-150q0 -62 44 -106t106 -44h300q62 0 106 44t44 106zM1212 250l-212 -212v162h-200v100h200v162z" />
+<glyph unicode="&#xe209;" d="M658 1197l637 -1104q23 -38 7 -65.5t-60 -27.5h-1276q-44 0 -60 27.5t7 65.5l637 1104q22 39 54 39t54 -39zM704 800h-208q-20 0 -32 -14.5t-8 -34.5l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5t21.5 34.5l58 302q4 20 -8 34.5t-32 14.5zM500 300v-100h200 v100h-200z" />
+<glyph unicode="&#xe210;" d="M425 1100h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM825 800h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM25 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5zM425 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 500h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5 v150q0 10 7.5 17.5t17.5 7.5zM25 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM425 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5 t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM825 200h250q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-250q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe211;" d="M700 1200h100v-200h-100v-100h350q62 0 86.5 -39.5t-3.5 -94.5l-66 -132q-41 -83 -81 -134h-772q-40 51 -81 134l-66 132q-28 55 -3.5 94.5t86.5 39.5h350v100h-100v200h100v100h200v-100zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-12l137 -100 h-950l138 100h-13q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe212;" d="M600 1300q40 0 68.5 -29.5t28.5 -70.5h-194q0 41 28.5 70.5t68.5 29.5zM443 1100h314q18 -37 18 -75q0 -8 -3 -25h328q41 0 44.5 -16.5t-30.5 -38.5l-175 -145h-678l-178 145q-34 22 -29 38.5t46 16.5h328q-3 17 -3 25q0 38 18 75zM250 700h700q21 0 35.5 -14.5 t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-150v-200l275 -200h-950l275 200v200h-150q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe213;" d="M600 1181q75 0 128 -53t53 -128t-53 -128t-128 -53t-128 53t-53 128t53 128t128 53zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13 l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe214;" d="M600 1300q47 0 92.5 -53.5t71 -123t25.5 -123.5q0 -78 -55.5 -133.5t-133.5 -55.5t-133.5 55.5t-55.5 133.5q0 62 34 143l144 -143l111 111l-163 163q34 26 63 26zM602 798h46q34 0 55.5 -28.5t21.5 -86.5q0 -76 39 -183h-324q39 107 39 183q0 58 21.5 86.5t56.5 28.5h45 zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe215;" d="M600 1200l300 -161v-139h-300q0 -57 18.5 -108t50 -91.5t63 -72t70 -67.5t57.5 -61h-530q-60 83 -90.5 177.5t-30.5 178.5t33 164.5t87.5 139.5t126 96.5t145.5 41.5v-98zM250 400h700q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-13l138 -100h-950l137 100 h-12q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5zM50 100h1100q21 0 35.5 -14.5t14.5 -35.5v-50h-1200v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe216;" d="M600 1300q41 0 70.5 -29.5t29.5 -70.5v-78q46 -26 73 -72t27 -100v-50h-400v50q0 54 27 100t73 72v78q0 41 29.5 70.5t70.5 29.5zM400 800h400q54 0 100 -27t72 -73h-172v-100h200v-100h-200v-100h200v-100h-200v-100h200q0 -83 -58.5 -141.5t-141.5 -58.5h-400 q-83 0 -141.5 58.5t-58.5 141.5v400q0 83 58.5 141.5t141.5 58.5z" />
+<glyph unicode="&#xe218;" d="M150 1100h900q21 0 35.5 -14.5t14.5 -35.5v-500q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v500q0 21 14.5 35.5t35.5 14.5zM125 400h950q10 0 17.5 -7.5t7.5 -17.5v-50q0 -10 -7.5 -17.5t-17.5 -7.5h-283l224 -224q13 -13 13 -31.5t-13 -32 t-31.5 -13.5t-31.5 13l-88 88h-524l-87 -88q-13 -13 -32 -13t-32 13.5t-13 32t13 31.5l224 224h-289q-10 0 -17.5 7.5t-7.5 17.5v50q0 10 7.5 17.5t17.5 7.5zM541 300l-100 -100h324l-100 100h-124z" />
+<glyph unicode="&#xe219;" d="M200 1100h800q83 0 141.5 -58.5t58.5 -141.5v-200h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100q0 41 -29.5 70.5t-70.5 29.5h-250q-41 0 -70.5 -29.5t-29.5 -70.5h-100v200q0 83 58.5 141.5t141.5 58.5zM100 600h1000q41 0 70.5 -29.5 t29.5 -70.5v-300h-1200v300q0 41 29.5 70.5t70.5 29.5zM300 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200zM1100 100v-50q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v50h200z" />
+<glyph unicode="&#xe221;" d="M480 1165l682 -683q31 -31 31 -75.5t-31 -75.5l-131 -131h-481l-517 518q-32 31 -32 75.5t32 75.5l295 296q31 31 75.5 31t76.5 -31zM108 794l342 -342l303 304l-341 341zM250 100h800q21 0 35.5 -14.5t14.5 -35.5v-50h-900v50q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe223;" d="M1057 647l-189 506q-8 19 -27.5 33t-40.5 14h-400q-21 0 -40.5 -14t-27.5 -33l-189 -506q-8 -19 1.5 -33t30.5 -14h625v-150q0 -21 14.5 -35.5t35.5 -14.5t35.5 14.5t14.5 35.5v150h125q21 0 30.5 14t1.5 33zM897 0h-595v50q0 21 14.5 35.5t35.5 14.5h50v50 q0 21 14.5 35.5t35.5 14.5h48v300h200v-300h47q21 0 35.5 -14.5t14.5 -35.5v-50h50q21 0 35.5 -14.5t14.5 -35.5v-50z" />
+<glyph unicode="&#xe224;" d="M900 800h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-375v591l-300 300v84q0 10 7.5 17.5t17.5 7.5h375v-400zM1200 900h-200v200zM400 600h300v-575q0 -10 -7.5 -17.5t-17.5 -7.5h-650q-10 0 -17.5 7.5t-7.5 17.5v950q0 10 7.5 17.5t17.5 7.5h375v-400zM700 700h-200v200z " />
+<glyph unicode="&#xe225;" d="M484 1095h195q75 0 146 -32.5t124 -86t89.5 -122.5t48.5 -142q18 -14 35 -20q31 -10 64.5 6.5t43.5 48.5q10 34 -15 71q-19 27 -9 43q5 8 12.5 11t19 -1t23.5 -16q41 -44 39 -105q-3 -63 -46 -106.5t-104 -43.5h-62q-7 -55 -35 -117t-56 -100l-39 -234q-3 -20 -20 -34.5 t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l12 70q-49 -14 -91 -14h-195q-24 0 -65 8l-11 -64q-3 -20 -20 -34.5t-38 -14.5h-100q-21 0 -33 14.5t-9 34.5l26 157q-84 74 -128 175l-159 53q-19 7 -33 26t-14 40v50q0 21 14.5 35.5t35.5 14.5h124q11 87 56 166l-111 95 q-16 14 -12.5 23.5t24.5 9.5h203q116 101 250 101zM675 1000h-250q-10 0 -17.5 -7.5t-7.5 -17.5v-50q0 -10 7.5 -17.5t17.5 -7.5h250q10 0 17.5 7.5t7.5 17.5v50q0 10 -7.5 17.5t-17.5 7.5z" />
+<glyph unicode="&#xe226;" d="M641 900l423 247q19 8 42 2.5t37 -21.5l32 -38q14 -15 12.5 -36t-17.5 -34l-139 -120h-390zM50 1100h106q67 0 103 -17t66 -71l102 -212h823q21 0 35.5 -14.5t14.5 -35.5v-50q0 -21 -14 -40t-33 -26l-737 -132q-23 -4 -40 6t-26 25q-42 67 -100 67h-300q-62 0 -106 44 t-44 106v200q0 62 44 106t106 44zM173 928h-80q-19 0 -28 -14t-9 -35v-56q0 -51 42 -51h134q16 0 21.5 8t5.5 24q0 11 -16 45t-27 51q-18 28 -43 28zM550 727q-32 0 -54.5 -22.5t-22.5 -54.5t22.5 -54.5t54.5 -22.5t54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5zM130 389 l152 130q18 19 34 24t31 -3.5t24.5 -17.5t25.5 -28q28 -35 50.5 -51t48.5 -13l63 5l48 -179q13 -61 -3.5 -97.5t-67.5 -79.5l-80 -69q-47 -40 -109 -35.5t-103 51.5l-130 151q-40 47 -35.5 109.5t51.5 102.5zM380 377l-102 -88q-31 -27 2 -65l37 -43q13 -15 27.5 -19.5 t31.5 6.5l61 53q19 16 14 49q-2 20 -12 56t-17 45q-11 12 -19 14t-23 -8z" />
+<glyph unicode="&#xe227;" d="M625 1200h150q10 0 17.5 -7.5t7.5 -17.5v-109q79 -33 131 -87.5t53 -128.5q1 -46 -15 -84.5t-39 -61t-46 -38t-39 -21.5l-17 -6q6 0 15 -1.5t35 -9t50 -17.5t53 -30t50 -45t35.5 -64t14.5 -84q0 -59 -11.5 -105.5t-28.5 -76.5t-44 -51t-49.5 -31.5t-54.5 -16t-49.5 -6.5 t-43.5 -1v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-100v-75q0 -10 -7.5 -17.5t-17.5 -7.5h-150q-10 0 -17.5 7.5t-7.5 17.5v75h-175q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5h75v600h-75q-10 0 -17.5 7.5t-7.5 17.5v150 q0 10 7.5 17.5t17.5 7.5h175v75q0 10 7.5 17.5t17.5 7.5h150q10 0 17.5 -7.5t7.5 -17.5v-75h100v75q0 10 7.5 17.5t17.5 7.5zM400 900v-200h263q28 0 48.5 10.5t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-263zM400 500v-200h363q28 0 48.5 10.5 t30 25t15 29t5.5 25.5l1 10q0 4 -0.5 11t-6 24t-15 30t-30 24t-48.5 11h-363z" />
+<glyph unicode="&#xe230;" d="M212 1198h780q86 0 147 -61t61 -147v-416q0 -51 -18 -142.5t-36 -157.5l-18 -66q-29 -87 -93.5 -146.5t-146.5 -59.5h-572q-82 0 -147 59t-93 147q-8 28 -20 73t-32 143.5t-20 149.5v416q0 86 61 147t147 61zM600 1045q-70 0 -132.5 -11.5t-105.5 -30.5t-78.5 -41.5 t-57 -45t-36 -41t-20.5 -30.5l-6 -12l156 -243h560l156 243q-2 5 -6 12.5t-20 29.5t-36.5 42t-57 44.5t-79 42t-105 29.5t-132.5 12zM762 703h-157l195 261z" />
+<glyph unicode="&#xe231;" d="M475 1300h150q103 0 189 -86t86 -189v-500q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe232;" d="M475 1300h96q0 -150 89.5 -239.5t239.5 -89.5v-446q0 -41 -42 -83t-83 -42h-450q-41 0 -83 42t-42 83v500q0 103 86 189t189 86zM700 300v-225q0 -21 -27 -48t-48 -27h-150q-21 0 -48 27t-27 48v225h300z" />
+<glyph unicode="&#xe233;" d="M1294 767l-638 -283l-378 170l-78 -60v-224l100 -150v-199l-150 148l-150 -149v200l100 150v250q0 4 -0.5 10.5t0 9.5t1 8t3 8t6.5 6l47 40l-147 65l642 283zM1000 380l-350 -166l-350 166v147l350 -165l350 165v-147z" />
+<glyph unicode="&#xe234;" d="M250 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM650 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM1050 800q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe235;" d="M550 1100q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 700q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44zM550 300q62 0 106 -44t44 -106t-44 -106t-106 -44t-106 44t-44 106t44 106t106 44z" />
+<glyph unicode="&#xe236;" d="M125 1100h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5zM125 700h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5 t17.5 7.5zM125 300h950q10 0 17.5 -7.5t7.5 -17.5v-150q0 -10 -7.5 -17.5t-17.5 -7.5h-950q-10 0 -17.5 7.5t-7.5 17.5v150q0 10 7.5 17.5t17.5 7.5z" />
+<glyph unicode="&#xe237;" d="M350 1200h500q162 0 256 -93.5t94 -256.5v-500q0 -165 -93.5 -257.5t-256.5 -92.5h-500q-165 0 -257.5 92.5t-92.5 257.5v500q0 165 92.5 257.5t257.5 92.5zM900 1000h-600q-41 0 -70.5 -29.5t-29.5 -70.5v-600q0 -41 29.5 -70.5t70.5 -29.5h600q41 0 70.5 29.5 t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5zM350 900h500q21 0 35.5 -14.5t14.5 -35.5v-300q0 -21 -14.5 -35.5t-35.5 -14.5h-500q-21 0 -35.5 14.5t-14.5 35.5v300q0 21 14.5 35.5t35.5 14.5zM400 800v-200h400v200h-400z" />
+<glyph unicode="&#xe238;" d="M150 1100h1000q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5t-35.5 -14.5h-50v-200h50q21 0 35.5 -14.5t14.5 -35.5t-14.5 -35.5 t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h50v200h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe239;" d="M650 1187q87 -67 118.5 -156t0 -178t-118.5 -155q-87 66 -118.5 155t0 178t118.5 156zM300 800q124 0 212 -88t88 -212q-124 0 -212 88t-88 212zM1000 800q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM300 500q124 0 212 -88t88 -212q-124 0 -212 88t-88 212z M1000 500q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM700 199v-144q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v142q40 -4 43 -4q17 0 57 6z" />
+<glyph unicode="&#xe240;" d="M745 878l69 19q25 6 45 -12l298 -295q11 -11 15 -26.5t-2 -30.5q-5 -14 -18 -23.5t-28 -9.5h-8q1 0 1 -13q0 -29 -2 -56t-8.5 -62t-20 -63t-33 -53t-51 -39t-72.5 -14h-146q-184 0 -184 288q0 24 10 47q-20 4 -62 4t-63 -4q11 -24 11 -47q0 -288 -184 -288h-142 q-48 0 -84.5 21t-56 51t-32 71.5t-16 75t-3.5 68.5q0 13 2 13h-7q-15 0 -27.5 9.5t-18.5 23.5q-6 15 -2 30.5t15 25.5l298 296q20 18 46 11l76 -19q20 -5 30.5 -22.5t5.5 -37.5t-22.5 -31t-37.5 -5l-51 12l-182 -193h891l-182 193l-44 -12q-20 -5 -37.5 6t-22.5 31t6 37.5 t31 22.5z" />
+<glyph unicode="&#xe241;" d="M1200 900h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-200v-850q0 -22 25 -34.5t50 -13.5l25 -2v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v850h-200q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h1000v-300zM500 450h-25q0 15 -4 24.5t-9 14.5t-17 7.5t-20 3t-25 0.5h-100v-425q0 -11 12.5 -17.5t25.5 -7.5h12v-50h-200v50q50 0 50 25v425h-100q-17 0 -25 -0.5t-20 -3t-17 -7.5t-9 -14.5t-4 -24.5h-25v150h500v-150z" />
+<glyph unicode="&#xe242;" d="M1000 300v50q-25 0 -55 32q-14 14 -25 31t-16 27l-4 11l-289 747h-69l-300 -754q-18 -35 -39 -56q-9 -9 -24.5 -18.5t-26.5 -14.5l-11 -5v-50h273v50q-49 0 -78.5 21.5t-11.5 67.5l69 176h293l61 -166q13 -34 -3.5 -66.5t-55.5 -32.5v-50h312zM412 691l134 342l121 -342 h-255zM1100 150v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5z" />
+<glyph unicode="&#xe243;" d="M50 1200h1100q21 0 35.5 -14.5t14.5 -35.5v-1100q0 -21 -14.5 -35.5t-35.5 -14.5h-1100q-21 0 -35.5 14.5t-14.5 35.5v1100q0 21 14.5 35.5t35.5 14.5zM611 1118h-70q-13 0 -18 -12l-299 -753q-17 -32 -35 -51q-18 -18 -56 -34q-12 -5 -12 -18v-50q0 -8 5.5 -14t14.5 -6 h273q8 0 14 6t6 14v50q0 8 -6 14t-14 6q-55 0 -71 23q-10 14 0 39l63 163h266l57 -153q11 -31 -6 -55q-12 -17 -36 -17q-8 0 -14 -6t-6 -14v-50q0 -8 6 -14t14 -6h313q8 0 14 6t6 14v50q0 7 -5.5 13t-13.5 7q-17 0 -42 25q-25 27 -40 63h-1l-288 748q-5 12 -19 12zM639 611 h-197l103 264z" />
+<glyph unicode="&#xe244;" d="M1200 1100h-1200v100h1200v-100zM50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 1000h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM700 900v-300h300v300h-300z" />
+<glyph unicode="&#xe245;" d="M50 1200h400q21 0 35.5 -14.5t14.5 -35.5v-900q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v900q0 21 14.5 35.5t35.5 14.5zM650 700h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400 q0 21 14.5 35.5t35.5 14.5zM700 600v-300h300v300h-300zM1200 0h-1200v100h1200v-100z" />
+<glyph unicode="&#xe246;" d="M50 1000h400q21 0 35.5 -14.5t14.5 -35.5v-350h100v150q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-150h100v-100h-100v-150q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v150h-100v-350q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5v800q0 21 14.5 35.5t35.5 14.5zM700 700v-300h300v300h-300z" />
+<glyph unicode="&#xe247;" d="M100 0h-100v1200h100v-1200zM250 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM300 1000v-300h300v300h-300zM250 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe248;" d="M600 1100h150q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-100h450q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h350v100h-150q-21 0 -35.5 14.5 t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5h150v100h100v-100zM400 1000v-300h300v300h-300z" />
+<glyph unicode="&#xe249;" d="M1200 0h-100v1200h100v-1200zM550 1100h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM600 1000v-300h300v300h-300zM50 500h900q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-900q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5z" />
+<glyph unicode="&#xe250;" d="M865 565l-494 -494q-23 -23 -41 -23q-14 0 -22 13.5t-8 38.5v1000q0 25 8 38.5t22 13.5q18 0 41 -23l494 -494q14 -14 14 -35t-14 -35z" />
+<glyph unicode="&#xe251;" d="M335 635l494 494q29 29 50 20.5t21 -49.5v-1000q0 -41 -21 -49.5t-50 20.5l-494 494q-14 14 -14 35t14 35z" />
+<glyph unicode="&#xe252;" d="M100 900h1000q41 0 49.5 -21t-20.5 -50l-494 -494q-14 -14 -35 -14t-35 14l-494 494q-29 29 -20.5 50t49.5 21z" />
+<glyph unicode="&#xe253;" d="M635 865l494 -494q29 -29 20.5 -50t-49.5 -21h-1000q-41 0 -49.5 21t20.5 50l494 494q14 14 35 14t35 -14z" />
+<glyph unicode="&#xe254;" d="M700 741v-182l-692 -323v221l413 193l-413 193v221zM1200 0h-800v200h800v-200z" />
+<glyph unicode="&#xe255;" d="M1200 900h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300zM0 700h50q0 21 4 37t9.5 26.5t18 17.5t22 11t28.5 5.5t31 2t37 0.5h100v-550q0 -22 -25 -34.5t-50 -13.5l-25 -2v-100h400v100q-4 0 -11 0.5t-24 3t-30 7t-24 15t-11 24.5v550h100q25 0 37 -0.5t31 -2 t28.5 -5.5t22 -11t18 -17.5t9.5 -26.5t4 -37h50v300h-800v-300z" />
+<glyph unicode="&#xe256;" d="M800 700h-50q0 21 -4 37t-9.5 26.5t-18 17.5t-22 11t-28.5 5.5t-31 2t-37 0.5h-100v-550q0 -22 25 -34.5t50 -14.5l25 -1v-100h-400v100q4 0 11 0.5t24 3t30 7t24 15t11 24.5v550h-100q-25 0 -37 -0.5t-31 -2t-28.5 -5.5t-22 -11t-18 -17.5t-9.5 -26.5t-4 -37h-50v300 h800v-300zM1100 200h-200v-100h200v-100h-300v300h200v100h-200v100h300v-300z" />
+<glyph unicode="&#xe257;" d="M701 1098h160q16 0 21 -11t-7 -23l-464 -464l464 -464q12 -12 7 -23t-21 -11h-160q-13 0 -23 9l-471 471q-7 8 -7 18t7 18l471 471q10 9 23 9z" />
+<glyph unicode="&#xe258;" d="M339 1098h160q13 0 23 -9l471 -471q7 -8 7 -18t-7 -18l-471 -471q-10 -9 -23 -9h-160q-16 0 -21 11t7 23l464 464l-464 464q-12 12 -7 23t21 11z" />
+<glyph unicode="&#xe259;" d="M1087 882q11 -5 11 -21v-160q0 -13 -9 -23l-471 -471q-8 -7 -18 -7t-18 7l-471 471q-9 10 -9 23v160q0 16 11 21t23 -7l464 -464l464 464q12 12 23 7z" />
+<glyph unicode="&#xe260;" d="M618 993l471 -471q9 -10 9 -23v-160q0 -16 -11 -21t-23 7l-464 464l-464 -464q-12 -12 -23 -7t-11 21v160q0 13 9 23l471 471q8 7 18 7t18 -7z" />
+<glyph unicode="&#xf8ff;" d="M1000 1200q0 -124 -88 -212t-212 -88q0 124 88 212t212 88zM450 1000h100q21 0 40 -14t26 -33l79 -194q5 1 16 3q34 6 54 9.5t60 7t65.5 1t61 -10t56.5 -23t42.5 -42t29 -64t5 -92t-19.5 -121.5q-1 -7 -3 -19.5t-11 -50t-20.5 -73t-32.5 -81.5t-46.5 -83t-64 -70 t-82.5 -50q-13 -5 -42 -5t-65.5 2.5t-47.5 2.5q-14 0 -49.5 -3.5t-63 -3.5t-43.5 7q-57 25 -104.5 78.5t-75 111.5t-46.5 112t-26 90l-7 35q-15 63 -18 115t4.5 88.5t26 64t39.5 43.5t52 25.5t58.5 13t62.5 2t59.5 -4.5t55.5 -8l-147 192q-12 18 -5.5 30t27.5 12z" />
+<glyph unicode="&#x1f511;" d="M250 1200h600q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-150v-500l-255 -178q-19 -9 -32 -1t-13 29v650h-150q-21 0 -35.5 14.5t-14.5 35.5v400q0 21 14.5 35.5t35.5 14.5zM400 1100v-100h300v100h-300z" />
+<glyph unicode="&#x1f6aa;" d="M250 1200h750q39 0 69.5 -40.5t30.5 -84.5v-933l-700 -117v950l600 125h-700v-1000h-100v1025q0 23 15.5 49t34.5 26zM500 525v-100l100 20v100z" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf
new file mode 100755
index 0000000..1413fc6
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.ttf
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff
new file mode 100755
index 0000000..9e61285
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2
new file mode 100755
index 0000000..64539b5
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/fonts/glyphicons-halflings-regular.woff2
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/js/bootstrap.min.js b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/js/bootstrap.min.js
new file mode 100755
index 0000000..e79c065
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/bootstrap/js/bootstrap.min.js
@@ -0,0 +1,7 @@
+/*!
+ * Bootstrap v3.3.6 (http://getbootstrap.com)
+ * Copyright 2011-2015 Twitter, Inc.
+ * Licensed under the MIT license
+ */
+if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");
+d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.eot b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.eot
new file mode 100755
index 0000000..2fe8892
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.eot
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.svg b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.svg
new file mode 100755
index 0000000..93538d7
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.svg
@@ -0,0 +1,1832 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG font generated by IcoMoon.
+<iconset grid="16"></iconset>
+</metadata>
+<defs>
+<font id="ElegantIcons" horiz-adv-x="512" >
+<font-face units-per-em="512" ascent="480" descent="-32" />
+<missing-glyph horiz-adv-x="512" />
+<glyph class="hidden" unicode="&#xf000;" d="M0,480L 512 -32L0 -32 z" horiz-adv-x="0" />
+<glyph unicode="&#x21;" d="M 272,32C 280.832,32, 288,39.168, 288,48L 288,361.376 l 68.672-68.672c 6.24-6.24, 16.384-6.24, 22.624,0
+		c 6.24,6.24, 6.24,16.384,0,22.624l-96,96C 281.824,412.8, 280.064,413.952, 278.112,414.752c-3.904,1.632-8.32,1.632-12.224,0
+		C 263.968,413.984, 262.272,412.832, 260.8,411.392C 260.768,411.36, 260.736,411.36, 260.672,411.328l-96-96c-6.24-6.24-6.24-16.384,0-22.624
+		c 6.24-6.24, 16.384-6.24, 22.624,0L 256,361.376L 256,48 C 256,39.168, 263.168,32, 272,32z"  />
+<glyph unicode="&#x22;" d="M 272,416C 263.168,416, 256,408.832, 256,400l0-313.376 l-68.672,68.672c-6.24,6.24-16.384,6.24-22.624,0
+		c-6.24-6.24-6.24-16.384,0-22.624l 96-96c 0.032-0.032, 0.096-0.032, 0.128-0.096c 1.44-1.408, 3.168-2.592, 5.056-3.36
+		c 3.904-1.632, 8.32-1.632, 12.224,0c 1.952,0.8, 3.712,1.984, 5.184,3.456l 96,96c 6.24,6.24, 6.24,16.384,0,22.624
+		c-6.24,6.24-16.384,6.24-22.624,0L 288,86.624L 288,400 C 288,408.832, 280.832,416, 272,416z"  />
+<glyph unicode="&#x23;" d="M 64,239.936C 64,237.888, 64.448,235.84, 65.248,233.888c 0.768-1.888, 1.92-3.584, 3.328-5.024
+		C 68.608,228.8, 68.64,228.736, 68.672,228.672l 96-96c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624L 118.624,224L 432,224 
+		C 440.832,224, 448,231.168, 448,240C 448,248.832, 440.832,256, 432,256L 118.624,256 l 68.672,68.672c 6.24,6.24, 6.24,16.384,0,22.624
+		c-6.24,6.24-16.384,6.24-22.624,0l-96-96C 68.64,251.264, 68.608,251.168, 68.576,251.136C 67.168,249.696, 66.016,248, 65.248,246.112
+		C 64.416,244.16, 64,242.080, 64,240l0,0C 64,239.968, 64,239.968, 64,239.936z"  />
+<glyph unicode="&#x24;" d="M 64,240C 64,231.168, 71.168,224, 80,224l 313.376,0 l-68.672-68.672c-6.24-6.24-6.24-16.384,0-22.624
+		c 6.24-6.24, 16.384-6.24, 22.624,0l 96,96c 1.472,1.472, 2.656,3.232, 3.456,5.184C 447.552,235.84, 448,237.888, 448,239.936c0,0.032,0,0.032,0,0.064
+		l0,0c0,2.080-0.416,4.16-1.248,6.112c-0.8,1.952-1.984,3.712-3.456,5.184l-96,96c-6.24,6.24-16.384,6.24-22.624,0
+		c-6.24-6.24-6.24-16.384,0-22.624L 393.376,256L 80,256 C 71.168,256, 64,248.832, 64,240z"  />
+<glyph unicode="&#x25;" d="M 64,240C 64,231.168, 71.168,224, 80,224S 96,231.168, 96,240L 96,361.376 l 324.672-324.672c 6.24-6.24, 16.384-6.24, 22.624,0
+		c 6.24,6.24, 6.24,16.384,0,22.624L 118.624,384L 240,384 C 248.832,384, 256,391.168, 256,400C 256,408.832, 248.832,416, 240,416l-160,0 C 77.92,416, 75.84,415.584, 73.888,414.752
+		C 71.968,413.984, 70.272,412.832, 68.8,411.392C 68.768,411.36, 68.736,411.36, 68.672,411.328C 68.64,411.264, 68.608,411.168, 68.576,411.136
+		C 67.168,409.696, 66.016,408, 65.248,406.112C 64.416,404.16, 64,402.080, 64,400l0,0L 64,240 z"  />
+<glyph unicode="&#x26;" d="M 68.672,36.672c 6.24-6.24, 16.384-6.24, 22.624,0L 416,361.376L 416,240 C 416,231.168, 423.168,224, 432,224S 448,231.168, 448,240l0,160 
+		l0,0c0,2.080-0.416,4.16-1.248,6.112c-1.632,3.904-4.736,7.040-8.64,8.64C 436.16,415.584, 434.080,416, 432,416l-160,0 C 263.168,416, 256,408.832, 256,400
+		C 256,391.168, 263.168,384, 272,384l 121.376,0 L 68.672,59.328C 62.432,53.056, 62.432,42.944, 68.672,36.672z"  />
+<glyph unicode="&#x27;" d="M 432,224C 423.168,224, 416,216.832, 416,208l0-121.376 L 91.328,411.328c-6.24,6.24-16.384,6.24-22.624,0
+		c-6.24-6.24-6.24-16.384,0-22.624L 393.376,64L 272,64 C 263.168,64, 256,56.832, 256,48C 256,39.168, 263.168,32, 272,32l 160,0 
+		c 2.080,0, 4.16,0.416, 6.112,1.248c 3.904,1.632, 7.040,4.736, 8.64,8.64C 447.552,43.84, 448,45.888, 448,47.936c0,0.032,0,0.032,0,0.064l0,160 
+		C 448,216.832, 440.832,224, 432,224z"  />
+<glyph unicode="&#x28;" d="M 80,224C 71.168,224, 64,216.832, 64,208l0-160 c0-0.032,0-0.032,0-0.064c0-2.080, 0.416-4.128, 1.216-6.048
+		c 0.768-1.888, 1.92-3.584, 3.328-5.024c 0.064-0.064, 0.064-0.128, 0.128-0.192c 0.032-0.032, 0.096-0.032, 0.128-0.096
+		c 1.44-1.408, 3.168-2.592, 5.056-3.36C 75.84,32.416, 77.92,32, 80,32l 160,0 C 248.832,32, 256,39.168, 256,48C 256,56.832, 248.832,64, 240,64L 118.624,64 
+		L 443.328,388.672c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0L 96,86.624L 96,208 C 96,216.832, 88.832,224, 80,224z"  />
+<glyph unicode="&#x29;" d="M 324.672,388.672c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624l-64,64
+		C 281.824,476.8, 280.064,477.952, 278.112,478.752c-3.904,1.632-8.32,1.632-12.224,0C 263.968,477.984, 262.272,476.832, 260.8,475.392
+		C 260.768,475.36, 260.736,475.36, 260.672,475.328l-64-64c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0L 256,425.376l0-402.752 
+		l-36.672,36.672c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624l 64-64c 0.032-0.032, 0.096-0.032, 0.128-0.096
+		c 1.44-1.408, 3.168-2.592, 5.056-3.36c 3.904-1.632, 8.32-1.632, 12.224,0c 1.952,0.8, 3.712,1.984, 5.184,3.456l 64,64
+		c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0L 288,22.624L 288,425.376 L 324.672,388.672z"  />
+<glyph unicode="&#x2a;" d="M 292.48-27.488c 3.136-3.136, 7.264-4.704, 11.36-4.672c 4.128,0, 8.224,1.536, 11.36,4.672l 61.632,61.632
+		c 6.24,6.24, 6.24,16.384,0,22.624s-16.384,6.24-22.624,0L 320,22.56l0,281.28 c0,8.832-7.168,16-16,16S 288,312.672, 288,303.84l0-281.6 
+		l-36.864,36.864c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624L 292.48-27.488zM 208,127.84c 8.832,0, 16,7.168, 16,16l0,281.6 l 36.864-36.864c 6.24-6.24, 16.384-6.24, 22.624,0
+		c 6.24,6.24, 6.24,16.384,0,22.624L 219.52,475.168C 216.384,478.304, 212.288,479.84, 208.16,479.84c-4.128,0-8.224-1.536-11.36-4.672L 135.168,413.536
+		c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0L 192,425.12l0-281.28 C 192,135.008, 199.168,127.84, 208,127.84z"  />
+<glyph unicode="&#x2b;" d="M 88.928,103.008c 6.24,6.24, 6.24,16.384,0,22.624L 54.56,160L 336,160 c 8.832,0, 16,7.168, 16,16
+		C 352,184.832, 344.832,192, 336,192L 54.56,192 l 36.704,36.704c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0L 4.672,187.36
+		C 1.536,184.224,0,180.128,0,176c0-4.128, 1.536-8.224, 4.672-11.36l 61.632-61.632C 72.576,96.736, 82.688,96.736, 88.928,103.008zM 507.328,283.040l-61.632,61.632c-6.24,6.24-16.384,6.24-22.624,0s-6.24-16.384,0-22.624l 34.368-34.368L 176,287.68 
+		C 167.168,287.68, 160,280.512, 160,271.68s 7.168-16, 16-16l 281.44,0 l-36.704-36.704c-6.24-6.24-6.24-16.384,0-22.624
+		c 6.24-6.24, 16.384-6.24, 22.624,0l 63.968,63.968C 510.464,263.456, 512,267.552, 512,271.68C 512,275.808, 510.464,279.904, 507.328,283.040z"  />
+<glyph unicode="&#x2c;" d="M 510.752,214.112c-0.8,1.952-1.984,3.712-3.456,5.184l-64,64c-6.24,6.24-16.384,6.24-22.624,0
+		c-6.24-6.24-6.24-16.384,0-22.624L 457.376,224L 54.624,224 l 36.672,36.672c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0
+		l-64-64C 4.64,219.264, 4.608,219.168, 4.576,219.136C 3.168,217.696, 2.016,216, 1.248,214.112C 0.416,212.16,0,210.080,0,208l0,0
+		c0-0.032,0-0.032,0-0.064C0,205.888, 0.448,203.84, 1.248,201.888c 0.768-1.888, 1.92-3.584, 3.328-5.024C 4.608,196.8, 4.64,196.736, 4.672,196.672
+		l 64-64c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624L 54.624,192l 402.752,0 l-36.672-36.672
+		c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0l 64,64c 1.472,1.472, 2.656,3.232, 3.456,5.184
+		C 511.552,203.84, 512,205.888, 512,207.936c0,0.032,0,0.032,0,0.064l0,0C 512,210.080, 511.584,212.16, 510.752,214.112z"  />
+<glyph unicode="&#x2d;" d="M 64,240C 64,231.168, 71.168,224, 80,224S 96,231.168, 96,240L 96,361.376 L 393.376,64L 272,64 C 263.168,64, 256,56.832, 256,48
+		C 256,39.168, 263.168,32, 272,32l 160,0 c 2.080,0, 4.16,0.416, 6.112,1.248c 3.904,1.632, 7.040,4.736, 8.64,8.64C 447.552,43.84, 448,45.888, 448,47.936
+		c0,0.032,0,0.032,0,0.064l0,160 C 448,216.832, 440.832,224, 432,224S 416,216.832, 416,208l0-121.376 L 118.624,384L 240,384 C 248.832,384, 256,391.168, 256,400
+		C 256,408.832, 248.832,416, 240,416l-160,0 C 77.92,416, 75.84,415.584, 73.888,414.752C 71.968,413.984, 70.272,412.832, 68.8,411.392
+		C 68.768,411.36, 68.736,411.36, 68.672,411.328C 68.64,411.264, 68.608,411.168, 68.576,411.136C 67.168,409.696, 66.016,408, 65.248,406.112
+		C 64.416,404.16, 64,402.080, 64,400l0,0L 64,240 z"  />
+<glyph unicode="&#x2e;" d="M 80,224C 71.168,224, 64,216.832, 64,208l0-160 c0-0.032,0-0.032,0-0.064c0-2.080, 0.416-4.128, 1.216-6.048
+		c 0.768-1.888, 1.92-3.584, 3.328-5.024c 0.064-0.064, 0.064-0.128, 0.128-0.192c 0.032-0.032, 0.096-0.032, 0.128-0.096
+		c 1.44-1.408, 3.168-2.592, 5.056-3.36C 75.84,32.416, 77.92,32, 80,32l 160,0 C 248.832,32, 256,39.168, 256,48C 256,56.832, 248.832,64, 240,64L 118.624,64 
+		L 416,361.376L 416,240 C 416,231.168, 423.168,224, 432,224S 448,231.168, 448,240l0,160 l0,0c0,2.080-0.416,4.16-1.248,6.112c-1.632,3.904-4.736,7.040-8.64,8.64
+		C 436.16,415.584, 434.080,416, 432,416l-160,0 C 263.168,416, 256,408.832, 256,400C 256,391.168, 263.168,384, 272,384l 121.376,0 L 96,86.624L 96,208 C 96,216.832, 88.832,224, 80,224z"  />
+<glyph unicode="&#x2f;" d="M 475.328,443.328c-6.24,6.24-16.384,6.24-22.624,0L 320,310.624L 320,400 C 320,408.832, 312.832,416, 304,416S 288,408.832, 288,400l0-128 
+		c0-0.032,0-0.032,0-0.064C 288,269.888, 288.448,267.84, 289.248,265.888c 0.768-1.888, 1.92-3.584, 3.328-5.024C 292.608,260.8, 292.64,260.736, 292.672,260.672
+		C 292.736,260.64, 292.768,260.64, 292.8,260.608c 1.44-1.408, 3.168-2.592, 5.056-3.36C 299.84,256.416, 301.92,256, 304,256l 128,0 C 440.832,256, 448,263.168, 448,272
+		C 448,280.832, 440.832,288, 432,288l-89.376,0 l 132.672,132.672C 481.568,426.944, 481.568,437.056, 475.328,443.328zM 36.672,4.672c 6.24-6.24, 16.384-6.24, 22.624,0L 192,137.376L 192,48 C 192,39.168, 199.168,32, 208,32S 224,39.168, 224,48l0,128 
+		l0,0c0,2.080-0.416,4.16-1.248,6.112c-1.632,3.904-4.736,7.040-8.64,8.64C 212.16,191.584, 210.080,192, 208,192l-128,0 C 71.168,192, 64,184.832, 64,176
+		C 64,167.168, 71.168,160, 80,160l 89.376,0 l-132.672-132.672C 30.432,21.056, 30.432,10.944, 36.672,4.672z"  />
+<glyph unicode="&#x30;" d="M 478.752,438.112c-1.632,3.904-4.736,7.040-8.64,8.64C 468.16,447.584, 466.080,448, 464,448l-128,0 C 327.168,448, 320,440.832, 320,432
+		C 320,423.168, 327.168,416, 336,416l 89.376,0 L 292.672,283.328c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0L 448,393.376L 448,304 
+		C 448,295.168, 455.168,288, 464,288S 480,295.168, 480,304l0,128 l0,0C 480,434.080, 479.584,436.16, 478.752,438.112zM 48,160C 39.168,160, 32,152.832, 32,144l0-128 c0-0.032,0-0.032,0-0.064c0-2.080, 0.416-4.128, 1.216-6.048
+		c 0.768-1.888, 1.92-3.584, 3.328-5.024c 0.064-0.064, 0.064-0.128, 0.128-0.192c 0.032-0.032, 0.096-0.032, 0.128-0.096
+		c 1.44-1.408, 3.168-2.592, 5.056-3.36C 43.84,0.416, 45.92,0, 48,0l 128,0 C 184.832,0, 192,7.168, 192,16C 192,24.832, 184.832,32, 176,32L 86.624,32 
+		l 132.672,132.672c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0L 64,54.624L 64,144 C 64,152.832, 56.832,160, 48,160z"  />
+<glyph unicode="&#x31;" d="M 510.752,214.112c-0.8,1.952-1.984,3.712-3.456,5.184l-64,64c-6.24,6.24-16.384,6.24-22.624,0
+		c-6.24-6.24-6.24-16.384,0-22.624L 457.376,224L 288,224 L 288,393.376 l 36.672-36.672c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624
+		l-64,64C 283.264,443.36, 283.168,443.392, 283.136,443.424C 281.696,444.832, 280,445.984, 278.112,446.752C 276.16,447.584, 274.080,448, 272,448C 271.968,448, 271.968,448, 271.936,448
+		C 269.888,448, 267.84,447.552, 265.888,446.752C 264,445.984, 262.304,444.832, 260.864,443.424C 260.8,443.392, 260.736,443.36, 260.672,443.328l-64-64
+		c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0L 256,393.376L 256,224 L 86.624,224 l 36.672,36.672c 6.24,6.24, 6.24,16.384,0,22.624
+		c-6.24,6.24-16.384,6.24-22.624,0l-64-64C 36.64,219.264, 36.608,219.168, 36.576,219.136C 35.168,217.696, 34.016,216, 33.248,214.112
+		C 32.416,212.16, 32,210.080, 32,208c0-0.032,0-0.032,0-0.064C 32,205.888, 32.448,203.84, 33.248,201.888c 0.768-1.888, 1.92-3.584, 3.328-5.024
+		C 36.608,196.8, 36.64,196.736, 36.672,196.672l 64-64c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624L 86.624,192L 256,192 l0-169.376 
+		l-36.672,36.672c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624l 64-64c 1.472-1.472, 3.232-2.656, 5.184-3.456
+		C 267.84-31.552, 269.888-32, 271.936-32c 0.032,0, 0.032,0, 0.064,0c 2.080,0, 4.16,0.416, 6.112,1.248c 1.952,0.8, 3.712,1.984, 5.184,3.456l 64,64
+		c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0L 288,22.624L 288,192 l 169.376,0 l-36.672-36.672
+		c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0l 64,64c 1.472,1.472, 2.656,3.232, 3.456,5.184
+		C 511.552,203.84, 512,205.888, 512,207.936c0,0.032,0,0.032,0,0.064C 512,210.080, 511.584,212.16, 510.752,214.112z"  />
+<glyph unicode="&#x32;" d="M 179.488,156.8L 272,249.312l 92.512-92.512c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624
+		L 283.36,283.2C 280.224,286.336, 276.128,287.872, 272,287.872c-4.128,0-8.224-1.536-11.36-4.672L 156.864,179.424c-6.24-6.24-6.24-16.384,0-22.624
+		C 163.104,150.56, 173.248,150.56, 179.488,156.8z"  />
+<glyph unicode="&#x33;" d="M 364.512,259.2L 272,166.688L 179.488,259.2c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624
+		l 103.776-103.776c 3.136-3.136, 7.264-4.704, 11.36-4.672c 4.128,0, 8.224,1.536, 11.36,4.672l 103.776,103.776c 6.24,6.24, 6.24,16.384,0,22.624
+		C 380.896,265.44, 370.752,265.44, 364.512,259.2z"  />
+<glyph unicode="&#x34;" d="M 196.8,196.64l 103.776-103.776c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624L 230.688,208
+		L 323.2,300.512c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0L 196.8,219.36C 193.664,216.224, 192.128,212.128, 192.128,208
+		C 192.128,203.872, 193.664,199.776, 196.8,196.64z"  />
+<glyph unicode="&#x35;" d="M 220.8,92.864c 6.24-6.24, 16.384-6.24, 22.624,0l 103.776,103.776c 3.136,3.136, 4.704,7.264, 4.672,11.36
+		c0,4.128-1.536,8.224-4.672,11.36L 243.424,323.136c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624L 313.312,208
+		L 220.8,115.488C 214.56,109.248, 214.56,99.104, 220.8,92.864z"  />
+<glyph unicode="&#x36;" d="M 375.232,252.608L 268.192,347.296c-3.2,3.2-7.392,4.736-11.584,4.672C 252.384,352.032, 248.192,350.496, 244.992,347.296
+		L 137.952,252.608c-6.272-6.272-6.272-16.48,0-22.752c 6.272-6.272, 16.48-6.272, 22.752,0l 95.872,84.832l 95.872-84.832
+		c 6.272-6.272, 16.48-6.272, 22.752,0C 381.536,236.128, 381.536,246.304, 375.232,252.608zM 268.192,232.544c-3.2,3.2-7.392,4.736-11.584,4.672C 252.384,237.28, 248.192,235.744, 244.992,232.544l-107.040-94.688
+		c-6.272-6.272-6.272-16.48,0-22.752c 6.272-6.272, 16.48-6.272, 22.752,0l 95.872,84.8l 95.872-84.8c 6.272-6.272, 16.48-6.272, 22.752,0
+		c 6.272,6.272, 6.272,16.48,0,22.752L 268.192,232.544z"  />
+<glyph unicode="&#x37;" d="M 351.296,218.176l-95.872-84.8l-95.872,84.8c-6.272,6.272-16.48,6.272-22.752,0c-6.272-6.272-6.272-16.48,0-22.752
+		l 107.040-94.688c 3.2-3.2, 7.392-4.736, 11.584-4.672C 259.616,96, 263.808,97.504, 267.008,100.704l 107.040,94.688c 6.272,6.272, 6.272,16.48,0,22.752
+		S 357.568,224.448, 351.296,218.176zM 374.048,332.928c-6.272,6.272-16.48,6.272-22.752,0l-95.872-84.8l-95.872,84.8C 153.248,339.2, 143.040,339.2, 136.768,332.928
+		c-6.272-6.272-6.272-16.48,0-22.752l 107.040-94.688c 3.2-3.2, 7.392-4.736, 11.584-4.672c 4.192-0.064, 8.416,1.472, 11.584,4.672l 107.040,94.688
+		C 380.352,316.448, 380.352,326.624, 374.048,332.928z"  />
+<glyph unicode="&#x38;" d="M 132.704,212.992l 94.688-107.040c 6.272-6.272, 16.48-6.272, 22.752,0s 6.272,16.48,0,22.752l-84.8,95.872l 84.8,95.872
+		c 6.272,6.272, 6.272,16.48,0,22.752s-16.48,6.272-22.752,0L 132.704,236.192C 129.504,232.992, 128,228.8, 128.032,224.608
+		C 128,220.416, 129.504,216.192, 132.704,212.992zM 364.928,343.232c-6.272,6.272-16.48,6.272-22.752,0L 247.456,236.192c-3.2-3.2-4.736-7.392-4.672-11.584
+		C 242.752,220.416, 244.256,216.192, 247.456,212.992l 94.688-107.040c 6.272-6.272, 16.48-6.272, 22.752,0s 6.272,16.48,0,22.752l-84.8,95.872l 84.8,95.872
+		C 371.2,326.752, 371.2,336.96, 364.928,343.232z"  />
+<glyph unicode="&#x39;" d="M 379.296,235.008L 284.608,342.048c-6.272,6.272-16.48,6.272-22.752,0s-6.272-16.48,0-22.752l 84.8-95.872l-84.8-95.872
+		c-6.272-6.272-6.272-16.48,0-22.752s 16.48-6.272, 22.752,0l 94.688,107.040c 3.2,3.2, 4.736,7.392, 4.672,11.584
+		C 384,227.616, 382.496,231.808, 379.296,235.008zM 147.072,104.768c 6.272-6.272, 16.48-6.272, 22.752,0l 94.688,107.040c 3.2,3.2, 4.736,7.392, 4.672,11.584
+		c 0.064,4.192-1.472,8.416-4.672,11.584L 169.856,342.048c-6.272,6.272-16.48,6.272-22.752,0s-6.272-16.48,0-22.752l 84.8-95.872l-84.8-95.872
+		C 140.8,121.248, 140.8,111.040, 147.072,104.768z"  />
+<glyph unicode="&#x3a;" d="M 283.36,283.2C 280.224,286.336, 276.128,287.872, 272,287.872c-4.128,0-8.224-1.536-11.36-4.672L 156.864,179.424
+		c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0L 272,249.312l 92.512-92.512c 6.24-6.24, 16.384-6.24, 22.624,0
+		c 6.24,6.24, 6.24,16.384,0,22.624L 283.36,283.2zM 273.056,445.856c-131.968,0-238.944-106.976-238.944-238.944S 141.12-32, 273.056-32S 512,74.976, 512,206.944
+		S 405.024,445.856, 273.056,445.856z M 273.056,0c-114.112,0-206.944,92.832-206.944,206.944s 92.832,206.944, 206.944,206.944S 480,321.024, 480,206.944
+		S 387.168,0, 273.056,0z"  />
+<glyph unicode="&#x3b;" d="M 364.512,259.2L 272,166.688L 179.488,259.2c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624
+		l 103.776-103.776c 3.136-3.136, 7.264-4.704, 11.36-4.672c 4.128,0, 8.224,1.536, 11.36,4.672l 103.776,103.776c 6.24,6.24, 6.24,16.384,0,22.624
+		C 380.896,265.44, 370.752,265.44, 364.512,259.2zM 273.152,445.728c-131.904,0-238.848-106.944-238.848-238.848C 34.272,74.944, 141.216-32, 273.152-32
+		C 405.056-32, 512,74.944, 512,206.848C 512,338.784, 405.056,445.728, 273.152,445.728z M 273.152,0c-114.048,0-206.848,92.8-206.848,206.848
+		c0,114.048, 92.8,206.848, 206.848,206.848C 387.2,413.728, 480,320.928, 480,206.848C 480,92.8, 387.2,0, 273.152,0z"  />
+<glyph unicode="&#x3c;" d="M 323.2,323.136c-6.24,6.24-16.384,6.24-22.624,0L 196.8,219.36C 193.664,216.224, 192.128,212.128, 192.128,208
+		c0-4.128, 1.536-8.224, 4.672-11.36l 103.776-103.776c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624L 230.688,208
+		L 323.2,300.512C 329.44,306.752, 329.44,316.896, 323.2,323.136zM 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0z"  />
+<glyph unicode="&#x3d;" d="M 347.2,219.36L 243.424,323.136c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624L 313.312,208
+		L 220.8,115.488c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0l 103.776,103.776c 3.136,3.136, 4.704,7.264, 4.672,11.36
+		C 351.872,212.128, 350.336,216.224, 347.2,219.36zM 273.152,445.696c-131.904,0-238.848-106.944-238.848-238.848S 141.248-32, 273.152-32S 512,74.944, 512,206.848
+		S 405.056,445.696, 273.152,445.696z M 273.152,0c-114.048,0-206.848,92.8-206.848,206.848s 92.8,206.848, 206.848,206.848S 480,320.896, 480,206.848S 387.2,0, 273.152,0z"  />
+<glyph unicode="&#x3e;" d="M 284.192,331.296c-3.2,3.2-7.392,4.736-11.584,4.672C 268.384,336.032, 264.192,334.496, 260.992,331.296L 153.952,236.608
+		c-6.272-6.272-6.272-16.48,0-22.752c 6.272-6.272, 16.48-6.272, 22.752,0l 95.872,84.832l 95.872-84.832c 6.272-6.272, 16.48-6.272, 22.752,0
+		c 6.272,6.272, 6.272,16.48,0,22.752L 284.192,331.296zM 284.192,216.544c-3.2,3.2-7.392,4.736-11.584,4.672C 268.384,221.28, 264.192,219.744, 260.992,216.544l-107.040-94.688
+		c-6.272-6.272-6.272-16.48,0-22.752c 6.272-6.272, 16.48-6.272, 22.752,0l 95.872,84.8l 95.872-84.8c 6.272-6.272, 16.48-6.272, 22.752,0
+		c 6.272,6.272, 6.272,16.48,0,22.752L 284.192,216.544zM 273.152,445.696c-131.904,0-238.848-106.944-238.848-238.848S 141.248-32, 273.152-32S 512,74.944, 512,206.848
+		S 405.056,445.696, 273.152,445.696z M 273.152,0c-114.048,0-206.848,92.8-206.848,206.848s 92.8,206.848, 206.848,206.848S 480,320.896, 480,206.848S 387.2,0, 273.152,0z"  />
+<glyph unicode="&#x3f;" d="M 367.296,202.176l-95.872-84.8l-95.872,84.8c-6.272,6.272-16.48,6.272-22.752,0c-6.272-6.272-6.272-16.48,0-22.752
+		l 107.040-94.688c 3.2-3.2, 7.392-4.736, 11.584-4.672c 4.192-0.064, 8.416,1.472, 11.584,4.672l 107.040,94.688c 6.272,6.272, 6.272,16.48,0,22.752
+		S 373.568,208.448, 367.296,202.176zM 367.296,316.928l-95.872-84.8l-95.872,84.8C 169.248,323.2, 159.040,323.2, 152.768,316.928c-6.272-6.272-6.272-16.48,0-22.752
+		l 107.040-94.688c 3.2-3.2, 7.392-4.736, 11.584-4.672c 4.192-0.064, 8.416,1.472, 11.584,4.672l 107.040,94.688c 6.272,6.272, 6.272,16.48,0,22.752
+		S 373.568,323.2, 367.296,316.928zM 273.152,445.696c-131.904,0-238.848-106.944-238.848-238.848S 141.248-32, 273.152-32S 512,74.944, 512,206.848
+		S 405.056,445.696, 273.152,445.696z M 273.152,0c-114.048,0-206.848,92.8-206.848,206.848s 92.8,206.848, 206.848,206.848S 480,320.896, 480,206.848S 387.2,0, 273.152,0z"  />
+<glyph unicode="&#x40;" d="M 181.344,208.608l 84.8,95.872c 6.272,6.272, 6.272,16.48,0,22.752s-16.48,6.272-22.752,0L 148.704,220.192
+		c-3.2-3.2-4.736-7.392-4.672-11.584C 144,204.416, 145.504,200.192, 148.704,196.992l 94.688-107.040c 6.272-6.272, 16.48-6.272, 22.752,0
+		s 6.272,16.48,0,22.752L 181.344,208.608zM 380.928,327.232c-6.272,6.272-16.48,6.272-22.752,0L 263.456,220.192c-3.2-3.2-4.736-7.392-4.672-11.584
+		C 258.752,204.416, 260.256,200.192, 263.456,196.992l 94.688-107.040c 6.272-6.272, 16.48-6.272, 22.752,0s 6.272,16.48,0,22.752l-84.8,95.872l 84.8,95.872
+		C 387.2,310.752, 387.2,320.96, 380.928,327.232zM 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0z"  />
+<glyph unicode="&#x41;" d="M 395.296,219.008L 300.608,326.048c-6.272,6.272-16.48,6.272-22.752,0s-6.272-16.48,0-22.752l 84.8-95.872l-84.8-95.872
+		c-6.272-6.272-6.272-16.48,0-22.752s 16.48-6.272, 22.752,0l 94.688,107.040c 3.2,3.2, 4.736,7.392, 4.672,11.584
+		C 400,211.616, 398.496,215.808, 395.296,219.008zM 285.216,207.424c 0.064,4.192-1.472,8.416-4.672,11.584L 185.856,326.048c-6.272,6.272-16.48,6.272-22.752,0
+		s-6.272-16.48,0-22.752l 84.8-95.872l-84.8-95.872c-6.272-6.272-6.272-16.48,0-22.752s 16.48-6.272, 22.752,0l 94.688,107.040
+		C 283.744,199.008, 285.28,203.2, 285.216,207.424zM 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0z"  />
+<glyph unicode="&#x42;" d="M 143.968,160l 223.456,0 c 4.576,0, 8.64,2.208, 11.52,5.632l 0.064-0.064c 6.24,6.944, 6.24,18.208,0,25.152L 267.040,314.784
+		c-6.24,6.944-16.352,6.944-22.56,0c-0.16-0.192-0.224-0.448-0.384-0.64L 132.352,190.72c-6.24-6.944-6.24-18.208,0-25.152
+		C 132.416,165.504, 132.48,165.472, 132.544,165.408C 135.456,162.080, 139.456,160, 143.968,160z"  />
+<glyph unicode="&#x43;" d="M 266.912,165.216c 0.16,0.192, 0.224,0.448, 0.384,0.64l 111.712,123.424c 6.24,6.944, 6.24,18.208,0,25.152
+		c-0.064,0.064-0.128,0.096-0.192,0.128C 375.936,317.92, 371.904,320, 367.424,320L 143.968,320 c-4.576,0-8.64-2.208-11.552-5.632L 132.352,314.432
+		c-6.24-6.944-6.24-18.208,0-25.152l 111.968-124.064C 250.56,158.272, 260.672,158.272, 266.912,165.216z"  />
+<glyph unicode="&#x44;" d="M 289.28,347.648L 165.216,235.648c-6.944-6.24-6.944-16.352,0-22.56c 0.192-0.16, 0.448-0.224, 0.64-0.384l 123.424-111.712
+		c 6.944-6.24, 18.208-6.24, 25.152,0c 0.064,0.064, 0.064,0.128, 0.128,0.192C 317.92,104.064, 320,108.096, 320,112.576L 320,336.032 
+		c0,4.576-2.208,8.64-5.632,11.52l 0.064,0.064C 307.488,353.856, 296.224,353.856, 289.28,347.648z"  />
+<glyph unicode="&#x45;" d="M 222.304,100.384l 122.432,112.256c 6.848,6.24, 6.848,16.384,0,22.624c-0.192,0.16-0.448,0.224-0.64,0.384
+		l-121.792,112c-6.848,6.24-17.984,6.24-24.832,0C 197.44,347.584, 197.408,347.488, 197.344,347.424C 194.080,344.544, 192,340.512, 192,336l0-224 
+		c0-4.576, 2.176-8.64, 5.536-11.552l-0.064-0.064C 204.352,94.112, 215.456,94.112, 222.304,100.384z"  />
+<glyph unicode="&#x46;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 281.6,282.784c-5.44,6.944-14.304,6.944-19.744,0c-0.16-0.192-0.192-0.448-0.352-0.64L 163.776,158.72
+		c-5.44-6.944-5.44-18.208,0-25.152c 0.032-0.064, 0.128-0.064, 0.16-0.128C 166.464,130.080, 169.984,128, 173.92,128l 195.52,0 
+		c 4,0, 7.552,2.208, 10.080,5.632l 0.064-0.064c 5.44,6.944, 5.44,18.208,0,25.152L 281.6,282.784z"  />
+<glyph unicode="&#x47;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 379.744,250.592C 377.216,253.92, 373.696,256, 369.76,256l-195.52,0 C 170.24,256, 166.688,253.792, 164.16,250.368L 164.096,250.432
+		c-5.44-6.944-5.44-18.208,0-25.152l 97.984-124.064c 5.44-6.944, 14.304-6.944, 19.744,0c 0.16,0.192, 0.192,0.448, 0.352,0.64l 97.76,123.424
+		c 5.44,6.944, 5.44,18.208,0,25.152C 379.872,250.496, 379.808,250.528, 379.744,250.592z"  />
+<glyph unicode="&#x48;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 314.432,316.224c-6.944,5.44-18.208,5.44-25.152,0L 165.216,218.24c-6.944-5.44-6.944-14.304,0-19.744
+		c 0.192-0.16, 0.448-0.192, 0.64-0.352l 123.424-97.76c 6.944-5.44, 18.208-5.44, 25.152,0c 0.064,0.032, 0.064,0.128, 0.128,0.16
+		C 317.92,103.104, 320,106.624, 320,110.56l0,195.52 C 320,310.080, 317.792,313.632, 314.368,316.16L 314.432,316.224z"  />
+<glyph unicode="&#x49;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 378.144,218.464L 254.72,316.224c-6.944,5.44-18.208,5.44-25.152,0C 229.504,316.16, 229.472,316.096, 229.408,316.064
+		C 226.080,313.536, 224,310.016, 224,306.080l0-195.52 c0-4, 2.208-7.552, 5.632-10.080l-0.064-0.064c 6.944-5.44, 18.208-5.44, 25.152,0L 378.784,198.4
+		c 6.944,5.44, 6.944,14.304,0,19.744C 378.592,218.304, 378.336,218.336, 378.144,218.464z"  />
+<glyph unicode="&#x4a;" d="M 68.672,228.672l 96-96c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624L 118.624,224L 352,224 
+		c 64,0, 96-59.072, 96-112c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16C 480,182.592, 448,256, 352,256L 118.624,256 l 68.672,68.672
+		c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0l-96-96C 62.432,245.056, 62.432,234.944, 68.672,228.672z"  />
+<glyph unicode="&#x4b;" d="M 144,192l 256,0 C 408.832,192, 416,199.168, 416,208C 416,216.832, 408.832,224, 400,224l-256,0 C 135.168,224, 128,216.832, 128,208
+		C 128,199.168, 135.168,192, 144,192z"  />
+<glyph unicode="&#x4c;" d="M 144,192L 256,192 l0-112 C 256,71.168, 263.168,64, 272,64S 288,71.168, 288,80L 288,192 l 112,0 C 408.832,192, 416,199.168, 416,208
+		C 416,216.832, 408.832,224, 400,224L 288,224 L 288,336 C 288,344.832, 280.832,352, 272,352S 256,344.832, 256,336L 256,224 L 144,224 C 135.168,224, 128,216.832, 128,208C 128,199.168, 135.168,192, 144,192z"  />
+<glyph unicode="&#x4d;" d="M 160.8,96.8c 6.24-6.24, 16.384-6.24, 22.624,0L 272,185.376l 88.576-88.576c 6.24-6.24, 16.384-6.24, 22.624,0
+		c 6.24,6.24, 6.24,16.384,0,22.624L 294.624,208l 88.576,88.576c 6.24,6.24, 6.24,16.384,0,22.624c-6.24,6.24-16.384,6.24-22.624,0
+		L 272,230.624L 183.424,319.2c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624L 249.376,208l-88.576-88.576
+		C 154.56,113.184, 154.56,103.040, 160.8,96.8z"  />
+<glyph unicode="&#x4e;" d="M 220.608,70.592c 0.64-0.512, 1.024-1.216, 1.696-1.696c 0.96-0.64, 2.048-0.768, 3.072-1.216
+		c 1.216-0.576, 2.4-1.12, 3.68-1.472c 1.248-0.32, 2.464-0.48, 3.744-0.576c 1.824-0.192, 3.584-0.192, 5.376,0.064
+		c 0.736,0.128, 1.44,0.32, 2.176,0.512c 2.208,0.544, 4.256,1.408, 6.272,2.624c 0.352,0.224, 0.64,0.48, 0.992,0.704
+		c 1.312,0.896, 2.72,1.568, 3.84,2.784c 0.8,0.864, 1.152,1.984, 1.792,2.944c 0.032,0.032, 0.096,0.064, 0.096,0.096l 190.688,305.632
+		c 6.784,10.336, 3.872,24.224-6.496,31.008s-24.224,3.872-31.008-6.496l-176.128-282.272L 132.992,217.984C 123.904,226.4, 109.76,225.856, 101.344,216.768
+		C 92.96,207.68, 93.504,193.504, 102.592,185.12l 117.184-114.016C 220,70.88, 220.32,70.816, 220.608,70.592z"  />
+<glyph unicode="&#x4f;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 400,224l-256,0 C 135.168,224, 128,216.832, 128,208C 128,199.168, 135.168,192, 144,192l 256,0 C 408.832,192, 416,199.168, 416,208
+		C 416,216.832, 408.832,224, 400,224z"  />
+<glyph unicode="&#x50;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 400,224L 288,224 L 288,336 C 288,344.832, 280.832,352, 272,352S 256,344.832, 256,336L 256,224 L 144,224 C 135.168,224, 128,216.832, 128,208C 128,199.168, 135.168,192, 144,192L 256,192 
+		l0-112 C 256,71.168, 263.168,64, 272,64S 288,71.168, 288,80L 288,192 l 112,0 C 408.832,192, 416,199.168, 416,208C 416,216.832, 408.832,224, 400,224z"  />
+<glyph unicode="&#x51;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 360.576,319.2L 272.608,231.232L 193.728,319.2c-6.24,6.24-16.384,6.24-22.624,0c-6.24-6.24-6.24-16.384,0-22.624
+		l 78.912-87.968l-89.184-89.184c-6.24-6.24-6.24-16.384,0-22.624c 6.24-6.24, 16.384-6.24, 22.624,0l 87.968,87.968l 78.912-87.968
+		c 6.24-6.24, 16.384-6.24, 22.624,0s 6.24,16.384,0,22.624L 294.016,207.392l 89.184,89.184c 6.24,6.24, 6.24,16.384,0,22.624
+		C 376.96,325.44, 366.816,325.44, 360.576,319.2z"  />
+<glyph unicode="&#x52;" d="M 257.344,480c-141.376,0-256-114.624-256-256s 114.624-256, 256-256s 256,114.624, 256,256S 398.72,480, 257.344,480z M 257.344,0c-123.52,0-224,100.48-224,224
+		s 100.48,224, 224,224s 224-100.48, 224-224S 380.832,0, 257.344,0zM 369.472,325.824c-10.336,6.784-24.224,3.872-31.008-6.496L 230.432,154.24L 178.784,202.048
+		C 169.696,210.432, 155.52,209.888, 147.104,200.8S 139.264,177.568, 148.352,169.152l 71.392-66.048c 0.256-0.224, 0.576-0.288, 0.832-0.512
+		c 0.64-0.512, 1.024-1.216, 1.696-1.696c 0.96-0.64, 2.048-0.768, 3.072-1.216c 1.216-0.576, 2.4-1.12, 3.68-1.472
+		c 1.248-0.32, 2.464-0.48, 3.744-0.576c 1.824-0.192, 3.584-0.192, 5.376,0.064c 0.736,0.128, 1.44,0.32, 2.176,0.512
+		c 2.208,0.544, 4.256,1.408, 6.272,2.624c 0.352,0.224, 0.64,0.48, 0.992,0.704c 1.312,0.896, 2.72,1.568, 3.84,2.784
+		c 0.8,0.864, 1.152,1.984, 1.792,2.944c 0.032,0.032, 0.096,0.064, 0.096,0.096l 122.624,187.424C 382.72,305.152, 379.808,319.040, 369.472,325.824z"  />
+<glyph unicode="&#x53;" d="M 304,480C 189.12,480, 96,386.88, 96,272c0-49.44, 17.312-94.752, 46.112-130.464l-135.584-135.584
+		c-8.672-8.672-8.672-22.752,0-31.424c 8.672-8.672, 22.752-8.672, 31.424,0l 135.584,135.584C 209.248,81.312, 254.56,64, 304,64
+		c 114.88,0, 208,93.12, 208,208S 418.88,480, 304,480z M 304,96C 206.944,96, 128,174.944, 128,272S 206.944,448, 304,448S 480,369.056, 480,272S 401.056,96, 304,96zM 400,288l-192,0 C 199.168,288, 192,280.832, 192,272C 192,263.168, 199.168,256, 208,256l 192,0 C 408.832,256, 416,263.168, 416,272
+		C 416,280.832, 408.832,288, 400,288z"  />
+<glyph unicode="&#x54;" d="M 304,480C 189.12,480, 96,386.88, 96,272c0-49.44, 17.312-94.752, 46.112-130.464l-135.584-135.584
+		c-8.672-8.672-8.672-22.752,0-31.424c 8.672-8.672, 22.752-8.672, 31.424,0l 135.584,135.584C 209.248,81.312, 254.56,64, 304,64
+		c 114.88,0, 208,93.12, 208,208S 418.88,480, 304,480z M 304,96C 206.944,96, 128,174.944, 128,272S 206.944,448, 304,448S 480,369.056, 480,272S 401.056,96, 304,96zM 400,288L 320,288 L 320,368 C 320,376.832, 312.832,384, 304,384C 295.168,384, 288,376.832, 288,368L 288,288 L 208,288 C 199.168,288, 192,280.832, 192,272
+		C 192,263.168, 199.168,256, 208,256L 288,256 l0-80 C 288,167.168, 295.168,160, 304,160C 312.832,160, 320,167.168, 320,176L 320,256 l 80,0 C 408.832,256, 416,263.168, 416,272
+		C 416,280.832, 408.832,288, 400,288z"  />
+<glyph unicode="&#x55;" d="M 304,480C 189.12,480, 96,386.88, 96,272c0-49.44, 17.344-94.816, 46.144-130.528l-137.472-137.472c-8.64-8.64-8.64-22.688,0-31.328
+		c 8.64-8.64, 22.688-8.64, 31.328,0l 137.472,137.472C 209.184,81.344, 254.56,64, 304,64c 114.88,0, 208,93.12, 208,208S 418.88,480, 304,480z M 304,96
+		C 206.944,96, 128,174.944, 128,272S 206.944,448, 304,448S 480,369.056, 480,272S 401.056,96, 304,96z"  />
+<glyph unicode="&#x56;" d="M 416,416L 96,416 C 78.336,416, 64,401.664, 64,384l0-320 c0-17.664, 14.336-32, 32-32l 320,0 c 17.664,0, 32,14.336, 32,32L 448,384 C 448,401.664, 433.664,416, 416,416z
+		 M 416,64L 96,64 L 96,384 l 320,0 L 416,64 z"  />
+<glyph unicode="&#x57;" d="M 416,416L 96,416 C 78.336,416, 64,401.664, 64,384l0-320 c0-17.664, 14.336-32, 32-32l 320,0 c 17.664,0, 32,14.336, 32,32L 448,384 C 448,401.664, 433.664,416, 416,416z
+		 M 416,64L 96,64 L 96,384 l 320,0 L 416,64 zM 192,128l 128,0 c 17.664,0, 32,14.336, 32,32L 352,288 c0,17.664-14.336,32-32,32L 192,320 C 174.336,320, 160,305.664, 160,288l0-128 C 160,142.336, 174.336,128, 192,128z"  />
+<glyph unicode="&#x58;" d="M 128,320l0-224 c0-17.664, 14.336-32, 32-32l 224,0 c 17.664,0, 32,14.336, 32,32L 416,320 c0,17.664-14.336,32-32,32L 160,352 C 142.336,352, 128,337.664, 128,320z M 384,96L 160,96 
+		L 160,320 l 224,0 L 384,96 zM 208,192l 128,0 C 344.832,192, 352,199.168, 352,208C 352,216.832, 344.832,224, 336,224l-128,0 C 199.168,224, 192,216.832, 192,208
+		C 192,199.168, 199.168,192, 208,192z"  />
+<glyph unicode="&#x59;" d="M 128,320l0-224 c0-17.664, 14.336-32, 32-32l 224,0 c 17.664,0, 32,14.336, 32,32L 416,320 c0,17.664-14.336,32-32,32L 160,352 C 142.336,352, 128,337.664, 128,320z M 384,96L 160,96 
+		L 160,320 l 224,0 L 384,96 zM 208,192L 256,192 l0-48 C 256,135.168, 263.168,128, 272,128S 288,135.168, 288,144L 288,192 l 48,0 C 344.832,192, 352,199.168, 352,208
+		C 352,216.832, 344.832,224, 336,224L 288,224 L 288,272 C 288,280.832, 280.832,288, 272,288S 256,280.832, 256,272L 256,224 L 208,224 C 199.168,224, 192,216.832, 192,208C 192,199.168, 199.168,192, 208,192z"  />
+<glyph unicode="&#x5a;" d="M 416,64L 96,64 L 96,384 l 236.032,0 L 352,416L 96,416 C 78.336,416, 64,401.664, 64,384l0-320 c0-17.664, 14.336-32, 32-32l 320,0 c 17.664,0, 32,14.336, 32,32L 448,275.296 L 416,224L 416,64 
+		zM 469.856,444.352C 466.080,446.816, 461.824,448, 457.632,448c-7.296,0-14.464-3.584-18.752-10.144L 264.928,186.912l-67.296,76.8
+		C 188.512,272.128, 174.368,271.584, 165.952,262.496S 158.112,239.232, 167.2,230.848l 80.896-92.32c 0.512-0.832, 1.312-1.472, 1.952-2.24l 2.048-2.336
+		c 0.256-0.224, 0.576-0.288, 0.832-0.512c 0.64-0.512, 1.024-1.216, 1.696-1.696c 1.376-0.896, 2.88-1.472, 4.384-2.016
+		c 0.352-0.128, 0.64-0.352, 0.992-0.448c 2.24-0.736, 4.576-1.184, 6.88-1.184c 0.096,0, 0.192,0.064, 0.288,0.064
+		c 6.080-0.032, 12.128,2.208, 16.576,7.008c 0.832,0.896, 1.152,1.984, 1.824,2.976c 0.032,0.032, 0.064,0.064, 0.096,0.096l 190.688,275.104
+		C 483.104,423.68, 480.224,437.568, 469.856,444.352z"  />
+<glyph unicode="&#x5b;" d="M 256,416C 149.952,416, 64,330.048, 64,224s 85.952-192, 192-192s 192,85.952, 192,192S 362.048,416, 256,416z M 256,64c-88.224,0-160,71.776-160,160s 71.776,160, 160,160
+		s 160-71.776, 160-160S 344.224,64, 256,64z"  />
+<glyph unicode="&#x5c;" d="M 256,416C 149.952,416, 64,330.048, 64,224s 85.952-192, 192-192s 192,85.952, 192,192S 362.048,416, 256,416z M 256,64c-88.224,0-160,71.776-160,160s 71.776,160, 160,160
+		s 160-71.776, 160-160S 344.224,64, 256,64zM 160,224A96,96 1260 1 1 352,224A96,96 1260 1 1 160,224z"  />
+<glyph unicode="&#x5d;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 320,320L 192,320 C 174.336,320, 160,305.664, 160,288l0-128 c0-17.664, 14.336-32, 32-32l 128,0 c 17.664,0, 32,14.336, 32,32L 352,288 C 352,305.664, 337.664,320, 320,320z"  />
+<glyph unicode="&#x5e;" d="M 320,128c 17.664,0, 32,14.336, 32,32L 352,288 c0,17.664-14.336,32-32,32L 192,320 C 174.336,320, 160,305.664, 160,288l0-128 c0-17.664, 14.336-32, 32-32L 320,128 z"  />
+<glyph unicode="&#x5f;" d="M 256-32c 141.376,0, 256,114.624, 256,256s-114.624,256-256,256S0,365.376,0,224S 114.624-32, 256-32z M 256,448c 123.52,0, 224-100.48, 224-224s-100.48-224-224-224
+		s-224,100.48-224,224S 132.48,448, 256,448zM 192,128c 17.664,0, 32,14.336, 32,32L 224,288 c0,17.664-14.336,32-32,32S 160,305.664, 160,288l0-128 C 160,142.336, 174.336,128, 192,128zM 320,128c 17.664,0, 32,14.336, 32,32L 352,288 c0,17.664-14.336,32-32,32S 288,305.664, 288,288l0-128 C 288,142.336, 302.336,128, 320,128z"  />
+<glyph unicode="&#x60;" d="M 192,320C 174.336,320, 160,305.664, 160,288l0-128 c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32L 224,288 C 224,305.664, 209.664,320, 192,320zM 288,160c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32L 352,288 c0,17.664-14.336,32-32,32S 288,305.664, 288,288L 288,160 z"  />
+<glyph unicode="&#x61;" d="M 112,224l 288,0 C 408.832,224, 416,231.168, 416,240C 416,248.832, 408.832,256, 400,256l-288,0 C 103.168,256, 96,248.832, 96,240
+		C 96,231.168, 103.168,224, 112,224zM 112,320l 288,0 C 408.832,320, 416,327.168, 416,336C 416,344.832, 408.832,352, 400,352l-288,0 C 103.168,352, 96,344.832, 96,336
+		C 96,327.168, 103.168,320, 112,320zM 112,128l 288,0 c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16l-288,0 C 103.168,160, 96,152.832, 96,144
+		C 96,135.168, 103.168,128, 112,128z"  />
+<glyph unicode="&#x62;" d="M 480,448L 64,448 C 46.336,448, 32,433.664, 32,416l0-416 c0-17.664, 14.336-32, 32-32l 416,0 c 17.664,0, 32,14.336, 32,32L 512,416 C 512,433.664, 497.664,448, 480,448z
+		 M 480,0L 64,0 L 64,416 l 416,0 L 480,0 zM 144,192l 256,0 C 408.832,192, 416,199.168, 416,208C 416,216.832, 408.832,224, 400,224l-256,0 C 135.168,224, 128,216.832, 128,208
+		C 128,199.168, 135.168,192, 144,192zM 144,288l 256,0 C 408.832,288, 416,295.168, 416,304C 416,312.832, 408.832,320, 400,320l-256,0 C 135.168,320, 128,312.832, 128,304
+		C 128,295.168, 135.168,288, 144,288zM 144,96l 256,0 c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16l-256,0 C 135.168,128, 128,120.832, 128,112
+		C 128,103.168, 135.168,96, 144,96z"  />
+<glyph unicode="&#x63;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 400,224l-256,0 C 135.168,224, 128,216.832, 128,208C 128,199.168, 135.168,192, 144,192l 256,0 C 408.832,192, 416,199.168, 416,208
+		C 416,216.832, 408.832,224, 400,224zM 400,320l-256,0 C 135.168,320, 128,312.832, 128,304C 128,295.168, 135.168,288, 144,288l 256,0 C 408.832,288, 416,295.168, 416,304
+		C 416,312.832, 408.832,320, 400,320zM 400,128l-256,0 C 135.168,128, 128,120.832, 128,112C 128,103.168, 135.168,96, 144,96l 256,0 c 8.832,0, 16,7.168, 16,16
+		C 416,120.832, 408.832,128, 400,128z"  />
+<glyph unicode="&#x64;" d="M 176,224l 256,0 C 440.832,224, 448,231.168, 448,240C 448,248.832, 440.832,256, 432,256l-256,0 C 167.168,256, 160,248.832, 160,240
+		C 160,231.168, 167.168,224, 176,224zM 176,352l 256,0 C 440.832,352, 448,359.168, 448,368C 448,376.832, 440.832,384, 432,384l-256,0 C 167.168,384, 160,376.832, 160,368
+		C 160,359.168, 167.168,352, 176,352zM 176,96l 256,0 c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16l-256,0 C 167.168,128, 160,120.832, 160,112
+		C 160,103.168, 167.168,96, 176,96zM 64,368A16,16 1260 1 1 96,368A16,16 1260 1 1 64,368zM 64,240A16,16 1260 1 1 96,240A16,16 1260 1 1 64,240zM 64,112A16,16 1260 1 1 96,112A16,16 1260 1 1 64,112z"  />
+<glyph unicode="&#x65;" d="M 432,256l-256,0 C 167.168,256, 160,248.832, 160,240C 160,231.168, 167.168,224, 176,224l 256,0 C 440.832,224, 448,231.168, 448,240
+		C 448,248.832, 440.832,256, 432,256zM 432,384l-256,0 C 167.168,384, 160,376.832, 160,368C 160,359.168, 167.168,352, 176,352l 256,0 C 440.832,352, 448,359.168, 448,368
+		C 448,376.832, 440.832,384, 432,384zM 432,128l-256,0 C 167.168,128, 160,120.832, 160,112C 160,103.168, 167.168,96, 176,96l 256,0 c 8.832,0, 16,7.168, 16,16
+		C 448,120.832, 440.832,128, 432,128zM 111.36,328.544L 111.36,407.456L 102.24,407.456L 84.992,398.24L 87.072,390.112L 100.8,397.504L 101.024,397.504L 101.024,328.544 	
+		zM 85.984,215.232L 77.632,207.104l0-6.56 L 128,200.544 L 128,209.408 L 92.544,209.408 L 92.544,209.632 l 6.304,5.824c 16.64,16.032, 27.2,27.808, 27.2,42.368
+		c0,11.296-7.168,22.944-24.16,22.944c-9.12,0-16.864-3.392-22.336-8.032l 3.392-7.52c 3.648,3.040, 9.6,6.688, 16.768,6.688
+		c 11.776,0, 15.648-7.392, 15.648-15.424C 115.264,244.608, 106.144,234.4, 85.984,215.232zM 99.104,81.152c-7.392,0-14.432,3.040-17.472,4.96l-2.912-8.256c 3.872-2.56, 11.648-5.344, 20.512-5.344
+		c 18.944,0, 28.768,11.040, 28.768,23.68c0,11.040-7.904,18.336-17.6,20.288l0,0.224 c 9.728,3.52, 14.56,10.432, 14.56,18.592
+		c0,9.6-7.040,18.816-22.592,18.816c-8.512,0-16.512-3.040-20.64-6.080l 2.784-7.776c 3.392,2.432, 9.472,5.216, 15.776,5.216
+		c 9.824,0, 13.856-5.6, 13.856-11.904c0-9.344-9.824-13.344-17.6-13.344L 90.592,120.224 l0-8 l 5.952,0 c 10.336,0, 20.288-4.736, 20.384-15.776
+		C 117.088,89.888, 112.832,81.152, 99.104,81.152z"  />
+<glyph unicode="&#x66;" d="M 432,384L 384,384 c0,17.664-14.336,32-32,32l-32,0 C 302.336,416, 288,401.664, 288,384L 80,384 C 71.168,384, 64,376.832, 64,368C 64,359.168, 71.168,352, 80,352L 288,352 
+		c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l 48,0 C 440.832,352, 448,359.168, 448,368C 448,376.832, 440.832,384, 432,384z M 352,352l-32,0 L 320,384 l 32,0 L 352,352 zM 432,256L 224,256 c0,17.664-14.336,32-32,32L 160,288 C 142.336,288, 128,273.664, 128,256L 80,256 C 71.168,256, 64,248.832, 64,240C 64,231.168, 71.168,224, 80,224L 128,224 
+		c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l 208,0 C 440.832,224, 448,231.168, 448,240C 448,248.832, 440.832,256, 432,256z M 192,224L 160,224 L 160,256 l 32,0 L 192,224 zM 432,128L 320,128 c0,17.664-14.336,32-32,32L 256,160 c-17.664,0-32-14.336-32-32L 80,128 C 71.168,128, 64,120.832, 64,112
+		C 64,103.168, 71.168,96, 80,96L 224,96 c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l 112,0 c 8.832,0, 16,7.168, 16,16
+		C 448,120.832, 440.832,128, 432,128z M 288,96L 256,96 l0,32 l 32,0 L 288,96 z"  />
+<glyph unicode="&#x67;" d="M 160,352L 160,400 C 160,408.832, 152.832,416, 144,416S 128,408.832, 128,400L 128,352 C 110.336,352, 96,337.664, 96,320l0-32 c0-17.664, 14.336-32, 32-32l0-208 
+		C 128,39.168, 135.168,32, 144,32S 160,39.168, 160,48L 160,256 c 17.664,0, 32,14.336, 32,32L 192,320 C 192,337.664, 177.664,352, 160,352z M 128,320l 32,0 l0-32 L 128,288 L 128,320 zM 288,192L 288,400 C 288,408.832, 280.832,416, 272,416S 256,408.832, 256,400L 256,192 c-17.664,0-32-14.336-32-32l0-32 c0-17.664, 14.336-32, 32-32l0-48 
+		C 256,39.168, 263.168,32, 272,32S 288,39.168, 288,48L 288,96 c 17.664,0, 32,14.336, 32,32l0,32 C 320,177.664, 305.664,192, 288,192z M 256,160l 32,0 l0-32 L 256,128 L 256,160 zM 416,288L 416,400 C 416,408.832, 408.832,416, 400,416S 384,408.832, 384,400L 384,288 c-17.664,0-32-14.336-32-32l0-32 c0-17.664, 14.336-32, 32-32l0-144 
+		c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 416,192 c 17.664,0, 32,14.336, 32,32L 448,256 C 448,273.664, 433.664,288, 416,288z M 384,256l 32,0 l0-32 l-32,0 L 384,256 z"  />
+<glyph unicode="&#x68;" d="M 64-32l 384,0 c 17.664,0, 32,14.336, 32,32L 480,448 c0,17.664-14.336,32-32,32L 64,480 C 46.336,480, 32,465.664, 32,448l0-448 C 32-17.664, 46.336-32, 64-32z
+		 M 64,448l 384,0 l0-448 L 64,0 L 64,448 zM 368,384l-128,0 C 231.168,384, 224,376.832, 224,368C 224,359.168, 231.168,352, 240,352l 128,0 C 376.832,352, 384,359.168, 384,368
+		C 384,376.832, 376.832,384, 368,384zM 368,288l-224,0 C 135.168,288, 128,280.832, 128,272C 128,263.168, 135.168,256, 144,256l 224,0 C 376.832,256, 384,263.168, 384,272
+		C 384,280.832, 376.832,288, 368,288zM 368,192l-224,0 C 135.168,192, 128,184.832, 128,176C 128,167.168, 135.168,160, 144,160l 224,0 c 8.832,0, 16,7.168, 16,16
+		C 384,184.832, 376.832,192, 368,192zM 368,96l-224,0 C 135.168,96, 128,88.832, 128,80C 128,71.168, 135.168,64, 144,64l 224,0 c 8.832,0, 16,7.168, 16,16
+		C 384,88.832, 376.832,96, 368,96z"  />
+<glyph unicode="&#x69;" d="M 64,32l 32,0 l0-32 c0-17.664, 14.336-32, 32-32l 320,0 c 17.664,0, 32,14.336, 32,32L 480,384 c0,17.664-14.336,32-32,32l-32,0 L 416,448 c0,17.664-14.336,32-32,32L 64,480 
+		C 46.336,480, 32,465.664, 32,448l0-384 C 32,46.336, 46.336,32, 64,32z M 384,64L 64,64 L 64,448 l 320,0 L 384,64 z M 448,384l0-384 L 128,0 l0,32 l 256,0 c 17.664,0, 32,14.336, 32,32L 416,384 L 448,384 zM 160,368C 160,359.168, 167.168,352, 176,352l 160,0 C 344.832,352, 352,359.168, 352,368C 352,376.832, 344.832,384, 336,384l-160,0 
+		C 167.168,384, 160,376.832, 160,368zM 112,256l 224,0 C 344.832,256, 352,263.168, 352,272C 352,280.832, 344.832,288, 336,288l-224,0 C 103.168,288, 96,280.832, 96,272
+		C 96,263.168, 103.168,256, 112,256zM 112,192l 224,0 C 344.832,192, 352,199.168, 352,208C 352,216.832, 344.832,224, 336,224l-224,0 C 103.168,224, 96,216.832, 96,208
+		C 96,199.168, 103.168,192, 112,192zM 112,128l 224,0 c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16l-224,0 C 103.168,160, 96,152.832, 96,144
+		C 96,135.168, 103.168,128, 112,128z"  />
+<glyph unicode="&#x6a;" d="M 481.952-1.952L 448.32,99.552L 176.8,371.072L 160,354.272L 108.928,303.2L 380.448,31.68 	zM 63.68,348.448L 131.552,416.32l-33.6,33.6c-18.752,18.752-49.12,18.752-67.872,0c-18.752-18.72-18.752-49.152,0-67.872
+		L 63.68,348.448z"  />
+<glyph unicode="&#x6b;" d="M 329.92,92.512L 416,64L 387.488,150.080L 223.008,314.56L 165.44,256.992 	zM 131.552,290.88L 189.12,348.448L 146.752,390.816c-15.904,15.904-41.664,15.904-57.568,0c-15.904-15.904-15.904-41.664,0-57.568
+		L 131.552,290.88zM 480,480L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,448 C 512,465.664, 497.664,480, 480,480z
+		 M 480,0L 32,0 L 32,448 l 448,0 L 480,0 z"  />
+<glyph unicode="&#x6c;" d="M 338.752,141.248L 310.24,227.328L 145.76,391.808L 88.192,334.24L 252.672,169.76 	zM 11.936,468.064c-15.904-15.904-15.904-41.664,0-57.568l 42.368-42.368l 57.568,57.568L 69.504,468.064
+		C 53.6,483.968, 27.84,483.968, 11.936,468.064zM 480,384L 253.152,384 l 32-32L 480,352 l0-352 L 128,0 L 128,194.848 l-32,32L 96,0 c0-17.664, 14.336-32, 32-32l 352,0 c 17.664,0, 32,14.336, 32,32L 512,352 
+		C 512,369.664, 497.664,384, 480,384z"  />
+<glyph unicode="&#x6d;" d="M 480,384l-144.512,0 C 317.824,384, 297.504,375.008, 288,352c0,0-4.16-29.344-32-32L 32,320 C 14.336,320,0,306.176,0,288.512L0,0 
+		c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,256 L 512,288.512 L 512,352 C 512,369.664, 497.664,384, 480,384z M 480,288.512L 480,256 l0-256 L 32,0 L 32,288 l 224,0 
+		c 1.024,0, 2.016,0.064, 3.040,0.16C 289.056,291.008, 307.616,312, 316.192,333.6C 324.512,354.496, 339.008,352, 339.008,352L 480,352 L 480,288.512 z"  />
+<glyph unicode="&#x6e;" d="M 512,320.512L 512,384 c0,17.664-14.336,32-32,32l-160,0 C 302.336,416, 288,401.664, 288,384c0,0-4.16-29.344-32-32L 32,352 C 14.336,352,0,338.176,0,320.512L0,288 
+		l 512,0 L 512,320.512 zM 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,256 L0,256 l0-256 C0-17.664, 14.336-32, 32-32z M 32,224l 448,0 l0-224 L 32,0 L 32,224 z"  />
+<glyph unicode="&#x6f;" d="M 480,384l-112.512,0 C 349.824,384, 329.504,375.008, 320,352c0,0-4.16-29.344-32-32L 64,320 C 46.336,320, 32,306.176, 32,288.512L 32,0 
+		c0-17.664, 14.336-32, 32-32l 416,0 c 17.664,0, 32,14.336, 32,32L 512,256 L 512,288.512 L 512,352 C 512,369.664, 497.664,384, 480,384z M 480,288.512L 480,256 l0-256 L 64,0 L 64,288 l 224,0 
+		c 1.024,0, 2.016,0.064, 3.040,0.16c 30.016,2.848, 48.576,23.872, 57.152,45.472C 356.512,354.496, 371.008,352, 371.008,352L 480,352 L 480,288.512 zM 352,160L 288,160 L 288,224 c0,8.832-7.168,16-16,16S 256,232.832, 256,224l0-64 L 192,160 c-8.832,0-16-7.168-16-16
+		C 176,135.168, 183.168,128, 192,128l 64,0 l0-64 c0-8.832, 7.168-16, 16-16S 288,55.168, 288,64l0,64 l 64,0 c 8.832,0, 16,7.168, 16,16
+		C 368,152.832, 360.832,160, 352,160z"  />
+<glyph unicode="&#x70;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 256,288C 238.336,288, 224,273.664, 224,256l0-160 c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32L 288,256 C 288,273.664, 273.664,288, 256,288zM 224,351.488A32,32 1260 1 1 288,351.488A32,32 1260 1 1 224,351.488z"  />
+<glyph unicode="&#x71;" d="M 371.424,470.624C 365.408,476.64, 357.28,480, 348.768,480L 163.232,480 c-8.48,0-16.64-3.36-22.624-9.376l-131.2-131.232
+		C 3.36,333.408,0,325.28,0,316.768l0-185.568 c0-8.48, 3.36-16.64, 9.376-22.624l 131.2-131.232C 146.592-28.64, 154.72-32, 163.232-32l 185.568,0 
+		c 8.48,0, 16.64,3.36, 22.624,9.376l 131.2,131.232C 508.64,114.592, 512,122.72, 512,131.232L 512,316.768 c0,8.48-3.36,16.64-9.376,22.624L 371.424,470.624z
+		 M 480,131.232L 348.768,0L 163.232,0 L 32,131.232L 32,316.768 L 163.232,448l 185.568,0 L 480,316.768L 480,131.232 zM 256,384C 238.336,384, 224,369.664, 224,352l0-160 c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32L 288,352 C 288,369.664, 273.664,384, 256,384zM 224,96A32,32 1260 1 1 288,96A32,32 1260 1 1 224,96z"  />
+<glyph unicode="&#x72;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 256,384C 238.336,384, 224,369.664, 224,352l0-160 c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32L 288,352 C 288,369.664, 273.664,384, 256,384zM 224,96.512A32,32 1260 1 1 288,96.512A32,32 1260 1 1 224,96.512z"  />
+<glyph unicode="&#x73;" d="M 506.24,15.072l-222.016,416C 278.688,441.472, 267.84,448, 256.032,448L 256,448 C 244.192,448, 233.376,441.504, 227.808,431.104l-223.008-416
+		c-5.312-9.92-5.024-21.888, 0.736-31.552C 11.328-26.080, 21.76-32, 32.992-32l 444.992,0 c 11.232,0, 21.664,5.888, 27.456,15.552
+		C 511.232-6.816, 511.52,5.152, 506.24,15.072z M 32.992,0L 256,416l 222.016-416L 32.992,0 zM 224,255.488l0-96 c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32l0,96 c0,17.664-14.336,32-32,32S 224,273.184, 224,255.488zM 224,64A32,32 1260 1 1 288,64A32,32 1260 1 1 224,64z"  />
+<glyph unicode="&#x74;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 220.384,63.552A32.96,32.96 1260 1 1 286.304,63.55200000000002A32.96,32.96 1260 1 1 220.384,63.55200000000002zM 253.344,416c-62.048,0-128-45.088-128-128.672c0-17.664, 14.304-32, 32-32s 32,14.336, 32,32c0,44.448, 33.184,64.672, 64,64.672
+		c 23.904,0, 64-7.008, 64-54.016c0-16.672-4.384-36.128-36.768-53.984C 258.56,231.936, 221.344,200.608, 221.344,160c0-17.664, 14.304-32, 32-32s 32,14.336, 32,32
+		c0,5.952, 12.672,20.576, 26.080,27.968c 46.368,25.536, 69.92,62.56, 69.92,110.016C 381.344,379.52, 317.056,416, 253.344,416z"  />
+<glyph unicode="&#x75;" d="M 220.384,63.552A32.96,32.96 1260 1 1 286.304,63.55200000000002A32.96,32.96 1260 1 1 220.384,63.55200000000002zM 311.424,187.968c 46.368,25.536, 69.92,62.56, 69.92,110.016c0,81.504-64.288,118.016-128,118.016c-62.048,0-128-45.088-128-128.672
+		c0-17.664, 14.304-32, 32-32s 32,14.336, 32,32c0,44.448, 33.184,64.672, 64,64.672c 23.904,0, 64-7.008, 64-54.016c0-16.672-4.384-36.128-36.768-53.984
+		C 258.56,231.936, 221.344,200.608, 221.344,160c0-17.664, 14.304-32, 32-32s 32,14.336, 32,32C 285.344,165.952, 297.984,180.576, 311.424,187.968z"  />
+<glyph unicode="&#x76;" d="M 30.368,9.888c 2.624-5.632, 8.288-9.216, 14.496-9.216c 45.92,0, 84.768,11.168, 128.896,37.184
+		C 195.168,34.464, 237.44,30.272, 256,30.272c 140.096,0, 254.048,93.536, 254.048,208.544S 396.096,447.328, 256,447.328S 1.952,353.824, 1.952,238.816
+		c0-54.208, 26.144-106.592, 72.16-145.408c-10.432-23.68-24.352-46.016-41.504-66.464C 28.64,22.144, 27.744,15.488, 30.368,9.888z M 33.952,238.816
+		c0,97.344, 99.616,176.544, 222.048,176.544s 222.048-79.2, 222.048-176.544S 378.432,62.272, 256,62.272c-18.368,0-66.176,4.928-82.336,8.064
+		c-3.904,0.704-7.968-0.032-11.36-2.048C 132.48,50.048, 106.464,39.616, 78.624,35.2c 12,18.176, 21.984,37.376, 29.76,57.376
+		c 2.592,6.688, 0.48,14.24-5.248,18.56C 58.496,144.928, 33.952,190.304, 33.952,238.816z"  />
+<glyph unicode="&#x77;" d="M 446.56,291.36c 2.816-12.672, 4.448-25.696, 4.448-39.072c0-103.296-87.68-189.408-203.136-207.904
+		c 24.416-9.856, 51.776-15.616, 80.928-15.616c 27.488,0, 53.44,5.056, 76.864,13.856c 29.664-10.112, 62.048-12.736, 88.832-12.736
+		c-13.92,16.704-23.584,33.088-30.496,47.488C 493.696,103.872, 512,138.976, 512,177.632C 512,223.328, 486.496,264.064, 446.56,291.36zM 23.552,73.312c 2.784-5.28, 8.256-8.576, 14.176-8.576c 0.256,0, 0.544,0, 0.768,0.032
+		c 16.928,0.8, 50.592,12.032, 86.24,34.656c 19.072-3.36, 61.792-9.696, 76.704-9.696c 112.544,0, 200.672,78.368, 200.672,178.432
+		c0,98.4-89.984,178.432-200.672,178.432S 0.832,366.592, 0.832,268.192c0-45.792, 20.16-90.048, 55.648-123.168c-7.968-19.392-18.528-37.728-31.424-54.528
+		C 21.248,85.568, 20.672,78.848, 23.552,73.312z M 32.832,268.192c0,80.736, 75.648,146.432, 168.672,146.432s 168.672-65.696, 168.672-146.432
+		c0-83.456-72.512-146.432-168.672-146.432c-12.64,0-62.944,7.328-76.768,10.24c-4.224,0.832-8.608,0.064-12.128-2.336
+		c-13.728-9.088-26.656-15.968-37.92-21.024c 6.112,11.488, 11.392,23.392, 15.808,35.68c 2.272,6.368, 0.32,13.472-4.864,17.76
+		C 51.584,190.080, 32.832,227.776, 32.832,268.192z"  />
+<glyph unicode="&#x78;" d="M 32,91.936l 73.312,0 c 5.792-5.76, 139.232-118.080, 139.232-118.080C 251.488-30.368, 257.536-32, 262.816-32
+		c 0.8,0, 1.6,0.032, 2.368,0.096c 11.84,1.12, 20.288,11.040, 22.816,21.504L 288,458.368 C 285.504,468.864, 277.024,478.784, 265.184,479.904
+		C 264.416,479.968, 263.648,480, 262.816,480C 257.536,480, 251.488,478.368, 244.544,474.176c0,0-133.44-116.416-139.232-122.176L 32,352 C 14.336,352,0,337.664,0,320l0-4.064 L0,128 l0-4.064 
+		C0,106.24, 14.336,91.936, 32,91.936z M 32,128L 32,315.936 L 32,320 l 73.312,0 c 8.192,0, 16.384,3.424, 22.304,9.056C 133.44,334.592, 205.76,397.856, 256,441.696l0-435.68 
+		c-49.92,42.048-122.24,103.136-128.128,108.576c-5.984,5.984-14.112,9.312-22.592,9.312L 32,123.904 L 32,128 zM 506.272,306.848c-7.616,7.616-20,7.616-27.616,0l-55.232-55.232l-55.232,55.232
+		c-7.616,7.616-20,7.616-27.616,0c-7.616-7.616-7.616-20,0-27.616L 395.808,224l-55.232-55.232c-7.616-7.616-7.616-20,0-27.616
+		c 7.616-7.616, 20-7.616, 27.616,0l 55.232,55.232l 55.232-55.232c 7.616-7.616, 20-7.616, 27.616,0c 7.616,7.616, 7.616,20,0,27.616
+		L 451.040,224l 55.232,55.232C 513.92,286.848, 513.92,299.232, 506.272,306.848z"  />
+<glyph unicode="&#x79;" d="M 326.816,480c-5.28,0-11.328-1.632-18.272-5.824c0,0-133.44-116.416-139.232-122.176L 96,352 C 78.336,352, 64,337.664, 64,320l0-4.064 L 64,128 
+		l0-4.064 c0-17.664, 14.336-32, 32-32l 73.312,0 c 5.792-5.76, 139.232-118.080, 139.232-118.080C 315.488-30.368, 321.536-32, 326.816-32
+		c 0.8,0, 1.6,0.032, 2.368,0.096c 11.84,1.12, 20.288,11.040, 22.816,21.504L 352,458.368 c-2.496,10.496-10.976,20.416-22.816,21.504
+		C 328.416,479.968, 327.648,480, 326.816,480z M 320,6.016c-49.92,42.048-122.24,103.136-128.128,108.576c-5.984,5.984-14.112,9.312-22.592,9.312L 96,123.904 L 96,128 L 96,315.936 
+		L 96,320 l 73.312,0 c 8.192,0, 16.384,3.424, 22.304,9.056C 197.44,334.592, 269.76,397.856, 320,441.696L 320,6.016 zM 401.312,168.096c-7.904-4-11.072-13.6-7.104-21.504c 2.816-5.568, 8.448-8.8, 14.272-8.8
+		c 2.432,0, 4.864,0.544, 7.2,1.696C 448.032,155.808, 468.128,188.16, 468.128,224s-20.096,68.192-52.448,84.512
+		c-7.904,4-17.504,0.8-21.472-7.104c-3.968-7.904-0.8-17.504, 7.104-21.504C 422.784,269.088, 436.128,247.68, 436.128,224
+		S 422.784,178.912, 401.312,168.096z"  />
+<glyph unicode="&#x7a;" d="M 32,91.936l 73.312,0 c 5.792-5.76, 139.232-118.080, 139.232-118.080C 251.488-30.368, 257.536-32, 262.816-32
+		c 0.8,0, 1.6,0.032, 2.368,0.096c 11.84,1.12, 20.288,11.040, 22.816,21.504L 288,458.368 C 285.504,468.864, 277.024,478.784, 265.184,479.904
+		C 264.416,479.968, 263.648,480, 262.816,480C 257.536,480, 251.488,478.368, 244.544,474.176c0,0-133.44-116.416-139.232-122.176L 32,352 C 14.336,352,0,337.664,0,320l0-4.064 L0,128 l0-4.064 
+		C0,106.24, 14.336,91.936, 32,91.936z M 32,128L 32,315.936 L 32,320 l 73.312,0 c 8.192,0, 16.384,3.424, 22.304,9.056C 133.44,334.592, 205.76,397.856, 256,441.696l0-435.68 
+		c-49.92,42.048-122.24,103.136-128.128,108.576c-5.984,5.984-14.112,9.312-22.592,9.312L 32,123.904 L 32,128 zM 337.312,168.096c-7.904-4-11.072-13.6-7.104-21.504c 2.816-5.568, 8.448-8.8, 14.272-8.8
+		c 2.432,0, 4.864,0.544, 7.2,1.696C 384.032,155.808, 404.128,188.16, 404.128,224s-20.096,68.192-52.448,84.512
+		c-7.904,4-17.504,0.8-21.472-7.104c-3.968-7.904-0.8-17.504, 7.104-21.504C 358.784,269.088, 372.128,247.68, 372.128,224
+		S 358.784,178.912, 337.312,168.096zM 315.296,40.352c 1.504-7.648, 8.192-12.928, 15.68-12.928c 1.024,0, 2.048,0.096, 3.104,0.288
+		C 427.904,46.016, 496,128.576, 496,224s-68.096,177.984-161.952,196.288C 325.536,422.016, 316.96,416.32, 315.296,407.648
+		C 313.6,398.976, 319.264,390.56, 327.936,388.864C 406.784,373.504, 464,304.16, 464,224s-57.216-149.504-136.064-164.864
+		C 319.264,57.44, 313.6,49.024, 315.296,40.352z"  />
+<glyph unicode="&#x7b;" d="M 127.968,270.112c0-27.040, 21.12-48.96, 47.136-48.96c 8.352,0, 16.064,2.432, 22.88,6.4
+		c-2.336-26.176-15.52-64.352-63.84-103.264c-6.752-5.472-8-15.584-2.752-22.592c 3.072-4.096, 7.648-6.24, 12.256-6.24
+		c 3.328,0, 6.656,1.088, 9.504,3.392c 59.296,47.84, 74.112,96.992, 76.096,129.824C 232.64,270.656, 219.904,292.736, 208.256,304.256
+		C 207.2,305.376, 206.208,306.592, 205.024,307.584C 202.24,309.952, 199.744,311.616, 197.568,312.864C 197.472,312.928, 197.408,313.024, 197.312,313.056
+		c-0.16,0.096-0.32,0.128-0.48,0.192C 193.664,315.008, 191.392,315.84, 191.392,315.84l 0.16-0.384C 186.4,317.568, 180.992,319.072, 175.104,319.072
+		C 149.056,319.072, 127.968,297.152, 127.968,270.112zM 283.104,270.112c0-27.040, 21.088-48.96, 47.136-48.96c 8.352,0, 16.064,2.432, 22.88,6.4
+		c-2.336-26.176-15.52-64.352-63.84-103.264c-6.784-5.472-8-15.584-2.752-22.592c 3.072-4.096, 7.648-6.24, 12.256-6.24
+		c 3.328,0, 6.656,1.088, 9.504,3.392c 59.296,47.84, 74.112,96.992, 76.096,129.824c 3.392,41.984-9.376,64.064-20.992,75.584
+		c-1.088,1.12-2.080,2.336-3.264,3.328c-2.784,2.368-5.28,4.032-7.456,5.28c-0.096,0.064-0.16,0.128-0.256,0.192
+		c-0.16,0.096-0.32,0.128-0.48,0.192c-3.168,1.728-5.44,2.592-5.44,2.592l 0.16-0.384c-5.152,2.112-10.592,3.616-16.448,3.616
+		C 304.192,319.072, 283.104,297.152, 283.104,270.112z"  />
+<glyph unicode="&#x7c;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 205.024,307.584C 202.24,309.952, 199.744,311.616, 197.568,312.864C 197.472,312.928, 197.408,313.024, 197.312,313.056
+		c-0.16,0.096-0.32,0.128-0.48,0.192C 193.664,315.008, 191.392,315.84, 191.392,315.84l 0.16-0.384C 186.4,317.568, 180.992,319.072, 175.104,319.072
+		c-26.048,0-47.136-21.92-47.136-48.96c0-27.040, 21.12-48.96, 47.136-48.96c 8.352,0, 16.064,2.432, 22.88,6.4
+		c-2.336-26.176-15.52-64.352-63.84-103.264c-6.752-5.472-8-15.584-2.752-22.592c 3.072-4.096, 7.648-6.24, 12.256-6.24
+		c 3.328,0, 6.656,1.088, 9.504,3.392c 59.296,47.84, 74.112,96.992, 76.096,129.824C 232.64,270.656, 219.904,292.736, 208.256,304.256
+		C 207.2,305.376, 206.208,306.592, 205.024,307.584zM 360.16,307.584c-2.784,2.368-5.28,4.032-7.456,5.28c-0.096,0.064-0.16,0.128-0.256,0.192
+		c-0.16,0.096-0.32,0.128-0.48,0.192c-3.168,1.728-5.44,2.592-5.44,2.592l 0.16-0.384c-5.152,2.112-10.592,3.616-16.448,3.616
+		c-26.048,0-47.136-21.92-47.136-48.96c0-27.040, 21.088-48.96, 47.136-48.96c 8.352,0, 16.064,2.432, 22.88,6.4
+		c-2.336-26.176-15.52-64.352-63.84-103.264c-6.784-5.472-8-15.584-2.752-22.592c 3.072-4.096, 7.648-6.24, 12.256-6.24
+		c 3.328,0, 6.656,1.088, 9.504,3.392c 59.296,47.84, 74.112,96.992, 76.096,129.824c 3.392,41.984-9.376,64.064-20.992,75.584
+		C 362.336,305.376, 361.344,306.592, 360.16,307.584z"  />
+<glyph unicode="&#x7d;" d="M 273.056,445.856c-61.152,0-122.304-23.328-168.96-69.984c-93.312-93.312-93.312-244.608,0-337.888
+		C 150.784-8.672, 211.904-32, 273.056-32s 122.304,23.328, 168.96,69.984c 93.312,93.312, 93.312,244.608,0,337.888C 395.36,422.528, 334.208,445.856, 273.056,445.856z
+		 M 419.392,60.608C 380.32,21.536, 328.352,0, 273.056,0c-55.264,0-107.232,21.536-146.336,60.608c-39.072,39.072-60.608,91.040-60.608,146.336
+		s 21.536,107.232, 60.608,146.336c 39.072,39.072, 91.040,60.608, 146.336,60.608c 55.264,0, 107.232-21.536, 146.336-60.608S 480,262.208, 480,206.944
+		S 458.464,99.68, 419.392,60.608zM 368,224L 288,224 L 288,336.224 c0,8.832-7.168,16-16,16S 256,345.056, 256,336.224l0-128.128 c0,0,0-0.032,0-0.032L 256,208
+		C 256,199.168, 263.168,192, 272,192l 96,0 C 376.832,192, 384,199.168, 384,208C 384,216.832, 376.832,224, 368,224z"  />
+<glyph unicode="&#x7e;" d="M 256,480C 167.648,480, 96,407.264, 96,317.536L 96,288 L 64,288 C 46.336,288, 32,273.664, 32,256l0-256 c0-17.664, 14.336-32, 32-32l 384,0 c 17.664,0, 32,14.336, 32,32L 480,256 
+		c0,17.664-14.336,32-32,32l-32,0 L 416,317.536 C 416,407.264, 344.352,480, 256,480z M 128,317.536C 128,389.472, 185.408,448, 256,448s 128-58.528, 128-130.464L 384,288 L 128,288 L 128,317.536 z M 448,0L 64,0 L 64,256 l 384,0 L 448,0 z
+		M 320,128c0,35.36-28.64,64-64,64s-64-28.64-64-64s 28.64-64, 64-64S 320,92.64, 320,128z M 256,96c-17.632,0-32,14.368-32,32
+		s 14.368,32, 32,32s 32-14.368, 32-32S 273.632,96, 256,96z"  />
+<glyph unicode="&#xe000;" d="M 480,0L 480,256 c0,17.664-14.336,32-32,32L 127.84,288 L 128,301.568C 128,387.776, 181.248,448, 257.536,448c 55.84,0, 105.6-32.096, 129.888-83.776
+		c 3.744-8, 13.248-11.424, 21.28-7.648c 8,3.744, 11.424,13.28, 7.648,21.28C 386.752,440.832, 325.92,480, 257.536,480C 163.936,480, 96,404.96, 96,301.76
+		L 95.84,288L 64,288 C 46.336,288, 32,273.664, 32,256l0-256 c0-17.664, 14.336-32, 32-32l 384,0 C 465.664-32, 480-17.664, 480,0z M 64,256l 384,0 l0-256 L 64,0 L 64,256 zM 256,192c-35.36,0-64-28.64-64-64s 28.64-64, 64-64s 64,28.64, 64,64S 291.36,192, 256,192z M 256,96c-17.632,0-32,14.368-32,32s 14.368,32, 32,32
+		s 32-14.368, 32-32S 273.632,96, 256,96z"  />
+<glyph unicode="&#xe001;" d="M 176,80c0,9.504-2.048,18.688-6.080,27.232C 159.424,129.568, 136.672,144, 112,144c-35.296,0-64-28.704-64-64
+		c0-6.304, 1.184-12.256, 2.88-18.016c 10.72-17.664, 25.44-32.384, 43.104-43.104c 5.76-1.696, 11.712-2.88, 18.016-2.88
+		C 147.296,16, 176,44.704, 176,80z M 112,112c 12.352,0, 23.712-7.232, 28.992-18.4C 142.976,89.344, 144,84.768, 144,80
+		c0-17.632-14.368-32-32-32s-32,14.368-32,32S 94.368,112, 112,112zM 496,480l-69.248,0 c-3.776,0-7.424-1.344-10.336-3.776L 189.856,284.896C 179.424,286.976, 169.6,288, 160,288c-88.224,0-160-71.776-160-160
+		s 71.776-160, 160-160s 160,71.776, 160,160c0,16.832-2.688,33.472-8,49.6l 48.704,31.648c 4.544,2.944, 7.296,8, 7.296,13.408L 368,280.8 l 60.832,3.2
+		c 7.936,0.416, 14.336,6.592, 15.072,14.496l 5.824,61.632l 53.152,25.408C 508.48,388.224, 512,393.856, 512,400l0,64 C 512,472.832, 504.832,480, 496,480z
+		 M 480,410.080l-52.224-24.96c-5.056-2.432-8.512-7.328-9.024-12.928l-5.376-56.928L 351.168,312C 342.656,311.52, 336,304.512, 336,296l0-64.64 
+		L 283.776,197.408C 277.28,193.184, 274.72,184.896, 277.76,177.76C 284.576,161.728, 288,144.992, 288,128c0-70.592-57.408-128-128-128c-24.224,0-46.656,7.136-66.016,18.88
+		c-17.664,10.72-32.384,25.44-43.104,43.104C 39.136,81.344, 32,103.776, 32,128c0,70.592, 57.408,128, 128,128c 9.44,0, 19.36-1.312, 30.336-3.968
+		c 4.96-1.216, 10.208,0, 14.112,3.328L 432.608,448L 480,448 L 480,410.080 z"  />
+<glyph unicode="&#xe002;" d="M 416,224c-1.12,0-2.176-0.288-3.264-0.32C 414.88,234.112, 416,244.928, 416,256c0,88.352-71.648,160-160,160S 96,344.352, 96,256
+		c0-0.544, 0.16-1.056, 0.16-1.6C 41.888,246.656,0,200.416,0,144c0-56.384, 41.792-102.56, 96-110.4L 96,32 l 320,0 c 53.024,0, 96,42.976, 96,96S 469.024,224, 416,224z
+		 M 416,64L 106.048,64 c-1.76,0.576-3.584,1.024-5.472,1.28C 61.472,70.912, 32,104.768, 32,144c0,39.296, 29.536,73.12, 68.672,78.72
+		c 15.904,2.272, 27.648,15.968, 27.488,32c0,0.96-0.064,1.92-0.16,2.848C 128.864,327.456, 185.952,384, 256,384c 70.592,0, 128-57.408, 128-128
+		c0-8.704-0.896-17.408-2.624-25.888c-1.984-9.6, 0.576-19.584, 6.912-27.072c 6.080-7.2, 15.040-11.328, 24.448-11.328
+		c 0.384,0, 0.736,0, 1.12,0.032C 414.56,191.712, 416.064,191.84, 417.312,192C 452,191.296, 480,162.848, 480,128C 480,92.704, 451.296,64, 416,64z"  />
+<glyph unicode="&#xe003;" d="M 416.832,224.032c-1.376,0-2.72,0-4.032-0.032C 414.912,234.528, 416,245.28, 416,256c0,88.224-71.776,160-160,160
+		C 167.84,416, 96,344.928, 95.904,257.632c0-0.032, 0.256-3.232, 0.256-3.232l0,0 C 41.344,246.56,0,199.104,0,144c0-55.872, 40.256-103.936, 96-112l 80,0 
+		C 184.832,32, 192,39.168, 192,48S 184.832,64, 176,64l-77.664-0.16C 61.152,69.312, 32,104.544, 32,144c0,39.296, 29.504,73.12, 68.672,78.72l 13.76,1.984
+		c 7.872,1.12, 13.728,7.872, 13.728,15.84L 127.904,257.568C 128,327.296, 185.44,384, 256,384c 70.592,0, 128-57.408, 128-128c0-8.672-0.864-17.408-2.624-25.888
+		l-4.224-20.352c-1.056-5.088, 0.448-10.336, 3.968-14.144c 3.52-3.776, 8.576-5.728, 13.824-4.928c 0.352,0.032, 10.368,1.344, 21.888,1.344
+		C 451.68,192.032, 480,163.328, 480,128c0-35.296-28.704-64-64-64L 304,64 c-44.8,0-47.84,26.848-48,32L 256,202.176 l 37.856-37.824
+		c 6.24-6.24, 16.384-6.24, 22.624,0c 6.24,6.24, 6.24,16.384,0,22.624L 252.096,251.328C 248.96,254.464, 244.832,256, 240.704,256
+		C 240.448,256, 240.256,256.128, 240,256.128c-4.608,0-8.672-1.984-11.584-5.088L 163.968,186.656c-6.24-6.24-6.24-16.384,0-22.624
+		c 6.24-6.24, 16.384-6.24, 22.624,0L 224,201.408L 224,96 c0-22.112, 16.704-64, 80-64L 416,32 c 52.928,0, 96,43.072, 96,96S 469.312,224.032, 416.832,224.032z"  />
+<glyph unicode="&#xe004;" d="M 418.656,224c 29.888,68.64, 11.456,112.288-3.552,133.312c-22.784,31.904-64.288,49.408-100.736,42.4
+		C 251.008,387.616, 224,344.672, 224,256l0-74.048 L 186.944,219.008c-6.24,6.24-16.384,6.24-22.624,0s-6.24-16.384,0-22.624l 64.384-64.352
+		c 3.232-3.232, 7.488-4.704, 11.712-4.608c 4.224-0.096, 8.48,1.376, 11.712,4.608l 64.704,64.672c 6.24,6.24, 6.24,16.384,0,22.624
+		s-16.384,6.24-22.624,0L 256,181.152L 256,256 c0,92.288, 31.776,106.048, 64.32,112.288c 20.896,3.84, 51.136-4.928, 68.704-29.568
+		c 21.504-30.048, 17.376-74.624-11.616-125.44c-3.072-5.408-2.752-12.096, 0.832-17.152s 9.888-7.616, 15.872-6.528
+		c 3.872,0.672, 15.424,2.432, 22.72,2.432C 451.68,192.032, 480,163.328, 480,128c0-35.296-28.704-64-64-64l-317.664-0.192C 61.152,69.312, 32,104.544, 32,144
+		c0,39.296, 29.504,73.12, 68.672,78.72l 13.76,1.984c 7.872,1.12, 13.728,7.872, 13.728,15.84L 127.904,257.568C 128,314.88, 163.328,361.984, 212,369.568
+		C 220.704,370.944, 226.688,379.104, 225.344,387.84C 223.968,396.576, 216,402.496, 207.040,401.184C 142.72,391.168, 96,330.784, 95.904,257.632
+		c0-0.032, 0.256-3.232, 0.256-3.232l0,0 C 41.344,246.56,0,199.104,0,144c0-55.872, 40.256-103.936, 96-112l 320,0 c 52.928,0, 96,43.072, 96,96
+		C 512,180.352, 470.272,223.040, 418.656,224z"  />
+<glyph unicode="&#xe005;" d="M 275.648,292.992A44.512,44.512 1260 1 1 364.672,292.99199999999996A44.512,44.512 1260 1 1 275.648,292.99199999999996zM 416,32L 448,32L 448,64L 448,128L 448,224L 320,128L 160,256L 64,160L 64,128L 64,64L 64,32L 96,32 	zM 480,416L 32,416 C 14.336,416,0,401.664,0,384l0-384 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,384 C 512,401.664, 497.664,416, 480,416z
+		 M 480,0L 32,0 L 32,384 l 448,0 L 480,0 z"  />
+<glyph unicode="&#xe006;" d="M 480,384l-32,0 L 448,448 c0,17.664-14.336,32-32,32L 32,480 C 14.336,480,0,465.664,0,448l0-352 c0-17.664, 14.336-32, 32-32l 32,0 l0-64 c0-17.664, 14.336-32, 32-32l 384,0 
+		c 17.664,0, 32,14.336, 32,32L 512,352 C 512,369.664, 497.664,384, 480,384z M 32,96L 32,448 l 384,0 l0-352 L 32,96 z M 480,0L 96,0 l0,64 l 32,0 l0-32 l 32,0 l 256,0 l 32,0 l0,32 l0,32 L 448,192 L 448,352 l 32,0 L 480,0 zM 236.64,348.992A44.512,44.512 1260 1 1 325.664,348.99199999999996A44.512,44.512 1260 1 1 236.64,348.99199999999996zM 160,320L 64,256L 64,192L 64,160L 64,128L 96,128L 352,128L 384,128L 384,160L 384,192L 384,288L 256,224 	z"  />
+<glyph unicode="&#xe007;" d="M 256,480C 150.144,480, 64,393.856, 64,288c0-61.888, 30.080-120.32, 80.512-156.32c 0.768-0.544, 1.568-1.056, 2.368-1.536
+		c 11.712-6.88, 12.864-29.056, 12.608-33.12c-0.032-0.672-0.064-1.344-0.064-1.984L 159.424,32 c0-12.032, 6.72-23.008, 17.44-28.48l 64.576-32.992
+		c 4.576-2.336, 9.568-3.52, 14.56-3.52c 4.96,0, 9.888,1.152, 14.432,3.424l 65.344,32.992c 10.784,5.44, 17.568,16.48, 17.568,28.576l0,62.656 
+		c0,31.584, 19.296,42.016, 19.488,42.112c 2.56,1.184, 4.928,2.72, 7.072,4.544C 423.168,177.92, 448,231.36, 448,288C 448,393.856, 361.856,480, 256,480z
+		 M 191.424,95.008c0,0,0,0.64, 0.032,0.992l 129.984,0 c0-0.48-0.128-0.832-0.128-1.344c0-12.576,0-22.528,0-30.656L 191.424,64 L 191.424,95.008 z M 256-0.992
+		L 191.456,32l 129.888,0 L 256-0.992z M 359.232,165.76c0,0-21.44-10.080-32.064-37.76L 186.304,128 c-3.968,11.072-10.848,22.464-23.2,29.728
+		C 122.496,186.72, 96,234.272, 96,288c0,88.352, 71.648,160, 160,160s 160-71.648, 160-160C 416,238.976, 393.952,195.104, 359.232,165.76zM 272,416C 263.168,416, 256,408.832, 256,400S 263.168,384, 272,384C 308,384, 352,351.264, 352,302.496c0-8.832, 7.168-16, 16-16
+		s 16,7.168, 16,16C 384,375.488, 327.008,416, 272,416z"  />
+<glyph unicode="&#xe008;" d="M 480,352L 288.672,352 L 224,352 L 32,352 C 14.336,352,0,337.664,0,320l0-96 l 32,0 l0-224 c0-17.664, 14.336-32, 32-32l 160,0 l 64.672,0 L 448-32 c 17.664,0, 32,14.336, 32,32L 480,224 l 32,0 L 512,320 
+		C 512,337.664, 497.664,352, 480,352z M 32,320l 192,0 l0-64 L 32,256 L 32,320 z M 64,0L 64,224 l 160,0 l0-224 L 64,0 z M 448,0L 288.672,0 L 288.672,224 L 448,224 L 448,0 z M 480,256L 288.672,256 L 288.672,320 L 480,320 L 480,256 zM 256,384c0,0.064-0.032,0.192-0.032,0.256l 0.096,0 C 256.032,384.192, 256,384.064, 256,384c0,0, 83.808,0, 128,0
+		c 44.192,0, 64,21.504, 64,48S 428.192,480, 384,480c-41.376,0-73.952-18.624-96-40.224C 278.336,445.504, 267.168,448.992, 255.072,448.992
+		c-11.584,0-22.304-3.264-31.712-8.576C 201.344,461.76, 168.96,480, 128,480C 83.808,480, 64,458.496, 64,432S 83.808,384, 128,384C 172.192,384, 256,384, 256,384z M 416,432
+		C 416,418.784, 398.592,416, 384,416L 311.328,416 C 311.072,416.448, 310.848,416.928, 310.592,417.344C 326.848,433.152, 351.488,448, 384,448C 398.592,448, 416,445.216, 416,432z M 96,432
+		C 96,445.216, 113.408,448, 128,448c 31.808,0, 55.936-14.24, 72.192-29.504C 199.68,417.696, 199.296,416.832, 198.816,416L 128,416 C 113.408,416, 96,418.784, 96,432z"  />
+<glyph unicode="&#xe009;" d="M 25.984,195.488L 64,225.888L 64,0 c0-17.664, 14.336-32, 32-32l 96,0 c 17.664,0, 32,14.336, 32,32l0,128 l 64,0 l0-128 c0-17.664, 14.336-32, 32-32l 96,0 
+		c 17.664,0, 32,14.336, 32,32L 448,225.888 l 38.016-30.4C 488.96,193.152, 492.48,192, 496,192c 4.704,0, 9.344,2.048, 12.512,6.016
+		c 5.504,6.912, 4.384,16.96-2.496,22.496l-240,192c-5.856,4.672-14.144,4.672-20,0L 160,343.712L 160,384 c0,17.664-14.336,32-32,32S 96,401.664, 96,384l0-91.488 
+		l-89.984-72c-6.88-5.536-8-15.584-2.496-22.496C 9.024,191.104, 19.072,189.984, 25.984,195.488z M 256,379.52l 160-128L 416,0 l-96,0 l0,160 L 192,160 l0-160 L 96,0 L 96,251.488 L 256,379.52z
+		"  />
+<glyph unicode="&#xe00a;" d="M 40.704,85.504c 7.68-11.936, 23.808-26.144, 57.088-26.144c 20.928,0, 47.712,6.112, 77.536,16.768
+		C 188.224,19.296, 211.936-32, 256-32c 44.8,0, 68.608,53.056, 81.344,111.072c 29.888-10.112, 56.768-15.936, 77.792-15.936c 35.2,0, 51.712,14.976, 59.392,27.52
+		c 24.832,40.704-13.92,92.384-60.704,135.104c 8.64,8.32, 16.768,16.64, 23.904,24.736c 40.448,46.048, 51.744,83.712, 33.568,112
+		c-7.68,11.936-23.808,26.144-57.088,26.144l0,0 c-20.928,0-47.712-6.112-77.536-16.768C 323.776,428.704, 300.064,480, 256,480C 211.2,480, 187.392,426.944, 174.656,368.928
+		C 144.768,379.072, 117.888,384.864, 96.864,384.864l0,0 c-35.2,0-51.744-14.976-59.392-27.52C 12.64,316.64, 51.392,264.96, 98.176,222.24
+		c-8.64-8.352-16.768-16.64-23.904-24.736C 33.824,151.456, 22.528,113.76, 40.704,85.504z M 256,0c-20.704,0-39.072,34.592-50.784,88
+		c 16.832,7.264, 34.24,15.744, 52.064,25.44c 17.088-8.768, 33.792-16.416, 49.984-23.072C 295.616,35.616, 277.024,0, 256,0z M 192,224
+		c0,11.744, 0.352,23.2, 0.832,34.464c 9.216,6.528, 18.656,12.992, 28.544,19.36C 232.736,285.12, 243.968,291.84, 255.104,298.24
+		c 11.296-6.144, 22.688-12.576, 34.208-19.584c 10.304-6.304, 20.192-12.736, 29.792-19.2C 319.648,247.872, 320,236.096, 320,224
+		c0-11.744-0.352-23.2-0.832-34.464C 309.952,183.008, 300.512,176.544, 290.624,170.176C 279.264,162.88, 268.032,156.16, 256.896,149.76
+		c-11.296,6.144-22.688,12.576-34.208,19.584c-10.304,6.304-20.192,12.736-29.792,19.2C 192.352,200.128, 192,211.904, 192,224z M 160.16,211.968
+		C 155.456,215.552, 150.848,219.136, 146.432,222.688C 150.848,226.432, 155.424,230.176, 160.096,233.92C 160.032,229.632, 160,226.016, 160,224
+		C 160,221.664, 160.064,217.248, 160.16,211.968z M 195.744,299.072C 196.672,308.16, 197.76,316.96, 199.008,325.472C 206.304,322.368, 213.76,318.944, 221.376,315.36
+		c-5.76-3.52-11.52-6.88-17.312-10.592C 201.184,302.88, 198.592,300.928, 195.744,299.072z M 288.48,316.16c 8.256,4.16, 16.32,8.032, 24.224,11.584
+		C 314.048,318.688, 315.2,309.248, 316.192,299.552c-4.448,2.848-8.192,5.184-10.176,6.4C 300.16,309.536, 294.304,312.768, 288.48,316.16z M 351.84,236.032
+		c 4.704-3.584, 9.312-7.168, 13.728-10.72c-4.416-3.744-8.992-7.456-13.696-11.232C 351.968,218.368, 352,221.984, 352,224
+		C 352,226.336, 351.936,230.752, 351.84,236.032z M 316.256,148.928c-0.928-9.088-1.984-17.92-3.232-26.4c-7.296,3.104-14.784,6.528-22.368,10.112
+		c 5.76,3.52, 11.52,6.88, 17.312,10.592C 310.816,145.12, 313.408,147.072, 316.256,148.928z M 205.984,142.048c 5.856-3.584, 11.68-6.816, 17.536-10.208
+		c-8.256-4.16-16.32-8.032-24.224-11.584c-1.344,9.024-2.496,18.464-3.488,28.192C 200.256,145.632, 204,143.264, 205.984,142.048z
+		 M 447.2,107.328c-5.056-8.256-16.256-12.192-32.064-12.192c-18.464,0-43.392,5.632-71.808,15.616c 3.392,21.952, 5.504,43.392, 6.752,61.696
+		c 14.304,10.56, 27.52,21.248, 40.032,32C 435.264,163.456, 458.752,126.24, 447.2,107.328z M 414.208,356.64c 14.656,0, 25.184-3.68, 30.176-11.456
+		c 12-18.656-10.656-56.448-54.88-98.528c-13.76,11.2-27.328,21.44-39.552,30.112c-1.312,18.88-3.488,40.896-7.104,63.392
+		C 371.232,350.688, 396.032,356.64, 414.208,356.64z M 256,448c 20.704,0, 39.072-34.592, 50.784-88c-16.832-7.264-34.24-15.744-52.064-25.44
+		C 237.6,343.328, 220.896,351.008, 204.736,357.632C 216.384,412.384, 234.976,448, 256,448z M 64.8,340.672c 5.056,8.256, 16.256,12.192, 32.064,12.192
+		c 18.464,0, 43.392-5.632, 71.808-15.616C 165.248,315.296, 163.168,293.888, 161.92,275.552c-14.304-10.56-27.52-21.248-40.032-32
+		C 76.736,284.544, 53.248,321.76, 64.8,340.672z M 162.016,171.264c 1.312-18.88, 3.488-40.896, 7.104-63.392c-28.352-10.528-53.152-16.48-71.328-16.48
+		c-14.656,0-25.184,3.68-30.176,11.456c-12,18.656, 10.656,56.448, 54.88,98.528C 136.224,190.176, 149.792,179.904, 162.016,171.264z"  />
+<glyph unicode="&#xe00b;" d="M 384-32c 17.664,0, 32,14.336, 32,32L 416,448 c0,17.664-14.336,32-32,32L 160,480 C 142.336,480, 128,465.664, 128,448l0-448 c0-17.664, 14.336-32, 32-32L 384-32 z
+		 M 256,17.984c0,9.952, 8.064,17.984, 17.984,17.984s 17.984-8.064, 17.984-17.984S 283.936,0, 273.984,0S 256,8.064, 256,17.984z M 336,448
+		C 344.832,448, 352,440.832, 352,432C 352,423.168, 344.832,416, 336,416l-32,0 C 295.168,416, 288,423.168, 288,432C 288,440.832, 295.168,448, 304,448L 336,448 z M 256,432
+		C 256,423.168, 248.832,416, 240,416S 224,423.168, 224,432C 224,440.832, 231.168,448, 240,448S 256,440.832, 256,432z M 160,384l 224,0 l0-320 L 160,64 L 160,384 z"  />
+<glyph unicode="&#xe00c;" d="M 416-32c 17.664,0, 32,14.336, 32,32L 448,448 c0,17.664-14.336,32-32,32L 96,480 C 78.336,480, 64,465.664, 64,448l0-448 c0-17.664, 14.336-32, 32-32L 416-32 z
+		 M 256-17.984c-9.952,0-17.984,8.064-17.984,17.984S 246.048,17.984, 256,17.984S 273.984,9.952, 273.984,0S 265.952-17.984, 256-17.984z M 128,416l 256,0 l0-384 L 128,32 L 128,416 z"  />
+<glyph unicode="&#xe00d;" d="M 495.488,96L 480,96 L 480,384 c0,17.664-14.336,32-32,32L 64,416 C 46.336,416, 32,401.664, 32,384l0-288 L 16.512,96 C 7.392,96,0,88.832,0,80
+		C0,71.168, 7.392,64, 16.512,64L 64,64 l 384,0 l 47.488,0 C 504.608,64, 512,71.168, 512,80C 512,88.832, 504.608,96, 495.488,96z M 448,384l0-254.656 L 64,129.344 L 64,384 L 448,384 z"  />
+<glyph unicode="&#xe00e;" d="M 480,448L 32,448 C 14.336,448,0,433.664,0,416l0-288 c0-17.664, 14.336-32, 32-32l 159.968,0 c-0.064-23.136-0.992-53.184-9.76-64L 175.744,32 
+		C 167.040,32, 160,24.832, 160,16C 160,7.168, 167.040,0, 175.744,0l 160.48,0 C 344.96,0, 352,7.168, 352,16c0,8.832-7.040,16-15.744,16l-6.464,0 
+		c-8.8,10.816-9.696,40.864-9.76,64L 480,96 c 17.664,0, 32,14.336, 32,32L 512,416 C 512,433.664, 497.664,448, 480,448z M 224,96l-0.032-0.064
+		C 223.968,95.968, 223.968,95.968, 224,96L 224,96z M 288.032,95.936L 288,96l 0.032,0 C 288.032,95.968, 288.032,95.968, 288.032,95.936z M 480,160L 32,160 L 32,416 l 448,0 L 480,160 z"  />
+<glyph unicode="&#xe00f;" d="M 480,320l-64,0 c0,0-18.496,0-32,32c-6.88,16.288-14.336,32-32,32L 224,384 C 206.336,384, 198.656,368.384, 192,352C 179.008,320, 160,320, 160,320L 128,320 
+		c0,17.664-14.336,32-32,32L 64,352 C 46.336,352, 32,337.664, 32,320C 14.336,320,0,305.664,0,288l0-256 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,164 L 512,192 L 512,288 
+		C 512,305.664, 497.664,320, 480,320z M 480,32L 32,32 l0,128 l 145.6,0 c 7.84-54.208, 54.016-96, 110.4-96c 57.76,0, 104.736,43.872, 110.784,100L 480,164 L 480,32 z M 208,176
+		C 208,220.128, 243.904,256, 288,256s 80-35.872, 80-80c0-44.096-35.904-80-80-80S 208,131.904, 208,176z M 398.4,192C 390.56,246.208, 344.384,288, 288,288
+		S 185.44,246.208, 177.6,192L 32,192 L 32,288 l 32,0 l 32,0 l 64,0 c 18.688,0, 46.080,13.6, 61.632,51.968C 224.288,346.464, 226.080,350.048, 227.264,352l 121.344,0 
+		c 2.144-3.52, 4.896-10.016, 5.92-12.448C 375.232,290.496, 409.376,288, 416,288l 64,0 l0-96 L 398.4,192 zM 64,239.68A16,16 1260 1 1 96,239.68A16,16 1260 1 1 64,239.68z"  />
+<glyph unicode="&#xe010;" d="M 480,352L 32,352 C 14.336,352,0,337.664,0,320l0-320 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,320 C 512,337.664, 497.664,352, 480,352z
+		 M 181.76,127.136l 74.304-50.496l 73.856,50.848L 457.376,0L 54.624,0 L 181.76,127.136z M 32,22.624L 32,228.96 l 122.816-83.488L 32,22.624z M 356.704,145.92
+		L 480,230.784l0-208.16 L 356.704,145.92z M 480,320l0-51.776 l-0.672,0.96l-223.392-153.824L 32,267.616L 32,320 L 480,320 z"  />
+<glyph unicode="&#xe011;" d="M 399.456,160l-12.128,32l-34.24,0 L 158.912,192 l-34.24,0 l-12.128-32L 64,32l 384,0 L 399.456,160z M 146.784,160l 218.464,0 l 36.416-96L 110.368,64 
+		L 146.784,160zM 328.832,256l 34.24,0 l-12.128,32L 285.856,459.552C 281.088,471.872, 269.216,480, 256,480S 230.912,471.872, 226.144,459.552L 161.088,288L 148.96,256
+		l 34.24,0 L 328.832,256 z M 256,448l 60.672-160L 195.328,288 L 256,448zM 495.744,0L 16.256,0 C 7.264,0,0-6.784,0-15.744S 7.264-32, 16.256-32l 479.488,0 C 504.736-32, 512-24.736, 512-15.744
+		S 504.736,0, 495.744,0z"  />
+<glyph unicode="&#xe012;" d="M 83.744-29.568C 87.712-31.2, 91.872-32, 96-32c 8.32,0, 16.512,3.264, 22.624,9.376L 256,114.752l 137.376-137.376
+		C 399.488-28.736, 407.68-32, 416-32c 4.128,0, 8.288,0.8, 12.224,2.432C 440.192-24.608, 448-12.928, 448,0L 448,448 c0,17.664-14.336,32-32,32L 96,480 
+		C 78.336,480, 64,465.664, 64,448l0-448 C 64-12.928, 71.808-24.608, 83.744-29.568z M 256,160l-160-160L 96,352 l 320,0 l0-352 L 256,160z M 416,448l0-64 L 96,384 L 96,448 L 416,448 z"  />
+<glyph unicode="&#xe013;" d="M 96-32l 320,0 c 17.664,0, 32,14.336, 32,32L 448,352 c0,17.664-14.336,32-32,32l-64.16,0 C 351.072,437.152, 308.512,480, 256,480S 160.928,437.152, 160.16,384
+		L 96,384 C 78.336,384, 64,369.664, 64,352l0-352 C 64-17.664, 78.336-32, 96-32z M 416,352l0-352 L 96,0 L 96,352 L 416,352 z M 256,448c 34.784,0, 63.072-28.576, 63.84-64L 192.16,384 
+		C 192.928,419.424, 221.216,448, 256,448zM 208,288l 96,0 C 312.832,288, 320,295.168, 320,304C 320,312.832, 312.832,320, 304,320l-96,0 C 199.168,320, 192,312.832, 192,304C 192,295.168, 199.168,288, 208,288z
+		"  />
+<glyph unicode="&#xe014;" d="M 480,416L 32,416 C 14.336,416,0,401.664,0,384l0-65.344 L0,256 l0-192 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,256 L 512,318.656 L 512,384 
+		C 512,401.664, 497.664,416, 480,416z M 480,64L 32,64 L 32,256 l 448,0 L 480,64 z M 32,318.656L 32,384 l 448,0 l0-65.344 L 32,318.656 zM 80,96l 160,0 C 248.832,96, 256,103.168, 256,112C 256,120.832, 248.832,128, 240,128l-160,0 C 71.168,128, 64,120.832, 64,112
+		C 64,103.168, 71.168,96, 80,96zM 288,112A16,16 1260 1 1 320,112A16,16 1260 1 1 288,112zM 352,112A16,16 1260 1 1 384,112A16,16 1260 1 1 352,112zM 416,112A16,16 1260 1 1 448,112A16,16 1260 1 1 416,112z"  />
+<glyph unicode="&#xe015;" d="M 96,0A32,32 1260 1 1 160,0A32,32 1260 1 1 96,0zM 384,0A32,32 1260 1 1 448,0A32,32 1260 1 1 384,0zM-0.928,400c0-8.832, 7.168-16, 16-16L 48.32,384 l 19.872-84.992L 96,160c0-1.152, 0.544-2.144, 0.672-3.264l-16.288-73.28
+		c-1.056-4.736, 0.096-9.696, 3.136-13.472C 86.56,66.176, 91.136,64, 96,64l 363.008,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 115.968,96 
+		l 7.328,32.96C 124.896,128.704, 126.336,128, 128,128l 291.68,0 c 17.664,0, 28.32,3.488, 36.832,24l 51.968,159.424C 517.504,340, 497.696,352, 480,352L 96,352 
+		C 93.504,352, 91.328,351.136, 88.992,350.592L 76.576,403.648C 74.88,410.88, 68.448,416, 60.992,416L 15.072,416 C 6.208,416-0.928,408.832-0.928,400z M 96.64,320l 380.96,0 
+		l-51.072-156.768c-0.608-1.376-1.12-2.368-1.504-3.040C 423.968,160.096, 422.304,160, 419.68,160L 128,160 L 128,163.168 L 127.392,166.272L 96.64,320z"  />
+<glyph unicode="&#xe016;" d="M 225.216,368.352C 191.328,402.176, 148.768,405.024, 119.168,375.424C 89.568,345.856, 92.384,303.232, 126.208,269.376l 183.168-183.168
+		c 6.24-6.24, 16.384-6.24, 22.624,0s 6.24,16.384,0,22.624L 148.832,292c-16.416,16.416-26.88,40.992-7.072,60.8
+		c 19.776,19.808, 44.384,9.312, 60.8-7.104l 203.648-203.616c 58.4-58.464, 72.96-85.408, 38.176-120.224c-35.2-35.168-72.512-26.464-128.704,29.696
+		L 89.44,277.856C 52.896,314.4, 27.296,374.080, 75.328,422.080C 132.352,479.104, 197.472,423.040, 216.032,404.448l 207.872-207.904c 6.24-6.24, 16.384-6.24, 22.624,0
+		s 6.24,16.384,0,22.624L 238.656,427.072C 175.808,489.92, 104.544,496.64, 52.672,444.704C 0.256,392.32, 5.92,316.16, 66.816,255.232l 226.272-226.272
+		c 19.232-19.232, 60.416-60.384, 107.776-60.384c 21.28,0, 43.84,8.352, 66.176,30.688c 63.584,63.616, 4.768,122.496-38.176,165.472L 225.216,368.352z"  />
+<glyph unicode="&#xe017;" d="M 464.928,447.84c-0.288,0-0.576,0-0.864,0c-0.256,0-0.48,0.032-0.736,0L 262.144,447.84 
+		C 257.248,447.616, 246.112,439.968, 244.672,438.528L 9.344,203.2c-12.48-12.48-12.48-32.704,0-45.184l 180.672-180.672C 196.288-28.896, 204.448-32, 212.608-32
+		c 8.16,0, 16.352,3.104, 22.592,9.344l 235.328,235.328C 471.968,214.112, 480,224, 480,230.144L 480,431.968 C 480.448,440.896, 473.696,447.84, 464.928,447.84z
+		 M 448,236.128c-0.48-0.736-0.96-1.504-1.408-2.112l-233.952-234.016L 31.968,180.576l 234.016,234.016C 266.624,415.040, 267.36,415.52, 268.128,416L 448,416 L 448,236.128 zM 384,368A16,16 1260 1 1 416,368A16,16 1260 1 1 384,368z"  />
+<glyph unicode="&#xe018;" d="M 465.28,480c-0.192,0-0.384,0-0.576,0c-0.096,0-0.192,0-0.288,0c-0.032,0-0.064,0-0.096,0
+		c-0.16,0-0.288,0-0.416,0c-0.064,0-0.128,0-0.192,0L 294.496,480 C 289.6,479.744, 278.464,472.096, 277.024,470.656L 73.344,267.008
+		c-12.48-12.48-12.48-32.704,0-45.184l 25.408-25.408L 73.344,171.008c-12.48-12.48-12.48-32.704,0-45.184l 148.672-148.672
+		c 6.24-6.24, 14.4-9.344, 22.592-9.344c 8.16,0, 16.352,3.104, 22.592,9.344l 203.648,203.68C 472.32,182.272, 480,192.128, 480,198.272L 480,464.096 
+		C 480.448,473.024, 474.048,480, 465.28,480z M 448.352,203.68c-0.096-0.16-0.16-0.256-0.128-0.256c0,0,0,0,0,0l-203.584-203.68l-148.672,148.608
+		l 25.408,25.408l 100.64-100.64c 6.24-6.24, 14.4-9.344, 22.592-9.344c 8.16,0, 16.352,3.104, 22.592,9.344l 181.152,181.152L 448.352,203.68 z M 448.352,352l0-52.32 
+		c-0.096-0.16-0.16-0.256-0.128-0.256l0,0c0,0,0,0,0,0l-203.584-203.68L 95.968,244.352l 202.304,202.272C 298.88,447.072, 299.616,447.552, 300.352,448
+		l 148,0 L 448.352,352 zM 384.352,400.128A16,16 1260 1 1 416.352,400.128A16,16 1260 1 1 384.352,400.128z"  />
+<glyph unicode="&#xe019;" d="M 416,448l-64,0 c0,17.664-14.336,32-32,32L 224,480 C 206.336,480, 192,465.664, 192,448L 128,448 C 110.336,448, 96,433.664, 96,416l 352,0 C 448,433.664, 433.664,448, 416,448zM 96,0c0-17.664, 14.336-32, 32-32l 288,0 c 17.664,0, 32,14.336, 32,32L 448,384 L 96,384 L 96,0 z M 128,352l 288,0 l0-352 L 128,0 L 128,352 zM 176,320C 167.168,320, 160,312.832, 160,304l0-256 C 160,39.168, 167.168,32, 176,32S 192,39.168, 192,48l0,256 C 192,312.832, 184.832,320, 176,320zM 272,320C 263.168,320, 256,312.832, 256,304l0-256 C 256,39.168, 263.168,32, 272,32S 288,39.168, 288,48l0,256 C 288,312.832, 280.832,320, 272,320zM 368,320C 359.168,320, 352,312.832, 352,304l0-256 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16l0,256 
+		C 384,312.832, 376.832,320, 368,320z"  />
+<glyph unicode="&#xe01a;" d="M 157.248,474.304C 152.896,479.456, 145.824,481.344, 139.52,479.040C 133.216,476.736, 128.992,470.72, 128.992,464l0-417.504 
+		c0-6.912, 4.416-13.024, 10.976-15.2c 1.632-0.544, 3.328-0.8, 5.024-0.8c 4.96,0, 9.76,2.304, 12.832,6.464l 71.552,96.384l 49.632-141.984
+		c 6.368-18.176, 26.272-27.776, 44.448-21.408s 27.776,26.272, 21.408,44.448l-48.704,139.296l 111.936-21.664c 6.688-1.344, 13.408,1.76, 16.832,7.584
+		c 3.424,5.856, 2.816,13.216-1.568,18.4L 157.248,474.304z M 247.2,195.808C 241.152,197.024, 234.976,194.592, 231.328,189.632l-70.304-94.72L 161.024,420.128 
+		l 208.768-248.064L 247.2,195.808z"  />
+<glyph unicode="&#xe01b;" d="M 224,67.072L 224,0 L 176,0 C 167.168,0, 160-7.168, 160-16C 160-24.832, 167.168-32, 176-32l 79.68,0 L 256.32-32 l 79.68,0 
+		c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16L 288,0 l0,67.264 c 66.656,13.152, 128,67.104, 128,156.736L 416,272 C 416,280.832, 408.832,288, 400,288
+		S 384,280.832, 384,272L 384,224 c0-84.032-64.416-128-128-128c-61.664,0-128,40.064-128,128L 128,272 C 128,280.832, 120.832,288, 112,288S 96,280.832, 96,272L 96,224 
+		C 96,133.12, 156.256,79.808, 224,67.072zM 256,128c 52.928,0, 96,43.072, 96,96L 352,384 c0,52.928-43.072,96-96,96C 203.072,480, 160,436.928, 160,384l0-160 C 160,171.072, 203.072,128, 256,128z M 192,384
+		c0,35.36, 28.64,64, 64,64s 64-28.64, 64-64l0-160 c0-35.36-28.64-64-64-64S 192,188.64, 192,224L 192,384 z"  />
+<glyph unicode="&#xe01c;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 359.52,349.568L 299.968,312.384L 260.192,287.584c 31.936-2.112, 57.28-27.424, 59.392-59.392l 24.8,39.744l 37.184,59.584
+		c 3.968,6.304, 3.040,14.528-2.24,19.776C 374.016,352.608, 365.76,353.504, 359.52,349.568zM 192.416,219.808L 167.616,180.032l-37.184-59.584c-3.968-6.304-3.040-14.528, 2.24-19.776C 135.776,97.6, 139.872,96, 144,96
+		c 2.944,0, 5.888,0.8, 8.48,2.432l 59.552,37.184l 39.776,24.8C 219.872,162.528, 194.528,187.872, 192.416,219.808zM 260.192,287.584C 258.784,287.68, 257.44,288, 256,288C 220.64,288, 192,259.36, 192,224c0-1.44, 0.32-2.784, 0.416-4.192
+		c 2.112-31.936, 27.456-57.28, 59.392-59.392C 253.216,160.32, 254.56,160, 256,160c 35.36,0, 64,28.64, 64,64c0,1.44-0.32,2.784-0.416,4.192
+		C 317.472,260.128, 292.128,285.472, 260.192,287.584z M 224,224c0,17.632, 14.368,32, 32,32s 32-14.368, 32-32S 273.632,192, 256,192S 224,206.368, 224,224z"  />
+<glyph unicode="&#xe01d;" d="M 243.392,217.216c 45.984,0, 83.392,37.408, 83.392,83.392C 326.784,346.592, 289.376,384, 243.392,384S 160,346.592, 160,300.608
+		C 160,254.624, 197.408,217.216, 243.392,217.216z M 243.392,352c 28.32,0, 51.392-23.040, 51.392-51.392s-23.040-51.392-51.392-51.392S 192,272.288, 192,300.608
+		S 215.040,352, 243.392,352zM 231.744-23.328c 2.688-2.976, 5.28-4.896, 7.776-6.24c 0.032-0.032, 0.096-0.032, 0.128-0.064
+		c 1.728-0.896, 3.424-1.568, 5.024-1.568c 1.6,0, 3.296,0.672, 5.024,1.568c 0.032,0.032, 0.096,0.032, 0.128,0.064
+		c 2.496,1.344, 5.088,3.264, 7.776,6.24c0,0, 148.736,161.76, 163.68,301.92c 0.896,7.232, 1.504,14.56, 1.504,22.016
+		C 422.784,399.68, 342.464,480, 243.392,480S 64,399.68, 64,300.608c0-7.584, 0.608-14.976, 1.536-22.304C 80.864,138.208, 231.744-23.328, 231.744-23.328z M 243.392,448
+		c 81.28,0, 147.392-66.112, 147.392-147.392c0-5.408-0.384-11.168-1.312-18.624c-11.456-107.392-112.288-233.408-144.768-271.744
+		c-33.312,38.4-135.584,164.096-147.424,272C 96.416,289.312, 96,295.136, 96,300.608C 96,381.888, 162.112,448, 243.392,448z"  />
+<glyph unicode="&#xe01e;" d="M 139.040,195.648C 132.224,187.904, 129.568,177.344, 131.872,167.296c 2.304-10.048, 9.344-18.368, 18.848-22.336
+		c 22.72-9.504, 61.344-15.52, 105.312-16.736C 256.032,128.16, 256,128.096, 256,128l0-96 c0-17.664, 7.168-64, 16-64S 288,14.336, 288,32l0,96 
+		c0,0.096-0.032,0.16-0.032,0.256c 43.968,1.184, 82.592,7.232, 105.312,16.736c 9.504,3.968, 16.544,12.288, 18.848,22.336
+		c 2.304,10.048-0.352,20.608-7.168,28.32C 391.84,210.528, 368.928,218.752, 352,223.040l0,165.76 l0,0c 16.736,5.664, 30.944,12.768, 42.176,21.056
+		c 9.6,7.072, 14.464,18.944, 12.608,30.72s-10.112,21.568-21.44,25.376C 369.728,471.2, 334.208,480, 272,480C 206.24,480, 169.92,469.856, 157.344,465.504
+		c-11.168-3.872-19.296-13.6-21.12-25.28C 134.4,428.576, 139.168,416.832, 148.608,409.696C 160,401.152, 174.56,393.92, 191.968,388.224l 0.032,0L 192,223.040 
+		C 175.104,218.784, 152.16,210.56, 139.040,195.648z M 201.952,418.624C 185.248,424.096, 174.4,430.336, 167.84,435.296C 184.864,441.184, 219.328,448, 272,448
+		c 51.648,0, 85.856-6.56, 103.2-12.384c-6.784-4.992-17.536-11.104-33.472-16.512L 320,411.744l0-213.6 l 24.128-6.112
+		c 17.696-4.48, 31.072-11.008, 36.8-17.536C 366.112,168.32, 330.112,160, 272,160S 177.888,168.32, 163.072,174.496c 5.76,6.528, 19.136,13.056, 36.8,17.536
+		L 224,198.144L 224,411.424 L 201.952,418.624z"  />
+<glyph unicode="&#xe01f;" d="M 486.944,415.232l-144,64C 340.672,479.744, 338.336,480, 336,480c-2.080,0-4.192-0.192-6.24-0.608L 175.712,416.704
+		L 38.976,479.232C 36.672,479.744, 34.336,480, 32,480C 24.8,480, 17.728,477.568, 12,472.96C 4.416,466.912,0,457.728,0,448l0-384 c0-14.976, 10.4-27.968, 25.024-31.232
+		l 143.328-64C 170.656-31.744, 172.992-32, 175.328-32c 2.080,0, 4.192,0.192, 6.24,0.608l 154.048,62.688l 137.408-62.528C 475.36-31.744, 477.696-32, 480-32
+		c 7.2,0, 14.304,2.432, 20.032,7.040C 507.584-18.88, 512-9.696, 512,0L 512,384 C 512,399.008, 501.568,412, 486.944,415.232z M 192,390.624l 128,50.976l0-384 
+		l-128-50.976L 192,390.624 z M 32,448l 128-57.152l0-384 L 32,64L 32,448 z M 480,0l-128,56.896l0,384 L 480,384L 480,0 z"  />
+<glyph unicode="&#xe020;" d="M 404.992,448L 104,448 C 86.336,448, 72,436, 64,416L0,192.512L0,176 l0-33.664 L0,16 C0,7.168, 7.168,0, 16,0l 480,0 
+		c 8.832,0, 16,7.168, 16,16l0,127.872 L 512,176 L 512,190.528 L 448,416C 439.008,436, 422.688,448, 404.992,448z M 94.24,405.344C 95.712,408.64, 99.456,416, 104,416l 300.992,0 
+		c 4.384,0, 9.44-4.512, 12.992-11.392L 478.304,192L 336,192 C 327.168,192, 320,184.832, 320,176L 320,128 L 192,128 L 192,176 C 192,184.832, 184.832,192, 176,192L 33.152,192 L 94.24,405.344z
+		 M 480,32L 32,32 l0,111.552 L 32,160 l 128,0 l0-48 C 160,103.168, 167.168,96, 176,96l 160,0 c 8.832,0, 16,7.168, 16,16L 352,160 l 128,0 l0-15.36 L 480,32 z"  />
+<glyph unicode="&#xe021;" d="M 480,320l-128,0 c0-17.664-14.336-32-32-32l 160,0 l0-64 l-160,0 c 17.664,0, 32-14.336, 32-32l 128,0 l0-192 L 32,0 L 32,192 l 128,0 c0,17.664, 14.336,32, 32,32L 32,224 L 32,288 l 160,0 
+		C 174.336,288, 160,302.336, 160,320L 32,320 C 14.336,320,0,305.664,0,288l0-64 l0-32 l0-192 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,192 L 512,224 L 512,288 C 512,305.664, 497.664,320, 480,320zM 192,288l 128,0 c 17.664,0, 32,14.336, 32,32L 352,352 c0,17.664-14.336,32-32,32L 192,384 C 174.336,384, 160,369.664, 160,352l0-32 C 160,302.336, 174.336,288, 192,288z M 192,352l 128,0 l0-32 
+		L 192,320 L 192,352 zM 160,192l0-32 c0-17.664, 14.336-32, 32-32l 128,0 c 17.664,0, 32,14.336, 32,32L 352,192 c0,17.664-14.336,32-32,32L 192,224 C 174.336,224, 160,209.664, 160,192z M 320,160L 192,160 
+		L 192,192 l 128,0 L 320,160 z"  />
+<glyph unicode="&#xe022;" d="M 432.672,480L 288.288,480 L 144,480 L 80.672,480 C 36.512,480, 0.768,444.512, 0.128,400.512L0,400.672l0-66.656 L0,288 l0-175.328 l0-39.584 l0-24.416 
+		C0,4.128, 36.128-32, 80.672-32l 14.592,0 L 224-32 l 44,0 l 21.408,0 l 63.264,0 C 370.336-32, 384-17.664, 384,0L 384,336 C 384,344.832, 377.504,352, 368.672,352l-288,0 
+		C 53.824,352, 32,372.512, 32,399.328C 32,426.176, 53.824,448, 80.672,448L 144,448 l 149.12,0 L 416,448 l0-368 c0-8.832, 7.84-16, 16.672-16S 448,71.168, 448,80l0,384 
+		C 448,472.832, 441.504,480, 432.672,480z M 80.672,320l 271.36,0 l 0.64-320L 289.408,0 L 268,0 L 224,0 L 95.264,0 L 80.672,0 C 53.824,0, 32,21.824, 32,48.672l0,24.416 l0,39.584 L 32,288 L 32,334.016 
+		L 32,335.648 C 45.44,325.792, 62.24,320, 80.672,320z"  />
+<glyph unicode="&#xe023;" d="M 510.112,390.016C 506.080,403.040, 494.368,412.672, 480,412.672l-32,0 l0-32 l0-17.664 c0-26.464-21.536-48-48-48S 352,336.544, 352,363.008
+		L 352,380.672 l0,32 L 159.84,412.672 l0-32 l0-17.664 c0-26.464-21.536-48-48-48c-26.464,0-48,21.536-48,48L 63.84,380.672 l0,32 L 32,412.672 c-14.368,0-26.080-9.632-30.112-22.656L0,390.016 
+		l0-9.344 l0-99.68 L0,0 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,280.992 L 512,380.672 L 512,390.016 L 510.112,390.016 z M 480,0L 32,0 L 32,256 l 448,0 L 480,0 zM 111.84,347.008c 8.832,0, 16,7.168, 16,16L 127.84,464 c0,8.832-7.168,16-16,16s-16-7.168-16-16l0-100.992 
+		C 95.84,354.176, 103.008,347.008, 111.84,347.008zM 400,347.008c 8.832,0, 16,7.168, 16,16L 416,464 C 416,472.832, 408.832,480, 400,480S 384,472.832, 384,464l0-100.992 
+		C 384,354.176, 391.168,347.008, 400,347.008z"  />
+<glyph unicode="&#xe024;" d="M 480,480L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,448 C 512,465.664, 497.664,480, 480,480z
+		 M 96,192l0-64 L 32,128 L 32,192 L 96,192 z M 32,256L 32,320 l 64,0 l0-64 L 32,256 z M 128,160l 256,0 l0-160 L 128,0 L 128,160 z M 384,192L 128,192 L 128,448 l 256,0 L 384,192 z M 416,192l 64,0 l0-64 l-64,0 L 416,192 z M 416,256L 416,320 l 64,0 l0-64 L 416,256 z M 416,384L 416,448 l 64,0 l0-64 L 416,384 z M 96,384L 32,384 L 32,448 l 64,0 L 96,384 z
+		 M 32,64l 64,0 l0-64 L 32,0 L 32,64 z M 416,64l 64,0 l0-64 l-64,0 L 416,64 z"  />
+<glyph unicode="&#xe025;" d="M 511.456,417.664C 510.048,434.144, 496.736,448, 480,448L 32,448 C 15.264,448, 1.952,434.144, 0.544,417.664L0,417.664 l0-2.656 L0,352 l0-226.656 L0,96 l0-96 
+		c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,352 L 512,415.008 L 512,417.664 L 511.456,417.664 z M 192,256L 192,352 l 128,0 l0-96 L 192,256 z M 320,224l0-98.656 L 192,125.344 L 192,224 L 320,224 z M 160,352l0-96 L 32,256 L 32,352 L 160,352 z M 32,224l 128,0 l0-98.656 
+		L 32,125.344 L 32,224 z M 32,0l0,96 l 128,0 l0-96 L 32,0 z M 192,0l0,96 l 128,0 l0-96 L 192,0 z M 480,0l-128,0 l0,96 l 128,0 L 480,0 z M 480,125.344l-128,0 L 352,224 l 128,0 L 480,125.344 z M 480,256l-128,0 L 352,352 l 128,0 L 480,256 z"  />
+<glyph unicode="&#xe026;" d="M 416,480L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 384,0 c 17.664,0, 32,14.336, 32,32L 448,448 C 448,465.664, 433.664,480, 416,480z
+		 M 32,448l 64,0 l0-448 L 32,0 L 32,448 z M 416,0L 128,0 L 128,448 l 288,0 L 416,0 zM 221.792,308.256A48.448,48.448 1260 1 1 318.688,308.256A48.448,48.448 1260 1 1 221.792,308.256zM 271.232,240.448C 227.488,240.448, 192,192.864, 192,134.176s 158.496-58.688, 158.496,0S 315.008,240.448, 271.232,240.448zM 480,448L 512,448L 512,352L 480,352zM 480,320L 512,320L 512,224L 480,224zM 480,192L 512,192L 512,96L 480,96z"  />
+<glyph unicode="&#xe027;" d="M 480,160L 480,224 c0,147.072-112.672,224-224,224C 147.392,448, 32,369.504, 32,224l0-64 c-17.664,0-32-14.336-32-32l0-64 c0-17.664, 14.336-32, 32-32
+		c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32l0,128 c0,17.664-14.336,32-32,32L 64,224 c0,126.048, 96.608,192, 192,192c 92.48,0, 192-60.064, 192-192l0-32 c-17.664,0-32-14.336-32-32l0-128 
+		c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32c 17.664,0, 32,14.336, 32,32l0,64 C 512,145.664, 497.664,160, 480,160z"  />
+<glyph unicode="&#xe028;" d="M 256,480C 190.496,480, 124.96,455.008, 74.976,405.024c-99.968-99.968-99.968-262.080,0-362.048C 124.96-7.008, 190.496-32, 256-32
+		s 131.040,24.992, 181.024,74.976c 99.968,99.968, 99.968,262.080,0,362.048C 387.040,455.008, 321.504,480, 256,480z M 165.504,133.504C 141.312,157.664, 128,189.824, 128,224
+		c0,34.176, 13.312,66.336, 37.504,90.496C 189.664,338.688, 221.824,352, 256,352s 66.336-13.312, 90.496-37.504C 370.688,290.336, 384,258.176, 384,224
+		c0-34.176-13.312-66.336-37.504-90.496C 322.336,109.312, 290.176,96, 256,96S 189.664,109.312, 165.504,133.504z M 354.976,424.8L 305.6,375.424
+		C 289.472,380.704, 272.8,384, 256,384C 240.704,384, 225.568,381.088, 210.752,376.736l-49.92,49.92C 190.272,440.448, 222.528,448, 256,448C 290.944,448, 324.544,439.84, 354.976,424.8z
+		 M 53.376,319.136l 49.92-49.92c-9.152-31.040-8.768-64, 1.28-94.848l-49.376-49.376C 40.16,155.456, 32,189.056, 32,224C 32,257.472, 39.552,289.728, 53.376,319.136z
+		 M 97.6,65.632L 97.6,65.632C 97.6,65.6, 97.6,65.6, 97.6,65.632L 97.6,65.632z M 164.704,19.552l 50.432,50.432C 228.544,66.432, 242.208,64, 256,64
+		c 15.296,0, 30.432,2.912, 45.248,7.296l 49.92-49.92C 321.728,7.552, 289.472,0, 256,0C 223.968,0, 193.088,6.88, 164.704,19.552z M 458.56,128.928
+		l-49.824,49.824c 8.288,28.128, 8.768,57.792, 1.28,86.112l 50.336,50.336C 486.688,255.968, 486.080,187.744, 458.56,128.928z"  />
+<glyph unicode="&#xe029;" d="M 256-32c 82.528,0, 155.744,39.232, 202.56,99.872L 256,224L 256,480 C 114.624,480,0,365.376,0,224S 114.624-32, 256-32z M 224,445.728L 224,224 
+		c0-9.92, 4.608-19.296, 12.448-25.344l 175.424-135.232C 370.304,22.784, 314.976,0, 256,0c-123.52,0-224,100.48-224,224C 32,336.64, 115.584,430.144, 224,445.728zM 300,475.712l0-228.96 l 182.784-140.896C 501.344,141.216, 512,181.312, 512,224C 512,350.336, 420.352,454.816, 300,475.712z"  />
+<glyph unicode="&#xe02a;" d="M 479.584,480c-17.92,0-32.416-14.528-32.416-32.416l0-75.584 C 410.624,416.256, 368.512,480, 252.608,480C 113.344,480,0,366.688,0,227.392
+		c0-139.296, 113.344-252.608, 252.608-252.608c 109.376,0, 205.824,69.856, 240.064,173.824c 5.664,17.312-3.744,35.968-21.056,41.664
+		c-17.312,5.696-35.968-3.712-41.664-21.024c-25.28-76.832-96.544-128.448-177.344-128.448c-102.912,0-186.624,83.712-186.624,186.624
+		s 83.712,186.24, 186.624,186.24c 72.864,0, 113.344-45.344, 146.368-92.896L 317.472,320.768 c-17.92,0-32.416-14.528-32.416-32.416c0-17.92, 14.528-32.416, 32.416-32.416
+		l 162.112,0 C 497.472,255.872, 512,270.4, 512,288.288L 512,447.584 C 512,465.472, 497.472,480, 479.584,480z"  />
+<glyph unicode="&#xe02b;" d="M 152.928,415.104c 18.72,18.72, 49.152,18.72, 67.872,0l 171.616-171.616c 8.448,31.968, 0.544,67.36-24.512,92.416
+		L 254.752,449.024c-37.504,37.504-98.272,37.504-135.776,0L 93.536,423.584c-37.504-37.504-37.504-98.272,0-135.776l 113.152-113.152
+		c 25.056-25.056, 60.448-32.96, 92.416-24.512L 127.488,321.76c-18.72,18.72-18.72,49.152,0,67.872L 152.928,415.104zM 257.248-1.024c 37.504-37.504, 98.272-37.504, 135.776,0l 25.44,25.472c 37.504,37.504, 37.504,98.272,0,135.776L 305.312,273.312
+		c-25.056,25.056-60.448,32.96-92.416,24.512l 171.616-171.616c 18.72-18.72, 18.72-49.152,0-67.872l-25.472-25.472c-18.72-18.72-49.152-18.72-67.872,0
+		L 119.584,204.512c-8.448-31.968-0.544-67.36, 24.512-92.416L 257.248-1.024z"  />
+<glyph unicode="&#xe02c;" d="M 120.64,227.68c 20.448-20.448, 50.528-27.616, 77.888-19.456L 47.36,359.36C 42.432,364.288, 39.84,371.424, 39.84,379.936
+		c0,14.080, 7.36,32.064, 17.12,41.824c 12.8,12.8, 47.52,26.976, 63.68,10.912l 151.136-151.168c 2.208,7.392, 3.328,15.072, 3.328,22.752
+		c0,20.864-8.096,40.416-22.784,55.136L 149.824,461.856C 119.040,492.64, 57.856,481.088, 27.744,450.976C 10.272,433.504-0.576,406.432-0.576,380.32
+		c0-20.288, 6.656-38.112, 18.72-50.176L 120.64,227.68zM 391.36,220.32c-20.448,20.448-50.528,27.616-77.888,19.456l 151.168-151.168c 4.928-4.928, 7.52-12.032, 7.52-20.576
+		c0-14.080-7.36-32.064-17.12-41.824c-12.8-12.8-47.52-26.976-63.68-10.912L 240.224,166.496c-2.208-7.392-3.328-15.072-3.328-22.752
+		c0-20.864, 8.096-40.416, 22.784-55.136l 102.464-102.464c 30.784-30.784, 91.968-19.232, 122.080,10.88c 17.472,17.472, 28.32,44.544, 28.32,70.656
+		c0,20.288-6.656,38.112-18.72,50.176L 391.36,220.32zM 146.624,333.408C 142.528,329.344, 140.288,323.904, 140.288,318.144s 2.24-11.168, 6.304-15.232l 188.288-188.32
+		c 8.416-8.384, 22.080-8.384, 30.496,0c 4.096,4.064, 6.304,9.504, 6.304,15.264s-2.24,11.168-6.304,15.232L 177.088,333.408
+		C 168.704,341.792, 155.008,341.792, 146.624,333.408z"  />
+<glyph unicode="&#xe02d;" d="M 432.32,114.88A2.912,2.912 1260 1 1 438.144,114.88A2.912,2.912 1260 1 1 432.32,114.88zM 368.032,48.544A5.792,5.792 1260 1 1 379.616,48.54399999999998A5.792,5.792 1260 1 1 368.032,48.54399999999998zM 281.376,14.4A8.704,8.704 1260 1 1 298.784,14.399999999999977A8.704,8.704 1260 1 1 281.376,14.399999999999977zM 188.096,18.976A11.584,11.584 1260 1 1 211.264,18.976A11.584,11.584 1260 1 1 188.096,18.976zM 105.344,61.44A14.496,14.496 1260 1 1 134.336,61.44A14.496,14.496 1260 1 1 105.344,61.44zM 48.032,133.632A17.408,17.408 1260 1 1 82.848,133.632A17.408,17.408 1260 1 1 48.032,133.632zM 26.528,222.272A20.288,20.288 1260 1 1 67.104,222.272A20.288,20.288 1260 1 1 26.528,222.272zM 44.224,310.336A23.2,23.2 1260 1 1 90.624,310.336A23.2,23.2 1260 1 1 44.224,310.336zM 97.312,381.344A26.112,26.112 1260 1 1 149.536,381.344A26.112,26.112 1260 1 1 97.312,381.344zM 175.264,422.016A28.992,28.992 1260 1 1 233.248,422.016A28.992,28.992 1260 1 1 175.264,422.016zM 262.816,424.544A31.904,31.904 1260 1 1 326.624,424.544A31.904,31.904 1260 1 1 262.816,424.544zM 342.976,388.48A34.784,34.784 1260 1 1 412.544,388.48A34.784,34.784 1260 1 1 342.976,388.48zM 399.936,320.736A37.696,37.696 1260 1 1 475.328,320.736A37.696,37.696 1260 1 1 399.936,320.736zM 422.592,232.992A40.608,40.608 1260 1 1 503.808,232.992A40.608,40.608 1260 1 1 422.592,232.992z"  />
+<glyph unicode="&#xe02e;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,416c 105.856,0, 192-86.144, 192-192
+	c0-41.408-13.312-79.68-35.68-111.072L 144.928,380.32C 176.32,402.688, 214.592,416, 256,416z M 64,224c0,41.408, 13.312,79.68, 35.68,111.072l 267.392-267.392l0,0
+	C 335.648,45.312, 297.408,32, 256,32C 150.144,32, 64,118.144, 64,224z"  />
+<glyph unicode="&#xe02f;" d="M 480,416L 32,416 C 14.336,416,0,401.664,0,384l0-64 l 512,0 L 512,384 C 512,401.664, 497.664,416, 480,416z M 480,352L 32,352 L 32,384 l 448,0 L 480,352 zM 32,0c0-17.664, 14.336-32, 32-32l 384,0 c 17.664,0, 32,14.336, 32,32L 480,288 L 32,288 L 32,0 z M 64,256l 384,0 l0-256 L 64,0 L 64,256 zM 336,224l-160,0 C 167.168,224, 160,216.832, 160,208C 160,199.168, 167.168,192, 176,192l 160,0 C 344.832,192, 352,199.168, 352,208
+		C 352,216.832, 344.832,224, 336,224z"  />
+<glyph unicode="&#xe030;" d="M 511.744,258.656C 510.4,337.184, 446.688,407.168, 368,407.168c-45.504,0-85.6-23.808-112-58.752
+		C 229.6,383.36, 189.504,407.168, 144,407.168c-78.688,0-142.4-69.984-143.744-148.512L0,258.656 c0-0.48, 0.096-0.928, 0.096-1.408
+		C 0.096,256.896,0,256.544,0,256.16c0-2.208, 0.544-3.872, 0.64-5.984C 7.68,50.048, 253.984-32, 253.984-32s 249.92,81.952, 257.312,281.856
+		C 511.424,252.096, 512,253.856, 512,256.16c0,0.384-0.096,0.736-0.096,1.088C 511.904,257.76, 512,258.176, 512,258.656L 511.744,258.656 z M 479.328,251.040
+		c-5.664-153.6-181.056-231.68-225.28-248.928c-43.84,17.28-216.032,95.008-221.44,249.536C 32.544,253.248, 32.384,254.72, 32.16,256.32
+		c 0.032,0.576, 0.064,1.184, 0.096,1.792C 33.344,321.568, 84.512,375.168, 144,375.168c 32.832,0, 64.352-16.768, 86.464-46.048
+		C 236.512,321.12, 245.952,316.416, 256,316.416s 19.488,4.704, 25.536,12.704C 303.648,358.4, 335.168,375.168, 368,375.168c 59.488,0, 110.656-53.6, 111.744-117.056
+		c0-0.608, 0.032-1.216, 0.096-1.824C 479.616,254.72, 479.424,253.056, 479.328,251.040z"  />
+<glyph unicode="&#xe031;" d="M 510.144,272.864c-3.776,11.584-13.792,20.032-25.824,21.792l-137.92,20.032L 284.704,439.648
+		C 279.296,450.592, 268.192,457.504, 256,457.504S 232.704,450.592, 227.296,439.648L 165.632,314.688l-137.92-20.032c-12.064-1.76-22.080-10.208-25.824-21.792
+		c-3.776-11.584-0.64-24.288, 8.096-32.8l 99.808-97.28l-23.552-137.376c-2.048-12, 2.88-24.128, 12.736-31.296C 104.512-29.952, 111.104-32, 117.76-32
+		c 5.088,0, 10.208,1.216, 14.88,3.68L 256,36.544l 123.36-64.864C 384.032-30.784, 389.152-32, 394.24-32c 6.624,0, 13.248,2.048, 18.816,6.112
+		c 9.856,7.168, 14.784,19.296, 12.736,31.296l-23.552,137.376l 99.808,97.28C 510.752,248.544, 513.888,261.28, 510.144,272.864z M 367.84,153.952L 394.24,0
+		L 256,72.672L 117.76,0l 26.4,153.952L 32.32,262.976L 186.88,285.44L 256,425.504l 69.12-140.064l 154.56-22.464L 367.84,153.952z"  />
+<glyph unicode="&#xe032;" d="M 510.144,272.864c-3.776,11.584-13.792,20.032-25.856,21.76l-137.92,20.032L 284.704,439.648
+	C 279.296,450.592, 268.192,457.504, 256,457.504S 232.704,450.592, 227.296,439.648L 165.632,314.688l-137.92-20.032c-12.064-1.76-22.080-10.208-25.824-21.792
+	c-3.776-11.584-0.64-24.288, 8.096-32.8l 99.808-97.28l-23.552-137.376c-2.048-12, 2.88-24.128, 12.736-31.296C 104.512-29.952, 111.104-32, 117.76-32
+	c 5.088,0, 10.208,1.216, 14.88,3.68L 256,36.544l 123.36-64.864C 384.032-30.784, 389.152-32, 394.24-32c 6.624,0, 13.248,2.048, 18.816,6.112
+	c 9.856,7.168, 14.784,19.296, 12.736,31.296l-23.552,137.376l 99.808,97.28C 510.784,248.576, 513.92,261.28, 510.144,272.864z M 367.84,153.952L 394.24,0
+	L 256,72.672L 256,425.504 l 69.12-140.064l 154.56-22.464L 367.84,153.952z"  />
+<glyph unicode="&#xe033;" d="M 332.096,291.712L 253.696,450.56L 175.296,291.712L0,266.24L 126.848,142.592L 96.896-32L 253.696,50.432L 410.496-32L 380.544,142.592L 507.392,266.24 	z"  />
+<glyph unicode="&#xe034;" d="M 256,50.432L 256,450.56L 177.6,291.712L 2.304,266.24L 129.152,142.592L 99.2-32 	z"  />
+<glyph unicode="&#xe035;" d="M 13.568,49.44c-18.752-18.752-18.752-49.12,0-67.872c 9.376-9.376, 21.664-14.048, 33.952-14.048
+		c 12.288,0, 24.576,4.672, 33.952,14.048l 157.6,157.6L 171.168,207.040L 13.568,49.44zM 407.456,341.536L 476.032,377.024L 512,446.496L 478.496,480L 409.024,444.032L 373.536,375.456L 289.952,291.872L 323.872,257.952 
+			zM 422.464,159.36C 420.288,159.488, 418.208,160, 416,160c-11.712,0-22.816-2.4-33.184-6.24L 185.76,350.816
+		C 189.6,361.184, 192,372.288, 192,384c0,2.208-0.512,4.288-0.64,6.464C 187.968,440.416, 146.816,480, 96,480C 81.216,480, 67.36,476.384, 54.848,470.4l 63.776-63.776
+		c 3.36-3.36, 5.664-7.328, 7.2-11.52c 4.192-11.36, 1.92-24.576-7.2-33.728C 112.384,355.136, 104.192,352, 96,352C 92.224,352, 88.48,352.832, 84.896,354.176
+		c-4.192,1.568-8.16,3.84-11.52,7.2L 9.6,425.152C 3.616,412.64,0,398.784,0,384c0-50.816, 39.584-91.968, 89.536-95.36C 91.712,288.512, 93.792,288, 96,288
+		c 11.712,0, 22.816,2.4, 33.184,6.24l 197.056-197.056C 322.4,86.816, 320,75.712, 320,64c0-2.208, 0.512-4.288, 0.64-6.464
+		C 324.032,7.584, 365.184-32, 416-32c 14.784,0, 28.64,3.616, 41.152,9.6l-63.776,63.776c-3.36,3.36-5.664,7.328-7.2,11.52
+		c-4.192,11.36-1.92,24.576, 7.2,33.728C 399.616,92.864, 407.808,96, 416,96c 3.776,0, 7.52-0.832, 11.104-2.176
+		c 4.192-1.568, 8.16-3.84, 11.52-7.2l 63.776-63.776C 508.384,35.36, 512,49.216, 512,64C 512,114.816, 472.416,155.968, 422.464,159.36z"  />
+<glyph unicode="&#xe036;" d="M 416,96c 3.776,0, 7.52-0.832, 11.104-2.176c 4.192-1.568, 8.16-3.84, 11.52-7.2l 63.776-63.776
+	C 508.384,35.36, 512,49.216, 512,64c0,50.816-39.584,91.968-89.536,95.36C 420.288,159.488, 418.208,160, 416,160c-11.712,0-22.816-2.4-33.184-6.24
+	L 185.76,350.816C 189.6,361.184, 192,372.288, 192,384c0,2.208-0.512,4.288-0.64,6.464C 187.968,440.416, 146.816,480, 96,480C 81.216,480, 67.36,476.384, 54.848,470.4
+	l 63.776-63.776c 3.36-3.36, 5.664-7.328, 7.2-11.52c 4.192-11.36, 1.92-24.576-7.2-33.728C 112.384,355.136, 104.192,352, 96,352
+	C 92.224,352, 88.48,352.832, 84.896,354.176c-4.192,1.568-8.16,3.84-11.52,7.2L 9.6,425.152C 3.616,412.64,0,398.784,0,384
+	c0-50.816, 39.584-91.968, 89.536-95.36C 91.712,288.512, 93.792,288, 96,288c 11.712,0, 22.816,2.4, 33.184,6.24l 197.056-197.056
+	C 322.4,86.816, 320,75.712, 320,64c0-2.208, 0.512-4.288, 0.64-6.464C 324.032,7.584, 365.184-32, 416-32c 14.784,0, 28.64,3.616, 41.152,9.6
+	l-63.776,63.776c-3.36,3.36-5.664,7.328-7.2,11.52c-4.192,11.36-1.92,24.576, 7.2,33.728C 399.616,92.864, 407.808,96, 416,96z"  />
+<glyph unicode="&#xe037;" d="M 440.416,277.088c-4.032,14.016-9.504,27.36-16.448,39.872l 31.808,66.912c-11.808,14.72-25.184,28.096-39.904,39.904
+		l-66.912-31.808c-12.48,6.912-25.856,12.416-39.872,16.448L 284.192,478.368C 274.944,479.392, 265.536,480, 256,480S 237.056,479.392, 227.808,478.368L 202.912,408.416
+		C 188.928,404.384, 175.552,398.88, 163.072,391.968L 96.128,423.776c-14.72-11.808-28.096-25.184-39.904-39.904l 31.808-66.912
+		c-6.912-12.48-12.416-25.856-16.448-39.872L 1.632,252.192C 0.608,242.944,0,233.536,0,224s 0.608-18.944, 1.632-28.192l 69.984-24.896
+		c 4.032-14.016, 9.504-27.36, 16.448-39.872l-31.808-66.912c 11.808-14.72, 25.184-28.128, 39.904-39.904l 66.912,31.808
+		c 12.48-6.912, 25.856-12.416, 39.872-16.448l 24.896-69.984C 237.056-31.392, 246.464-32, 256-32s 18.944,0.608, 28.192,1.632l 24.896,69.984
+		c 14.016,4.032, 27.36,9.504, 39.872,16.448l 66.912-31.808c 14.72,11.808, 28.128,25.184, 39.904,39.904l-31.808,66.912
+		c 6.912,12.48, 12.416,25.856, 16.448,39.872l 69.984,24.896C 511.392,205.056, 512,214.464, 512,224s-0.608,18.944-1.632,28.192L 440.416,277.088z M 256,96
+		c-70.688,0-128,57.312-128,128c0,70.688, 57.312,128, 128,128s 128-57.312, 128-128C 384,153.312, 326.688,96, 256,96zM 192,224A64,64 1260 1 1 320,224A64,64 1260 1 1 192,224z"  />
+<glyph unicode="&#xe038;" d="M 15.648,204.832l 55.52,2.048C 77.728,198.368, 85.312,190.624, 93.76,183.712l-3.648-55.584
+		c 6.080-3.456, 12.352-6.656, 18.944-9.504c 6.56-2.848, 13.216-5.184, 19.904-7.264l 37.92,40.8c 10.848-1.376, 21.664-1.568, 32.32-0.512
+		l 36.64-41.792c 13.664,3.744, 26.848,8.992, 39.328,15.648L 273.152,181.056C 281.632,187.616, 289.376,195.2, 296.288,203.648l 55.584-3.648
+		c 3.456,6.080, 6.656,12.352, 9.504,18.944c 2.848,6.56, 5.184,13.216, 7.264,19.904l-40.8,37.92c 1.376,10.848, 1.568,21.664, 0.512,32.32
+		l 41.792,36.64c-3.744,13.664-8.992,26.848-15.648,39.328L 298.944,383.040C 292.384,391.52, 284.8,399.264, 276.352,406.176L 280,461.76
+		C 273.92,465.216, 267.648,468.416, 261.056,471.264C 254.496,474.080, 247.84,476.448, 241.152,478.496L 203.264,437.696c-10.848,1.376-21.664,1.568-32.32,0.512
+		L 134.272,480C 120.608,476.256, 107.424,471.008, 94.944,464.352L 96.96,408.832C 88.48,402.272, 80.736,394.72, 73.824,386.272L 18.24,389.888
+		c-3.456-6.080-6.656-12.352-9.504-18.944C 5.92,364.384, 3.552,357.728, 1.504,351.040l 40.8-37.92c-1.376-10.848-1.568-21.664-0.512-32.32L0,244.16
+		C 3.744,230.528, 8.992,217.312, 15.648,204.832z M 223.072,383.104c 48.672-20.992, 71.136-77.472, 50.144-126.176S 195.744,185.792, 147.040,206.784
+		S 75.904,284.256, 96.896,332.96S 174.368,404.096, 223.072,383.104zM 137.056,294.944A48,48 1260 1 1 233.056,294.94399999999996A48,48 1260 1 1 137.056,294.94399999999996zM 480.672,103.232l-13.248,4.704l 6.048,12.736l 13.92,29.28c-5.152,6.432-11.008,12.288-17.472,17.472l-29.28-13.92
+		l-12.736-6.048l-4.704,13.248l-10.88,30.624C 408.288,191.744, 404.16,192, 400,192s-8.288-0.256-12.352-0.704l-10.88-30.624l-4.704-13.248
+		l-12.736,6.048l-29.28,13.92c-6.432-5.152-12.288-11.008-17.472-17.472l 13.92-29.28l 6.048-12.736l-13.248-4.704l-30.624-10.88
+		C 288.256,88.288, 288,84.16, 288,80s 0.256-8.288, 0.704-12.32l 30.624-10.88l 13.248-4.704l-6.048-12.736l-13.92-29.28
+		c 5.152-6.432, 11.008-12.288, 17.472-17.472l 29.28,13.92l 12.736,6.048l 4.704-13.248l 10.88-30.624C 391.712-31.744, 395.84-32, 400-32
+		s 8.288,0.256, 12.352,0.704l 10.88,30.624l 4.704,13.248l 12.736-6.048l 29.28-13.92c 6.432,5.152, 12.288,11.008, 17.472,17.472l-13.92,29.28
+		l-6.048,12.736l 13.248,4.704l 30.624,10.88C 511.744,71.712, 512,75.84, 512,80s-0.256,8.288-0.704,12.352L 480.672,103.232z M 400,56
+		c-13.248,0-24,10.752-24,24c0,13.248, 10.752,24, 24,24s 24-10.752, 24-24C 424,66.752, 413.248,56, 400,56z"  />
+<glyph unicode="&#xe039;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 379.328,228.672
+		c-6.24-6.24-16.384-6.24-22.624,0L 288,297.376L 288,48 C 288,39.168, 280.832,32, 272,32S 256,39.168, 256,48L 256,297.376 L 187.328,228.672
+		c-6.24-6.24-16.384-6.24-22.624,0c-6.24,6.24-6.24,16.384,0,22.624l 96,96C 260.736,347.36, 260.768,347.36, 260.8,347.392
+		c 1.44,1.408, 3.168,2.592, 5.056,3.36c 3.904,1.632, 8.32,1.632, 12.224,0C 280.064,349.952, 281.824,348.8, 283.328,347.328l 96-96
+		C 385.568,245.056, 385.568,234.944, 379.328,228.672z"  />
+<glyph unicode="&#xe03a;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 379.328,164.672l-96-96
+		c-1.472-1.472-3.232-2.656-5.184-3.456c-3.904-1.632-8.32-1.632-12.224,0c-1.92,0.8-3.616,1.952-5.056,3.36
+		c-0.032,0.032-0.096,0.032-0.128,0.096l-96,96c-6.24,6.24-6.24,16.384,0,22.624c 6.24,6.24, 16.384,6.24, 22.624,0L 256,118.624L 256,368 
+		C 256,376.832, 263.168,384, 272,384S 288,376.832, 288,368l0-249.376 l 68.672,68.672c 6.24,6.24, 16.384,6.24, 22.624,0C 385.568,181.056, 385.568,170.944, 379.328,164.672z
+		"  />
+<glyph unicode="&#xe03b;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 448,208
+		C 448,199.168, 440.832,192, 432,192L 182.624,192 l 68.672-68.672c 6.24-6.24, 6.24-16.384,0-22.624c-6.24-6.24-16.384-6.24-22.624,0l-96,96
+		C 132.64,196.736, 132.608,196.8, 132.576,196.864C 131.168,198.304, 130.016,200, 129.248,201.888C 128.448,203.84, 128,205.888, 128,207.936C 128,207.968, 128,207.968, 128,208l0,0
+		c0,2.080, 0.416,4.16, 1.248,6.112c 0.768,1.888, 1.92,3.584, 3.328,5.024c 0.064,0.064, 0.064,0.128, 0.128,0.192l 96,96
+		c 6.24,6.24, 16.384,6.24, 22.624,0c 6.24-6.24, 6.24-16.384,0-22.624L 182.624,224L 432,224 C 440.832,224, 448,216.832, 448,208z"  />
+<glyph unicode="&#xe03c;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 416,208
+		c0-0.032,0-0.032,0-0.064c0-2.080-0.416-4.128-1.216-6.048c-0.8-1.952-1.984-3.712-3.456-5.184l-96-96
+		c-6.24-6.24-16.384-6.24-22.624,0c-6.24,6.24-6.24,16.384,0,22.624L 361.376,192L 112,192 C 103.168,192, 96,199.168, 96,208C 96,216.832, 103.168,224, 112,224
+		l 249.376,0 L 292.672,292.672c-6.24,6.24-6.24,16.384,0,22.624c 6.24,6.24, 16.384,6.24, 22.624,0l 96-96c 1.472-1.472, 2.656-3.232, 3.456-5.184
+		C 415.584,212.16, 416,210.080, 416,208L 416,208z"  />
+<glyph unicode="&#xe03d;" d="M 102.304,377.696c-93.728-93.728-93.728-245.696,0-339.424c 93.728-93.728, 245.696-93.728, 339.424,0
+		c 93.728,93.728, 93.728,245.696,0,339.424C 347.968,471.424, 196.032,471.424, 102.304,377.696z M 390.976,89.024c-6.24-6.24-16.384-6.24-22.624,0
+		L 192,265.376l0-97.152 c0-8.832-7.168-16-16-16S 160,159.392, 160,168.224L 160,304 l0,0c0,2.080, 0.416,4.16, 1.248,6.112
+		c 0.768,1.888, 1.92,3.584, 3.328,5.024c 0.064,0.064, 0.064,0.128, 0.128,0.192C 164.736,315.36, 164.768,315.36, 164.8,315.392
+		c 1.44,1.408, 3.168,2.592, 5.056,3.36C 171.84,319.584, 173.92,320, 176,320l 135.776,0 c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 214.624,288 
+		l 176.32-176.32C 397.216,105.408, 397.216,95.296, 390.976,89.024z"  />
+<glyph unicode="&#xe03e;" d="M 102.304,377.696c-93.728-93.728-93.728-245.696,0-339.424c 93.728-93.728, 245.696-93.728, 339.424,0
+		c 93.728,93.728, 93.728,245.696,0,339.424C 347.968,471.424, 196.032,471.424, 102.304,377.696z M 384,304l0-135.776 c0-8.832-7.168-16-16-16
+		s-16,7.168-16,16L 352,265.376 l-176.32-176.32c-6.24-6.24-16.384-6.24-22.624,0c-6.24,6.24-6.24,16.384,0,22.624L 329.376,288L 232.224,288 
+		c-8.832,0-16,7.168-16,16c0,8.832, 7.168,16, 16,16L 368,320 c 2.080,0, 4.16-0.416, 6.112-1.248c 3.904-1.632, 7.040-4.736, 8.64-8.64
+		C 383.584,308.16, 384,306.080, 384,304L 384,304z"  />
+<glyph unicode="&#xe03f;" d="M 102.304,377.696c-93.728-93.728-93.728-245.696,0-339.424c 93.728-93.728, 245.696-93.728, 339.424,0
+		c 93.728,93.728, 93.728,245.696,0,339.424C 347.968,471.424, 196.032,471.424, 102.304,377.696z M 384,112c0-0.032,0-0.032,0-0.064
+		c0-2.080-0.416-4.128-1.216-6.048c-1.632-3.904-4.736-7.040-8.64-8.64C 372.16,96.416, 370.080,96, 368,96L 232.224,96 
+		c-8.832,0-16,7.168-16,16c0,8.832, 7.168,16, 16,16l 97.152,0 l-176.32,176.32c-6.24,6.24-6.24,16.384,0,22.624s 16.384,6.24, 22.624,0
+		l 176.32-176.32L 352,247.776 c0,8.832, 7.168,16, 16,16s 16-7.168, 16-16L 384,112 z"  />
+<glyph unicode="&#xe040;" d="M 102.304,377.696c-93.728-93.728-93.728-245.696,0-339.424c 93.728-93.728, 245.696-93.728, 339.424,0
+		c 93.728,93.728, 93.728,245.696,0,339.424C 347.968,471.424, 196.032,471.424, 102.304,377.696z M 390.976,304.32L 214.624,128l 97.152,0 c 8.832,0, 16-7.168, 16-16
+		c0-8.832-7.168-16-16-16L 176,96 c-2.080,0-4.16,0.416-6.112,1.248c-1.92,0.8-3.616,1.952-5.056,3.36
+		c-0.032,0.032-0.096,0.032-0.128,0.096c-0.064,0.064-0.064,0.128-0.128,0.192c-1.408,1.44-2.56,3.136-3.328,5.024
+		C 160.448,107.84, 160,109.888, 160,111.936c0,0.032,0,0.032,0,0.064L 160,247.776 c0,8.832, 7.168,16, 16,16S 192,256.608, 192,247.776l0-97.152 l 176.32,176.32
+		c 6.24,6.24, 16.384,6.24, 22.624,0S 397.216,310.592, 390.976,304.32z"  />
+<glyph unicode="&#xe041;" d="M 480,480L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,448 C 512,465.664, 497.664,480, 480,480z
+		 M 224,176l0-128 C 224,39.168, 216.832,32, 208,32S 192,39.168, 192,48l0,89.376 l-100.672-100.672c-6.24-6.24-16.384-6.24-22.624,0
+		c-6.24,6.24-6.24,16.384,0,22.624L 169.376,160L 80,160 C 71.168,160, 64,167.168, 64,176C 64,184.832, 71.168,192, 80,192l 128,0 c 2.080,0, 4.16-0.416, 6.112-1.248
+		c 3.904-1.632, 7.040-4.736, 8.64-8.64C 223.584,180.16, 224,178.080, 224,176L 224,176z M 432,288C 440.832,288, 448,280.832, 448,272C 448,263.168, 440.832,256, 432,256l-128,0 
+		C 301.92,256, 299.84,256.416, 297.888,257.248C 295.968,258.016, 294.272,259.168, 292.8,260.608C 292.768,260.64, 292.736,260.64, 292.672,260.672
+		C 292.64,260.736, 292.608,260.8, 292.576,260.864C 291.168,262.304, 290.016,264, 289.248,265.888C 288.448,267.84, 288,269.888, 288,271.936C 288,271.968, 288,271.968, 288,272l0,128 
+		C 288,408.832, 295.168,416, 304,416S 320,408.832, 320,400l0-89.376 l 100.672,100.672c 6.24,6.24, 16.384,6.24, 22.624,0c 6.24-6.24, 6.24-16.384,0-22.624
+		L 342.624,288L 432,288 z"  />
+<glyph unicode="&#xe042;" d="M 480,480L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,448 C 512,465.664, 497.664,480, 480,480z
+		 M 208,64C 216.832,64, 224,56.832, 224,48C 224,39.168, 216.832,32, 208,32l-128,0 c-2.080,0-4.16,0.416-6.112,1.248
+		c-1.92,0.8-3.616,1.952-5.056,3.36c-0.032,0.032-0.096,0.032-0.128,0.096c-0.064,0.064-0.064,0.128-0.128,0.192
+		c-1.408,1.44-2.56,3.136-3.328,5.024C 64.448,43.84, 64,45.888, 64,47.936c0,0.032,0,0.032,0,0.064l0,128 C 64,184.832, 71.168,192, 80,192
+		S 96,184.832, 96,176l0-89.376 l 100.672,100.672c 6.24,6.24, 16.384,6.24, 22.624,0c 6.24-6.24, 6.24-16.384,0-22.624L 118.624,64L 208,64 z M 448,400l0-128 
+		C 448,263.168, 440.832,256, 432,256S 416,263.168, 416,272L 416,361.376 L 315.328,260.672c-6.24-6.24-16.384-6.24-22.624,0c-6.24,6.24-6.24,16.384,0,22.624
+		L 393.376,384L 304,384 C 295.168,384, 288,391.168, 288,400C 288,408.832, 295.168,416, 304,416l 128,0 c 2.080,0, 4.16-0.416, 6.112-1.248c 3.904-1.632, 7.040-4.736, 8.64-8.64
+		C 447.584,404.16, 448,402.080, 448,400L 448,400z"  />
+<glyph unicode="&#xe043;" d="M 272-32c 132.544,0, 240,107.456, 240,240S 404.544,448, 272,448S 32,340.544, 32,208S 139.456-32, 272-32z M 156.864,179.424L 260.64,283.2
+		C 263.776,286.336, 267.872,287.872, 272,287.872c 4.128,0, 8.224-1.536, 11.36-4.672l 103.776-103.776c 6.24-6.24, 6.24-16.384,0-22.624
+		c-6.24-6.24-16.384-6.24-22.624,0L 272,249.312L 179.488,156.8c-6.24-6.24-16.384-6.24-22.624,0C 150.624,163.040, 150.624,173.184, 156.864,179.424z"  />
+<glyph unicode="&#xe044;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 387.136,236.576L 283.36,132.8
+		c-3.136-3.136-7.264-4.704-11.36-4.672c-4.128,0-8.224,1.536-11.36,4.672L 156.864,236.576c-6.24,6.24-6.24,16.384,0,22.624
+		c 6.24,6.24, 16.384,6.24, 22.624,0L 272,166.688L 364.512,259.2c 6.24,6.24, 16.384,6.24, 22.624,0C 393.376,252.96, 393.376,242.816, 387.136,236.576z"  />
+<glyph unicode="&#xe045;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 323.2,115.488
+		c 6.24-6.24, 6.24-16.384,0-22.624c-6.24-6.24-16.384-6.24-22.624,0L 196.8,196.64C 193.664,199.776, 192.128,203.872, 192.128,208
+		c0,4.128, 1.536,8.224, 4.672,11.36l 103.776,103.776c 6.24,6.24, 16.384,6.24, 22.624,0c 6.24-6.24, 6.24-16.384,0-22.624L 230.688,208
+		L 323.2,115.488z"  />
+<glyph unicode="&#xe046;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 347.2,196.64l-103.776-103.776
+		c-6.24-6.24-16.384-6.24-22.624,0c-6.24,6.24-6.24,16.384,0,22.624L 313.312,208L 220.8,300.512c-6.24,6.24-6.24,16.384,0,22.624
+		c 6.24,6.24, 16.384,6.24, 22.624,0l 103.776-103.776c 3.136-3.136, 4.704-7.264, 4.672-11.36C 351.872,203.872, 350.336,199.776, 347.2,196.64z"  />
+<glyph unicode="&#xe047;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 391.232,99.072
+		c-6.272-6.272-16.48-6.272-22.752,0l-95.872,84.8l-95.872-84.8c-6.272-6.272-16.48-6.272-22.752,0c-6.272,6.272-6.272,16.48,0,22.752
+		l 107.040,94.688c 3.2,3.2, 7.392,4.736, 11.584,4.672C 276.8,221.28, 280.992,219.744, 284.192,216.544l 107.040-94.688
+		C 397.536,115.552, 397.536,105.376, 391.232,99.072z M 391.232,213.824c-6.272-6.272-16.48-6.272-22.752,0L 272.576,298.656L 176.704,213.824
+		c-6.272-6.272-16.48-6.272-22.752,0c-6.272,6.272-6.272,16.48,0,22.752l 107.040,94.688c 3.2,3.2, 7.392,4.736, 11.584,4.672
+		C 276.8,336.032, 280.992,334.496, 284.192,331.296l 107.040-94.688C 397.536,230.304, 397.536,220.128, 391.232,213.824z"  />
+<glyph unicode="&#xe048;" d="M 273.056,445.856c-131.968,0-238.944-106.976-238.944-238.944S 141.12-32, 273.056-32S 512,74.976, 512,206.944
+		S 405.024,445.856, 273.056,445.856z M 390.048,179.392l-107.040-94.688c-3.2-3.2-7.392-4.736-11.584-4.672C 267.2,80, 263.008,81.504, 259.808,84.704
+		L 152.768,179.392c-6.272,6.272-6.272,16.48,0,22.752c 6.272,6.272, 16.48,6.272, 22.752,0l 95.872-84.8l 95.872,84.8
+		c 6.272,6.272, 16.48,6.272, 22.752,0S 396.352,185.696, 390.048,179.392z M 390.048,294.144L 283.008,199.456c-3.2-3.2-7.392-4.736-11.584-4.672
+		C 267.2,194.752, 263.008,196.256, 259.808,199.456L 152.768,294.144c-6.272,6.272-6.272,16.48,0,22.752C 159.040,323.2, 169.248,323.2, 175.52,316.928l 95.872-84.8
+		l 95.872,84.8c 6.272,6.272, 16.48,6.272, 22.752,0S 396.352,300.448, 390.048,294.144z"  />
+<glyph unicode="&#xe049;" d="M 273.152,445.728c-131.904,0-238.848-106.944-238.848-238.848C 34.272,74.944, 141.216-32, 273.152-32
+		C 405.056-32, 512,74.944, 512,206.848C 512,338.784, 405.056,445.728, 273.152,445.728z M 266.176,89.952c-6.272-6.272-16.48-6.272-22.752,0L 148.704,196.992
+		c-3.2,3.2-4.736,7.424-4.672,11.616C 144,212.8, 145.504,216.992, 148.704,220.192l 94.688,107.040c 6.272,6.272, 16.48,6.272, 22.752,0
+		s 6.272-16.48,0-22.752l-84.8-95.872l 84.8-95.872C 272.448,106.432, 272.448,96.224, 266.176,89.952z M 380.928,112.704
+		c 6.272-6.272, 6.272-16.48,0-22.752s-16.48-6.272-22.752,0L 263.456,196.992c-3.2,3.2-4.736,7.424-4.672,11.616
+		C 258.752,212.8, 260.256,216.992, 263.456,220.192l 94.688,107.040c 6.272,6.272, 16.48,6.272, 22.752,0s 6.272-16.48,0-22.752l-84.8-95.872L 380.928,112.704z
+		"  />
+<glyph unicode="&#xe04a;" d="M 273.152,445.696c-131.904,0-238.848-106.944-238.848-238.848S 141.248-32, 273.152-32S 512,74.944, 512,206.848
+		S 405.056,445.696, 273.152,445.696z M 163.072,88.768c-6.272,6.272-6.272,16.48,0,22.752l 84.8,95.872l-84.8,95.872
+		C 156.8,309.568, 156.8,319.776, 163.072,326.048s 16.48,6.272, 22.752,0l 94.688-107.040c 3.2-3.2, 4.736-7.392, 4.672-11.584
+		C 285.28,203.2, 283.744,199.008, 280.544,195.808l-94.688-107.040C 179.552,82.464, 169.376,82.464, 163.072,88.768z M 395.296,195.808l-94.688-107.040
+		c-6.272-6.272-16.48-6.272-22.752,0s-6.272,16.48,0,22.752l 84.8,95.872l-84.8,95.872c-6.272,6.272-6.272,16.48,0,22.752
+		s 16.48,6.272, 22.752,0l 94.688-107.040c 3.2-3.2, 4.736-7.392, 4.672-11.584C 400,203.2, 398.496,199.008, 395.296,195.808z"  />
+<glyph unicode="&#xe04b;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 379.584,165.568
+		l-0.064,0.064C 376.992,162.208, 373.44,160, 369.44,160l-195.52,0 c-3.936,0-7.456,2.080-9.984,5.408C 163.904,165.472, 163.84,165.504, 163.776,165.568
+		c-5.44,6.944-5.44,18.208,0,25.152l 97.76,123.424c 0.128,0.192, 0.192,0.448, 0.352,0.64c 5.44,6.944, 14.304,6.944, 19.744,0l 97.984-124.064
+		C 385.056,183.776, 385.056,172.512, 379.584,165.568z"  />
+<glyph unicode="&#xe04c;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 379.584,225.28l-97.76-123.424
+		c-0.128-0.192-0.192-0.448-0.352-0.64c-5.44-6.944-14.304-6.944-19.744,0L 163.776,225.28c-5.44,6.944-5.44,18.208,0,25.152L 163.84,250.368
+		C 166.368,253.792, 169.92,256, 173.92,256l 195.52,0 c 3.936,0, 7.456-2.080, 9.984-5.408c 0.064-0.064, 0.128-0.064, 0.16-0.128
+		C 385.056,243.488, 385.056,232.224, 379.584,225.28z"  />
+<glyph unicode="&#xe04d;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 320,110.56
+		c0-3.936-2.080-7.456-5.408-9.984c-0.064-0.064-0.064-0.128-0.128-0.16c-6.944-5.44-18.208-5.44-25.152,0L 165.856,198.144
+		c-0.192,0.16-0.448,0.192-0.64,0.352c-6.944,5.44-6.944,14.304,0,19.744L 289.28,316.224c 6.944,5.44, 18.208,5.44, 25.152,0L 314.368,316.16
+		C 317.792,313.632, 320,310.080, 320,306.080L 320,110.56 z"  />
+<glyph unicode="&#xe04e;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 378.784,198.4L 254.72,100.416
+		c-6.944-5.44-18.208-5.44-25.152,0l 0.064,0.064C 226.208,103.008, 224,106.56, 224,110.56l0,195.52 c0,3.936, 2.080,7.456, 5.408,9.984
+		C 229.472,316.096, 229.504,316.16, 229.568,316.224c 6.944,5.44, 18.208,5.44, 25.152,0l 123.424-97.76c 0.192-0.16, 0.448-0.192, 0.64-0.352
+		C 385.728,212.672, 385.728,203.84, 378.784,198.4z"  />
+<glyph unicode="&#xe04f;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 400,192l-256,0 
+		C 135.168,192, 128,199.168, 128,208C 128,216.832, 135.168,224, 144,224l 256,0 C 408.832,224, 416,216.832, 416,208C 416,199.168, 408.832,192, 400,192z"  />
+<glyph unicode="&#xe050;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 400,192L 288,192 l0-112 
+		C 288,71.168, 280.832,64, 272,64S 256,71.168, 256,80L 256,192 L 144,192 C 135.168,192, 128,199.168, 128,208C 128,216.832, 135.168,224, 144,224L 256,224 L 256,336 C 256,344.832, 263.168,352, 272,352
+		S 288,344.832, 288,336L 288,224 l 112,0 C 408.832,224, 416,216.832, 416,208C 416,199.168, 408.832,192, 400,192z"  />
+<glyph unicode="&#xe051;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 383.2,296.576L 294.016,207.392
+		l 78.912-87.968c 6.24-6.24, 6.24-16.384,0-22.624s-16.384-6.24-22.624,0L 271.392,184.768l-87.968-87.968c-6.24-6.24-16.384-6.24-22.624,0
+		c-6.24,6.24-6.24,16.384,0,22.624l 89.184,89.184L 171.072,296.576c-6.24,6.24-6.24,16.384,0,22.624c 6.24,6.24, 16.384,6.24, 22.624,0
+		l 78.912-87.968l 87.968,87.968c 6.24,6.24, 16.384,6.24, 22.624,0C 389.44,312.96, 389.44,302.816, 383.2,296.576z"  />
+<glyph unicode="&#xe052;" d="M 257.344,480c-141.376,0-256-114.624-256-256s 114.624-256, 256-256s 256,114.624, 256,256S 398.72,480, 257.344,480z M 375.936,294.816l-122.624-187.424
+		c-0.032-0.032-0.096-0.064-0.096-0.096c-0.64-0.96-0.992-2.048-1.792-2.944c-1.12-1.216-2.56-1.856-3.84-2.784
+		c-0.32-0.224-0.64-0.48-0.992-0.704c-1.984-1.248-4.032-2.080-6.272-2.624c-0.736-0.192-1.408-0.384-2.176-0.512
+		c-1.824-0.256-3.552-0.256-5.376-0.064c-1.28,0.096-2.496,0.256-3.744,0.576c-1.28,0.352-2.464,0.896-3.68,1.472
+		c-1.024,0.48-2.112,0.608-3.072,1.216c-0.704,0.448-1.088,1.152-1.696,1.696c-0.256,0.224-0.576,0.288-0.832,0.512L 148.352,169.152
+		C 139.264,177.568, 138.72,191.744, 147.104,200.8s 22.56,9.632, 31.648,1.248l 51.68-47.808l 108,165.088c 6.784,10.336, 20.64,13.248, 31.008,6.496
+		C 379.808,319.040, 382.72,305.152, 375.936,294.816z"  />
+<glyph unicode="&#xe053;" d="M 304,480C 189.12,480, 96,386.88, 96,272c0-49.44, 17.312-94.752, 46.112-130.464l-135.584-135.584
+		c-8.672-8.672-8.672-22.752,0-31.424c 8.672-8.672, 22.752-8.672, 31.424,0l 135.584,135.584C 209.248,81.312, 254.56,64, 304,64
+		c 114.88,0, 208,93.12, 208,208S 418.88,480, 304,480z M 400,256l-192,0 C 199.168,256, 192,263.168, 192,272C 192,280.832, 199.168,288, 208,288l 192,0 C 408.832,288, 416,280.832, 416,272
+		C 416,263.168, 408.832,256, 400,256z"  />
+<glyph unicode="&#xe054;" d="M 304,480C 189.12,480, 96,386.88, 96,272c0-49.44, 17.312-94.752, 46.112-130.464l-135.584-135.584
+		c-8.672-8.672-8.672-22.752,0-31.424c 8.672-8.672, 22.752-8.672, 31.424,0l 135.584,135.584C 209.248,81.312, 254.56,64, 304,64
+		c 114.88,0, 208,93.12, 208,208S 418.88,480, 304,480z M 400,256L 320,256 l0-80 C 320,167.168, 312.832,160, 304,160C 295.168,160, 288,167.168, 288,176L 288,256 L 208,256 
+		C 199.168,256, 192,263.168, 192,272C 192,280.832, 199.168,288, 208,288L 288,288 L 288,368 C 288,376.832, 295.168,384, 304,384C 312.832,384, 320,376.832, 320,368L 320,288 l 80,0 
+		C 408.832,288, 416,280.832, 416,272C 416,263.168, 408.832,256, 400,256z"  />
+<glyph unicode="&#xe055;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 352,160c0-17.664-14.336-32-32-32L 192,128 
+		c-17.664,0-32,14.336-32,32L 160,288 c0,17.664, 14.336,32, 32,32l 128,0 c 17.664,0, 32-14.336, 32-32L 352,160 z"  />
+<glyph unicode="&#xe056;" d="M 480,448L 64,448 C 46.336,448, 32,433.664, 32,416l0-416 c0-17.664, 14.336-32, 32-32l 416,0 c 17.664,0, 32,14.336, 32,32L 512,416 C 512,433.664, 497.664,448, 480,448z
+		 M 400,96l-256,0 C 135.168,96, 128,103.168, 128,112C 128,120.832, 135.168,128, 144,128l 256,0 c 8.832,0, 16-7.168, 16-16C 416,103.168, 408.832,96, 400,96z
+		 M 400,192l-256,0 C 135.168,192, 128,199.168, 128,208C 128,216.832, 135.168,224, 144,224l 256,0 C 408.832,224, 416,216.832, 416,208C 416,199.168, 408.832,192, 400,192z M 400,288l-256,0 
+		C 135.168,288, 128,295.168, 128,304C 128,312.832, 135.168,320, 144,320l 256,0 C 408.832,320, 416,312.832, 416,304C 416,295.168, 408.832,288, 400,288z"  />
+<glyph unicode="&#xe057;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 400,96l-256,0 
+		C 135.168,96, 128,103.168, 128,112C 128,120.832, 135.168,128, 144,128l 256,0 c 8.832,0, 16-7.168, 16-16C 416,103.168, 408.832,96, 400,96z M 400,192l-256,0 
+		C 135.168,192, 128,199.168, 128,208C 128,216.832, 135.168,224, 144,224l 256,0 C 408.832,224, 416,216.832, 416,208C 416,199.168, 408.832,192, 400,192z M 400,288l-256,0 
+		C 135.168,288, 128,295.168, 128,304C 128,312.832, 135.168,320, 144,320l 256,0 C 408.832,320, 416,312.832, 416,304C 416,295.168, 408.832,288, 400,288z"  />
+<glyph unicode="&#xe058;" d="M 64-32l 385.344,0 c 17.664,0, 32,14.336, 32,32L 481.344,448 c0,17.664-14.336,32-32,32L 64,480 C 46.336,480, 32,465.664, 32,448l0-448 C 32-17.664, 46.336-32, 64-32z
+		 M 240,384l 129.344,0 c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 240,352 C 231.168,352, 224,359.168, 224,368C 224,376.832, 231.168,384, 240,384z M 144,288
+		l 225.344,0 c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 144,256 C 135.168,256, 128,263.168, 128,272C 128,280.832, 135.168,288, 144,288z M 144,192l 225.344,0 
+		c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 144,160 C 135.168,160, 128,167.168, 128,176C 128,184.832, 135.168,192, 144,192z M 144,96l 225.344,0 
+		c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 144,64 C 135.168,64, 128,71.168, 128,80C 128,88.832, 135.168,96, 144,96z"  />
+<glyph unicode="&#xe059;" d="M 64,32l 32,0 l0-32 c0-17.664, 14.336-32, 32-32l 320,0 c 17.664,0, 32,14.336, 32,32L 480,384 c0,17.664-14.336,32-32,32l-32,0 L 416,448 c0,17.664-14.336,32-32,32L 64,480 
+		C 46.336,480, 32,465.664, 32,448l0-384 C 32,46.336, 46.336,32, 64,32z M 448,384l0-384 L 128,0 l0,32 l 256,0 c 17.664,0, 32,14.336, 32,32L 416,384 L 448,384 z M 336,416C 344.832,416, 352,408.832, 352,400
+		C 352,391.168, 344.832,384, 336,384L 206.656,384 c-8.832,0-16,7.168-16,16c0,8.832, 7.168,16, 16,16L 336,416 z M 110.656,320L 336,320 
+		C 344.832,320, 352,312.832, 352,304C 352,295.168, 344.832,288, 336,288L 110.656,288 c-8.832,0-16,7.168-16,16C 94.656,312.832, 101.824,320, 110.656,320z M 110.656,224L 336,224 
+		C 344.832,224, 352,216.832, 352,208C 352,199.168, 344.832,192, 336,192L 110.656,192 c-8.832,0-16,7.168-16,16C 94.656,216.832, 101.824,224, 110.656,224z M 110.656,128
+		L 336,128 c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 110.656,96 c-8.832,0-16,7.168-16,16C 94.656,120.832, 101.824,128, 110.656,128z"  />
+<glyph unicode="&#xe05a;" d="M 480,480L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,448 C 512,465.664, 497.664,480, 480,480z
+		 M 89.184,333.248c-15.904,15.904-15.904,41.664,0,57.568c 15.904,15.904, 41.664,15.904, 57.568,0L 189.12,348.448L 131.552,290.88L 89.184,333.248z
+		 M 329.92,92.512l-164.48,164.48L 223.008,314.56l 164.48-164.48L 416,64L 329.92,92.512z"  />
+<glyph unicode="&#xe05b;" d="M 480,384l-160,0 C 302.336,384, 288,369.664, 288,352c0,0-4.16-29.344-32-32L 32,320 C 14.336,320,0,306.176,0,288.512L0,0 c0-17.664, 14.336-32, 32-32l 448,0 
+		c 17.664,0, 32,14.336, 32,32L 512,256 L 512,288.512 L 512,352 C 512,369.664, 497.664,384, 480,384z"  />
+<glyph unicode="&#xe05c;" d="M 480,416l-160,0 C 302.336,416, 288,401.664, 288,384c0,0-4.16-29.344-32-32L 32,352 C 14.336,352,0,338.176,0,320.512L0,288 l 512,0 L 512,320.512 L 512,384 
+		C 512,401.664, 497.664,416, 480,416zM0,0c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,256 L0,256 L0,0 z"  />
+<glyph unicode="&#xe05d;" d="M 480,384l-128,0 c-17.664,0-32-14.336-32-32c0,0-4.16-29.344-32-32L 64,320 C 46.336,320, 32,305.664, 32,288l0-288 c0-17.664, 14.336-32, 32-32l 416,0 
+		c 17.664,0, 32,14.336, 32,32L 512,352 C 512,369.664, 497.664,384, 480,384z M 368,128L 288,128 l0-80 C 288,39.168, 280.832,32, 272,32S 256,39.168, 256,48L 256,128 L 176,128 
+		C 167.168,128, 160,135.168, 160,144C 160,152.832, 167.168,160, 176,160L 256,160 L 256,240 C 256,248.832, 263.168,256, 272,256S 288,248.832, 288,240L 288,160 l 80,0 c 8.832,0, 16-7.168, 16-16
+		C 384,135.168, 376.832,128, 368,128z"  />
+<glyph unicode="&#xe05e;" d="M 480,416l-160,0 C 302.336,416, 288,401.664, 288,384c0,0-4.16-29.344-32-32L 32,352 C 14.336,352,0,338.176,0,320.512L0,32 c0-17.664, 14.336-32, 32-32l 192.096,0 
+		l0,160 L 156.192,160 l 99.904,128l 99.904-128L 288.096,160 l0-160 L 480,0 c 17.664,0, 32,14.336, 32,32L 512,288 L 512,320.512 L 512,384 C 512,401.664, 497.664,416, 480,416z"  />
+<glyph unicode="&#xe05f;" d="M 480,416l-160,0 C 302.336,416, 288,401.664, 288,384c0,0-4.16-29.344-32-32L 32,352 C 14.336,352,0,338.176,0,320.512L0,32 c0-17.664, 14.336-32, 32-32l 448,0 
+		c 17.664,0, 32,14.336, 32,32L 512,288 L 512,320.512 L 512,384 C 512,401.664, 497.664,416, 480,416z M 256.096,0.192l-99.904,128l 67.904,0 l0,128 c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32l0-128 l 67.904,0 
+		L 256.096,0.192z"  />
+<glyph unicode="&#xe060;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 224,256c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32l0-160 
+		c0-17.664-14.336-32-32-32s-32,14.336-32,32L 224,256 z M 256,319.488c-17.664,0-32,14.336-32,32c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32C 288,333.824, 273.664,319.488, 256,319.488
+		z"  />
+<glyph unicode="&#xe061;" d="M 256-32c 141.376,0, 256,114.624, 256,256s-114.624,256-256,256S0,365.376,0,224S 114.624-32, 256-32z M 288,192c0-17.664-14.336-32-32-32S 224,174.336, 224,192
+		L 224,352 c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32L 288,192 z M 256,128.512c 17.664,0, 32-14.336, 32-32c0-17.664-14.336-32-32-32s-32,14.336-32,32
+		C 224,114.176, 238.336,128.512, 256,128.512z"  />
+<glyph unicode="&#xe062;" d="M 371.424,470.624C 365.408,476.64, 357.28,480, 348.768,480L 163.232,480 c-8.48,0-16.64-3.36-22.624-9.376l-131.2-131.232
+		C 3.36,333.408,0,325.28,0,316.768l0-185.568 c0-8.48, 3.36-16.64, 9.376-22.624l 131.2-131.232C 146.592-28.64, 154.72-32, 163.232-32l 185.568,0 
+		c 8.48,0, 16.64,3.36, 22.624,9.376l 131.2,131.232C 508.64,114.592, 512,122.72, 512,131.232L 512,316.768 c0,8.48-3.36,16.64-9.376,22.624L 371.424,470.624z
+		 M 256,160c-17.664,0-32,14.336-32,32L 224,384 c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32l0-192 C 288,174.336, 273.664,160, 256,160z M 288,64c0-17.664-14.336-32-32-32s-32,14.336-32,32
+		c0,17.664, 14.336,32, 32,32S 288,81.664, 288,64z"  />
+<glyph unicode="&#xe063;" d="M 32.992-32l 444.992,0 c 11.232,0, 21.664,5.888, 27.456,15.552c 5.792,9.632, 6.080,21.6, 0.8,31.52l-222.016,416
+		C 278.688,441.472, 267.84,448, 256.032,448L 256,448 C 244.192,448, 233.376,441.504, 227.808,431.104l-223.008-416c-5.312-9.92-5.024-21.888, 0.736-31.552
+		C 11.328-26.080, 21.76-32, 32.992-32z M 256,96c 17.664,0, 32-14.336, 32-32c0-17.664-14.336-32-32-32s-32,14.336-32,32C 224,81.664, 238.336,96, 256,96z M 224,159.488
+		l0,128 c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32l0-128 c0-17.664-14.336-32-32-32S 224,141.824, 224,159.488z"  />
+<glyph unicode="&#xe064;" d="M 256-32c 141.376,0, 256,114.624, 256,256s-114.624,256-256,256S0,365.376,0,224S 114.624-32, 256-32z M 256,416c 63.712,0, 128-36.48, 128-118.016
+		c0-47.456-23.52-84.512-69.888-110.016C 300.672,180.576, 288,165.952, 288,160c0-17.664-14.336-32-32-32s-32,14.336-32,32c0,40.608, 37.248,71.936, 59.264,84.032
+		C 315.616,261.888, 320,281.344, 320,297.984C 320,344.992, 279.904,352, 256,352C 225.184,352, 192,331.776, 192,287.328c0-17.664-14.336-32-32-32s-32,14.336-32,32
+		C 128,370.912, 193.952,416, 256,416z M 256,30.592c-18.208,0-32.96,14.752-32.96,32.96s 14.752,32.96, 32.96,32.96s 32.96-14.752, 32.96-32.96S 274.208,30.592, 256,30.592z
+		"  />
+<glyph unicode="&#xe065;" d="M 81.248,88.288C 71.872,64.064, 55.968,32.384, 28.992,0c 51.168,0, 116.992,6.72, 167.712,37.824
+		C 215.776,34.144, 235.552,32, 256,32c 141.376,0, 256,93.12, 256,208S 397.376,448, 256,448S0,354.88,0,240C0,180.096, 31.36,126.24, 81.248,88.288z"  />
+<glyph unicode="&#xe066;" d="M 446.56,291.36c 2.816-12.672, 4.448-25.696, 4.448-39.072c0-103.296-87.68-189.408-203.136-207.904
+		c 24.416-9.856, 51.776-15.616, 80.928-15.616c 27.488,0, 53.44,5.056, 76.864,13.856c 29.664-10.112, 62.048-12.736, 88.832-12.736
+		c-13.92,16.704-23.584,33.088-30.496,47.488C 493.696,103.872, 512,138.976, 512,177.632C 512,223.328, 486.496,264.064, 446.56,291.36zM 403.008,252.288C 403.008,342.688, 312.8,416, 201.504,416S0,342.688,0,252.288c0-47.168, 24.672-89.536, 63.968-119.424
+		c-7.392-19.072-19.904-44-41.12-69.504c 40.256,0, 92.096,5.28, 132,29.792c 15.008-2.912, 30.592-4.608, 46.656-4.608
+		C 312.8,88.576, 403.008,161.856, 403.008,252.288z"  />
+<glyph unicode="&#xe067;" d="M 32,91.936l 73.44,0 c 5.792-5.76, 139.232-118.080, 139.232-118.080c 8.032-4.864, 14.848-6.272, 20.672-5.728
+		c 11.84,1.12, 20.16,11.040, 22.688,21.504C 288.16-9.344, 288.16,457.344, 288,458.368C 285.504,468.864, 277.152,478.784, 265.344,479.904
+		C 259.52,480.448, 252.704,479.040, 244.672,474.176c0,0-133.44-116.416-139.232-122.176L 32,352 C 14.336,352,0,337.664,0,320l0-4.064 L0,128 l0-4.064 
+		C0,106.24, 14.336,91.936, 32,91.936zM 506.272,306.848c-7.616,7.616-20,7.616-27.616,0l-55.232-55.232l-55.232,55.232
+		c-7.616,7.616-20,7.616-27.616,0c-7.616-7.616-7.616-20,0-27.616L 395.808,224l-55.232-55.232c-7.616-7.616-7.616-20,0-27.616
+		c 7.616-7.616, 20-7.616, 27.616,0l 55.232,55.232l 55.232-55.232c 7.616-7.616, 20-7.616, 27.616,0c 7.616,7.616, 7.616,20,0,27.616
+		L 451.040,224l 55.232,55.232C 513.92,286.848, 513.92,299.232, 506.272,306.848z"  />
+<glyph unicode="&#xe068;" d="M 329.344,479.904C 323.52,480.448, 316.704,479.040, 308.672,474.176c0,0-133.44-116.416-139.232-122.176L 96,352 C 78.336,352, 64,337.664, 64,320l0-4.064 
+		L 64,128 l0-4.064 c0-17.664, 14.336-32, 32-32l 73.44,0 c 5.792-5.76, 139.232-118.080, 139.232-118.080c 8.032-4.864, 14.848-6.272, 20.672-5.728
+		c 11.84,1.12, 20.16,11.040, 22.688,21.504c 0.16,1.024, 0.16,467.744,0,468.736C 349.504,468.864, 341.152,478.784, 329.344,479.904zM 401.312,168.096c-7.904-4-11.072-13.6-7.104-21.504c 2.816-5.568, 8.448-8.8, 14.272-8.8
+		c 2.432,0, 4.864,0.544, 7.2,1.696C 448.032,155.808, 468.128,188.16, 468.128,224s-20.096,68.192-52.448,84.512
+		c-7.904,4-17.504,0.8-21.472-7.104c-3.968-7.904-0.8-17.504, 7.104-21.504C 422.784,269.088, 436.128,247.68, 436.128,224
+		S 422.784,178.912, 401.312,168.096z"  />
+<glyph unicode="&#xe069;" d="M 32,91.936l 73.44,0 c 5.792-5.76, 139.232-118.080, 139.232-118.080c 8.032-4.864, 14.848-6.272, 20.672-5.728
+		c 11.84,1.12, 20.16,11.040, 22.688,21.504C 288.16-9.344, 288.16,457.344, 288,458.368C 285.504,468.864, 277.152,478.784, 265.344,479.904
+		C 259.52,480.448, 252.704,479.040, 244.672,474.176c0,0-133.44-116.416-139.232-122.176L 32,352 C 14.336,352,0,337.664,0,320l0-4.064 L0,128 l0-4.064 
+		C0,106.24, 14.336,91.936, 32,91.936zM 337.312,168.096c-7.904-4-11.072-13.6-7.104-21.504c 2.816-5.568, 8.448-8.8, 14.272-8.8
+		c 2.432,0, 4.864,0.544, 7.2,1.696C 384.032,155.808, 404.128,188.16, 404.128,224s-20.096,68.192-52.448,84.512
+		c-7.904,4-17.472,0.8-21.472-7.104c-3.968-7.904-0.8-17.504, 7.104-21.504C 358.784,269.088, 372.128,247.68, 372.128,224
+		S 358.784,178.912, 337.312,168.096zM 315.296,40.352c 1.504-7.648, 8.192-12.928, 15.68-12.928c 1.024,0, 2.048,0.096, 3.104,0.288
+		C 427.904,46.016, 496,128.576, 496,224s-68.096,177.984-161.952,196.288C 325.504,422.016, 316.96,416.32, 315.296,407.648
+		C 313.6,398.976, 319.264,390.56, 327.936,388.864C 406.784,373.504, 464,304.16, 464,224s-57.216-149.504-136.064-164.864
+		C 319.264,57.44, 313.6,49.024, 315.296,40.352z"  />
+<glyph unicode="&#xe06a;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 384.416,228.672
+		c-1.984-32.832-16.8-81.984-76.096-129.824c-2.848-2.272-6.176-3.392-9.504-3.392c-4.64,0-9.216,2.144-12.256,6.24
+		c-5.248,7.040-4.032,17.152, 2.752,22.592c 48.288,38.944, 61.504,77.088, 63.84,103.264c-6.816-3.968-14.528-6.4-22.88-6.4
+		c-26.048,0-47.136,21.92-47.136,48.96c0,27.040, 21.088,48.96, 47.136,48.96c 5.888,0, 11.296-1.536, 16.448-3.616L 346.528,315.84
+		c0,0, 2.272-0.832, 5.44-2.592c 0.16-0.096, 0.32-0.128, 0.48-0.192c 0.096-0.064, 0.16-0.128, 0.256-0.192
+		c 2.176-1.248, 4.672-2.912, 7.456-5.28c 1.184-1.024, 2.176-2.208, 3.264-3.328C 375.040,292.704, 387.776,270.656, 384.416,228.672z M 175.104,221.152
+		c-26.048,0-47.136,21.92-47.136,48.96c0,27.040, 21.12,48.96, 47.136,48.96c 5.888,0, 11.296-1.536, 16.448-3.616L 191.392,315.84
+		c0,0, 2.272-0.832, 5.44-2.592c 0.16-0.096, 0.32-0.128, 0.48-0.192c 0.096-0.064, 0.16-0.128, 0.256-0.192
+		C 199.744,311.616, 202.24,309.952, 205.024,307.584c 1.184-1.024, 2.176-2.208, 3.264-3.328c 11.616-11.552, 24.384-33.6, 20.992-75.616
+		c-1.984-32.832-16.8-81.984-76.096-129.824c-2.848-2.272-6.176-3.392-9.504-3.392c-4.64,0-9.216,2.144-12.256,6.24
+		c-5.248,7.040-4.032,17.152, 2.752,22.592c 48.288,38.944, 61.504,77.088, 63.84,103.264C 191.168,223.616, 183.456,221.152, 175.104,221.152z"  />
+<glyph unicode="&#xe06b;" d="M 104.128,375.872c-93.312-93.312-93.312-244.608,0-337.888s 244.608-93.312, 337.888,0c 93.312,93.312, 93.312,244.608,0,337.888
+		C 348.704,469.184, 197.408,469.184, 104.128,375.872z M 400,192L 272.64,192 C 272.416,192, 272.224,191.872, 272,191.872c-8.832,0-16,7.168-16,16L 256,368 
+		C 256,376.832, 263.168,384, 272,384S 288,376.832, 288,368L 288,224 l 112,0 C 408.832,224, 416,216.832, 416,208C 416,199.168, 408.832,192, 400,192z"  />
+<glyph unicode="&#xe06c;" d="M 256,480C 166.272,480, 93.536,407.264, 93.536,317.536L 93.536,288 L 64,288 C 46.336,288, 32,273.664, 32,256l0-256 c0-17.664, 14.336-32, 32-32l 384,0 
+		c 17.664,0, 32,14.336, 32,32L 480,256 c0,17.664-14.336,32-32,32l-29.536,0 L 418.464,317.536 C 418.464,407.264, 345.728,480, 256,480z M 157.536,317.536C 157.536,371.84, 201.696,416, 256,416
+		s 98.464-44.16, 98.464-98.464L 354.464,288 L 157.536,288 L 157.536,317.536 z M 256,64c-35.36,0-64,28.64-64,64c0,35.36, 28.64,64, 64,64s 64-28.64, 64-64C 320,92.64, 291.36,64, 256,64z"  />
+<glyph unicode="&#xe06d;" d="M 416,288L 125.536,288 L 125.536,317.536 C 125.536,371.84, 169.696,416, 224,416c 35.776,0, 66.912-19.328, 84.128-47.968
+	c 0.16,0.192, 0.448,0.288, 0.64,0.48c 5.792-8.256, 14.912-14.016, 25.76-14.016c 17.664,0, 32,14.336, 32,32c0,4.32-0.896,8.448-2.464,12.224
+	c-0.128,0.224-0.224,0.48-0.352,0.704c-1.408,3.2-3.424,6.016-5.76,8.544C 328.832,451.2, 280.064,480, 224,480C 134.272,480, 61.536,407.264, 61.536,317.536
+	L 61.536,288 L 32,288 C 14.336,288,0,273.664,0,256l0-256 c0-17.664, 14.336-32, 32-32l 384,0 c 17.664,0, 32,14.336, 32,32L 448,256 C 448,273.664, 433.664,288, 416,288z M 224,64c-35.36,0-64,28.64-64,64
+	s 28.64,64, 64,64s 64-28.64, 64-64S 259.36,64, 224,64z"  />
+<glyph unicode="&#xe06e;" d="M 496,480l-64,0 c-3.872,0-7.616-1.408-10.56-3.968L 200.576,282.4C 189.152,284.8, 171.488,288, 160,288c-88.224,0-160-71.776-160-160
+		s 71.776-160, 160-160s 160,71.776, 160,160c0,26.208-4.992,43.776-10.656,58.368l 54.464,18.496c 6.624,2.24, 11.008,8.544, 10.848,15.52l-1.344,60.736
+		l 61.12,4.256c 8.192,0.576, 14.624,7.264, 14.88,15.456l 2.272,72.928l 47.872,10.624C 506.784,385.984, 512,392.512, 512,400l0,64 
+		C 512,472.832, 504.832,480, 496,480z M 112,128c 19.2,0, 35.776-11.296, 43.456-27.584C 158.368,94.208, 160,87.296, 160,80C 160,53.504, 138.496,32, 112,32
+		S 64,53.504, 64,80S 85.504,128, 112,128z"  />
+<glyph unicode="&#xe06f;" d="M 416,224c-1.12,0-2.176-0.288-3.264-0.32C 414.88,234.112, 416,244.928, 416,256c0,88.352-71.648,160-160,160S 96,344.352, 96,256
+		c0-0.544, 0.16-1.056, 0.16-1.6C 41.888,246.656,0,200.416,0,144c0-56.384, 41.792-102.56, 96-110.4L 96,32 l 320,0 c 53.024,0, 96,42.976, 96,96S 469.024,224, 416,224z
+		"  />
+<glyph unicode="&#xe070;" d="M 416,224c-1.12,0-2.176-0.288-3.264-0.32C 414.88,234.112, 416,244.928, 416,256c0,88.352-71.648,160-160,160S 96,344.352, 96,256
+	c0-0.544, 0.16-1.056, 0.16-1.6C 41.888,246.656,0,200.416,0,144C0,82.144, 50.144,32, 112,32l 80.256,0 C 209.792,32, 224,46.208, 224,63.744L 224,160 L 156.096,160 
+	L 256,288l 99.904-128L 288,160 l0-96.256 C 288,46.208, 302.208,32, 319.744,32L 416,32 c 53.024,0, 96,42.976, 96,96S 469.024,224, 416,224z"  />
+<glyph unicode="&#xe071;" d="M 416,224c-1.12,0-2.176-0.288-3.264-0.32C 414.88,234.112, 416,244.928, 416,256c0,88.352-71.648,160-160,160S 96,344.352, 96,256
+		c0-0.544, 0.16-1.056, 0.16-1.6C 41.888,246.656,0,200.416,0,144c0-56.384, 41.792-102.56, 96-110.4L 96,32 l 160,0 l-99.904,128L 224,160 L 224,288 c0,17.664, 14.336,32, 32,32
+		s 32-14.336, 32-32l0-128 l 67.904,0 L 256,32l 160,0 c 53.024,0, 96,42.976, 96,96S 469.024,224, 416,224z"  />
+<glyph unicode="&#xe072;" d="M 434.816,221.504c 2.272,6.080, 4.16,12.352, 5.792,18.656c 0.288,1.088, 0.64,2.112, 0.896,3.2
+		c 1.44,5.92, 2.464,11.968, 3.328,18.048c 0.192,1.408, 0.544,2.816, 0.704,4.224C 446.4,273.024, 446.88,280.48, 446.88,288c0,105.856-86.144,192-192,192
+		s-192-86.144-192-192c0-7.52, 0.48-14.976, 1.376-22.336C 64.416,264.224, 64.736,262.848, 64.928,261.44c 0.864-6.080, 1.888-12.128, 3.328-18.048
+		c 0.256-1.088, 0.608-2.144, 0.896-3.2c 1.632-6.304, 3.52-12.576, 5.792-18.656c 0.224-0.576, 0.48-1.152, 0.672-1.728
+		c 2.528-6.56, 5.344-12.992, 8.576-19.232C 84.32,200.32, 84.448,200.096, 84.576,199.872c 3.36-6.464, 7.072-12.736, 11.168-18.816
+		c 0.128-0.192, 0.256-0.352, 0.352-0.544c 4-5.92, 8.352-11.584, 12.992-17.056c 0.384-0.448, 0.736-0.864, 1.12-1.312
+		c 4.224-4.896, 8.8-9.536, 13.536-14.016c 1.056-0.992, 2.048-1.984, 3.136-2.944c 1.408-1.248, 2.656-2.656, 4.128-3.872
+		c 0.864-0.736, 1.92-1.216, 2.88-1.824c 3.168-2.624, 6.176-5.376, 9.536-7.808c 1.344-0.96, 2.176-1.888, 3.328-2.848
+		C 168.832,110.496, 158.048,96, 182.624,96c 3.424,0, 112.256,0, 144.512,0c 24.544,0, 13.792,14.496, 35.904,32.832c 1.152,0.96, 1.984,1.856, 3.328,2.848
+		c 3.36,2.432, 6.368,5.184, 9.536,7.808c 0.928,0.64, 1.984,1.088, 2.88,1.824c 1.44,1.216, 2.72,2.624, 4.128,3.872
+		c 1.056,0.96, 2.080,1.984, 3.136,2.944c 4.736,4.48, 9.28,9.12, 13.536,14.016c 0.384,0.448, 0.736,0.864, 1.12,1.312
+		c 4.64,5.472, 8.992,11.136, 12.992,17.056c 0.128,0.192, 0.256,0.352, 0.352,0.544c 4.064,6.048, 7.776,12.32, 11.136,18.784
+		c 0.128,0.224, 0.256,0.48, 0.384,0.704c 3.232,6.24, 6.048,12.672, 8.576,19.232C 434.336,220.384, 434.592,220.928, 434.816,221.504z M 368,286.496
+		c-8.832,0-16,7.168-16,16C 352,351.264, 308,384, 272,384C 263.168,384, 256,391.168, 256,400S 263.168,416, 272,416C 327.008,416, 384,375.488, 384,302.496
+		C 384,293.664, 376.832,286.496, 368,286.496zM 252.928,0L 217.76,0 L 182.624,0 l 57.696-29.504c 4.576-2.336, 9.568-3.52, 14.56-3.52c 4.928,0, 9.888,1.152, 14.432,3.424
+		L 327.84,0L 292.352,0 L 256.864,0 L 252.928,0 zM 352,48c0,8.832-7.168,16-16,16l-160,0 C 167.168,64, 160,56.832, 160,48C 160,39.168, 167.168,32, 176,32l 160,0 
+		C 344.832,32, 352,39.168, 352,48z"  />
+<glyph unicode="&#xe073;" d="M 480,352L 289.344,352 l0-96 L 512,256 L 512,320 C 512,337.664, 497.664,352, 480,352zM 32,352C 14.336,352,0,337.664,0,320l0-64 l 224,0 L 224,352 L 32,352 zM 32,224l0-224 c0-17.664, 14.336-32, 32-32l 160,0 L 224,224 L 32,224 zM 448-32c 17.664,0, 32,14.336, 32,32L 480,224 L 289.344,224 l0-256 L 448-32 zM 255.968,384.256l 0.096,0 C 256.032,384.192, 256,384.064, 256,384l 33.344,0 C 317.664,384, 357.76,384, 384,384c 44.192,0, 64,21.504, 64,48
+		S 428.192,480, 384,480c-41.376,0-73.952-18.624-96-40.224C 278.336,445.504, 267.168,448.992, 255.072,448.992c-11.584,0-22.304-3.264-31.712-8.576
+		C 201.344,461.76, 168.96,480, 128,480C 83.808,480, 64,458.496, 64,432S 83.808,384, 128,384c 26.656,0, 67.616,0, 96,0l 32,0 C 256,384.064, 255.968,384.192, 255.968,384.256z M 416,432
+		C 416,418.784, 398.592,416, 384,416L 311.328,416 C 311.072,416.448, 310.848,416.928, 310.592,417.344C 326.848,433.152, 351.488,448, 384,448C 398.592,448, 416,445.216, 416,432z M 96,432
+		C 96,445.216, 113.408,448, 128,448c 31.808,0, 55.936-14.24, 72.192-29.504C 199.68,417.696, 199.296,416.832, 198.816,416L 128,416 C 113.408,416, 96,418.784, 96,432z"  />
+<glyph unicode="&#xe074;" d="M 26.496,195.904L 256,394.816l 229.504-198.912C 488.544,193.28, 492.288,192, 496,192c 4.48,0, 8.928,1.888, 12.096,5.504
+		c 5.792,6.688, 5.056,16.768-1.6,22.592l-240,208c-6.016,5.216-14.944,5.216-20.96,0L 160,353.984L 160,384 c0,17.664-14.336,32-32,32S 96,401.664, 96,384l0-85.472 
+		L 5.504,220.096c-6.656-5.792-7.392-15.904-1.6-22.592C 9.728,190.848, 19.808,190.112, 26.496,195.904zM 192,128l 128,0 l0-160 l 96,0 c 17.664,0, 32,14.336, 32,32l0,156.832 c0,9.6-4.288,18.656-11.712,24.736l-160,131.168C 270.4,317.568, 263.2,320, 256,320
+		C 248.8,320, 241.6,317.568, 235.712,312.736l-160-131.168C 68.288,175.52, 64,166.432, 64,156.832L 64,0 c0-17.664, 14.336-32, 32-32l 96,0 L 192,128 z"  />
+<glyph unicode="&#xe075;" d="M 480,320l-64,0 c0,0-18.496,0-32,32c-6.88,16.288-14.336,32-32,32L 224,384 C 206.336,384, 198.656,368.384, 192,352C 179.008,320, 160,320, 160,320L 128,320 
+		c0,17.664-14.336,32-32,32L 64,352 C 46.336,352, 32,337.664, 32,320C 14.336,320,0,305.664,0,288l0-64 l 177.76,0 C 199.936,262.112, 240.736,288, 288,288s 88.064-25.888, 110.24-64L 512,224 L 512,288 
+		C 512,305.664, 497.664,320, 480,320z M 112,256l-64,0 C 39.168,256, 32,263.168, 32,272C 32,280.832, 39.168,288, 48,288L 64,288 l 32,0 l 16,0 C 120.832,288, 128,280.832, 128,272
+		C 128,263.168, 120.832,256, 112,256zM 192,160A96,96 1260 1 1 384,160A96,96 1260 1 1 192,160zM 416,160c0-70.688-57.312-128-128-128c-70.688,0-128,57.312-128,128c0,11.104, 1.856,21.728, 4.512,32L0,192 l0-160 c0-17.664, 14.336-32, 32-32l 448,0 
+		c 17.664,0, 32,14.336, 32,32L 512,192 l-100.512,0 C 414.144,181.728, 416,171.104, 416,160z"  />
+<glyph unicode="&#xe076;" d="M 480,352L 32,352 C 14.336,352,0,337.664,0,320l0-53.728 l 256-102.4l 256,102.4L 512,320 C 512,337.664, 497.664,352, 480,352zM0,214.016L0,0 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,214.016 l-256-102.4L0,214.016z"  />
+<glyph unicode="&#xe077;" d="M 347.136,288L 286.144,458.752C 281.6,471.488, 269.536,480, 256,480S 230.4,471.488, 225.856,458.752L 164.864,288L 347.136,288 zM 427.136,64L 381.408,192L 130.592,192L 84.864,64 	zM 32,32c-17.664,0-32-14.336-32-32c0-17.664, 14.336-32, 32-32l 64,0 l 320,0 l 64,0 c 17.664,0, 32,14.336, 32,32c0,17.664-14.336,32-32,32L 32,32 z"  />
+<glyph unicode="&#xe078;" d="M 64,384l0-384 c0-12.928, 7.808-24.608, 19.744-29.568C 87.712-31.2, 91.872-32, 96-32c 8.32,0, 16.512,3.264, 22.624,9.376
+		L 256,114.752l 137.376-137.376C 399.488-28.736, 407.68-32, 416-32c 4.128,0, 8.288,0.8, 12.224,2.432C 440.192-24.608, 448-12.928, 448,0L 448,384 L 64,384 zM 448,416L 448,448 c0,17.664-14.336,32-32,32L 96,480 C 78.336,480, 64,465.664, 64,448l0-32 L 448,416 z"  />
+<glyph unicode="&#xe079;" d="M 96-32l 320,0 c 17.664,0, 32,14.336, 32,32L 448,352 c0,17.664-14.336,32-32,32l-64.16,0 C 351.072,437.152, 308.512,480, 256,480S 160.928,437.152, 160.16,384
+		L 96,384 C 78.336,384, 64,369.664, 64,352l0-352 C 64-17.664, 78.336-32, 96-32z M 304,288l-96,0 C 199.168,288, 192,295.168, 192,304C 192,312.832, 199.168,320, 208,320l 96,0 
+		C 312.832,320, 320,312.832, 320,304C 320,295.168, 312.832,288, 304,288z M 256,448c 34.784,0, 63.072-28.576, 63.84-64L 192.16,384 C 192.928,419.424, 221.216,448, 256,448z"  />
+<glyph unicode="&#xe07a;" d="M 480,352L 96,352 C 93.504,352, 91.328,351.136, 88.992,350.592L 76.576,403.648C 74.88,410.88, 68.448,416, 60.992,416L 15.072,416 
+		c-8.832,0-16-7.168-16-16S 6.208,384, 15.072,384L 48.32,384 l 19.872-84.992L 96,160c0-1.152, 0.544-2.144, 0.672-3.264l-16.288-73.28
+		c-1.056-4.736, 0.096-9.696, 3.136-13.472C 86.56,66.176, 91.136,64, 96,64l 363.008,0 c 8.832,0, 16,7.168, 16,16s-7.168,16-16,16L 115.968,96 
+		l 7.328,32.96C 124.896,128.704, 126.336,128, 128,128l 291.68,0 c 17.664,0, 28.32,3.488, 36.832,24l 51.968,159.424C 517.504,340, 497.696,352, 480,352zM 96,0A32,32 1260 1 1 160,0A32,32 1260 1 1 96,0zM 384,0A32,32 1260 1 1 448,0A32,32 1260 1 1 384,0z"  />
+<glyph unicode="&#xe07b;" d="M 464.928,447.84c-0.288,0-0.576,0-0.864,0c-0.256,0-0.48,0.032-0.736,0L 262.144,447.84 
+		C 257.248,447.616, 246.112,439.968, 244.672,438.528L 9.344,203.2c-12.48-12.48-12.48-32.704,0-45.184l 180.672-180.672C 196.288-28.896, 204.448-32, 212.608-32
+		c 8.16,0, 16.352,3.104, 22.592,9.344l 235.328,235.328C 471.968,214.112, 480,224, 480,230.144L 480,431.968 C 480.448,440.896, 473.696,447.84, 464.928,447.84z M 432,384
+		C 423.168,384, 416,391.168, 416,400C 416,408.832, 423.168,416, 432,416S 448,408.832, 448,400C 448,391.168, 440.832,384, 432,384z"  />
+<glyph unicode="&#xe07c;" d="M 464.928,480c-0.288,0-0.576,0-0.864,0c-0.256,0-0.48,0.032-0.736,0L 294.144,480 
+		C 289.248,479.744, 278.112,472.096, 276.672,470.656L 72.992,267.008c-12.48-12.48-12.48-32.704,0-45.184l 25.408-25.408L 72.992,171.008
+		c-12.48-12.48-12.48-32.704,0-45.184l 148.672-148.672c 6.24-6.24, 14.4-9.344, 22.592-9.344s 16.352,3.104, 22.592,9.344l 203.648,203.68
+		C 471.968,182.272, 480,192.128, 480,198.272l0,96 L 480,368.096 l0,96 C 480.448,473.024, 473.696,480, 464.928,480z M 432,448.128c 8.832,0, 16-7.168, 16-16
+		s-7.168-16-16-16S 416,423.296, 416,432.128S 423.168,448.128, 432,448.128z M 447.904,203.424l-203.584-203.68l-148.672,148.608l 25.408,25.408l 100.64-100.64
+		c 6.24-6.24, 14.4-9.344, 22.592-9.344s 16.352,3.104, 22.592,9.344L 448,254.272l0-50.592 C 447.904,203.52, 447.84,203.424, 447.904,203.424
+		C 447.872,203.424, 447.872,203.424, 447.904,203.424z"  />
+<glyph unicode="&#xe07d;" d="M 416,448l-64,0 c0,17.664-14.336,32-32,32L 224,480 C 206.336,480, 192,465.664, 192,448L 128,448 C 110.336,448, 96,433.664, 96,416l 352,0 C 448,433.664, 433.664,448, 416,448zM 96,0c0-17.664, 14.336-32, 32-32l 288,0 c 17.664,0, 32,14.336, 32,32L 448,384 L 96,384 L 96,0 z M 352,304C 352,312.832, 359.168,320, 368,320
+		S 384,312.832, 384,304l0-256 c0-8.832-7.168-16-16-16S 352,39.168, 352,48L 352,304 z M 256,304C 256,312.832, 263.168,320, 272,320S 288,312.832, 288,304l0-256 
+		C 288,39.168, 280.832,32, 272,32S 256,39.168, 256,48L 256,304 z M 160,304C 160,312.832, 167.168,320, 176,320S 192,312.832, 192,304l0-256 C 192,39.168, 184.832,32, 176,32
+		S 160,39.168, 160,48L 160,304 z"  />
+<glyph unicode="&#xe07e;" d="M 424.96,139.648c 3.424,5.856, 2.816,13.216-1.568,18.4L 157.248,474.304C 152.896,479.456, 145.792,481.344, 139.52,479.040
+		C 133.216,476.736, 128.992,470.72, 128.992,464l0-417.504 c0-6.912, 4.416-13.024, 10.976-15.2c 1.632-0.544, 3.328-0.8, 5.024-0.8
+		c 4.96,0, 9.76,2.304, 12.832,6.464l 71.552,96.384l 49.632-141.984c 6.368-18.176, 26.272-27.776, 44.448-21.408s 27.776,26.272, 21.408,44.448
+		l-48.704,139.296l 111.936-21.664C 414.848,130.72, 421.536,133.824, 424.96,139.648z"  />
+<glyph unicode="&#xe07f;" d="M 224,67.072L 224,0 L 176,0 C 167.168,0, 160-7.168, 160-16C 160-24.832, 167.168-32, 176-32l 79.68,0 L 256.32-32 l 79.68,0 
+		c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16L 288,0 l0,67.264 c 66.656,13.152, 128,67.104, 128,156.736L 416,272 C 416,280.832, 408.832,288, 400,288
+		S 384,280.832, 384,272L 384,224 c0-84.032-64.416-128-128-128c-61.664,0-128,40.064-128,128L 128,272 C 128,280.832, 120.832,288, 112,288S 96,280.832, 96,272L 96,224 
+		C 96,133.12, 156.256,79.808, 224,67.072zM 256,160c 35.36,0, 64,28.64, 64,64L 320,416 c0,35.36-28.64,64-64,64S 192,451.36, 192,416l0-192 C 192,188.64, 220.64,160, 256,160z"  />
+<glyph unicode="&#xe080;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 381.568,327.52l-37.184-59.584L 319.584,228.192
+		C 319.68,226.784, 320,225.44, 320,224c0-35.36-28.64-64-64-64c-1.44,0-2.784,0.32-4.192,0.416l-39.776-24.8l-59.552-37.184
+		C 149.888,96.8, 146.944,96, 144,96c-4.128,0-8.224,1.6-11.328,4.672c-5.28,5.28-6.208,13.472-2.24,19.776l 37.184,59.584l 24.8,39.744
+		C 192.32,221.216, 192,222.56, 192,224c0,35.36, 28.64,64, 64,64c 1.44,0, 2.784-0.32, 4.192-0.416l 39.776,24.8l 59.552,37.184
+		c 6.208,3.936, 14.496,3.008, 19.776-2.272C 384.608,342.048, 385.536,333.856, 381.568,327.52zM 224,224A32,32 1260 1 1 288,224A32,32 1260 1 1 224,224z"  />
+<glyph unicode="&#xe081;" d="M 244.352-23.328c 2.688-2.976, 5.28-4.896, 7.776-6.24c 0.032-0.032, 0.096-0.032, 0.128-0.064
+		c 1.728-0.896, 3.424-1.568, 5.024-1.568c 1.6,0, 3.296,0.672, 5.024,1.568c 0.032,0.032, 0.096,0.032, 0.128,0.064
+		c 2.496,1.344, 5.088,3.264, 7.776,6.24c0,0, 148.736,161.76, 163.68,301.92c 0.896,7.232, 1.504,14.56, 1.504,22.016C 435.392,399.68, 355.072,480, 256,480
+		S 76.608,399.68, 76.608,300.608c0-7.584, 0.608-14.976, 1.536-22.304C 93.472,138.208, 244.352-23.328, 244.352-23.328z M 256,416
+		c 63.616,0, 115.392-51.776, 115.392-115.392c0-63.616-51.776-115.392-115.392-115.392S 140.608,236.992, 140.608,300.608C 140.608,364.224, 192.384,416, 256,416z"  />
+<glyph unicode="&#xe082;" d="M 128,167.776c0-24.544, 61.76-37.568, 128.032-39.392C 256.032,128.256, 256,128.128, 256,128l0-96 c0-17.664, 7.168-64, 16-64
+		S 288,14.336, 288,32l0,96 c0,0.128-0.032,0.256-0.032,0.384C 354.24,130.208, 416,143.232, 416,167.776c0,26.048-23.584,45.056-64,55.296L 352,388.8 
+		c 40.416,13.696, 64,35.744, 64,51.424c0,53.024-288,53.024-288,0c0-17.248, 23.584-38.816, 64-52l0-165.152 C 151.584,212.8, 128,193.824, 128,167.776z"  />
+<glyph unicode="&#xe083;" d="M 161.344,387.136L 32,448L 32,64L 161.344,3.136 	zM 193.344,3.584L 320.672,60.96L 320.672,444.96L 193.344,387.584 	zM 352.672,60.288L 480,0L 480,384L 352.672,444.288 	z"  />
+<glyph unicode="&#xe084;" d="M 448,416c-8.992,20-25.312,32-43.008,32L 104,448 C 86.336,448, 72,436, 64,416l-64-256l0-0.512 l0-16 l0-16 l0-17.152 l0-0.512 l0-94.336 
+		c0-8.832, 7.168-16, 16-16l 480,0 c 8.832,0, 16,7.168, 16,16L 512,111.36 l0,0.512 l0,15.616 l0,16 l0,14.528 l-0.416,1.472L 448,416z M 94.24,405.344
+		C 95.712,408.64, 99.456,416, 104,416l 300.992,0 c 4.384,0, 9.44-4.512, 12.992-11.392l 56.352-229.024c0-0.064-0.096,0-0.096-0.064
+		c0-8.832-7.168-16-16-16c-0.032,0-0.032-0.032-0.064-0.032L 416,159.488 l-80,0 c-8.832,0-16-7.168-16-16L 320,112 c0-8.832-7.168-16-16-16
+		c-0.32,0-0.64-0.416-0.96-0.512L 208.544,95.488 C 208.32,95.584, 208.32,96, 208,96C 199.168,96, 192,103.168, 192,112l0,31.488 c0,8.832-7.168,16-16,16L 64,159.488 
+		L 53.824,159.488 c-0.032,0-0.032,0.032-0.064,0.032c-8.832,0-16.256,7.168-16.256,16c0,0.224-0.256,0.064-0.32,0.224L 94.24,405.344z"  />
+<glyph unicode="&#xe085;" d="M 480,320l-128,0 L 352,352 c0,17.664-14.336,32-32,32L 192,384 C 174.336,384, 160,369.664, 160,352l0-32 L 32,320 C 14.336,320,0,305.664,0,288l0-64 l 192,0 l 128,0 l 192,0 L 512,288 
+		C 512,305.664, 497.664,320, 480,320z M 192,352l 128,0 l0-32 L 192,320 L 192,352 zM 192,192L 320,192L 320,160L 192,160zM 352,160c0-17.664-14.336-32-32-32L 192,128 c-17.664,0-32,14.336-32,32L 160,192 L0,192 l0-192 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,192 l-160,0 
+		L 352,160 z"  />
+<glyph unicode="&#xe086;" d="M 80.672-32l 14.592,0 l 192.096,0 L 320-32 l 11.328,0 l 51.904,0 c 17.664,0, 32,14.336, 32,32l0,68.992 L 415.232,80 l0,256 c0,8.832-7.168,16-16,16
+		c0,0,0,0,0,0L 128,352 C 127.2,352, 125.632,351.872, 124.128,351.776L 80.672,352C 53.824,352, 32,372.512, 32,399.328C 32,426.176, 53.152,448, 80,448l 64,0 L 320,448 l 128,0 l0-368 
+		c0-8.832, 6.4-16, 15.264-16S 480,71.168, 480,80l0,384 C 480,472.832, 472.096,480, 463.264,480l-111.648,0 L 144,480 L 80.672,480 C 36.512,480, 0.768,444.512, 0.128,400.512
+		L0,400.672l0-66.656 L0,288 l0-175.328 l0-39.584 l0-24.416 C0,4.128, 36.128-32, 80.672-32z"  />
+<glyph unicode="&#xe087;" d="M 32,480C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 32,0 L 64,480 L 32,480 zM 416,480L 96,480 l0-512 l 320,0 c 17.664,0, 32,14.336, 32,32L 448,448 C 448,465.664, 433.664,480, 416,480z M 270.24,356.672
+		c 26.752,0, 48.416-21.696, 48.416-48.416c0-26.752-21.696-48.448-48.416-48.448c-26.752,0-48.448,21.696-48.448,48.448
+		C 221.792,335.008, 243.488,356.672, 270.24,356.672z M 192,134.176c0,58.688, 35.488,106.24, 79.232,106.24s 79.232-47.584, 79.232-106.24S 192,75.52, 192,134.176zM 480,448L 512,448L 512,352L 480,352zM 480,320L 512,320L 512,224L 480,224zM 480,192L 512,192L 512,96L 480,96z"  />
+<glyph unicode="&#xe088;" d="M 480,416L 32,416 C 14.336,416,0,401.664,0,384l0-64 l 512,0 L 512,384 C 512,401.664, 497.664,416, 480,416zM 32,0c0-17.664, 14.336-32, 32-32l 384,0 c 17.664,0, 32,14.336, 32,32L 480,288 L 32,288 L 32,0 z M 192,224l 128,0 c 17.664,0, 32-14.336, 32-32c0-17.664-14.336-32-32-32
+		L 192,160 c-17.664,0-32,14.336-32,32C 160,209.664, 174.336,224, 192,224z"  />
+<glyph unicode="&#xe089;" d="M 511.744,258.656C 510.4,337.184, 446.688,407.168, 368,407.168c-45.504,0-85.6-23.808-112-58.752
+		C 229.6,383.36, 189.504,407.168, 144,407.168c-78.688,0-142.4-69.984-143.744-148.512L0,258.656 c0-0.48, 0.096-0.928, 0.096-1.408
+		C 0.096,256.896,0,256.544,0,256.16c0-2.208, 0.544-3.872, 0.64-5.984C 7.68,50.048, 253.984-32, 253.984-32s 249.92,81.952, 257.312,281.856
+		C 511.424,252.096, 512,253.856, 512,256.16c0,0.384-0.096,0.736-0.096,1.088C 511.904,257.76, 512,258.176, 512,258.656L 511.744,258.656 z"  />
+<glyph unicode="&#xe08a;" d="M 352,384c0,51.392-44.608,96-96,96S 160,435.392, 160,384c0-51.392, 44.608-96, 96-96S 352,332.608, 352,384zM 256,256c-84.096,0-160-90.72-160-203.456s 320-112.736, 320,0S 340.096,256, 256,256z"  />
+<glyph unicode="&#xe08b;" d="M 224,400C 224,442.816, 186.816,480, 144,480S 64,442.816, 64,400C 64,357.184, 101.184,320, 144,320S 224,357.184, 224,400zM 280,96c0,128-66.432,192-140,192S0,224,0,96C0,8.32, 280,8.32, 280,96zM 376,257.76c 42.816,0, 80,37.184, 80,80s-37.184,80-80,80s-80-37.184-80-80S 333.184,257.76, 376,257.76zM 372,225.76c-22.112,0-43.296-6.496-62.496-18.080c 11.616-31.232, 18.496-68.256, 18.496-111.68
+		c0-43.104-28.736-76.672-78.048-95.872C 311.104-51.648, 512-40.608, 512,33.76C 512,161.76, 445.568,225.76, 372,225.76z"  />
+<glyph unicode="&#xe08c;" d="M 96,256l 96,0 c 17.664,0, 32,14.336, 32,32L 224,384 c0,17.664-14.336,32-32,32L 96,416 C 78.336,416, 64,401.664, 64,384l0-96 C 64,270.336, 78.336,256, 96,256zM 320,256l 96,0 c 17.664,0, 32,14.336, 32,32L 448,384 c0,17.664-14.336,32-32,32l-96,0 C 302.336,416, 288,401.664, 288,384l0-96 C 288,270.336, 302.336,256, 320,256zM 64,64c0-17.664, 14.336-32, 32-32l 96,0 c 17.664,0, 32,14.336, 32,32l0,96 c0,17.664-14.336,32-32,32L 96,192 c-17.664,0-32-14.336-32-32L 64,64 zM 288,64c0-17.664, 14.336-32, 32-32l 96,0 c 17.664,0, 32,14.336, 32,32l0,96 c0,17.664-14.336,32-32,32l-96,0 c-17.664,0-32-14.336-32-32L 288,64 z"  />
+<glyph unicode="&#xe08d;" d="M 64,320l 64,0 c 17.664,0, 32,14.336, 32,32L 160,416 c0,17.664-14.336,32-32,32L 64,448 C 46.336,448, 32,433.664, 32,416l0-64 C 32,334.336, 46.336,320, 64,320zM 224,320l 64,0 c 17.664,0, 32,14.336, 32,32L 320,416 c0,17.664-14.336,32-32,32L 224,448 C 206.336,448, 192,433.664, 192,416l0-64 C 192,334.336, 206.336,320, 224,320zM 384,320l 64,0 c 17.664,0, 32,14.336, 32,32L 480,416 c0,17.664-14.336,32-32,32l-64,0 c-17.664,0-32-14.336-32-32l0-64 C 352,334.336, 366.336,320, 384,320zM 32,192c0-17.664, 14.336-32, 32-32l 64,0 c 17.664,0, 32,14.336, 32,32L 160,256 c0,17.664-14.336,32-32,32L 64,288 C 46.336,288, 32,273.664, 32,256L 32,192 zM 192,192c0-17.664, 14.336-32, 32-32l 64,0 c 17.664,0, 32,14.336, 32,32L 320,256 c0,17.664-14.336,32-32,32L 224,288 C 206.336,288, 192,273.664, 192,256L 192,192 zM 352,192c0-17.664, 14.336-32, 32-32l 64,0 c 17.664,0, 32,14.336, 32,32L 480,256 c0,17.664-14.336,32-32,32l-64,0 c-17.664,0-32-14.336-32-32L 352,192 zM 32,32c0-17.664, 14.336-32, 32-32l 64,0 c 17.664,0, 32,14.336, 32,32l0,64 c0,17.664-14.336,32-32,32L 64,128 c-17.664,0-32-14.336-32-32L 32,32 zM 192,32c0-17.664, 14.336-32, 32-32l 64,0 c 17.664,0, 32,14.336, 32,32l0,64 c0,17.664-14.336,32-32,32L 224,128 c-17.664,0-32-14.336-32-32L 192,32 zM 352,32c0-17.664, 14.336-32, 32-32l 64,0 c 17.664,0, 32,14.336, 32,32l0,64 c0,17.664-14.336,32-32,32l-64,0 c-17.664,0-32-14.336-32-32L 352,32 z"  />
+<glyph unicode="&#xe08e;" d="M 12.768-7.296c 23.936-31.072, 73.376-33.088, 110.432-4.544c 15.072,11.616, 25.504,26.528, 31.296,42.176
+		C 157.824,36.928, 160,46.272, 160,56.96L 160,296.096 l 288,54.432l0-126.272 c0-44.544-34.080-54.784-46.144-57.056c-1.056-0.128-2.080-0.384-3.136-0.576
+		c-0.544-0.064-1.344-0.16-1.344-0.16L 397.568,166.4c-14.272-2.592-28.64-8.576-41.536-18.496c-37.056-28.544-47.712-76.864-23.776-107.936
+		c 23.936-31.072, 73.376-33.12, 110.432-4.576c 18.752,14.464, 30.688,33.984, 34.848,53.76C 478.976,93.952, 480,99.232, 480,105.216L 480,415.808 
+		c0,1.952-0.384,3.616-0.544,5.472C 479.52,422.24, 480,423.328, 480,424.288l0,32 c0,17.664-14.336,27.648-32,22.24L 160,424.096
+		C 142.336,418.72, 128,400, 128,382.336l0-32 c0-0.448, 0.224-0.768, 0.256-1.184C 128.224,348.192, 128,347.36, 128,346.4l0-169.408 c0-44.608-34.176-54.816-46.208-57.056
+		c-0.608-0.096-1.216-0.288-1.856-0.384c-1.568-0.256-2.592-0.352-2.592-0.352l 0.352-0.16c-14.144-2.656-28.384-8.576-41.152-18.4
+		C-0.512,72.096-11.136,23.776, 12.768-7.296z"  />
+<glyph unicode="&#xe08f;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 224,160c0-17.664-14.336-32-32-32s-32,14.336-32,32L 160,288 
+		c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32L 224,160 z M 352,160c0-17.664-14.336-32-32-32s-32,14.336-32,32L 288,288 c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32L 352,160 z"  />
+<glyph unicode="&#xe090;" d="M 211.456,350.976C 205.344,421.28, 132,455.776, 128.896,457.184C 125.984,458.56, 122.72,458.976, 119.584,458.432
+		c-84.672-14.048-97.408-63.328-97.92-65.376C 20.96,390.176, 21.088,387.2, 21.984,384.416c 100.992-313.344, 310.88-371.424, 379.872-390.528
+		c 5.312-1.472, 9.696-2.656, 13.024-3.744c 1.6-0.544, 3.264-0.768, 4.928-0.768c 2.272,0, 4.544,0.48, 6.624,1.44
+		c 2.112,0.96, 51.968,24.448, 64.16,101.056c 0.544,3.328,0,6.784-1.536,9.792c-1.088,2.112-27.168,51.744-99.488,69.28
+		c-5.056,1.312-10.24-0.032-14.144-3.36c-22.816-19.488-54.336-40.256-67.936-42.4c-91.168,44.576-142.080,130.112-144,146.336
+		C 162.368,280.64, 183.264,312.672, 207.296,338.72C 210.336,342.016, 211.872,346.496, 211.456,350.976z"  />
+<glyph unicode="&#xe091;" d="M 96,288L 192,288L 192,96L 320,96L 319.328,288L 416,288L 256,448 	zM 384,32L 128,32L 128,96L 64,96L 64,32L 64-32L 448-32L 448,32L 448,96L 384,96 	z"  />
+<glyph unicode="&#xe092;" d="M 256,96L 416,256L 320,256L 320,448L 192,448L 192.576,256L 96,256 	zM 64,32L 64-32L 448-32L 448,32L 448,96L 384,96L 384,32L 128,32L 128,96L 64,96 	z"  />
+<glyph unicode="&#xe093;" d="M 192.864-32l 95.936,0 l 0.064,256l 87.136,0.032l 9.344,88.224L 288.8,312.256 l 0.128,44.16c0,23.008, 1.568,35.328, 34.592,35.328l 60.992,0 
+		L 384.512,480 L 297.056,480 C 212.288,480, 192.768,436.192, 192.768,364.224l 0.096-51.968L 128.512,312.224L 128.512,224 l 64.352,0 L 192.864-32 z"  />
+<glyph unicode="&#xe094;" d="M 497.888,424.32c-20.288-12.032-42.784-20.768-66.72-25.504C 412,419.264, 384.704,432, 354.496,432
+		c-58.016,0-105.056-47.040-105.056-105.024c0-8.224, 0.928-16.256, 2.72-23.936c-87.296,4.384-164.704,46.208-216.512,109.76
+		C 26.592,397.312, 21.44,379.264, 21.44,360c0-36.448, 18.56-68.608, 46.72-87.424C 50.944,273.152, 34.752,277.888, 20.576,285.76c0-0.448,0-0.864,0-1.312
+		c0-50.88, 36.224-93.344, 84.256-103.008C 96.032,179.040, 86.752,177.76, 77.152,177.76c-6.784,0-13.344,0.672-19.776,1.888
+		c 13.376-41.728, 52.16-72.096, 98.112-72.96c-35.936-28.16-81.248-44.96-130.464-44.96c-8.48,0-16.832,0.512-25.056,1.472
+		C 46.464,33.408, 101.664,16, 160.992,16c 193.216,0, 298.88,160.064, 298.88,298.88c0,4.544-0.096,9.088-0.32,13.6
+		c 20.576,14.752, 38.4,33.248, 52.48,54.304c-18.848-8.352-39.072-14.016-60.32-16.544C 473.408,379.232, 490.048,399.84, 497.888,424.32z"  />
+<glyph unicode="&#xe095;" d="M 128.96,183.904c 24.736,43.744-7.968,53.344-13.088,85.056c-20.96,129.6, 149.504,218.112, 238.784,127.552
+		c 61.76-62.72, 21.088-255.552-78.496-235.52C 180.768,180.16, 322.88,333.664, 246.752,363.776C 184.864,388.288, 152,288.896, 181.344,239.488
+		C 164.128,154.528, 127.072,74.528, 142.080-32c 48.64,35.296, 65.056,102.912, 78.496,173.408c 24.448-14.88, 37.536-30.336, 68.704-32.736
+		c 114.976-8.928, 179.232,114.784, 163.488,228.96c-13.952,101.184-114.848,152.704-222.432,140.64c-85.056-9.536-169.856-78.304-173.376-176.64
+		C 54.816,241.6, 71.84,196.544, 128.96,183.904z"  />
+<glyph unicode="&#xe096;" d="M 137.152,14.368c 84.8,0, 131.648,48.128, 131.648,96.512c0,38.784-11.456,62.048-46.848,87.072
+		C 209.856,206.528, 186.688,227.36, 186.688,239.616c0,14.368, 4.096,21.44, 25.728,38.336C 234.56,295.264, 250.24,319.616, 250.24,347.904
+		c0,33.696-15.008,66.56-43.2,77.376l 42.464,0 l 30.016,21.664c0,0-100.48,0-133.984,0c-60.032,0-116.544-45.504-116.544-98.208
+		c0-53.856, 40.928-97.344, 102.048-97.344c 4.256,0, 8.384,0.096, 12.416,0.384C 139.488,244.192, 136.64,235.648, 136.64,226.752
+		c0-14.976, 8.064-27.104, 18.24-37.024c-7.68,0-15.136-0.224-23.232-0.224C 57.248,189.536,0,142.144,0,93.024
+		C0,44.64, 62.784,14.368, 137.152,14.368z M 150.4,265.056C 115.872,266.080, 83.072,303.68, 77.12,348.992C 71.168,394.336, 94.304,429.024, 128.8,428
+		c 34.496-1.024, 67.328-37.408, 73.28-82.72C 208.064,299.936, 184.896,264.032, 150.4,265.056z M 145.824,177.024c 12-0.128, 23.2-2.048, 33.344-5.344
+		c 27.904-19.36, 47.936-30.336, 53.568-52.48c 1.056-4.48, 1.632-9.088, 1.632-13.824c0-39.104-25.184-69.664-97.472-69.664
+		c-51.424,0-88.544,32.544-88.544,71.648C 48.352,145.696, 94.4,177.568, 145.824,177.024zM 416,352L 416,446.944L 384,446.944L 384,352L 288,352L 288,320L 384,320L 384,222.944L 416,222.944L 416,320L 512,320L 512,352 	z"  />
+<glyph unicode="&#xe097;" d="M 164.736,90.624c0-23.392, 2.464-41.28, 7.36-53.6c 4.928-12.32, 13.696-23.968, 26.432-34.912
+		c 12.672-10.88, 28.032-19.36, 46.016-25.28C 262.56-29.056, 276.32-32, 299.744-32c 20.608,0, 39.776,2.080, 57.536,6.208
+		c 17.728,4.16, 36.8,10.176, 58.656,20.448l0,76.992 c-25.632-16.864-40.96-20.288-66.88-20.288c-14.56,0-27.488,3.392-38.848,10.208
+		c-8.544,5.024-16.352,13.728-19.488,22.080c-3.168,8.416-2.784,25.536-2.784,55.264L 288,256l 127.968,0 L 415.968,352 L 288,352 L 288,480 l-82.56,0 
+		C 202.176,453.6, 196.16,431.808, 187.488,414.752c-8.672-17.12-20.192-31.744-34.56-43.968C 138.656,358.592, 116.16,349.216, 96.064,342.688L 96.064,256 l 68.704,0 L 164.768,90.624 z"  />
+<glyph unicode="&#xe098;" d="M 352,229.056L 317.984,217.056L 288,229.056L 288,167.040 C 288,107.072, 331.072,64, 384,64s 96,43.072, 96,96L 480,224 l-64,0 l0-64 c0-17.632-14.368-32-32-32
+		c-17.632,0-32,14.368-32,39.008L 352,229.056 zM 128,64c 52.928,0, 96,43.072, 96,96L 224,288 c0,17.632, 14.368,32, 32,32C 273.6,320, 288,305.664, 288,295.040L 288,264 l 30.016-12L 352,264L 352,295.040 
+		C 352,340.96, 308.928,384, 256,384S 160,340.96, 160,288l0-128 c0-17.632-14.368-32-32-32c-17.632,0-32,14.368-32,32L 96,224 L 32,224 l0-64 C 32,107.072, 75.072,64, 128,64z"  />
+<glyph unicode="&#xe099;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 36.576,224c0,30.976, 6.848,60.416, 19.008,86.976
+		l 104.672-279.296C 87.040,66.304, 36.576,139.424, 36.576,224z M 256,10.272c-21.536,0-42.304,3.072-61.984,8.704L 259.84,205.312l 67.424-179.968
+		c 0.448-1.056, 0.992-2.048, 1.568-2.976C 306.080,14.56, 281.568,10.272, 256,10.272z M 286.176,324.192c 13.216,0.672, 25.12,2.016, 25.12,2.016
+		c 11.84,1.376, 10.432,18.272-1.376,17.632c0,0-35.552-2.72-58.464-2.72c-21.536,0-57.792,2.72-57.792,2.72
+		C 181.824,344.512, 180.448,326.912, 192.256,326.208c0,0, 11.2-1.344, 23.008-2.016L 249.44,232.96l-48.032-140.256L 121.536,324.192
+		c 13.248,0.672, 25.12,2.016, 25.12,2.016c 11.808,1.376, 10.432,18.272-1.376,17.632c0,0-35.552-2.72-58.464-2.72
+		c-4.096,0-8.96,0.096-14.112,0.256C 111.904,399.392, 179.36,437.728, 256,437.728c 57.12,0, 109.12-21.28, 148.192-56.096
+		c-0.96,0.064-1.856,0.192-2.848,0.192c-21.568,0-36.864-18.272-36.864-37.92c0-17.632, 10.432-32.512, 21.536-50.144
+		c 8.384-14.272, 18.112-32.544, 18.112-58.944c0-18.272-7.2-39.52-16.672-69.12l-21.92-71.2L 286.176,324.192z M 475.424,224
+		c0-78.848-43.872-147.68-109.12-184.672l 67.040,188.704c 12.512,30.496, 16.672,54.848, 16.672,76.544c0,7.872-0.512,15.168-1.472,21.984
+		C 465.664,296.096, 475.424,261.152, 475.424,224z"  />
+<glyph unicode="&#xe09a;" d="M 488.896,480L 23.104,480 C 10.368,480,0,469.664,0,456.928l0-465.856 C0-21.632, 10.368-32, 23.104-32l 465.792,0 
+		C 501.632-32, 512-21.632, 512-8.928L 512,456.928 C 512,469.664, 501.632,480, 488.896,480z M 345.344,224c0-49.344-40-89.344-89.344-89.344S 166.656,174.656, 166.656,224
+		c0,49.344, 40,89.344, 89.344,89.344S 345.344,273.344, 345.344,224z M 448,32L 64,32 L 64,256 l 42.144,0 C 103.936,245.664, 102.656,234.976, 102.656,224
+		c0-84.544, 68.8-153.344, 153.344-153.344s 153.344,68.8, 153.344,153.344c0,10.976-1.28,21.664-3.488,32L 448,256 L 448,32 z M 448,320l-96,0 L 352,416 l 96,0 L 448,320 z"  />
+<glyph unicode="&#xe09b;" d="M 256,480C 114.848,480,0,365.152,0,224s 114.848-256, 256-256s 256,114.848, 256,256S 397.152,480, 256,480z M 256,442.336c 55.584,0, 106.336-20.832, 144.96-55.104
+		c-3.936-5.6-36.832-49.824-114.592-78.976c-35.84,65.824-75.552,119.904-81.6,128C 221.216,440.224, 238.368,442.336, 256,442.336z M 163.040,421.568
+		c 5.76-7.904, 44.832-62.048, 81.056-126.464C 141.824,267.936, 51.744,268.32, 41.952,268.448C 56.128,336.32, 101.856,392.704, 163.040,421.568z M 37.312,223.68
+		c0,2.24, 0.032,4.48, 0.096,6.688C 46.976,230.144, 152.96,228.8, 262.144,261.472c 6.272-12.256, 12.224-24.704, 17.728-37.12
+		c-2.88-0.8-5.76-1.664-8.608-2.592c-112.768-36.448-172.768-135.808-177.728-144.288C 58.624,116.224, 37.344,167.52, 37.312,223.68z M 255.968,5.024
+		c-50.528,0-97.12,17.248-134.208,46.144c 3.936,8.032, 48.224,93.568, 171.552,136.544c 0.48,0.16, 0.96,0.32, 1.44,0.48
+		c 30.72-79.776, 43.392-146.624, 46.656-165.824C 315.168,11.2, 286.304,4.992, 255.968,5.024z M 378.176,42.4c-2.24,13.312-13.856,77.312-42.464,155.904
+		c 68.512,10.976, 128.704-6.976, 136.192-9.344C 462.144,128.128, 427.232,75.584, 378.176,42.4z M 322.336,232.768
+		c-1.536,3.744-3.104,7.52-4.704,11.296C 313.088,254.72, 308.224,265.312, 303.136,275.744C 384,308.736, 420.64,355.712, 425.248,361.952
+		c 30.464-37.216, 48.896-84.608, 49.344-136.224C 467.392,227.264, 395.104,241.92, 322.336,232.768z"  />
+<glyph unicode="&#xe09c;" d="M 293.696,327.136c 58.496,35.104, 89.728-14.272, 59.776-70.176c-29.888-55.872-57.184-92.288-71.488-92.288
+		c-14.272,0-25.248,37.376-41.6,102.72C 223.488,334.944, 223.584,456.608, 153.312,442.816C 87.072,429.792,0,325.824,0,325.824L 20.8,298.56
+		c0,0, 42.88,33.792, 57.184,16.896c 14.304-16.896, 68.864-220.992, 87.072-258.624c 15.904-33.024, 59.744-76.672, 107.872-45.504
+		c 48.064,31.168, 207.904,167.648, 236.544,328.8C 538.048,501.248, 317.12,467.488, 293.696,327.136z"  />
+<glyph unicode="&#xe09d;" d="M 33.024,320L 128,320L 128-32L 33.024-32zM 322.784,319.968C 288,319.968, 270.656,303.392, 256,292.16L 256,320 L 160.512,320 l0-352 L 256-32 L 256,189.6 c0,0-3.488,44.128, 49.408,44.128
+		C 337.28,233.728, 352,215.584, 352,189.6L 352-32 l 100.608,0 L 452.608,186.496 C 452.608,306.496, 356,319.968, 322.784,319.968zM 32,400A48,48 1260 1 1 128,400A48,48 1260 1 1 32,400z"  />
+<glyph unicode="&#xe09e;" d="M 0.192,480l0-98.176 C 228.096,381.824, 413.568,196.16, 413.568-32L 512-32 C 512,250.24, 282.368,480, 0.192,480zM 239.424-32l 98.56,0 c 0.032,186.432-151.616,338.080-337.92,338.080l0-98.144 c 63.904,0, 123.968-24.992, 169.216-70.272
+		C 214.464,92.512, 239.424,32.16, 239.424-32zM 68.16-31.36c 37.728,0, 68.256,30.336, 68.256,67.904c-0.032,37.344-30.528,68.032-68.256,68.032
+		C 30.56,104.576,0,73.92,0,36.544C0-1.024, 30.56-31.36, 68.16-31.36z"  />
+<glyph unicode="&#xe09f;" d="M 363.872,312.832C 306.56,326.272, 244.48,325.696, 180.896,316.096C 178.592,315.744, 176.32,315.392, 174.048,315.008l-21.12,39.136
+		c-20.576-2.752-39.904-7.040-57.792-12.736l 20.128-42.112C 82.368,286.56, 55.392,268.416, 35.936,246.592c-32.128-36.48-44.832-82.4-29.408-127.136
+		c 3.104-9.024, 7.296-17.568, 12.48-25.6l 239.040,65.664L 191.68,282.432C 193.952,282.88, 196.288,283.328, 198.656,283.744c 107.328,19.136, 166.048-10.432, 198.208-41.92
+		l-81.792-19.84L 280.928,276.544c-19.52,1.152-42.048-0.032-68.128-4.48l 60.16-108.448L 512,229.248c-2.592,6.144-6.336,12.128-11.328,17.888
+		C 475.936,275.776, 422.304,301.312, 363.872,312.832z M 87.36,166.848C 79.968,200.512, 85.856,238.112, 132.576,263.136l 36.576-76.48L 87.36,166.848z"  />
+<glyph unicode="&#xe0a0;" d="M 377.376,328.896c 14.080-10.656, 31.552-17.024, 50.56-17.024C 474.368,311.872, 512,349.504, 512,395.936
+		C 512,442.368, 474.368,480, 427.936,480c-46.4,0-84.064-37.632-84.064-84.064c0-0.032,0-0.064,0-0.064L 136.384,295.552
+		C 122.016,307.008, 103.84,313.92, 84.064,313.92C 37.632,313.92,0,276.256,0,229.856s 37.632-84.064, 84.064-84.064c 16.768,0, 32.384,4.992, 45.504,13.44
+		l 214.336-103.616c0-0.032,0-0.064,0-0.064c0-46.432, 37.632-84.064, 84.064-84.064c 46.432,0, 84.064,37.632, 84.064,84.064
+		c0,46.432-37.632,84.064-84.064,84.064c-19.008,0-36.48-6.368-50.56-17.024L 167.808,223.904c 0.096,1.28, 0.16,2.528, 0.192,3.808L 377.376,328.896z"  />
+<glyph unicode="&#xe0a1;" d="M 252.736,351.776C 265.152,364.192, 271.392,379.424, 271.392,397.44c0,17.536-6.24,32.544-18.656,44.96
+		C 240.352,454.784, 225.056,460.992, 207.040,460.992c-17.472,0-32.48-6.208-44.896-18.592C 149.728,429.952, 143.488,414.976, 143.488,397.44
+		c0-18.016, 6.24-33.248, 18.656-45.664C 174.592,339.36, 189.568,333.152, 207.040,333.152C 225.056,333.152, 240.352,339.36, 252.736,351.776zM 309.728,337.888C 317.28,330.336, 326.048,324.384, 336.032,320c 9.984-4.352, 20.864-6.56, 32.512-6.56
+		c 11.712,0, 22.528,2.208, 32.512,6.56c 9.984,4.416, 18.72,10.336, 26.304,17.888c 7.552,7.552, 13.536,16.32, 17.92,26.304
+		c 4.384,9.984, 6.592,20.8, 6.592,32.544c0,11.68-2.176,22.496-6.592,32.512c-4.352,9.984-10.368,18.752-17.92,26.304
+		c-7.552,7.552-16.288,13.536-26.304,17.888C 391.104,477.824, 380.256,480, 368.544,480c-11.648,0-22.528-2.176-32.512-6.56
+		c-9.984-4.352-18.752-10.336-26.304-17.888C 302.208,447.968, 296.256,439.2, 291.84,429.216c-4.384-9.984-6.592-20.8-6.592-32.512
+		c0-11.712, 2.208-22.528, 6.592-32.544C 296.256,354.208, 302.208,345.44, 309.728,337.888zM 85.024,347.744c 13.664,0, 25.088,4.736, 34.368,14.24C 128.64,371.52, 133.248,383.072, 133.248,396.736
+		c0,13.152-4.64,24.48-13.856,33.952c-9.28,9.504-20.704,14.272-34.368,14.272c-13.6,0-25.216-4.768-34.656-14.272
+		c-9.536-9.472-14.272-20.8-14.272-33.952c0-13.664, 4.768-25.216, 14.272-34.72C 59.84,352.512, 71.424,347.744, 85.024,347.744zM 448.96,247.648c-10.208,10.24-22.304,18.272-36.16,24.128c-13.92,5.856-28.672,8.768-44.256,8.768
+		c-15.584,0-30.208-2.912-43.808-8.768C 311.072,265.92, 299.168,258.112, 288.928,248.384c-4.864,18.016-14.752,32.96-29.6,44.928
+		C 244.448,305.248, 227.040,311.232, 207.040,311.232c-12.672,0-24.576-2.688-35.808-8.032C 160.096,297.792, 150.304,290.272, 142.080,280.544
+		C 138.592,293.184, 131.84,303.776, 121.6,312.32C 111.392,320.864, 99.2,325.088, 85.024,325.088c-16.544,0-30.56-5.728-41.984-17.152C 31.584,296.512, 32,282.464, 32,265.92
+		l0-102.432 l 84.128,0 l0-83.872 l 140.96,0 L 257.088-32 l 225.024,0 L 482.112,167.296 c0,15.584-2.592,30.336-8.704,44.192C 467.328,225.376, 459.168,237.44, 448.96,247.648z"  />
+<glyph unicode="&#xe0a2;" d="M 489.856,222.752c0,129.152-105.28,233.888-235.104,233.888c-12.896,0-25.568-1.056-37.856-3.072
+		c-22.080,14.4-48.352,22.752-76.608,22.752C 62.752,476.32,0,413.504,0,336c0-28.192, 8.288-54.4, 22.592-76.384c-1.92-12.032-2.912-24.32-2.912-36.864
+		c0-129.184, 105.216-233.888, 235.072-233.888c 14.656,0, 28.928,1.44, 42.784,3.936c 21.536-13.376, 46.944-21.152, 74.144-21.152
+		c 77.536,0, 140.32,62.816, 140.32,140.32c0,29.28-8.96,56.512-24.352,79.040C 489.056,201.408, 489.856,212, 489.856,222.752z M 276.736,50.4
+		c-74.72-3.904-109.664,12.64-141.696,42.688c-35.776,33.568-21.408,71.84, 7.744,73.792c 29.12,1.952, 46.592-33.024, 62.144-42.72
+		c 15.52-9.696, 74.592-31.776, 105.792,3.904c 33.984,38.816-22.592,58.912-64.064,64.992C 187.456,201.824, 112.704,233.824, 118.528,296.96
+		C 124.352,360, 172.096,392.384, 222.368,396.928c 64.064,5.824, 105.792-9.696, 138.784-37.856c 38.144-32.544, 17.504-68.896-6.784-71.808
+		c-24.224-2.912-51.392,53.504-104.8,54.336C 194.528,342.464, 157.344,284.32, 225.28,267.808c 67.968-16.512, 140.736-23.296, 166.976-85.408
+		S 351.52,54.304, 276.736,50.4z"  />
+<glyph unicode="&#xe0a3;" d="M 442.752,399.264c-116.576,7.84-254.784,9.984-373.504,0C 32.384,395.136, 7.136,350.272, 4.384,316.192
+		c-5.824-71.584-5.824-112.32,0-183.904c 2.784-34.080, 27.392-79.2, 64.896-83.936c 120.128-7.872, 257.632-8.96, 373.504,0
+		c 36.288,6.304, 62.112,49.856, 64.896,83.936c 5.824,71.584, 5.824,116.768,0,188.384C 504.864,354.752, 484.512,397.728, 442.752,399.264z M 192,133.44L 192,316.96 
+		l 160-91.776L 192,133.44z"  />
+<glyph unicode="&#xe0a4;" d="M 128,2.272L 128,229.12 l-106.944-106.912C 42.976,71.68, 80.704,29.632, 128,2.272zM 160-13.376C 189.632-25.376, 222.048-32, 256-32c 94.752,0, 177.472,51.488, 221.728,128L 160,96 L 160-13.376 zM 213.12,368L 132.736,448.416C 53.6,404.864,0,320.704,0,224c0-21.248, 2.592-41.888, 7.488-61.632L 213.12,368zM 352,461.376C 322.336,473.376, 289.952,480, 256,480C 225.728,480, 196.704,474.72, 169.76,465.088L 352,282.88L 352,461.376 zM 384,445.728L 384,128 l 109.376,0 C 505.376,157.664, 512,190.048, 512,224C 512,318.752, 460.512,401.472, 384,445.728z"  />
+<glyph unicode="&#xe0a5;" d="M 487.808,192L 341.344,445.76L 170.656,445.76L 317.152,192 	zM 231.744,255.904L 146.432,403.744L0,150.080L 85.344,2.24 	zM 144.352-0.672L 426.656-0.672L 512,160L 236,160 	z"  />
+<glyph unicode="&#xe0a6;" d="M0,225.76A106.656,106.656 1260 1 1 213.312,225.76A106.656,106.656 1260 1 1 0,225.76zM 298.688,225.76A106.656,106.656 1260 1 1 512,225.76A106.656,106.656 1260 1 1 298.688,225.76z"  />
+<glyph unicode="&#xe0a7;" d="M 478.912,288l-28.096,0 l-0.608,0 C 432.64,288, 417.216,302.88, 416,320c0,91.328-73.632,160-165.6,160L 166.496,480 
+		C 74.592,480, 0.064,405.984,0,314.656l0-181.408 C0,41.952, 74.592-32, 166.496-32l 179.2,0 C 437.664-32, 512,41.952, 512,133.28L 512,250.464 
+		C 512,268.704, 497.28,288, 478.912,288z M 160,352l 96,0 c 17.6,0, 32-14.4, 32-32S 273.6,288, 256,288L 160,288 C 142.4,288, 128,302.4, 128,320S 142.4,352, 160,352z M 352,96L 160,96 c-17.6,0-32,14.4-32,32
+		s 14.4,32, 32,32l 192,0 c 17.6,0, 32-14.4, 32-32S 369.6,96, 352,96z"  />
+<glyph unicode="&#xe0a8;" d="M 256,480C 114.624,480,0,365.376,0,224c0-141.376, 114.624-256, 256-256s 256,114.624, 256,256C 512,365.376, 397.376,480, 256,480z M 374.272,73.92
+		c-3.2-5.824-9.216-9.12-15.424-9.12c-2.88,0-5.76,0.704-8.48,2.176c-40.992,22.592-87.552,34.528-134.592,34.528
+		c-28.192,0-56.032-4.192-82.688-12.448c-9.28-2.88-19.136,2.336-21.984,11.616c-2.88,9.28, 2.304,28.96, 11.616,31.84
+		c 30.048,9.28, 61.376,14.016, 93.088,14.016c 52.96,0, 105.376-13.44, 151.552-38.88C 375.872,102.976, 378.976,82.432, 374.272,73.92z M 406.784,170.368
+		c-3.648-7.040-10.816-18.464-18.24-18.464c-3.2,0-6.432,0.736-9.44,2.336c-50.784,26.368-105.728,39.744-163.296,39.744
+		c-31.712,0-63.2-4.192-93.6-12.512c-10.976-2.976-22.24,3.456-25.216,14.4C 94.048,206.816, 100.48,225.472, 111.424,228.448
+		c 33.92,9.248, 69.056,13.952, 104.384,13.952c 63.328,0, 126.336-15.36, 182.208-44.384C 408.064,192.8, 412,180.416, 406.784,170.368z M 441.408,263.040
+		c-4.128-8.224-12.384-15.456-21.024-15.456c-3.52,0-7.072,0.8-10.432,2.464c-60.64,30.24-125.952,45.536-194.144,45.536
+		c-35.52,0-70.912-4.32-105.248-12.8c-12.576-3.104-25.28,4.544-28.384,17.12C 79.040,312.448, 86.72,327.648, 99.296,330.752
+		C 137.28,340.192, 176.48,344.96, 215.808,344.96c 75.52,0, 147.872-16.992, 215.040-50.464C 442.464,288.704, 447.168,274.624, 441.408,263.040z"  />
+<glyph unicode="&#xe0a9;" d="M 480,480L 256,480 L 32,480 L 22.784,480 C 10.24,480,0,469.76,0,457.184L0,448 l0-224 l0-224 c0-17.664, 14.336-32, 32-32l 224.352,0 L 480-32 l 9.216,0 
+		C 501.76-32, 512-21.76, 512-9.184L 512,0 L 512,223.264 L 512,448 C 512,465.664, 497.664,480, 480,480z M 256.352,223.264L 256.352,0 L 32,0 L 32,224 l 224,0 L 256,448 l 224,0 l0-224.736 L 256.352,223.264 z"  />
+<glyph unicode="&#xe0aa;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 322.176,224.032L 280.224,224
+		l-0.032-153.6L 222.624,70.4 L 222.624,224 l-38.4,0 L 184.224,276.928 l 38.4,0.032L 222.56,308.128C 222.56,351.328, 234.272,377.6, 285.12,377.6l 42.368,0 l0-52.96 L 300.992,324.64 
+		c-19.808,0-20.768-7.392-20.768-21.184L 280.16,276.96l 47.616,0 L 322.176,224.032z"  />
+<glyph unicode="&#xe0ab;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 383.36,281.472
+		c 0.128-2.72, 0.192-5.44, 0.192-8.16c0-83.296-63.392-179.328-179.328-179.328c-35.584,0-68.704,10.432-96.608,28.32
+		c 4.928-0.576, 9.952-0.896, 15.040-0.896c 29.536,0, 56.704,10.080, 78.272,26.976c-27.584,0.512-50.848,18.752-58.88,43.776
+		C 145.92,191.424, 149.824,191.040, 153.92,191.040c 5.76,0, 11.328,0.768, 16.608,2.208C 141.696,199.040, 119.968,224.512, 119.968,255.040c0,0.256,0,0.512,0,0.8
+		c 8.512-4.736, 18.208-7.552, 28.544-7.904C 131.616,259.232, 120.48,278.528, 120.48,300.384c0,11.552, 3.104,22.368, 8.512,31.68
+		c 31.072-38.144, 77.536-63.232, 129.92-65.856C 257.824,270.816, 257.28,275.648, 257.28,280.576c0,34.784, 28.224,63.008, 63.040,63.008
+		c 18.112,0, 34.496-7.648, 46.016-19.904c 14.368,2.848, 27.872,8.096, 40.032,15.296c-4.704-14.72-14.688-27.072-27.712-34.88
+		c 12.736,1.504, 24.896,4.928, 36.192,9.92C 406.4,301.408, 395.68,290.304, 383.36,281.472z"  />
+<glyph unicode="&#xe0ac;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 275.968,154.784
+		c-18.72,1.44-26.56,10.72-41.216,19.648c-8.064-42.304-17.92-82.88-47.104-104.032C 178.624,134.304, 200.864,182.304, 211.2,233.28
+		C 193.6,262.944, 213.312,322.56, 250.432,307.872c 45.664-18.080-39.584-110.176, 17.664-121.664c 59.744-12.032, 84.16,103.68, 47.104,141.312
+		c-53.568,54.336-155.84,1.248-143.264-76.544c 3.072-19.008, 22.688-24.768, 7.84-51.040C 145.504,207.52, 135.264,234.56, 136.576,270.592
+		c 2.112,58.976, 52.992,100.256, 104.032,105.984c 64.544,7.232, 125.088-23.68, 133.472-84.384C 383.52,223.68, 344.96,149.44, 275.968,154.784z"  />
+<glyph unicode="&#xe0ad;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 184.576,51.744
+		c-56.672,0-104.48,23.072-104.48,59.936c0,37.408, 43.616,73.536, 100.288,73.504c 6.176,0, 11.84,0.16, 17.696,0.16
+		C 190.336,192.864, 184.192,202.112, 184.192,213.536c0,6.784, 2.176,13.28, 5.184,19.072C 186.304,232.384, 183.168,232.288, 179.936,232.288
+		c-46.56,0-77.728,33.12-77.728,74.176c0,40.16, 43.040,74.816, 88.8,74.816c 25.536,0, 102.080,0, 102.080,0L 270.176,364.768L 237.824,364.768 
+		c 21.472-8.256, 32.896-33.28, 32.896-58.944c0-21.536-11.936-40.096-28.8-53.28C 225.44,239.648, 222.336,234.272, 222.336,223.328
+		c0-9.344, 17.664-25.216, 26.88-31.744c 26.976-19.072, 35.68-36.8, 35.68-66.336C 284.864,88.384, 249.184,51.744, 184.576,51.744z M 448,255.392l-64,0 l0-63.872 
+		l-31.968,0 L 352.032,255.392 L 288,255.392 L 288,288 l 64.032,0 L 352.032,352 L 384,352 l0-64 l 64,0 L 448,255.392 zM 216.608,171.584C 208.864,174.080, 200.32,175.552, 191.2,175.648c-39.168,0.416-74.24-23.872-74.24-53.088
+		c0-29.792, 28.288-54.592, 67.456-54.592c 55.072,0, 74.24,23.296, 74.24,53.056c0,3.616-0.448,7.104-1.248,10.528
+		C 253.12,148.448, 237.856,156.832, 216.608,171.584zM 234.048,303.84C 229.504,338.336, 204.512,366.048, 178.24,366.848c-26.272,0.768-43.904-25.632-39.36-60.192
+		c 4.544-34.528, 29.536-63.168, 55.84-63.936C 220.96,241.92, 238.624,269.28, 234.048,303.84z"  />
+<glyph unicode="&#xe0ae;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 351.968,243.2L 275.2,243.2 L 275.168,172.96
+		c0-17.824-0.224-28.096, 1.664-33.152c 1.888-5.024, 6.56-10.24, 11.68-13.248c 6.816-4.096, 14.56-6.112, 23.296-6.112
+		c 15.552,0, 24.736,2.048, 40.128,12.16L 351.936,86.4 c-13.12-6.176-24.544-9.76-35.2-12.256C 306.112,71.648, 294.624,70.4, 282.24,70.4
+		c-14.048,0-22.336,1.76-33.12,5.312c-10.784,3.552-20,8.64-27.616,15.168c-7.648,6.56-12.896,13.568-15.872,20.96
+		c-2.944,7.392-4.416,18.112-4.416,32.16L 201.216,251.712 L 160.032,251.712 l0,43.52 c 12.064,3.904, 25.568,9.536, 34.144,16.864
+		c 8.608,7.328, 15.52,16.096, 20.736,26.368C 220.096,348.672, 223.68,361.76, 225.664,377.6L 275.2,377.6 l0-76.8 l 76.768,0 L 351.968,243.2 z"  />
+<glyph unicode="&#xe0af;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 256,292.608
+		c-12.608,0-22.88-10.272-22.88-22.88l0-91.488 c0-37.824-30.784-68.608-68.608-68.608c-37.824,0-68.608,30.784-68.608,68.608L 95.904,224 l 45.728,0 l0-45.728 
+		c0-12.608, 10.272-22.88, 22.88-22.88c 12.608,0, 22.88,10.272, 22.88,22.88L 187.392,269.728 c0,37.824, 30.784,68.608, 68.608,68.608s 68.608-30.784, 68.608-63.616
+		l0-22.176 L 295.296,244L 278.848,252.576L 278.848,274.752 C 278.848,282.336, 268.576,292.608, 256,292.608z M 416.064,178.272c0-37.824-30.784-68.608-68.608-68.608
+		s-68.608,30.784-68.608,73.632L 278.848,227.584 l 16.448-8.576l 29.312,8.576l0-44.32 c0-17.6, 10.272-27.872, 22.88-27.872s 22.88,10.272, 22.88,22.88L 370.368,224 l 45.728,0 
+		L 416.096,178.272 z"  />
+<glyph unicode="&#xe0b0;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 36.576,224c0,30.976, 6.848,60.416, 19.008,86.976
+		l 104.672-279.296C 87.040,66.304, 36.576,139.424, 36.576,224z M 256,10.272c-21.536,0-42.304,3.072-61.984,8.704L 259.84,205.312l 67.424-179.968
+		c 0.448-1.056, 0.992-2.048, 1.568-2.976C 306.080,14.56, 281.568,10.272, 256,10.272z M 286.176,324.192c 13.216,0.672, 25.12,2.016, 25.12,2.016
+		c 11.84,1.376, 10.432,18.272-1.376,17.632c0,0-35.552-2.72-58.464-2.72c-21.536,0-57.792,2.72-57.792,2.72
+		C 181.824,344.512, 180.448,326.912, 192.256,326.208c0,0, 11.2-1.344, 23.008-2.016L 249.44,232.96l-48.032-140.256L 121.536,324.192
+		c 13.248,0.672, 25.12,2.016, 25.12,2.016c 11.808,1.376, 10.432,18.272-1.376,17.632c0,0-35.552-2.72-58.464-2.72
+		c-4.096,0-8.96,0.096-14.112,0.256C 111.904,399.392, 179.36,437.728, 256,437.728c 57.12,0, 109.12-21.28, 148.192-56.096
+		c-0.96,0.064-1.856,0.192-2.848,0.192c-21.568,0-36.864-18.272-36.864-37.92c0-17.632, 10.432-32.512, 21.536-50.144
+		c 8.384-14.272, 18.112-32.544, 18.112-58.944c0-18.272-7.2-39.52-16.672-69.12l-21.92-71.2L 286.176,324.192z M 475.424,224
+		c0-78.848-43.872-147.68-109.12-184.672l 67.040,188.704c 12.512,30.496, 16.672,54.848, 16.672,76.544c0,7.872-0.512,15.168-1.472,21.984
+		C 465.664,296.096, 475.424,261.152, 475.424,224z"  />
+<glyph unicode="&#xe0b1;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 416,75.552
+		C 416,69.184, 410.816,64, 404.448,64L 107.552,64 C 101.184,64, 96,69.184, 96,75.552L 96,372.448 C 96,378.816, 101.184,384, 107.552,384l 296.896,0 C 410.816,384, 416,378.816, 416,372.448
+		L 416,75.552 zM 192,224A64,64 1260 1 1 320,224A64,64 1260 1 1 192,224zM 320,352L 384,352L 384,288L 320,288zM 351.2,224c0-52.512-42.72-95.2-95.2-95.2S 160.8,171.488, 160.8,224c0,6.816, 0.8,9.568, 2.144,16L 128,240 L 128,96 l 256,0 L 384,240 
+		l-34.944,0 C 350.432,233.568, 351.2,230.816, 351.2,224z"  />
+<glyph unicode="&#xe0b2;" d="M 315.648,204.768c 21.408-58.816, 30.112-106.72, 31.776-116.672c 36.704,24.832, 62.848,64.16, 70.144,109.696
+		C 412,199.552, 366.944,212.992, 315.648,204.768zM 283.936,196.832c-92.288-32.16-125.44-96.192-128.384-102.208c 27.744-21.632, 62.624-34.528, 100.448-34.528
+		c 22.688-0.032, 44.32,4.608, 63.936,12.992c-2.432,14.368-11.936,64.416-34.912,124.096C 284.64,197.088, 284.288,196.96, 283.936,196.832zM 291.264,262.72c 3.808-7.808, 7.456-15.744, 10.848-23.712c 1.184-2.816, 2.368-5.664, 3.52-8.448
+		c 54.464,6.848, 108.576-4.128, 113.952-5.28c-0.32,38.624-14.144,74.112-36.928,101.952C 379.232,322.592, 351.808,287.424, 291.264,262.72zM 267.424,222.336C 269.568,223.008, 271.712,223.68, 273.856,224.256C 269.76,233.568, 265.28,242.88, 260.608,252.032
+		C 178.88,227.584, 99.552,228.608, 92.384,228.768C 92.352,227.104, 92.32,225.44, 92.32,223.776c 0.032-42.048, 15.936-80.416, 42.080-109.44
+		C 138.112,120.672, 183.008,195.040, 267.424,222.336zM 247.104,277.216C 219.968,325.44, 190.752,365.952, 186.432,371.872C 140.64,350.272, 106.4,308.064, 95.808,257.28
+		C 103.136,257.184, 170.56,256.896, 247.104,277.216zM 364.48,346.176C 335.584,371.808, 297.6,387.424, 256,387.424c-13.184,0-26.048-1.568-38.336-4.544
+		C 222.176,376.8, 251.904,336.32, 278.72,287.072C 336.928,308.864, 361.536,341.984, 364.48,346.176zM 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 256,32.416
+		c-105.632,0-191.584,85.952-191.584,191.584c0,105.632, 85.952,191.584, 191.584,191.584S 447.584,329.632, 447.584,224C 447.584,118.368, 361.632,32.416, 256,32.416z"  />
+<glyph unicode="&#xe0b3;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 408.064,293.664
+		c-17.184-96.704-113.088-178.592-141.92-197.28c-28.864-18.688-55.168,7.488-64.736,27.296C 190.496,146.272, 157.76,268.736, 149.184,278.88
+		C 140.608,289.024, 114.88,268.736, 114.88,268.736L 102.4,285.088c0,0, 52.256,62.368, 92,70.208C 236.544,363.584, 236.48,290.56, 246.624,250.048
+		c 9.824-39.2, 16.384-61.632, 24.96-61.632c 8.576,0, 24.96,21.856, 42.88,55.36c 17.984,33.536-0.768,63.168-35.872,42.112
+		C 292.672,370.080, 425.216,390.336, 408.064,293.664z"  />
+<glyph unicode="&#xe0b4;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 192,100L 128,100 l0,224 l 64,0 L 192,100 z
+		 M 161.984,337.728c-16.576,0-29.984,13.44-29.984,30.016c0,16.576, 13.44,30.016, 29.984,30.016C 178.56,397.728, 192,384.288, 192,367.744
+		C 192,351.168, 178.56,337.728, 161.984,337.728z M 416,100l-64,0 L 352,238.496 c0,16.224-4.64,27.584-24.576,27.584C 294.368,266.080, 288,238.496, 288,238.496l0-138.496 L 224,100 l0,224 l 64,0 
+		l0-21.408 c 9.152,7.008, 32,21.376, 64,21.376c 20.768,0, 64-12.416, 64-87.424L 416,100 z"  />
+<glyph unicode="&#xe0b5;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 138.080,64.768
+		c-23.008,0-41.696,18.56-41.696,41.536c0,22.848, 18.688,41.632, 41.696,41.632c 23.072,0, 41.728-18.784, 41.76-41.632
+		C 179.84,83.328, 161.184,64.768, 138.080,64.768z M 242.848,64.384c0,39.264-15.264,76.16-42.912,103.776C 172.288,195.872, 135.52,211.168, 96.448,211.168L 96.448,271.2 
+		c 113.952,0, 206.72-92.768, 206.72-206.816L 242.848,64.384 z M 349.376,64.416c0,139.584-113.44,253.152-252.864,253.152L 96.512,377.6 c 172.608,0, 313.088-140.544, 313.088-313.184
+		L 349.376,64.416 z"  />
+<glyph unicode="&#xe0b6;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 273.664,183.36L 233.184,256.352
+		c 17.536,3.008, 32.704,3.776, 45.856,3.008l 22.976-36.704l 55.040,13.344c-21.632,21.184-61.152,41.088-133.408,28.224
+		C 222.048,263.936, 220.48,263.616, 218.944,263.328l 44.672-82.72l-160.864-44.192c-3.488,5.408-6.304,11.168-8.384,17.216
+		C 83.968,183.744, 92.512,214.656, 114.144,239.2c 13.088,14.688, 31.264,26.912, 53.376,35.456L 153.984,303.008c 12.032,3.84, 25.056,6.72, 38.88,8.576
+		l 14.208-26.336C 208.608,285.504, 210.144,285.76, 211.712,285.984c 42.784,6.464, 84.576,6.848, 123.136-2.208c 39.328-7.744, 75.424-24.928, 92.064-44.224
+		c 3.36-3.872, 5.888-7.904, 7.616-12.032L 273.664,183.36zM 148.736,185.536l 55.040,13.344L 179.168,250.336C 147.744,233.504, 143.776,208.192, 148.736,185.536z"  />
+<glyph unicode="&#xe0b7;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 309.152,165.984
+		c 7.904,5.984, 17.76,9.568, 28.448,9.568c 26.112,0, 47.296-21.152, 47.296-47.296c0-26.112-21.184-47.296-47.296-47.296
+		c-26.112,0-47.264,21.152-47.264,47.296c0,0,0,0.032,0,0.032L 169.728,186.592c-7.392-4.768-16.16-7.584-25.6-7.584
+		c-26.112,0-47.296,21.184-47.296,47.296c0,26.112, 21.184,47.296, 47.296,47.296c 11.136,0, 21.344-3.872, 29.44-10.304L 290.304,319.68
+		c0,0,0,0.032,0,0.032c0,26.112, 21.184,47.296, 47.264,47.296c 26.112,0, 47.296-21.152, 47.296-47.296s-21.184-47.296-47.296-47.296
+		c-10.688,0-20.512,3.584-28.448,9.568L 191.36,225.088c0-0.704-0.064-1.44-0.096-2.144L 309.152,165.984z"  />
+<glyph unicode="&#xe0b8;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 265.088,352.256
+		C 267.84,358.496, 271.552,364, 276.256,368.704c 4.736,4.736, 10.176,8.448, 16.448,11.2C 298.944,382.656, 305.76,384, 313.024,384
+		c 7.328,0, 14.080-1.344, 20.32-4.096c 6.24-2.72, 11.712-6.464, 16.416-11.2c 4.736-4.704, 8.48-10.208, 11.2-16.448
+		c 2.752-6.24, 4.128-12.992, 4.128-20.32c0-7.328-1.376-14.080-4.128-20.32c-2.72-6.24-6.464-11.712-11.2-16.448
+		c-4.736-4.704-10.176-8.448-16.416-11.2c-6.24-2.72-12.992-4.096-20.32-4.096c-7.296,0-14.080,1.376-20.32,4.096
+		c-6.24,2.752-11.712,6.464-16.448,11.2C 271.552,299.904, 267.84,305.376, 265.088,311.616C 262.336,317.856, 260.96,324.64, 260.96,331.936
+		C 260.96,339.264, 262.336,346.016, 265.088,352.256z M 184.032,360.512c 7.776,7.744, 17.12,11.616, 28.064,11.616c 11.264,0, 20.8-3.872, 28.544-11.616
+		C 248.416,352.736, 252.288,343.36, 252.288,332.384c0-11.264-3.904-20.768-11.68-28.544C 232.896,296.096, 223.36,292.224, 212.096,292.224
+		c-10.912,0-20.288,3.872-28.064,11.648c-7.776,7.776-11.68,17.28-11.68,28.544C 172.384,343.36, 176.256,352.736, 184.032,360.512z M 114.176,353.184
+		c 5.92,5.952, 13.152,8.928, 21.664,8.928c 8.544,0, 15.68-2.976, 21.472-8.928c 5.76-5.92, 8.64-12.992, 8.64-21.216
+		c0-8.544-2.912-15.744-8.64-21.696C 151.52,304.32, 144.384,301.344, 135.84,301.344c-8.512,0-15.744,2.976-21.664,8.896
+		C 108.224,316.192, 105.248,323.424, 105.248,331.936C 105.248,340.16, 108.224,347.264, 114.176,353.184z M 384,64L 243.36,64 l0,64 L 155.264,128 L 155.264,192 L 102.688,192 L 102.688,250.208 
+		c0,10.336-0.256,19.104, 6.912,26.24c 7.136,7.136, 15.904,10.72, 26.24,10.72c 8.832,0, 16.48-2.656, 22.848-8
+		c 6.4-5.344, 10.624-11.936, 12.8-19.872c 5.152,6.080, 11.264,10.784, 18.24,14.176c 7.008,3.328, 14.464,5.024, 22.368,5.024
+		c 12.48,0, 23.36-3.744, 32.672-11.2c 9.28-7.456, 15.456-16.832, 18.496-28.064c 6.4,6.080, 13.824,10.976, 22.4,14.592
+		c 8.512,3.648, 17.664,5.472, 27.392,5.472c 9.76,0, 18.976-1.824, 27.648-5.472c 8.64-3.648, 16.192-8.672, 22.592-15.072
+		c 6.4-6.4, 11.488-13.92, 15.264-22.592C 382.368,207.52, 384,198.304, 384,188.544L 384,64 z"  />
+<glyph unicode="&#xe0b9;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 325.408,72.608
+		c-16.32,0-31.552,4.672-44.48,12.704c-8.32-1.504-16.864-2.368-25.664-2.368c-77.92,0-141.056,62.816-141.056,140.32
+		c0,7.52, 0.608,14.912, 1.76,22.112C 107.36,258.56, 102.4,274.304, 102.4,291.2c0,46.496, 37.664,84.16, 84.16,84.192c 16.96,0, 32.704-5.024, 45.952-13.664
+		c 7.36,1.216, 14.976,1.856, 22.72,1.856c 77.888,0, 141.056-62.848, 141.056-140.32c0-6.464-0.48-12.8-1.312-19.040
+		C 404.224,190.688, 409.6,174.368, 409.6,156.8C 409.6,110.304, 371.936,72.608, 325.408,72.608zM 237.568,250.272c-40.768,9.92-18.464,44.8, 14.56,44.288C 284.192,294.048, 300.48,260.192, 315.008,261.952
+		c 14.56,1.76, 26.944,23.552, 4.064,43.072C 299.296,321.92, 274.272,331.232, 235.808,327.744C 205.664,325.024, 177.024,305.6, 173.504,267.776
+		C 170.016,229.92, 214.88,210.688, 250.4,205.408c 24.896-3.648, 58.816-15.712, 38.432-39.008c-18.72-21.408-54.176-8.16-63.488-2.336
+		C 216.032,169.92, 205.536,190.88, 188.064,189.728c-17.504-1.184-26.112-24.128-4.64-44.288c 19.232-18.016, 40.192-27.968, 85.024-25.6
+		c 44.864,2.336, 85.056,41.92, 69.312,79.2S 278.336,240.384, 237.568,250.272z"  />
+<glyph unicode="&#xe0ba;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 413.28,166.688
+		c-1.728-21.312-17.888-48.512-40.544-52.448c-72.416-5.6-158.368-4.928-233.44,0c-23.424,2.944-38.816,31.168-40.544,52.448
+		c-3.648,44.736-3.648,70.208,0,114.944C 100.48,302.912, 116.256,330.976, 139.296,333.536c 74.208,6.24, 160.576,4.896, 233.44,0
+		c 26.112-0.96, 38.816-27.808, 40.544-49.12C 416.896,239.68, 416.896,211.424, 413.28,166.688zM 224,160L 320,224L 224,288 	z"  />
+<glyph unicode="&#xe0bb;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 256,416
+		c 25.472,0, 49.76-4.96, 72-13.952L 328,268.16 L 191.328,404.832C 211.52,412.032, 233.312,416, 256,416z M 69.6,177.792C 65.952,192.576, 64,208.064, 64,224
+		c0,72.544, 40.192,135.648, 99.552,168.32l 60.288-60.32L 69.6,177.792z M 160,57.696c-35.488,20.512-63.776,52.064-80.192,89.952L 160,227.84L 160,57.696 z M 256,32
+		c-25.472,0-49.76,4.96-72,13.984L 184,128 l 238.304,0 C 389.088,70.624, 327.072,32, 256,32z M 434.016,152L 352,152 L 352,390.304 C 409.376,357.088, 448,295.072, 448,224
+		C 448,198.528, 443.040,174.24, 434.016,152z"  />
+<glyph unicode="&#xe0bc;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 305.376,352.288l 84.736-146.816L 291.392,205.472 
+		L 206.624,352.288L 305.376,352.288 z M 107.904,181.248L 192.608,328l 49.344-85.536l-84.704-146.752L 107.904,181.248z M 354.72,95.712L 191.424,95.712 l 49.344,85.536l 163.328,0 
+		L 354.72,95.712z"  />
+<glyph unicode="&#xe0bd;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 161.792,159.872
+		c-35.872,0-64.928,29.056-64.928,64.928s 29.056,64.928, 64.928,64.928c 35.872,0, 64.928-29.056, 64.928-64.928S 197.664,159.872, 161.792,159.872z
+		 M 350.88,159.872c-35.872,0-64.928,29.056-64.928,64.928s 29.056,64.928, 64.928,64.928c 35.872,0, 64.928-29.056, 64.928-64.928
+		S 386.752,159.872, 350.88,159.872z"  />
+<glyph unicode="&#xe0be;" d="M 315.84,184.096L 196.16,184.096 c-10.976,0-19.936-8.992-19.936-19.936s 8.992-19.936, 19.936-19.936L 315.84,144.224 
+		c 10.976,0, 19.936,8.992, 19.936,19.936S 326.816,184.096, 315.84,184.096zM 196.16,263.904L 256,263.904 c 10.976,0, 19.936,8.992, 19.936,19.936c0,10.976-8.992,19.936-19.936,19.936L 196.16,303.776 
+		c-10.976,0-19.936-8.992-19.936-19.936C 176.192,272.864, 185.184,263.904, 196.16,263.904zM 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 415.584,167.456
+		c0-56.928-46.336-103.040-103.68-103.040L 200.192,64.416 c-57.28,0-103.808,46.112-103.808,103.008L 96.384,280.512 c 0.032,56.928, 46.496,103.072, 103.808,103.072l 52.32,0 
+		c 57.344,0, 103.232-42.816, 103.232-99.744c 0.768-10.656, 10.368-19.936, 21.312-19.936l 0.384,0 l 17.504,0 c 11.456,0, 20.64-12.032, 20.64-23.392L 415.584,167.456 z"  />
+<glyph unicode="&#xe0bf;" d="M 225.856,314.72c-29.504,0-58.88-3.584-87.392-10.656C 129.024,301.728, 123.296,290.336, 125.632,280.928
+		s 11.872-15.168, 21.312-12.832c 25.728,6.368, 52.288,9.6, 78.944,9.6c 51.136,0, 100.128-11.488, 145.6-34.176c 2.528-1.248, 5.184-1.856, 7.84-1.856
+		c 6.464,0, 12.672,5.408, 15.776,11.584c 4.32,8.672, 0.8,19.264-7.904,23.584C 336.768,301.984, 282.496,314.72, 225.856,314.72zM 225.856,165.888c-23.776,0-47.264-3.552-69.824-10.496c-6.976-2.144-10.848-16.928-8.704-23.872
+		c 2.144-6.976, 9.536-10.88, 16.512-8.704c 20,6.208, 40.896,9.344, 62.016,9.344c 35.264,0, 70.176-8.96, 100.928-25.888
+		c 2.016-1.12, 4.192-1.632, 6.368-1.632c 4.672,0, 9.184,2.464, 11.552,6.848c 3.52,6.368, 1.216,21.792-5.184,25.312
+		C 304.896,155.808, 265.568,165.888, 225.856,165.888zM 362.528,204.512c-41.888,21.76-89.152,33.28-136.64,33.28c-26.496,0-52.864-3.52-78.304-10.464
+		c-8.192-2.24-13.024-16.224-10.784-24.416c 2.24-8.192, 10.688-13.024, 18.912-10.784c 22.784,6.208, 46.432,9.376, 70.176,9.376
+		c 43.2,0, 84.384-10.048, 122.464-29.824c 2.272-1.184, 4.672-1.728, 7.072-1.728c 5.568,0, 10.912,8.576, 13.664,13.824
+		C 372.992,191.296, 370.048,200.608, 362.528,204.512zM 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 256,32c-106.048,0-192,85.952-192,192
+		c0,106.048, 85.952,192, 192,192s 192-85.952, 192-192C 448,117.952, 362.048,32, 256,32z"  />
+<glyph unicode="&#xe0c0;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256C 512,365.408, 397.376,480, 256,480z M 416,223.648L 416,80 l0-4.608 
+		C 416,69.12, 410.88,64, 404.608,64L 400,64 L 256.192,64 L 112,64 C 103.168,64, 96,71.168, 96,80L 96,223.648 L 96,368 L 96,372.608 C 96,378.88, 101.12,384, 107.392,384L 112,384 l 144.192,0 L 400,384 
+		C 408.832,384, 416,376.832, 416,368L 416,223.648 zM 128,223.648L 256.192,223.648L 256.192,96L 128,96zM 256.192,352L 384,352L 384,223.648L 256.192,223.648z"  />
+<glyph unicode="&#xe0c1;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 322.176,224.032L 280.224,224l-0.032-153.6L 222.624,70.4 L 222.624,224 l-38.4,0 L 184.224,276.928 l 38.4,0.032L 222.56,308.128C 222.56,351.328, 234.272,377.6, 285.12,377.6l 42.368,0 l0-52.96 L 300.992,324.64 
+		c-19.808,0-20.768-7.392-20.768-21.184L 280.16,276.96l 47.616,0 L 322.176,224.032z"  />
+<glyph unicode="&#xe0c2;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 383.36,281.472c 0.128-2.72, 0.192-5.44, 0.192-8.16c0-83.296-63.392-179.328-179.328-179.328c-35.584,0-68.704,10.432-96.608,28.32
+		c 4.928-0.576, 9.952-0.896, 15.040-0.896c 29.536,0, 56.704,10.080, 78.272,26.976c-27.584,0.512-50.848,18.752-58.88,43.776
+		C 145.92,191.424, 149.824,191.040, 153.92,191.040c 5.76,0, 11.328,0.768, 16.608,2.208C 141.696,199.040, 119.968,224.512, 119.968,255.040c0,0.256,0,0.512,0,0.8
+		c 8.512-4.736, 18.208-7.552, 28.544-7.904C 131.616,259.232, 120.48,278.528, 120.48,300.384c0,11.552, 3.104,22.368, 8.512,31.68
+		c 31.072-38.144, 77.536-63.232, 129.92-65.856C 257.824,270.816, 257.28,275.648, 257.28,280.576c0,34.784, 28.224,63.008, 63.040,63.008
+		c 18.112,0, 34.496-7.648, 46.016-19.904c 14.368,2.848, 27.872,8.096, 40.032,15.296c-4.704-14.72-14.688-27.072-27.712-34.88
+		c 12.736,1.504, 24.896,4.928, 36.192,9.92C 406.4,301.408, 395.68,290.304, 383.36,281.472z"  />
+<glyph unicode="&#xe0c3;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 275.968,154.784c-18.72,1.44-26.56,10.72-41.216,19.648c-8.064-42.304-17.92-82.88-47.104-104.032C 178.624,134.304, 200.864,182.304, 211.2,233.28
+		C 193.6,262.944, 213.312,322.56, 250.432,307.872c 45.664-18.080-39.584-110.176, 17.664-121.664c 59.744-12.032, 84.16,103.68, 47.104,141.312
+		c-53.568,54.336-155.84,1.248-143.264-76.544c 3.072-19.008, 22.688-24.768, 7.84-51.040C 145.504,207.52, 135.264,234.56, 136.576,270.592
+		c 2.112,58.976, 52.992,100.256, 104.032,105.984c 64.544,7.232, 125.088-23.68, 133.472-84.384C 383.52,223.68, 344.96,149.44, 275.968,154.784z"  />
+<glyph unicode="&#xe0c4;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 184.576,51.744c-56.672,0-104.48,23.072-104.48,59.936c0,37.408, 43.616,73.536, 100.288,73.504c 6.176,0, 11.84,0.16, 17.696,0.16
+		C 190.336,192.864, 184.192,202.112, 184.192,213.536c0,6.784, 2.176,13.28, 5.184,19.072C 186.304,232.384, 183.168,232.288, 179.936,232.288
+		c-46.56,0-77.728,33.12-77.728,74.176c0,40.16, 43.040,74.816, 88.8,74.816c 25.536,0, 102.080,0, 102.080,0L 270.176,364.768L 237.824,364.768 
+		c 21.472-8.256, 32.896-33.28, 32.896-58.944c0-21.536-11.936-40.096-28.8-53.28C 225.44,239.648, 222.336,234.272, 222.336,223.328
+		c0-9.344, 17.664-25.216, 26.88-31.744c 26.976-19.072, 35.68-36.8, 35.68-66.336C 284.864,88.384, 249.184,51.744, 184.576,51.744z M 448,255.392l-64,0 l0-63.872 
+		l-31.968,0 L 352.032,255.392 L 288,255.392 L 288,288 l 64.032,0 L 352.032,352 L 384,352 l0-64 l 64,0 L 448,255.392 zM 234.048,303.84C 229.504,338.336, 204.512,366.048, 178.24,366.848c-26.272,0.768-43.904-25.632-39.36-60.192
+		c 4.544-34.528, 29.536-63.168, 55.84-63.936C 220.96,241.92, 238.624,269.28, 234.048,303.84zM 216.608,171.584C 208.864,174.080, 200.32,175.552, 191.2,175.648c-39.168,0.416-74.24-23.872-74.24-53.088
+		c0-29.792, 28.288-54.592, 67.456-54.592c 55.072,0, 74.24,23.296, 74.24,53.056c0,3.616-0.448,7.104-1.248,10.528
+		C 253.12,148.448, 237.856,156.832, 216.608,171.584z"  />
+<glyph unicode="&#xe0c5;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 351.968,243.2L 275.2,243.2 L 275.168,172.96c0-17.824-0.224-28.096, 1.664-33.152c 1.888-5.024, 6.56-10.24, 11.68-13.248
+		c 6.816-4.096, 14.56-6.112, 23.296-6.112c 15.552,0, 24.736,2.048, 40.128,12.16L 351.936,86.4 c-13.12-6.176-24.544-9.76-35.2-12.256
+		C 306.112,71.648, 294.624,70.4, 282.24,70.4c-14.048,0-22.336,1.76-33.12,5.312c-10.784,3.552-20,8.64-27.616,15.168
+		c-7.648,6.56-12.896,13.568-15.872,20.96c-2.944,7.392-4.416,18.112-4.416,32.16L 201.216,251.712 L 160.032,251.712 l0,43.52 
+		c 12.064,3.904, 25.568,9.536, 34.144,16.864c 8.608,7.328, 15.52,16.096, 20.736,26.368C 220.096,348.672, 223.68,361.76, 225.664,377.6L 275.2,377.6 l0-76.8 l 76.768,0 L 351.968,243.2 z"  />
+<glyph unicode="&#xe0c6;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 256,292.608c-12.608,0-22.88-10.272-22.88-22.88l0-91.488 c0-37.824-30.784-68.608-68.608-68.608c-37.824,0-68.608,30.784-68.608,68.608L 95.904,224 l 45.728,0 
+		l0-45.728 c0-12.608, 10.272-22.88, 22.88-22.88c 12.608,0, 22.88,10.272, 22.88,22.88L 187.392,269.728 c0,37.824, 30.784,68.608, 68.608,68.608
+		s 68.608-30.784, 68.608-63.616l0-22.176 L 295.296,244L 278.848,252.576L 278.848,274.752 C 278.848,282.336, 268.576,292.608, 256,292.608z M 416.064,178.272
+		c0-37.824-30.784-68.608-68.608-68.608s-68.608,30.784-68.608,73.632L 278.848,227.584 l 16.448-8.576l 29.312,8.576l0-44.32 c0-17.6, 10.272-27.872, 22.88-27.872
+		s 22.88,10.272, 22.88,22.88L 370.368,224 l 45.728,0 L 416.096,178.272 z"  />
+<glyph unicode="&#xe0c7;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 58.88,224c0,27.84, 6.144,54.272, 17.088,78.112l 94.016-250.912C 104.224,82.336, 58.88,148, 58.88,224z M 256,32c-19.36,0-38.016,2.752-55.68,7.808
+		l 61.696,161.184l 58.048-155.456c 0.384-0.96, 0.896-1.824, 1.408-2.656C 300.992,35.84, 278.976,32, 256,32z M 283.104,314.016
+		C 294.976,314.624, 305.664,315.84, 305.664,315.84c 10.656,1.248, 9.376,16.416-1.248,15.84c0,0-31.936-2.432-52.544-2.432
+		c-19.36,0-51.904,2.432-51.904,2.432C 189.376,332.256, 188.128,316.448, 198.72,315.84c0,0, 10.048-1.216, 20.672-1.792l 30.72-81.984l-47.104-126.048
+		L 135.2,314.016C 147.072,314.624, 157.76,315.84, 157.76,315.84c 10.624,1.248, 9.376,16.416-1.248,15.84c0,0-31.936-2.432-52.544-2.432
+		c-3.68,0-8.064,0.096-12.672,0.224C 126.56,381.568, 187.136,416, 256,416c 51.328,0, 98.048-19.136, 133.12-50.4c-0.864,0.064-1.664,0.16-2.56,0.16
+		c-19.392,0-33.12-16.416-33.12-34.080c0-15.84, 9.376-29.216, 19.36-45.056c 7.52-12.8, 12.864-19.872, 12.864-43.584
+		c0-16.416-6.464-35.52-14.976-62.080l-19.68-63.968L 283.104,314.016z M 355.072,58.080l 60.224,169.536c 11.232,27.392, 14.976,49.28, 14.976,68.768
+		c0,7.072-0.448,13.632-1.312,19.744C 444.352,288.768, 453.12,257.376, 453.12,224C 453.12,153.152, 413.696,91.328, 355.072,58.080z"  />
+<glyph unicode="&#xe0c8;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 416,75.552C 416,69.184, 410.816,64, 404.448,64L 107.552,64 C 101.184,64, 96,69.184, 96,75.552L 96,372.448 C 96,378.816, 101.184,384, 107.552,384l 296.896,0 
+		C 410.816,384, 416,378.816, 416,372.448L 416,75.552 zM 320,352L 384,352L 384,288L 320,288zM 192,224A64,64 1260 1 1 320,224A64,64 1260 1 1 192,224zM 351.2,224c0-52.512-42.72-95.2-95.2-95.2S 160.8,171.488, 160.8,224c0,6.816, 0.8,9.568, 2.144,16L 128,240 L 128,96 l 256,0 L 384,240 
+		l-34.944,0 C 350.432,233.568, 351.2,230.816, 351.2,224z"  />
+<glyph unicode="&#xe0c9;" d="M 247.104,277.216C 219.968,325.44, 190.752,365.952, 186.432,371.872C 140.64,350.272, 106.4,308.064, 95.808,257.28
+		C 103.136,257.184, 170.56,256.896, 247.104,277.216zM 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 256,32.416c-105.632,0-191.584,85.952-191.584,191.584c0,105.632, 85.952,191.584, 191.584,191.584S 447.584,329.632, 447.584,224
+		C 447.584,118.368, 361.632,32.416, 256,32.416zM 267.424,222.336C 269.568,223.008, 271.712,223.68, 273.856,224.256C 269.76,233.568, 265.28,242.88, 260.608,252.032
+		C 178.88,227.584, 99.552,228.608, 92.384,228.768C 92.352,227.104, 92.32,225.44, 92.32,223.776c 0.032-42.048, 15.936-80.416, 42.080-109.44
+		C 138.112,120.672, 183.008,195.040, 267.424,222.336zM 291.264,262.72c 3.808-7.808, 7.456-15.744, 10.848-23.712c 1.184-2.816, 2.368-5.664, 3.52-8.448
+		c 54.464,6.848, 108.576-4.128, 113.952-5.28c-0.32,38.624-14.144,74.112-36.928,101.952C 379.232,322.592, 351.808,287.424, 291.264,262.72zM 283.936,196.832c-92.288-32.16-125.44-96.192-128.384-102.208c 27.744-21.632, 62.624-34.528, 100.448-34.528
+		c 22.688-0.032, 44.32,4.608, 63.936,12.992c-2.432,14.368-11.936,64.416-34.912,124.096C 284.64,197.088, 284.288,196.96, 283.936,196.832zM 364.48,346.176C 335.584,371.808, 297.6,387.424, 256,387.424c-13.184,0-26.048-1.568-38.336-4.544
+		C 222.176,376.8, 251.904,336.32, 278.72,287.072C 336.928,308.864, 361.536,341.984, 364.48,346.176zM 315.648,204.768c 21.408-58.816, 30.112-106.72, 31.776-116.672c 36.704,24.832, 62.848,64.16, 70.144,109.696
+		C 412,199.552, 366.944,212.992, 315.648,204.768z"  />
+<glyph unicode="&#xe0ca;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 408.064,293.664c-17.184-96.704-113.088-178.592-141.92-197.28c-28.864-18.688-55.168,7.488-64.736,27.296C 190.496,146.272, 157.76,268.736, 149.184,278.88
+		C 140.608,289.024, 114.88,268.736, 114.88,268.736L 102.4,285.088c0,0, 52.256,62.368, 92,70.208C 236.544,363.584, 236.48,290.56, 246.624,250.048
+		c 9.824-39.2, 16.384-61.632, 24.96-61.632c 8.576,0, 24.96,21.856, 42.88,55.36c 17.984,33.536-0.768,63.168-35.872,42.112
+		C 292.672,370.080, 425.216,390.336, 408.064,293.664z"  />
+<glyph unicode="&#xe0cb;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 192,100L 128,100 l0,224 l 64,0 L 192,100 z M 161.984,337.728c-16.576,0-29.984,13.44-29.984,30.016c0,16.576, 13.44,30.016, 29.984,30.016
+		C 178.56,397.728, 192,384.288, 192,367.744C 192,351.168, 178.56,337.728, 161.984,337.728z M 416,100l-64,0 L 352,238.496 c0,16.224-4.64,27.584-24.576,27.584
+		C 294.368,266.080, 288,238.496, 288,238.496l0-138.496 L 224,100 l0,224 l 64,0 l0-21.408 c 9.152,7.008, 32,21.376, 64,21.376c 20.768,0, 64-12.416, 64-87.424L 416,100 z"  />
+<glyph unicode="&#xe0cc;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 138.080,64.768c-23.008,0-41.696,18.56-41.696,41.536c0,22.848, 18.688,41.632, 41.696,41.632c 23.072,0, 41.728-18.784, 41.76-41.632
+		C 179.84,83.328, 161.184,64.768, 138.080,64.768z M 242.848,64.384c0,39.264-15.264,76.16-42.912,103.776C 172.288,195.872, 135.52,211.168, 96.448,211.168L 96.448,271.2 
+		c 113.952,0, 206.72-92.768, 206.72-206.816L 242.848,64.384 z M 349.376,64.416c0,139.584-113.44,253.152-252.864,253.152L 96.512,377.6 c 172.608,0, 313.088-140.544, 313.088-313.184
+		L 349.376,64.416 z"  />
+<glyph unicode="&#xe0cd;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 273.664,183.36L 233.184,256.352c 17.536,3.008, 32.704,3.776, 45.856,3.008l 22.976-36.704l 55.040,13.344c-21.632,21.184-61.152,41.088-133.408,28.224
+		C 222.048,263.936, 220.48,263.616, 218.944,263.328l 44.672-82.72l-160.864-44.192c-3.488,5.408-6.304,11.168-8.384,17.216
+		C 83.968,183.744, 92.512,214.656, 114.144,239.2c 13.088,14.688, 31.264,26.912, 53.376,35.456L 153.984,303.008c 12.032,3.84, 25.056,6.72, 38.88,8.576
+		l 14.208-26.336C 208.608,285.504, 210.144,285.76, 211.712,285.984c 42.784,6.464, 84.576,6.848, 123.136-2.208c 39.328-7.744, 75.424-24.928, 92.064-44.224
+		c 3.36-3.872, 5.888-7.904, 7.616-12.032L 273.664,183.36zM 148.736,185.536l 55.040,13.344L 179.168,250.336C 147.744,233.504, 143.776,208.192, 148.736,185.536z"  />
+<glyph unicode="&#xe0ce;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 309.152,165.984c 7.904,5.984, 17.76,9.568, 28.448,9.568c 26.112,0, 47.296-21.152, 47.296-47.296c0-26.112-21.184-47.296-47.296-47.296
+		c-26.112,0-47.264,21.152-47.264,47.296c0,0,0,0.032,0,0.032L 169.728,186.592c-7.392-4.768-16.16-7.584-25.6-7.584
+		c-26.112,0-47.296,21.184-47.296,47.296c0,26.112, 21.184,47.296, 47.296,47.296c 11.136,0, 21.344-3.872, 29.44-10.304L 290.304,319.68
+		c0,0,0,0.032,0,0.032c0,26.112, 21.184,47.296, 47.264,47.296c 26.112,0, 47.296-21.152, 47.296-47.296s-21.184-47.296-47.296-47.296
+		c-10.688,0-20.512,3.584-28.448,9.568L 191.36,225.088c0-0.704-0.064-1.44-0.096-2.144L 309.152,165.984z"  />
+<glyph unicode="&#xe0cf;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 265.088,352.256C 267.84,358.496, 271.552,364, 276.256,368.704c 4.736,4.736, 10.176,8.448, 16.448,11.2C 298.944,382.656, 305.76,384, 313.024,384
+		c 7.328,0, 14.080-1.344, 20.32-4.096c 6.24-2.72, 11.712-6.464, 16.416-11.2c 4.736-4.704, 8.48-10.208, 11.2-16.448
+		c 2.752-6.24, 4.128-12.992, 4.128-20.32c0-7.328-1.376-14.080-4.128-20.32c-2.72-6.24-6.464-11.712-11.2-16.448
+		c-4.736-4.704-10.176-8.448-16.416-11.2c-6.24-2.72-12.992-4.096-20.32-4.096c-7.296,0-14.080,1.376-20.32,4.096
+		c-6.24,2.752-11.712,6.464-16.448,11.2C 271.552,299.904, 267.84,305.376, 265.088,311.616C 262.336,317.856, 260.96,324.64, 260.96,331.936
+		C 260.96,339.264, 262.336,346.016, 265.088,352.256z M 184.032,360.512c 7.776,7.744, 17.12,11.616, 28.064,11.616c 11.264,0, 20.8-3.872, 28.544-11.616
+		C 248.416,352.736, 252.288,343.36, 252.288,332.384c0-11.264-3.904-20.768-11.68-28.544C 232.896,296.096, 223.36,292.224, 212.096,292.224
+		c-10.912,0-20.288,3.872-28.064,11.648c-7.776,7.776-11.68,17.28-11.68,28.544C 172.384,343.36, 176.256,352.736, 184.032,360.512z M 114.176,353.184
+		c 5.92,5.952, 13.152,8.928, 21.664,8.928c 8.544,0, 15.68-2.976, 21.472-8.928c 5.76-5.92, 8.64-12.992, 8.64-21.216
+		c0-8.544-2.912-15.744-8.64-21.696C 151.52,304.32, 144.384,301.344, 135.84,301.344c-8.512,0-15.744,2.976-21.664,8.896
+		C 108.224,316.192, 105.248,323.424, 105.248,331.936C 105.248,340.16, 108.224,347.264, 114.176,353.184z M 384,64L 243.36,64 l0,64 L 155.264,128 L 155.264,192 L 102.688,192 L 102.688,250.208 
+		c0,10.336-0.256,19.104, 6.912,26.24c 7.136,7.136, 15.904,10.72, 26.24,10.72c 8.832,0, 16.48-2.656, 22.848-8
+		c 6.4-5.344, 10.624-11.936, 12.8-19.872c 5.152,6.080, 11.264,10.784, 18.24,14.176c 7.008,3.328, 14.464,5.024, 22.368,5.024
+		c 12.48,0, 23.36-3.744, 32.672-11.2c 9.28-7.456, 15.456-16.832, 18.496-28.064c 6.4,6.080, 13.824,10.976, 22.4,14.592
+		c 8.512,3.648, 17.664,5.472, 27.392,5.472c 9.76,0, 18.976-1.824, 27.648-5.472c 8.64-3.648, 16.192-8.672, 22.592-15.072
+		c 6.4-6.4, 11.488-13.92, 15.264-22.592C 382.368,207.52, 384,198.304, 384,188.544L 384,64 z"  />
+<glyph unicode="&#xe0d0;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 325.408,72.608c-16.32,0-31.552,4.672-44.48,12.704c-8.32-1.504-16.864-2.368-25.664-2.368c-77.92,0-141.056,62.816-141.056,140.32
+		c0,7.52, 0.608,14.912, 1.76,22.112C 107.36,258.56, 102.4,274.304, 102.4,291.2c0,46.496, 37.664,84.16, 84.16,84.192c 16.96,0, 32.704-5.024, 45.952-13.664
+		c 7.36,1.216, 14.976,1.856, 22.72,1.856c 77.888,0, 141.056-62.848, 141.056-140.32c0-6.464-0.48-12.8-1.312-19.040
+		C 404.224,190.688, 409.6,174.368, 409.6,156.8C 409.6,110.304, 371.936,72.608, 325.408,72.608zM 237.568,250.272c-40.768,9.92-18.464,44.8, 14.56,44.288C 284.192,294.048, 300.48,260.192, 315.008,261.952
+		c 14.56,1.76, 26.944,23.552, 4.064,43.072C 299.296,321.92, 274.272,331.232, 235.808,327.744C 205.664,325.024, 177.024,305.6, 173.504,267.776
+		C 170.016,229.92, 214.88,210.688, 250.4,205.408c 24.896-3.648, 58.816-15.712, 38.432-39.008c-18.72-21.408-54.176-8.16-63.488-2.336
+		C 216.032,169.92, 205.536,190.88, 188.064,189.728c-17.504-1.184-26.112-24.128-4.64-44.288c 19.232-18.016, 40.192-27.968, 85.024-25.6
+		c 44.864,2.336, 85.056,41.92, 69.312,79.2S 278.336,240.384, 237.568,250.272z"  />
+<glyph unicode="&#xe0d1;" d="M 224,160L 320,224L 224,288 	zM 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 413.28,166.688c-1.728-21.312-17.888-48.512-40.544-52.448c-72.416-5.6-158.368-4.928-233.44,0c-23.424,2.944-38.816,31.168-40.544,52.448
+		c-3.648,44.736-3.648,70.208,0,114.944C 100.48,302.912, 116.256,330.976, 139.296,333.536c 74.208,6.24, 160.576,4.896, 233.44,0
+		c 26.112-0.96, 38.816-27.808, 40.544-49.12C 416.896,239.68, 416.896,211.424, 413.28,166.688z"  />
+<glyph unicode="&#xe0d2;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 256,416c 25.472,0, 49.76-4.96, 72-13.952L 328,268.16 L 191.328,404.832C 211.52,412.032, 233.312,416, 256,416z M 64,224c0,72.544, 40.192,135.648, 99.552,168.32l 60.288-60.32
+		l-154.24-154.208C 65.952,192.576, 64,208.064, 64,224z M 160,57.696c-35.488,20.512-63.776,52.064-80.192,89.952L 160,227.84L 160,57.696 z M 256,32
+		c-25.472,0-49.76,4.96-72,13.984L 184,128 l 238.304,0 C 389.088,70.624, 327.072,32, 256,32z M 434.016,152L 352,152 L 352,390.304 C 409.376,357.088, 448,295.072, 448,224
+		C 448,198.528, 443.040,174.24, 434.016,152z"  />
+<glyph unicode="&#xe0d3;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 305.376,352.288l 84.736-146.816L 291.392,205.472 L 206.624,352.288L 305.376,352.288 z M 107.904,181.248L 192.608,328l 49.344-85.536l-84.704-146.752L 107.904,181.248z
+		 M 354.72,95.712L 191.424,95.712 l 49.344,85.536l 163.328,0 L 354.72,95.712z"  />
+<glyph unicode="&#xe0d4;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 161.792,159.872c-35.872,0-64.928,29.056-64.928,64.928s 29.056,64.928, 64.928,64.928c 35.872,0, 64.928-29.056, 64.928-64.928
+		S 197.664,159.872, 161.792,159.872z M 350.88,159.872c-35.872,0-64.928,29.056-64.928,64.928s 29.056,64.928, 64.928,64.928
+		c 35.872,0, 64.928-29.056, 64.928-64.928S 386.752,159.872, 350.88,159.872z"  />
+<glyph unicode="&#xe0d5;" d="M 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 415.584,167.456c0-56.928-46.336-103.040-103.68-103.040L 200.192,64.416 c-57.28,0-103.808,46.112-103.808,103.008L 96.384,280.512 c 0.032,56.928, 46.496,103.072, 103.808,103.072
+		l 52.32,0 c 57.344,0, 103.232-42.816, 103.232-99.744c 0.768-10.656, 10.368-19.936, 21.312-19.936l 0.384,0 l 17.504,0 c 11.456,0, 20.64-12.032, 20.64-23.392L 415.584,167.456 zM 315.84,184.096L 196.16,184.096 c-10.976,0-19.936-8.992-19.936-19.936s 8.992-19.936, 19.936-19.936L 315.84,144.224 
+		c 10.976,0, 19.936,8.992, 19.936,19.936S 326.816,184.096, 315.84,184.096zM 196.16,263.904L 256,263.904 c 10.976,0, 19.936,8.992, 19.936,19.936c0,10.976-8.992,19.936-19.936,19.936L 196.16,303.776 
+		c-10.976,0-19.936-8.992-19.936-19.936C 176.192,272.864, 185.184,263.904, 196.16,263.904z"  />
+<glyph unicode="&#xe0d6;" d="M 362.528,204.512c-41.888,21.76-89.152,33.28-136.64,33.28c-26.496,0-52.864-3.52-78.304-10.464
+		c-8.192-2.24-13.024-16.224-10.784-24.416c 2.24-8.192, 10.688-13.024, 18.912-10.784c 22.784,6.208, 46.432,9.376, 70.176,9.376
+		c 43.2,0, 84.384-10.048, 122.464-29.824c 2.272-1.184, 4.672-1.728, 7.072-1.728c 5.568,0, 10.912,8.576, 13.664,13.824
+		C 372.992,191.296, 370.048,200.608, 362.528,204.512zM 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 256,32c-106.048,0-192,85.952-192,192c0,106.048, 85.952,192, 192,192s 192-85.952, 192-192C 448,117.952, 362.048,32, 256,32zM 225.856,314.72c-29.504,0-58.88-3.584-87.392-10.656C 129.024,301.728, 123.296,290.336, 125.632,280.928
+		s 11.872-15.168, 21.312-12.832c 25.728,6.368, 52.288,9.6, 78.944,9.6c 51.136,0, 100.128-11.488, 145.6-34.176c 2.528-1.248, 5.184-1.856, 7.84-1.856
+		c 6.464,0, 12.672,5.408, 15.776,11.584c 4.32,8.672, 0.8,19.264-7.904,23.584C 336.768,301.984, 282.496,314.72, 225.856,314.72zM 225.856,165.888c-23.776,0-47.264-3.552-69.824-10.496c-6.976-2.144-10.848-16.928-8.704-23.872
+		c 2.144-6.976, 9.536-10.88, 16.512-8.704c 20,6.208, 40.896,9.344, 62.016,9.344c 35.264,0, 70.176-8.96, 100.928-25.888
+		c 2.016-1.12, 4.192-1.632, 6.368-1.632c 4.672,0, 9.184,2.464, 11.552,6.848c 3.52,6.368, 1.216,21.792-5.184,25.312
+		C 304.896,155.808, 265.568,165.888, 225.856,165.888z"  />
+<glyph unicode="&#xe0d7;" d="M 256.192,352L 384,352L 384,223.648L 256.192,223.648zM 416,480L 96,480 C 42.976,480,0,437.024,0,384l0-320 c0-53.024, 42.976-96, 96-96l 320,0 c 53.024,0, 96,42.976, 96,96L 512,384 C 512,437.024, 469.024,480, 416,480z
+		 M 416,223.648L 416,80 l0-4.608 C 416,69.12, 410.88,64, 404.608,64L 400,64 L 256.192,64 L 112,64 C 103.168,64, 96,71.168, 96,80L 96,223.648 L 96,368 L 96,372.608 
+		C 96,378.88, 101.12,384, 107.392,384L 112,384 l 144.192,0 L 400,384 C 408.832,384, 416,376.832, 416,368L 416,223.648 zM 128,223.648L 256.192,223.648L 256.192,96L 128,96z"  />
+<glyph unicode="&#xe103;" d="M 480,320l-32,0 L 448,448 c0,17.664-14.336,32-32,32L 96,480 C 78.336,480, 64,465.664, 64,448l0-128 L 32,320 C 14.336,320,0,305.664,0,288l0-160 c0-17.664, 14.336-32, 32-32l 32,0 l0-96 
+		c0-17.664, 14.336-32, 32-32l 320,0 c 17.664,0, 32,14.336, 32,32l0,96 l 32,0 c 17.664,0, 32,14.336, 32,32L 512,288 C 512,305.664, 497.664,320, 480,320z M 96,160l 320,0 l0-160 L 96,0 L 96,160 z M 416,192L 96,192 
+		c-17.664,0-32-14.336-32-32l0-32 L 32,128 L 32,288 l 448,0 l0-160 l-32,0 l0,32 C 448,177.664, 433.664,192, 416,192z M 96,448l 320,0 l0-128 L 96,320 L 96,448 zM 352,240A16,16 180 1 1 384,240A16,16 180 1 1 352,240zM 64,240A16,16 180 1 1 96,240A16,16 180 1 1 64,240zM 416,240A16,16 180 1 1 448,240A16,16 180 1 1 416,240zM 384,112c0,8.832-7.168,16-16,16l-224,0 C 135.168,128, 128,120.832, 128,112C 128,103.168, 135.168,96, 144,96l 224,0 
+		C 376.832,96, 384,103.168, 384,112zM 368,64l-224,0 C 135.168,64, 128,56.832, 128,48C 128,39.168, 135.168,32, 144,32l 224,0 c 8.832,0, 16,7.168, 16,16
+		C 384,56.832, 376.832,64, 368,64z"  />
+<glyph unicode="&#xe0ee;" d="M 96-32l 320,0 c 17.664,0, 32,14.336, 32,32L 448,448 c0,17.664-14.336,32-32,32L 96,480 C 78.336,480, 64,465.664, 64,448l0-448 C 64-17.664, 78.336-32, 96-32z
+		 M 96,448l 320,0 l0-448 L 96,0 L 96,448 zM 352,416L 160,416 C 142.336,416, 128,401.664, 128,384l0-32 c0-17.664, 14.336-32, 32-32l 192,0 c 17.664,0, 32,14.336, 32,32L 384,384 C 384,401.664, 369.664,416, 352,416z M 352,352
+		L 160,352 L 160,384 l 192,0 L 352,352 zM 128,256A32,32 180 1 1 192,256A32,32 180 1 1 128,256zM 128,160A32,32 180 1 1 192,160A32,32 180 1 1 128,160zM 128,64A32,32 180 1 1 192,64A32,32 180 1 1 128,64zM 224,256A32,32 180 1 1 288,256A32,32 180 1 1 224,256zM 224,160A32,32 180 1 1 288,160A32,32 180 1 1 224,160zM 224,64A32,32 180 1 1 288,64A32,32 180 1 1 224,64zM 320,256A32,32 180 1 1 384,256A32,32 180 1 1 320,256zM 320,160A32,32 180 1 1 384,160A32,32 180 1 1 320,160zM 320,64A32,32 180 1 1 384,64A32,32 180 1 1 320,64z"  />
+<glyph unicode="&#xe0ef;" d="M 320,416L 352,416L 352,384L 320,384zM 384,416L 416,416L 416,384L 384,384zM 320,352L 352,352L 352,320L 320,320zM 384,352L 416,352L 416,320L 384,320zM 320,288L 352,288L 352,256L 320,256zM 384,288L 416,288L 416,256L 384,256zM 320,224L 352,224L 352,192L 320,192zM 384,224L 416,224L 416,192L 384,192zM 320,160L 352,160L 352,128L 320,128zM 384,160L 416,160L 416,128L 384,128zM 448,480L 288,480 C 270.336,480, 256,465.664, 256,448l0-96 L 96,352 C 78.336,352, 64,337.664, 64,320l0-320 c0-17.664, 14.336-32, 32-32l 352,0 c 17.664,0, 32,14.336, 32,32L 480,448 
+			C 480,465.664, 465.664,480, 448,480z M 192,0L 160,0 l0,64 l 32,0 L 192,0 z M 224,0l0,64 l0,32 L 192,96 L 160,96 L 128,96 l0-32 l0-64 L 96,0 L 96,320 l 160,0 l0-320 L 224,0 z M 384,0l-32,0 l0,64 l 32,0 L 384,0 z M 448,0l-32,0 l0,64 l0,32 l-32,0 l-32,0 l-32,0 l0-96 L 288,0 L 288,320 
+			L 288,448 l 160,0 L 448,0 zM 128,288L 160,288L 160,256L 128,256zM 192,288L 224,288L 224,256L 192,256zM 128,224L 160,224L 160,192L 128,192zM 192,224L 224,224L 224,192L 192,192zM 128,160L 160,160L 160,128L 128,128zM 192,160L 224,160L 224,128L 192,128z"  />
+<glyph unicode="&#xe0e8;" d="M 384,480l-64,0 L 128,480 L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,384 l-96,96L 384,480 z M 384,448l0-128 l-64,0 L 320,448 
+		L 384,448 z M 288,448l0-128 L 128,320 L 128,448 L 288,448 z M 128,0L 128,192 l 256,0 l0-192 L 128,0 z M 480,0l-64,0 L 416,192 c0,17.664-14.336,32-32,32L 128,224 C 110.336,224, 96,209.664, 96,192l0-192 L 32,0 L 32,448 l 64,0 l0-128 c0-17.664, 14.336-32, 32-32l 192,0 l 64,0 
+		c 17.664,0, 32,14.336, 32,32L 416,434.752 l 64-64L 480,0 z"  />
+<glyph unicode="&#xe0ea;" d="M 480,416c-1.984,31.328-28.64,64-64,64L 96,480 C 60.64,480, 33.984,447.328, 32,416L0,73.344c0-1.504, 0.352-3.36, 0.448-4.96
+		C 0.352,66.912,0,65.504,0,64l0-32 c0-35.36, 28.64-64, 64-64l 384,0 c 35.36,0, 64,28.64, 64,64l0,32 c0,1.504-0.352,2.912-0.448,4.352
+		C 511.648,69.984, 512,71.84, 512,73.344L 480,416z M 32,32l0,32 c0,17.632, 14.368,32, 32,32l 384,0 c 17.632,0, 32-14.368, 32-32l0-32 c0-17.632-14.368-32-32-32L 64,0 
+		C 46.368,0, 32,14.368, 32,32z M 63.936,413.952C 64.928,429.696, 79.168,448, 96,448l 320,0 c 16.832,0, 31.072-18.304, 32.128-34.976l 27.2-291.392
+		C 467.040,125.6, 457.824,128, 448,128L 64,128 c-9.824,0-19.040-2.4-27.36-6.368L 63.936,413.952zM 416,48A16,16 180 1 1 448,48A16,16 180 1 1 416,48zM 352,48A16,16 180 1 1 384,48A16,16 180 1 1 352,48zM 80,32l 224,0 c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16l-224,0 C 71.168,64, 64,56.832, 64,48
+		C 64,39.168, 71.168,32, 80,32z"  />
+<glyph unicode="&#xe101;" d="M 32,0l 288,0 c 17.664,0, 32,14.336, 32,32l0,43.2 c 6.816,3.264, 13.184,7.168, 19.168,11.68l 98.208-98.208
+		c 3.136-3.136, 7.232-4.672, 11.328-4.672s 8.192,1.568, 11.328,4.672c 6.24,6.24, 6.24,16.384,0,22.624l-98.272,98.272
+		C 407.552,128.192, 416,151.040, 416,176c0,44.608-26.272,82.784-64,100.8L 352,448 c0,17.664-14.336,32-32,32L 32,480 C 14.336,480,0,465.664,0,448l0-416 
+		C0,14.336, 14.336,0, 32,0z M 304,96C 259.904,96, 224,131.904, 224,176S 259.904,256, 304,256S 384,220.096, 384,176S 348.096,96, 304,96z M 32,448l 288,0 l0-160 L 84.576,288 
+		C 73.216,288, 64,280.832, 64,272C 64,263.168, 73.216,256, 84.576,256l 141.216,0 C 208.608,239.232, 197.216,216.896, 193.6,192L 80,192 C 71.168,192, 64,184.832, 64,176
+		C 64,167.168, 71.168,160, 80,160l 113.6,0 c 7.84-54.208, 54.016-96, 110.4-96c 5.472,0, 10.72,0.864, 16,1.6L 320,32 L 32,32 L 32,448 zM 80,352l 192,0 C 280.832,352, 288,359.168, 288,368C 288,376.832, 280.832,384, 272,384l-192,0 C 71.168,384, 64,376.832, 64,368C 64,359.168, 71.168,352, 80,352z"  />
+<glyph unicode="&#xe107;" d="M 480,384L 32,384 C 14.336,384,0,369.664,0,352l0-288 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,352 C 512,369.664, 497.664,384, 480,384z M 32,352
+		l 448,0 l0-288 L 32,64 L 32,352 zM 434.656,224L 240,224 C 231.168,224, 224,216.832, 224,208C 224,199.168, 231.168,192, 240,192l 194.656,0 c 8.832,0, 16,7.168, 16,16
+		C 450.656,216.832, 443.488,224, 434.656,224zM 434.656,160L 240,160 C 231.168,160, 224,152.832, 224,144C 224,135.168, 231.168,128, 240,128l 194.656,0 c 8.832,0, 16,7.168, 16,16
+		C 450.656,152.832, 443.488,160, 434.656,160zM 434.656,288L 240,288 C 231.168,288, 224,280.832, 224,272C 224,263.168, 231.168,256, 240,256l 194.656,0 c 8.832,0, 16,7.168, 16,16
+		C 450.656,280.832, 443.488,288, 434.656,288zM 89.28,281.344A38.656,38.656 180 1 1 166.592,281.344A38.656,38.656 180 1 1 89.28,281.344zM 128.768,227.232c-34.944,0-63.232-37.952-63.232-84.8S 192,95.616, 192,142.432S 163.68,227.232, 128.768,227.232z"  />
+<glyph unicode="&#xe108;" d="M 480,384l-160,0 l0-64 c0-17.664-14.336-32-32-32l 16,0 C 330.496,288, 352,309.504, 352,336c0,6.080-0.096,11.36-0.288,16L 480,352 l0-352 L 32,0 L 32,352 
+		l 128.288,0 C 160.096,347.36, 160,342.080, 160,336C 160,309.504, 181.504,288, 208,288L 224,288 C 206.336,288, 192,302.336, 192,320L 192,384 L 32,384 C 14.336,384,0,369.664,0,352l0-352 c0-17.664, 14.336-32, 32-32l 448,0 
+		c 17.664,0, 32,14.336, 32,32L 512,352 C 512,369.664, 497.664,384, 480,384zM 434.656,160L 240,160 C 231.168,160, 224,152.832, 224,144C 224,135.168, 231.168,128, 240,128l 194.656,0 c 8.832,0, 16,7.168, 16,16
+		C 450.656,152.832, 443.488,160, 434.656,160zM 434.656,96L 240,96 C 231.168,96, 224,88.832, 224,80C 224,71.168, 231.168,64, 240,64l 194.656,0 c 8.832,0, 16,7.168, 16,16
+		C 450.656,88.832, 443.488,96, 434.656,96zM 240,192l 194.656,0 c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16L 240,224 C 231.168,224, 224,216.832, 224,208
+		C 224,199.168, 231.168,192, 240,192zM 89.28,217.344A38.656,38.656 180 1 1 166.592,217.344A38.656,38.656 180 1 1 89.28,217.344zM 128.768,163.232c-34.944,0-63.232-37.952-63.232-84.8S 192,31.616, 192,78.432S 163.68,163.232, 128.768,163.232zM 192,320c0-17.664, 14.336-32, 32-32l 64,0 c 17.664,0, 32,14.336, 32,32L 320,384 L 320,448 c0,17.664-14.336,32-32,32L 224,480 C 206.336,480, 192,465.664, 192,448l0-64 L 192,320 z M 288,320
+		L 224,320 L 224,448 l 64,0 L 288,320 z"  />
+<glyph unicode="&#xe102;" d="M 179.968,104.896c-14.4,0-27.808,5.632-37.76,15.84c-27.392,28.224-61.344,15.904-69.376-21.472
+		c-12.96-60.48-11.712-99.232, 3.84-118.496c 8.928-11.072, 19.424-11.904, 22.4-11.904L 432.992-32c 43.456,0, 78.848,34.048, 78.848,75.904l0,209.6 
+		l 0.096,10.016c 0.288,25.76, 0.608,52.384-13.088,66.208c-9.056,9.184-22.112,11.136-36.896,4.832c-27.328-11.68-56.96-13.248-95.456-5.696
+		c-9.632,1.92-13.44,5.056-13.312,4.64c0,0.032, 0.64,2.848, 6.432,7.968c 17.216,15.264, 27.104,36.704, 27.104,58.944
+		C 386.688,444.32, 349.6,480, 304,480C 258.432,480, 221.344,444.32, 221.344,400.448c0-21.824, 9.984-42.304, 29.664-60.96
+		C 251.936,338.56, 253.824,336.768, 255.296,335.104c-3.2-1.568-9.568-3.872-21.728-5.92C 201.76,323.84, 170.432,331.392, 146.464,337.056
+		C 119.712,343.36, 102.688,345.44, 92.8,335.392c-11.072-11.2-35.104-45.472-19.872-122.464c 2.304-11.776, 9.408-47.616, 36.64-47.616
+		c 13.472,0, 23.552,9.76, 29.792,15.744c 39.616,38.112, 91.296,10.848, 91.296-28.608C 230.624,126.24, 207.904,104.896, 179.968,104.896z M 179.968,232.032
+		c-22.4,0-43.52-9.376-63.616-28.672C 115.264,202.272, 112.832,199.968, 110.88,198.496C 109.312,201.184, 106.72,207.072, 104.32,219.136
+		C 92.8,277.376, 107.456,302.976, 113.728,310.816C 119.136,310.656, 128.832,308.352, 139.136,305.92c 19.872-4.672, 44.608-10.496, 71.936-10.496
+		c 9.6,0, 18.976,0.736, 27.808,2.208C 257.184,300.704, 282.208,307.008, 288,325.984c 5.312,17.472-8.928,30.976-15.072,36.768
+		C 259.744,375.264, 253.344,387.552, 253.344,400.448C 253.344,426.656, 276.064,448, 304,448s 50.688-21.344, 50.688-47.552c0-13.248-5.792-25.664-16.288-34.944
+		c-17.984-15.872-18.752-30.24-16.224-39.488c 3.808-14.080, 17.728-24.48, 38.080-28.48c 44.8-8.768, 81.088-6.496, 114.24,7.616
+		c 1.024,0.48, 1.824,0.704, 2.24,0.928c 3.552-7.168, 3.296-30.56, 3.168-42.176l-0.096-220c0-24.192-20.992-43.904-46.816-43.904
+		l-330.88,0.288c-0.16,0.128-15.040,13.184, 1.984,92.256c 1.76,8.288, 5.024,11.968, 5.856,12.352c0,0, 3.2-0.16, 9.28-6.432
+		c 16-16.48, 37.568-25.536, 60.672-25.536c 45.568,0, 82.656,35.68, 82.656,79.552S 225.536,232.032, 179.968,232.032z"  />
+<glyph unicode="&#xe106;" d="M 433.6,320c0,0-121.952,0-145.6,0L 288,403.008 c 1.152,44.928-8.992,76.928-47.008,76.928C 200,479.936, 192,445.92, 192,445.92
+		C 184.512,325.44, 64,288, 64,288l0-256 l 46.752-1.984C 231.808,30.016, 159.168-32, 358.080-32C 509.12-32, 512,100.928, 512,192S 470.496,320, 433.6,320z M 358.080,0
+		c-101.056,0-122.464,16.096-141.376,30.304c-23.904,17.952-46.848,31.68-104.384,31.68c-0.064,0-0.128,0-0.192,0L 96,62.656L 96,266.496 
+		C 135.904,285.12, 215.2,335.040, 223.648,439.84c 1.248,2.56, 5.376,8.096, 17.344,8.096c 2.848,0, 6.528-0.32, 8.096-1.92
+		C 250.4,444.704, 256.832,436.384, 256,403.008L 256,320 l0-32 l 32,0 l 145.6,0 C 456.672,288, 480,255.040, 480,192C 480,67.488, 460.576,0, 358.080,0zM 16,0C 24.832,0, 32,7.168, 32,16L 32,302.656 c0,8.832-7.168,16-16,16S0,311.488,0,302.656L0,16 
+		C0,7.168, 7.168,0, 16,0z"  />
+<glyph unicode="&#xe0eb;" d="M 78.4,127.936c0,0, 121.952,0, 145.6,0l0-83.008 C 222.88,0.032, 232.992-32, 271.008-32C 312-32, 320,2.016, 320,2.016
+		c 7.488,120.48, 128,157.92, 128,157.92l0,256 l-46.752,1.984c-121.056,0-48.416,62.016-247.328,62.016c-151.040,0-153.92-132.928-153.92-224
+		S 41.504,127.936, 78.4,127.936z M 153.92,447.936c 101.056,0, 122.464-16.096, 141.376-30.304c 23.872-17.952, 46.848-31.68, 104.384-31.68
+		c 0.064,0, 0.128,0, 0.192,0L 416,385.28l0-203.808 c-39.904-18.656-119.2-68.544-127.648-173.376C 287.104,5.536, 282.976,0, 271.008,0
+		c-2.848,0-6.528,0.32-8.096,1.92C 261.6,3.264, 255.168,11.552, 256,44.928l0,83.008 l0,32 L 224,159.936 L 78.4,159.936 c-23.072,0-46.4,32.96-46.4,96
+		C 32,380.448, 51.424,447.936, 153.92,447.936zM 496,447.936c-8.832,0-16-7.168-16-16l0-286.656 c0-8.832, 7.168-16, 16-16s 16,7.168, 16,16L 512,431.936 
+		C 512,440.768, 504.832,447.936, 496,447.936z"  />
+<glyph unicode="&#xe105;" d="M 414.24,319.936c 0.896,13.376, 1.44,24.224, 1.728,30.72c 0.352,8.704-2.848,17.184-8.864,23.488S 392.704,384, 384,384L 32,384 
+		C 23.296,384, 14.944,380.448, 8.896,374.144S-0.32,359.36, 0.032,350.656c 1.76-42.272, 13.664-255.936, 74.624-310.496C 80.512,34.912, 88.128,32, 96,32l 224,0 
+		c 7.872,0, 15.488,2.912, 21.344,8.16c 19.104,17.12, 33.408,49.856, 44.064,88.064c 15.84,0.064, 26.784,0.096, 28.064,0.096
+		c 54.432,0, 98.56,39.68, 98.56,95.84C 512,300.416, 446.080,319.648, 414.24,319.936z M 320,64L 96,64 c-53.984,48.32-64,288-64,288l 352,0 C 384,352, 373.984,112.32, 320,64z
+		 M 413.44,160.32l-10.080-0.032c-2.88,0-6.304-0.032-10.176-0.032c 9.536,43.808, 15.264,90.56, 18.56,127.744l 1.696,0 C 416.16,288, 480,287.264, 480,224.16
+		C 480,187.168, 452,160.32, 413.44,160.32z"  />
+<glyph unicode="&#xe0ed;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 272,0
+		C 157.312,0, 64,93.312, 64,208S 157.312,416, 272,416S 480,322.688, 480,208S 386.688,0, 272,0zM 299.424,320C 328.416,320, 352,298.464, 352,272C 352,263.168, 359.168,256, 368,256S 384,263.168, 384,272C 384,316.128, 346.048,352, 299.424,352L 288,352 
+		L 288,368 C 288,376.832, 280.832,384, 272,384S 256,376.832, 256,368L 256,352 L 244.576,352 C 197.952,352, 160,316.128, 160,272S 197.952,192, 244.576,192L 256,192 l0-96 L 244.576,96 C 215.584,96, 192,117.536, 192,144
+		C 192,152.832, 184.832,160, 176,160S 160,152.832, 160,144C 160,99.872, 197.952,64, 244.576,64L 256,64 l0-16 C 256,39.168, 263.168,32, 272,32S 288,39.168, 288,48L 288,64 l 11.424,0 
+		C 346.048,64, 384,99.872, 384,144S 346.048,224, 299.424,224L 288,224 L 288,320 L 299.424,320 z M 299.424,192C 328.416,192, 352,170.464, 352,144S 328.416,96, 299.424,96L 288,96 L 288,192 L 299.424,192 z M 256,224
+		L 244.576,224 C 215.584,224, 192,245.536, 192,272S 215.584,320, 244.576,320L 256,320 L 256,224 z"  />
+<glyph unicode="&#xe100;" d="M 480,256L 480,352 c0,17.664-14.336,32-32,32l-9.536,0 l-10.784,66.56c-0.672,4.192-2.976,7.936-6.432,10.4
+		c-3.392,2.496-7.68,3.552-11.904,2.816L 61.44,407.328C 52.704,405.92, 46.784,397.696, 48.224,388.96L 49.024,384L 32,384 C 14.336,384,0,369.664,0,352l0-352 
+		c0-17.664, 14.336-32, 32-32l 416,0 c 17.664,0, 32,14.336, 32,32l0,96 c 17.664,0, 32,14.336, 32,32L 512,224 C 512,241.664, 497.664,256, 480,256z M 32,352l 416,0 l0-96 l-128,0 C 302.336,256, 288,241.664, 288,224
+		l0-96 c0-17.664, 14.336-32, 32-32l 128,0 l0-96 L 32,0 L 32,352 z M 117.376,384l 281.28,45.664L 406.048,384L 117.376,384 z M 320,128L 320,224 l 160,0 l0-96 L 320,128 zM 352,176A16,16 180 1 1 384,176A16,16 180 1 1 352,176z"  />
+<glyph unicode="&#xe104;" d="M 64,384l0-256 l 4.736-11.84L 128-32l 64,160l-0.16,0.064C 191.936,128.16, 191.904,128.32, 192,128.416L 192,384 L 192,416 c0,35.36-28.64,64-64,64
+		S 64,451.36, 64,416L 64,384 z M 96,416c0,17.632, 14.368,32, 32,32s 32-14.368, 32-32l0-32 L 96,384 L 96,416 z M 128,54.176l-16.48,41.184l-6.4,16L 104.64,112.544L 128,124.224l 23.36-11.68
+		l-0.48-1.216l-6.4-16L 128,54.176z M 160,144L 128,160l-32-16L 96,328.864 L 96,348.48 L 96,352 l 32,0 l 32,0 l0-3.52 l0-19.616 L 160,144 zM 402.944,384.672L 372.288,464l-0.288-0.096C 369.76,473.056, 361.856,480, 352,480c-10.592,0-18.944-7.936-20.416-18.112
+		l-0.576,0.128L 301.056,384.672L 288,352l0-320 c0-35.36, 28.64-64, 64-64s 64,28.64, 64,64c 17.664,0, 32,14.336, 32,32l0,96 c0,17.664-14.336,32-32,32L 416,352 L 402.944,384.672z
+		 M 384,160l0-96 l0-32 c0-17.632-14.368-32-32-32s-32,14.368-32,32L 320,352 l 2.464,0 l 59.072,0 L 384,352 l0-160 L 384,160 z M 368.736,384l-33.472,0 L 352,425.824L 368.736,384z"  />
+<glyph unicode="&#xe0e9;" d="M 144.48,216c 4.736,0, 9.472,2.112, 12.64,6.176l 70.464,90.72l 48.256-56.672c 3.072-3.552, 6.528-5.12, 12.256-5.632
+		C 292.736,250.624, 297.216,252.672, 300.256,256.32l 112,133.408c 5.696,6.752, 4.8,16.832-1.984,22.528c-6.752,5.728-16.832,4.768-22.528-1.984
+		l-99.84-118.912L 239.2,348.64C 236.032,352.288, 230.208,353.984, 226.656,354.24C 221.824,354.112, 217.312,351.872, 214.368,348.064L 131.84,241.824
+		C 126.4,234.848, 127.68,224.768, 134.656,219.36C 137.568,217.088, 141.024,216, 144.48,216zM 495.648,480L 448,480 L 96,480 L 48.352,480 C 39.328,480, 32,472.832, 32,464C 32,455.168, 39.328,448, 48.352,448L 64,448 l0-288 c0-17.664, 14.336-32, 32-32l 160,0 l0-49.952 
+		L 165.248-4.16c-6.528-5.92-7.040-16.032-1.088-22.592c 5.984-6.528, 16.096-7.040, 22.592-1.088L 256,34.88l0-50.88 C 256-24.832, 263.168-32, 272-32
+		S 288-24.832, 288-16l0,50.88 l 69.248-62.72C 360.32-30.624, 364.16-32, 368-32c 4.352,0, 8.672,1.792, 11.84,5.248
+		c 5.952,6.56, 5.44,16.672-1.088,22.592L 288,78.048L 288,128 l 160,0 c 17.664,0, 32,14.336, 32,32L 480,448 l 15.648,0 C 504.672,448, 512,455.168, 512,464
+		C 512,472.832, 504.672,480, 495.648,480z M 448,160L 96,160 L 96,448 l 352,0 L 448,160 z"  />
+<glyph unicode="&#xe109;" d="M 480,160L 480,224 c0,17.664-14.336,32-32,32L 288,256 L 288,320 l 96,0 c 17.664,0, 32,14.336, 32,32L 416,384 c0,17.664-14.336,32-32,32L 160,416 C 142.336,416, 128,401.664, 128,384l0-32 
+		c0-17.664, 14.336-32, 32-32l 96,0 l0-64 L 96,256 C 78.336,256, 64,241.664, 64,224l0-64 c-17.664,0-32-14.336-32-32l0-64 c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l0,32 l0,32 
+		c0,17.664-14.336,32-32,32L 96,224 l 160,0 l0-64 c-17.664,0-32-14.336-32-32l0-32 l0-32 c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l0,32 l0,32 c0,17.664-14.336,32-32,32L 288,224 l 160,0 l0-64 
+		c-17.664,0-32-14.336-32-32l0-32 l0-32 c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l0,64 C 512,145.664, 497.664,160, 480,160z M 160,384l 224,0 l0-32 L 160,352 L 160,384 z M 96,96l0-32 L 64,64 l0,64 l 32,0 
+		L 96,96 z M 288,64L 256,64 l0,64 l 32,0 L 288,64 z M 448,96l0,32 l 32,0 l0-64 l-32,0 L 448,96 z"  />
+<glyph unicode="&#xe0ec;" d="M 32,0c0-17.664, 14.336-32, 32-32l 384,0 c 17.664,0, 32,14.336, 32,32L 480,448 c0,17.664-14.336,32-32,32L 64,480 C 46.336,480, 32,465.664, 32,448L 32,0 z M 64,448
+		l 384,0 l0-448 L 64,0 L 64,448 zM 128,192L 192,192L 192,64L 128,64zM 224,352L 288,352L 288,64L 224,64zM 320,288L 384,288L 384,64L 320,64z"  />
+<glyph unicode="&#xe0fe;" d="M 480,352l-96,0 L 384,416 c0,17.664-14.336,32-32,32L 160,448 C 142.336,448, 128,433.664, 128,416l0-64 L 32,352 C 14.336,352,0,337.664,0,320l0-288 c0-17.664, 14.336-32, 32-32l 448,0 
+		c 17.664,0, 32,14.336, 32,32L 512,320 C 512,337.664, 497.664,352, 480,352z M 32,320l 128,0 l 192,0 l 128,0 l0-288 L 32,32 L 32,320 z M 160,416l 192,0 l0-64 L 160,352 L 160,416 z"  />
+<glyph unicode="&#xe0f6;" d="M 247.2-30.752C 250.080-31.584, 253.056-32, 256-32s 5.92,0.416, 8.8,1.248c 198.048,56.576, 227.2,256.768, 214.976,354.752
+		C 477.76,339.968, 464.128,352, 448,352c-4.576,0.352-32,5.088-32,64c0,8.48-3.36,16.64-9.376,22.624C 399.712,445.536, 360,480, 256,480
+		S 112.288,445.536, 105.376,438.624C 99.36,432.64, 96,424.48, 96,416c0-58.912-27.424-63.648-32.928-64.032c-16.128,0-28.832-12-30.848-28
+		C 20,226.016, 49.184,25.824, 247.2-30.752z M 64,320c0,0, 64,0, 64,96c0,0, 32,32, 128,32s 128-32, 128-32c0-96, 64-96, 64-96s 32-256-192-320C 32,64, 64,320, 64,320zM 256,160c 17.664,0, 32,14.336, 32,32L 288,352 c0,17.664-14.336,32-32,32S 224,369.664, 224,352l0-160 C 224,174.336, 238.336,160, 256,160zM 224,96A32,32 180 1 1 288,96A32,32 180 1 1 224,96z"  />
+<glyph unicode="&#xe0fb;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 225.984,304.992c0,27.072-21.952,48.992-48.992,48.992S 128,332.064, 128,304.992S 149.952,256, 176.992,256S 225.984,277.952, 225.984,304.992z
+		 M 160,304.992c0,9.376, 7.616,16.992, 16.992,16.992s 16.992-7.616, 16.992-16.992S 186.368,288, 176.992,288S 160,295.616, 160,304.992zM 335.008,193.984c-27.072,0-48.992-21.952-48.992-48.992S 307.936,96, 335.008,96S 384,117.952, 384,144.992
+		S 362.048,193.984, 335.008,193.984z M 335.008,128c-9.376,0-16.992,7.616-16.992,16.992s 7.616,16.992, 16.992,16.992S 352,154.368, 352,144.992
+		S 344.384,128, 335.008,128zM 363.328,331.328c-6.24,6.24-16.384,6.24-22.624,0l-192-192c-6.24-6.24-6.24-16.384,0-22.624
+		C 151.808,113.568, 155.904,112, 160,112s 8.192,1.568, 11.328,4.672l 192,192C 369.568,314.944, 369.568,325.056, 363.328,331.328z"  />
+<glyph unicode="&#xe0e2;" d="M 481.888,133.792c-87.136-87.104-228.928-87.168-316.064,0C 123.648,175.936, 100.448,232.064, 100.448,291.84
+		s 23.232,115.904, 65.344,158.016c 6.24,6.24, 6.24,16.384,0,22.624s-16.384,6.24-22.624,0C 94.976,424.32, 68.448,360.16, 68.448,291.84
+		s 26.56-132.512, 74.72-180.672C 183.84,70.464, 234.976,46.688, 288,39.232L 288,0 L 240,0 C 231.168,0, 224-7.168, 224-16C 224-24.832, 231.168-32, 240-32l 128,0 
+		c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16L 320,0 l0,36.608 c 1.28-0.032, 2.56-0.192, 3.84-0.192
+		c 65.408,0, 130.848,24.896, 180.672,74.72c 6.24,6.24, 6.24,16.384,0,22.624S 488.128,140.032, 481.888,133.792zM 323.84,480C 219.904,480, 135.68,395.744, 135.68,291.84s 84.256-188.16, 188.16-188.16S 512,187.904, 512,291.84S 427.744,480, 323.84,480z
+		 M 323.84,135.68c-86.112,0-156.16,70.048-156.16,156.16C 167.68,377.952, 237.728,448, 323.84,448C 409.952,448, 480,377.952, 480,291.84
+		C 480,205.728, 409.952,135.68, 323.84,135.68z"  />
+<glyph unicode="&#xe0e3;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 447.008,320l-47.68,0 
+		c-9.28,29.184-22.016,54.752-37.376,75.264C 396.768,378.464, 426.24,352.32, 447.008,320z M 288,320L 288,413.376 C 318.24,404.448, 347.712,370.912, 365.856,320L 288,320 z
+		 M 375.168,288c 4.512-19.584, 7.424-41.024, 8.352-64L 288,224 L 288,288 L 375.168,288 z M 256,413.376L 256,320 L 178.144,320 C 196.288,370.912, 225.76,404.448, 256,413.376z M 256,288l0-64 L 160.48,224 
+		c 0.928,22.976, 3.84,44.416, 8.352,64L 256,288 z M 128.48,224l-63.68,0 c 1.728,22.496, 6.88,44.064, 15.232,64l 56.32,0 C 132.064,267.744, 129.376,246.336, 128.48,224z
+		 M 128.48,192c 0.896-22.336, 3.584-43.744, 7.872-64l-56.32,0 c-8.352,19.936-13.504,41.504-15.232,64L 128.48,192 z M 160.48,192L 256,192 l0-64 L 168.832,128 
+		C 164.32,147.584, 161.408,169.024, 160.48,192z M 256,96l0-93.376 C 225.76,11.552, 196.288,45.088, 178.144,96L 256,96 z M 288,2.624L 288,96 l 77.856,0 
+		C 347.712,45.088, 318.24,11.552, 288,2.624z M 288,128L 288,192 l 95.52,0 c-0.928-22.976-3.84-44.416-8.352-64L 288,128 z M 415.52,192l 63.68,0 
+		c-1.728-22.496-6.88-44.064-15.232-64l-56.32,0 C 411.936,148.256, 414.624,169.664, 415.52,192z M 415.52,224c-0.896,22.336-3.584,43.744-7.872,64l 56.32,0 
+		c 8.352-19.936, 13.504-41.504, 15.232-64L 415.52,224 z M 182.048,395.264C 166.72,374.752, 153.952,349.184, 144.672,320l-47.68,0 C 117.76,352.32, 147.232,378.464, 182.048,395.264z
+		 M 96.992,96l 47.68,0 c 9.28-29.184, 22.016-54.752, 37.376-75.264C 147.232,37.536, 117.76,63.68, 96.992,96z M 361.952,20.736
+		c 15.328,20.512, 28.096,46.080, 37.376,75.264l 47.68,0 C 426.24,63.68, 396.768,37.536, 361.952,20.736z"  />
+<glyph unicode="&#xe0f5;" d="M 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 256,0c-123.52,0-224,100.48-224,224s 100.48,224, 224,224
+		s 224-100.48, 224-224S 379.52,0, 256,0zM 256,384C 167.648,384, 96,312.352, 96,224s 71.648-160, 160-160s 160,71.648, 160,160S 344.352,384, 256,384z M 256,128c-52.928,0-96,43.072-96,96
+		c0,52.928, 43.072,96, 96,96s 96-43.072, 96-96C 352,171.072, 308.928,128, 256,128zM 224,224A32,32 180 1 1 288,224A32,32 180 1 1 224,224z"  />
+<glyph unicode="&#xe0e1;" d="M 416,309.568L 416,448 l 15.776,0 C 440.736,448, 448,455.168, 448,464C 448,472.832, 440.736,480, 431.776,480L 112.224,480 C 103.264,480, 96,472.832, 96,464
+		C 96,455.168, 103.264,448, 112.224,448L 128,448 l0-138.432 c0-9.12, 3.904-17.824, 10.72-23.904L 207.904,224L 138.72,162.336C 131.904,156.256, 128,147.552, 128,138.432L 128,0 L 112.224,0 
+		C 103.264,0, 96-7.168, 96-16C 96-24.832, 103.264-32, 112.224-32l 319.584,0 C 440.736-32, 448-24.832, 448-16c0,8.832-7.264,16-16.224,16L 416,0 l0,138.432 
+		c0,9.12-3.904,17.824-10.72,23.904L 336.096,224l 69.184,61.664C 412.096,291.744, 416,300.448, 416,309.568z M 384,309.568L 288,224l 96-85.568L 384,0 L 160,0 l0,138.432 L 256,224
+		L 160,309.568L 160,448 l 224,0 L 384,309.568 zM 352,355.904L 352,384L 192,384L 192,355.904L 272,284.608 	zM 192,91.968L 192,32L 352,32L 352,91.968L 311.584,128L 232.416,128 	z"  />
+<glyph unicode="&#xe0ff;" d="M 507.168,251.424l-77.152,140.32c-0.192,0.352-0.608,0.48-0.832,0.8c-3.872,5.984-11.168,9.024-18.272,6.656
+		L 288,358.272L 288,400 C 288,408.832, 280.832,416, 272,416S 256,408.832, 256,400l0-52.352 L 122.4,303.2c-1.088-0.352-1.92-1.088-2.88-1.664c0,0,0,0-0.032,0
+		C 117.312,300.224, 115.488,298.56, 114.176,296.48c-0.16-0.224-0.448-0.32-0.608-0.576l-79.456-140c-1.792-3.136-2.112-6.592-1.696-9.92
+		C 32.32,145.312, 32,144.704, 32,144C 32,111.040, 81.76,64, 128,64s 96,47.040, 96,80c0,2.048-0.448,4-1.184,5.792
+		c0,0.064-0.032,0.128-0.032,0.192c-0.032,0.096-0.064,0.224-0.096,0.32c-0.288,1.92-0.832,3.808-1.824,5.6L 151.008,278.944L 256,313.888
+		L 256,48 C 256,39.168, 263.168,32, 272,32S 288,39.168, 288,48L 288,324.544 l 94.272,31.36l-57.44-104.512C 321.856,248.512, 320,244.48, 320,240
+		c0-32.96, 49.76-80, 96-80s 96,47.040, 96,80C 512,244.48, 510.144,248.512, 507.168,251.424z M 73.216,160l 54.272,95.584L 181.728,160L 73.216,160 z M 363.904,256
+		L 416,350.784L 468.096,256L 363.904,256 z"  />
+<glyph unicode="&#xe0f8;" d="M 320,256L 192,256 l0-160 c0-32-64-78.336-64-96l0-16 C 128-24.832, 135.168-32, 144-32l 224,0 c 8.832,0, 16,7.168, 16,16L 384,0 c0,17.664-64,64-64,96L 320,256 
+		zM 370.656,447.456L 370.656,448 l-32,0 l0-0.544 C 337.76,447.616, 336.96,448, 336,448C 327.168,448, 320,440.832, 320,432L 320,416 L 288,416 L 288,432 
+		c0,7.904-5.824,14.144-13.344,15.456L 274.656,448 l-32,0 l0-0.544 C 241.76,447.616, 240.96,448, 240,448C 231.168,448, 224,440.832, 224,432L 224,416 L 192,416 L 192,432 
+		c0,7.904-5.824,14.144-13.344,15.456L 178.656,448 l-32,0 l0-0.544 C 145.76,447.616, 144.96,448, 144,448C 135.168,448, 128,440.832, 128,432L 128,384 l0-32 c0-8.48, 3.36-16.64, 9.376-22.624
+		l 32-32C 175.392,291.36, 183.52,288, 192,288l 128,0 c 8.48,0, 16.64,3.36, 22.624,9.376l 32,32C 380.64,335.36, 384,343.52, 384,352L 384,384 L 384,432 
+		C 384,439.904, 378.176,446.144, 370.656,447.456z"  />
+<glyph unicode="&#xe0fa;" d="M 480,320l-32,0 L 448,448 c0,17.664-14.336,32-32,32L 96,480 C 78.336,480, 64,465.664, 64,448l0-128 L 32,320 C 14.336,320,0,305.664,0,288l0-160 c0-17.664, 14.336-32, 32-32l 32,0 l0-96 
+		c0-17.664, 14.336-32, 32-32l 320,0 c 17.664,0, 32,14.336, 32,32l0,96 l 32,0 c 17.664,0, 32,14.336, 32,32L 512,288 C 512,305.664, 497.664,320, 480,320z M 96,160l 320,0 l0-160 L 96,0 L 96,160 z M 352,240
+		C 352,248.832, 359.168,256, 368,256S 384,248.832, 384,240C 384,231.168, 376.832,224, 368,224S 352,231.168, 352,240z M 80,224C 71.168,224, 64,231.168, 64,240
+		C 64,248.832, 71.168,256, 80,256S 96,248.832, 96,240C 96,231.168, 88.832,224, 80,224z M 432,224C 423.168,224, 416,231.168, 416,240C 416,248.832, 423.168,256, 432,256
+		S 448,248.832, 448,240C 448,231.168, 440.832,224, 432,224z M 96,448l 320,0 l0-128 L 96,320 L 96,448 zM 384,112c0,8.832-7.168,16-16,16l-224,0 C 135.168,128, 128,120.832, 128,112C 128,103.168, 135.168,96, 144,96l 224,0 
+		C 376.832,96, 384,103.168, 384,112zM 368,64l-224,0 C 135.168,64, 128,56.832, 128,48C 128,39.168, 135.168,32, 144,32l 224,0 c 8.832,0, 16,7.168, 16,16
+		C 384,56.832, 376.832,64, 368,64z"  />
+<glyph unicode="&#xe0e7;" d="M 96-32l 320,0 c 17.664,0, 32,14.336, 32,32L 448,448 c0,17.664-14.336,32-32,32L 96,480 C 78.336,480, 64,465.664, 64,448l0-448 C 64-17.664, 78.336-32, 96-32z
+		 M 352,128c-17.664,0-32,14.336-32,32c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32C 384,142.336, 369.664,128, 352,128z M 384,64c0-17.664-14.336-32-32-32
+		s-32,14.336-32,32c0,17.664, 14.336,32, 32,32S 384,81.664, 384,64z M 352,224c-17.664,0-32,14.336-32,32c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32
+		C 384,238.336, 369.664,224, 352,224z M 128,352L 128,416 l 256,0 l0-64 L 128,352 z M 256,128c-17.664,0-32,14.336-32,32c0,17.664, 14.336,32, 32,32s 32-14.336, 32-32C 288,142.336, 273.664,128, 256,128z
+		 M 288,64c0-17.664-14.336-32-32-32s-32,14.336-32,32c0,17.664, 14.336,32, 32,32S 288,81.664, 288,64z M 256,224C 238.336,224, 224,238.336, 224,256c0,17.664, 14.336,32, 32,32
+		s 32-14.336, 32-32C 288,238.336, 273.664,224, 256,224z M 160,288c 17.664,0, 32-14.336, 32-32c0-17.664-14.336-32-32-32S 128,238.336, 128,256C 128,273.664, 142.336,288, 160,288z M 160,192
+		c 17.664,0, 32-14.336, 32-32c0-17.664-14.336-32-32-32s-32,14.336-32,32C 128,177.664, 142.336,192, 160,192z M 160,96c 17.664,0, 32-14.336, 32-32c0-17.664-14.336-32-32-32
+		s-32,14.336-32,32C 128,81.664, 142.336,96, 160,96z"  />
+<glyph unicode="&#xe0fd;" d="M 32-32l 416,0 c 17.664,0, 32,14.336, 32,32L 480,192 c0,17.664-14.336,32-32,32l-96,0 c-17.664,0-32-14.336-32-32L 320,448 c0,17.664-14.336,32-32,32L 192,480 
+		C 174.336,480, 160,465.664, 160,448l0-128 c0,17.664-14.336,32-32,32L 32,352 C 14.336,352,0,337.664,0,320l0-320 C0-17.664, 14.336-32, 32-32z M 32,0l0,64 l 32,0 l0-64 L 32,0 z M 64,192l0-32 L 32,160 L 32,192 L 64,192 z M 32,224
+		L 32,256 l 32,0 l0-32 L 32,224 z M 64,128l0-32 L 32,96 l0,32 L 64,128 z M 96,160L 96,192 l 32,0 l0-32 L 96,160 z M 128,128l0-32 L 96,96 l0,32 L 128,128 z M 96,224L 96,256 l 32,0 l0-32 L 96,224 z M 96,0l0,64 l 32,0 l0-64 L 96,0 z M 128,288L 96,288 L 96,320 l 32,0 L 128,288 z M 64,288L 32,288 L 32,320 l 32,0 L 64,288 z M 256,0l0,64 l 32,0 
+		l0-64 L 256,0 z M 224,320l0-32 L 192,288 L 192,320 L 224,320 z M 192,352L 192,384 l 32,0 l0-32 L 192,352 z M 224,256l0-32 L 192,224 L 192,256 L 224,256 z M 224,192l0-32 L 192,160 L 192,192 L 224,192 z M 224,128l0-32 L 192,96 l0,32 L 224,128 z M 256,160L 256,192 l 32,0 l0-32 L 256,160 z M 288,128l0-32 L 256,96 l0,32 L 288,128 z M 256,224L 256,256 l 32,0 l0-32 L 256,224 z
+		 M 256,288L 256,320 l 32,0 l0-32 L 256,288 z M 256,352L 256,384 l 32,0 l0-32 L 256,352 z M 288,416L 256,416 L 256,448 l 32,0 L 288,416 z M 224,416L 192,416 L 192,448 l 32,0 L 224,416 z M 192,64l 32,0 l0-64 L 192,0 L 192,64 z M 384,96l-32,0 l0,32 l 32,0 L 384,96 z M 416,128l 32,0 l0-32 l-32,0 L 416,128 z M 416,64l 32,0 l0-64 l-32,0 L 416,64 
+		z M 448,160l-32,0 L 416,192 l 32,0 L 448,160 z M 384,160l-32,0 L 352,192 l 32,0 L 384,160 z M 352,64l 32,0 l0-64 l-32,0 L 352,64 z"  />
+<glyph unicode="&#xe0e4;" d="M 384,480L 128,480 L 32,480 C 14.336,480,0,465.664,0,448l0-448 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,384 l-96,96L 384,480 z M 352,320L 352,448 l 32,0 l0-128 
+		c0-17.664-14.336-32-32-32L 160,288 C 142.336,288, 128,302.336, 128,320L 128,448 l 128,0 l0-128 L 352,320 z M 96,192c0,17.664, 14.336,32, 32,32l 256,0 c 17.664,0, 32-14.336, 32-32l0-192 L 96,0 L 96,192 z"  />
+<glyph unicode="&#xe0e5;" d="M 64-32l 384,0 c 35.36,0, 64,28.64, 64,64l0,32 c0,1.504-0.352,2.912-0.448,4.352C 511.648,69.984, 512,71.84, 512,73.344L 480,416
+		c-1.984,31.328-28.64,64-64,64L 96,480 C 60.64,480, 33.984,447.328, 32,416L0,73.344c0-1.504, 0.352-3.36, 0.448-4.96C 0.352,66.912,0,65.504,0,64l0-32 
+		C0-3.36, 28.64-32, 64-32z M 32,32l0,32 c0,17.632, 14.368,32, 32,32l 384,0 c 17.632,0, 32-14.368, 32-32l0-32 c0-17.632-14.368-32-32-32L 64,0 C 46.368,0, 32,14.368, 32,32zM 416,48A16,16 180 1 1 448,48A16,16 180 1 1 416,48zM 355.328,48.672A16,16 180 1 1 387.328,48.672000000000025A16,16 180 1 1 355.328,48.672000000000025zM 80,32l 224,0 c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16l-224,0 C 71.168,64, 64,56.832, 64,48
+		C 64,39.168, 71.168,32, 80,32z"  />
+<glyph unicode="&#xe0f7;" d="M 32,0l 288,0 c 17.664,0, 32,14.336, 32,32l0,43.2 c 6.816,3.264, 13.184,7.168, 19.168,11.68l 98.208-98.208
+		c 3.136-3.136, 7.232-4.672, 11.328-4.672s 8.192,1.568, 11.328,4.672c 6.24,6.24, 6.24,16.384,0,22.624l-98.272,98.272
+		C 407.552,128.192, 416,151.040, 416,176c0,44.608-26.272,82.784-64,100.8L 352,448 c0,17.664-14.336,32-32,32L 32,480 C 14.336,480,0,465.664,0,448l0-416 
+		C0,14.336, 14.336,0, 32,0z M 304,96C 259.904,96, 224,131.904, 224,176S 259.904,256, 304,256S 384,220.096, 384,176S 348.096,96, 304,96z M 272,352l-192,0 
+		C 71.168,352, 64,359.168, 64,368C 64,376.832, 71.168,384, 80,384l 192,0 C 280.832,384, 288,376.832, 288,368C 288,359.168, 280.832,352, 272,352z M 80,288l 192,0 
+		c 3.104,0, 5.824-1.12, 8.256-2.624C 259.328,280.832, 240.576,270.464, 225.792,256L 80,256 C 71.168,256, 64,263.168, 64,272C 64,280.832, 71.168,288, 80,288z M 80,192l 113.6,0 
+		C 192.864,186.72, 192,181.472, 192,176S 192.864,165.28, 193.6,160L 80,160 C 71.168,160, 64,167.168, 64,176C 64,184.832, 71.168,192, 80,192z"  />
+<glyph unicode="&#xe0e0;" d="M 480,384L 32,384 C 14.336,384,0,369.664,0,352l0-288 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,352 C 512,369.664, 497.664,384, 480,384z
+		 M 434.656,192L 240,192 C 231.168,192, 224,199.168, 224,208C 224,216.832, 231.168,224, 240,224l 194.656,0 c 8.832,0, 16-7.168, 16-16C 450.656,199.168, 443.488,192, 434.656,192z
+		 M 450.656,144c0-8.832-7.168-16-16-16L 240,128 C 231.168,128, 224,135.168, 224,144C 224,152.832, 231.168,160, 240,160l 194.656,0 
+		C 443.488,160, 450.656,152.832, 450.656,144z M 434.656,256L 240,256 C 231.168,256, 224,263.168, 224,272C 224,280.832, 231.168,288, 240,288l 194.656,0 
+		c 8.832,0, 16-7.168, 16-16C 450.656,263.168, 443.488,256, 434.656,256z M 128.768,227.232C 163.68,227.232, 192,189.28, 192,142.432s-126.496-46.848-126.496,0
+		S 93.824,227.232, 128.768,227.232z M 89.312,281.344C 89.312,302.688, 106.592,320, 127.936,320c 21.344,0, 38.656-17.312, 38.656-38.656
+		c0-21.344-17.312-38.656-38.656-38.656C 106.592,242.688, 89.312,260, 89.312,281.344z"  />
+<glyph unicode="&#xe0fc;" d="M 480,384l-160,0 l0-32 c 17.664,0, 32-14.336, 32-32c0-17.664-14.336-32-32-32L 288,288 L 224,288 L 192,288 C 174.336,288, 160,302.336, 160,320c0,17.664, 14.336,32, 32,32L 192,384 L 32,384 
+		C 14.336,384,0,369.664,0,352l0-352 c0-17.664, 14.336-32, 32-32l 448,0 c 17.664,0, 32,14.336, 32,32L 512,352 C 512,369.664, 497.664,384, 480,384z M 240,224l 194.656,0 
+		c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 240,192 C 231.168,192, 224,199.168, 224,208C 224,216.832, 231.168,224, 240,224z M 240,160l 194.656,0 
+		c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 240,128 C 231.168,128, 224,135.168, 224,144C 224,152.832, 231.168,160, 240,160z M 240,96l 194.656,0 
+		c 8.832,0, 16-7.168, 16-16c0-8.832-7.168-16-16-16L 240,64 C 231.168,64, 224,71.168, 224,80C 224,88.832, 231.168,96, 240,96z M 192,78.432
+		c0-46.848-126.496-46.848-126.496,0s 28.32,84.8, 63.232,84.8C 163.68,163.232, 192,125.28, 192,78.432z M 166.592,217.344c0-21.344-17.312-38.656-38.656-38.656
+		c-21.344,0-38.656,17.312-38.656,38.656C 89.312,238.688, 106.592,256, 127.936,256C 149.312,256, 166.592,238.688, 166.592,217.344zM 224,448L 288,448L 288,320L 224,320z"  />
+<glyph unicode="&#xe0f9;" d="M 190.016,79.168c-19.84,0-37.632,8.608-50.144,22.112c-22.112,23.84-38.24,8.832-43.072-14.624
+		C 72.32-32.928, 107.68-32, 107.68-32l 340.16-0.928c 35.36,0, 64,28.64, 64,64l0,224 c0,35.36, 4.096,85.408-28.16,70.912
+		c-24.416-10.944-56.512-17.504-106.816-7.136c-23.456,4.832-38.464,20.96-14.624,43.072c 13.504,12.512, 22.112,30.272, 22.112,50.144
+		C 384.32,449.6, 353.92,480, 316.416,480C 278.88,480, 248.48,449.6, 248.48,412.064c0-21.248, 11.072-38.784, 25.056-52.704c 8.416-8.384, 30.624-30.304-26.208-40.32
+		C 184.832,308.064, 124.896,343.392, 112.832,330.56C 104.832,322.080, 82.816,290.080, 96.96,215.040c 10.752-57.12, 32-33.472, 40.352-25.056
+		C 151.232,203.968, 168.768,215.040, 190.016,215.040c 37.504,0, 67.936-30.4, 67.936-67.936C 257.952,109.6, 227.552,79.168, 190.016,79.168z"  />
+<glyph unicode="&#xe0dd;" d="M 433.6,320c0,0-111.2,0-144.992,0L 288.608,407.392 c 2.368,39.36-8.96,72.576-33.152,72.544
+		C 213.344,479.872, 214.528,445.92, 214.528,445.92C 207.040,325.44, 96,288, 96,288l0-256 l 14.752-1.984C 231.808,30.016, 159.168-32, 358.080-32C 509.12-32, 512,100.928, 512,192
+		S 470.496,320, 433.6,320zM 32,0c 17.664,0, 32,14.336, 32,32L 64,287.008 c0,17.664-14.336,32-32,32s-32-14.336-32-32L0,32 C0,14.336, 14.336,0, 32,0z"  />
+<glyph unicode="&#xe0f1;" d="M 78.4,127.936c0,0, 111.2,0, 144.992,0l0-87.392 c-2.368-39.36, 8.96-72.576, 33.152-72.544
+		c 42.112,0.064, 40.928,34.016, 40.928,34.016C 304.96,122.496, 416,159.936, 416,159.936l0,256 l-14.752,1.984c-121.056,0-48.416,62.016-247.328,62.016
+		c-151.040,0-153.92-132.928-153.92-224S 41.504,127.936, 78.4,127.936zM 480,447.936c-17.664,0-32-14.336-32-32l0-255.008 c0-17.664, 14.336-32, 32-32s 32,14.336, 32,32L 512,415.936 
+		C 512,433.6, 497.664,447.936, 480,447.936z"  />
+<glyph unicode="&#xe0dc;" d="M 414.24,319.936c 0.896,13.376, 1.44,24.224, 1.728,30.72c 0.352,8.704-2.848,17.184-8.864,23.488S 392.704,384, 384,384L 32,384 
+		C 23.296,384, 14.944,380.448, 8.896,374.144S-0.32,359.36, 0.032,350.656c 1.76-42.272, 13.664-255.936, 74.624-310.496C 80.512,34.912, 88.128,32, 96,32l 224,0 
+		c 7.872,0, 15.488,2.912, 21.344,8.16c 19.104,17.12, 33.408,49.856, 44.064,88.064c 15.84,0.064, 26.784,0.096, 28.064,0.096
+		c 54.432,0, 98.56,39.68, 98.56,95.84C 512,300.416, 446.080,319.648, 414.24,319.936z M 413.44,176.32l-10.144-0.032c-1.92,0-4.352,0-6.72-0.032
+		c 6.368,32.8, 10.72,66.432, 13.664,95.744l 3.2,0 c 8.448,0, 50.56-2.304, 50.56-47.84C 464,191.296, 437.792,176.32, 413.44,176.32z"  />
+<glyph unicode="&#xe0f3;" d="M 272,448C 139.456,448, 32,340.544, 32,208S 139.456-32, 272-32S 512,75.456, 512,208S 404.544,448, 272,448z M 299.424,224
+		C 346.048,224, 384,188.128, 384,144S 346.048,64, 299.424,64L 288,64 l0-16 C 288,39.168, 280.832,32, 272,32S 256,39.168, 256,48L 256,64 L 244.576,64 C 197.952,64, 160,99.872, 160,144
+		C 160,152.832, 167.168,160, 176,160S 192,152.832, 192,144C 192,117.536, 215.584,96, 244.576,96L 256,96 L 256,192 L 244.576,192 C 197.952,192, 160,227.872, 160,272S 197.952,352, 244.576,352L 256,352 L 256,368 
+		C 256,376.832, 263.168,384, 272,384S 288,376.832, 288,368L 288,352 l 11.424,0 C 346.048,352, 384,316.128, 384,272C 384,263.168, 376.832,256, 368,256S 352,263.168, 352,272
+		C 352,298.464, 328.416,320, 299.424,320L 288,320 l0-96 L 299.424,224 zM 192,272C 192,245.536, 215.584,224, 244.576,224L 256,224 L 256,320 L 244.576,320 C 215.584,320, 192,298.464, 192,272zM 299.424,96C 328.416,96, 352,117.536, 352,144S 328.416,192, 299.424,192L 288,192 l0-96 L 299.424,96 z"  />
+<glyph unicode="&#xe0d8;" d="M 352,96L 352,192 c0,17.664, 14.336,32, 32,32l 96,0 L 480,288 c0,17.664-14.336,32-32,32l-36.736,0 l-15.616,92.768
+			c-0.704,4.224-3.104,8-6.592,10.432c-3.52,2.464-7.904,3.328-12.096,2.656L 61.088,367.744C 56.896,366.976, 53.152,364.544, 50.752,360.992
+			C 48.352,357.44, 47.456,353.088, 48.32,348.864L 54.048,320L 32,320 C 14.336,320,0,305.664,0,288l0-288 c0-17.664, 14.336-32, 32-32l 416,0 c 17.664,0, 32,14.336, 32,32l0,64 l-96,0 
+			C 366.336,64, 352,78.336, 352,96z M 82.848,339.2l 283.936,52.256L 378.816,320l-292.16,0 L 82.848,339.2zM 496,192L 384,192 l0-96 l 112,0 c 8.832,0, 16,7.168, 16,16l0,64 C 512,184.832, 504.832,192, 496,192z M 432,128
+			c-8.832,0-16,7.168-16,16c0,8.832, 7.168,16, 16,16s 16-7.168, 16-16C 448,135.168, 440.832,128, 432,128z"  />
+<glyph unicode="&#xe0db;" d="M 64,416l0-32 l0-256 l 4.736-11.84L 128-32l 64,160l-0.16,0.064C 191.936,128.16, 191.904,128.32, 192,128.416L 192,384 L 192,416 c0,35.36-28.64,64-64,64
+		S 64,451.36, 64,416z M 96,416c0,17.632, 14.368,32, 32,32s 32-14.368, 32-32l0-32 L 96,384 L 96,416 z M 128,54.176l-16.48,41.184l-6.4,16L 104.64,112.544L 128,124.224l 23.36-11.68
+		l-0.48-1.216l-6.4-16L 128,54.176zM 402.944,384.672l-30.24,77.344l-0.288-0.064C 370.912,472.096, 362.56,480, 352,480c-10.432,0-18.976-8.032-20.672-18.080
+		l-0.32,0.064L 301.056,384.672L 288,352l0-320 c0-35.36, 28.64-64, 64-64s 64,28.64, 64,64c 17.664,0, 32,14.336, 32,32l0,96 c0,17.664-14.336,32-32,32L 416,352 L 402.944,384.672z
+		 M 373.216,372.768L 381.536,352l-59.072,0 l 8.32,20.768L 335.264,384L 352,425.824L 368.736,384L 373.216,372.768z"  />
+<glyph unicode="&#xe0f0;" d="M 480,480L 64,480 C 46.336,480, 32,465.664, 32,448c0-17.664, 14.336-32, 32-32l0-256 c0-17.664, 14.336-32, 32-32l 160,0 l0-49.952 L 165.248-4.16
+		c-6.528-5.92-7.040-16.032-1.088-22.592c 5.984-6.528, 16.096-7.040, 22.592-1.088L 256,34.88l0-50.88 C 256-24.832, 263.168-32, 272-32S 288-24.832, 288-16
+		l0,50.88 l 69.248-62.72C 360.32-30.624, 364.16-32, 368-32c 4.352,0, 8.672,1.792, 11.84,5.248c 5.952,6.56, 5.44,16.672-1.088,22.592L 288,78.048L 288,128 
+		l 160,0 c 17.664,0, 32,14.336, 32,32L 480,416 c 17.664,0, 32,14.336, 32,32C 512,465.664, 497.664,480, 480,480z M 411.104,356.48l-112-108
+		C 292.96,242.528, 283.232,242.496, 276.96,248.416L 227.52,295.424L 156,220.896C 152.864,217.664, 148.672,216, 144.48,216c-4,0-7.968,1.472-11.104,4.48
+		C 127.008,226.56, 126.816,236.672, 132.928,243.104l 82.528,86.016C 221.568,335.36, 231.68,335.616, 238.016,329.6l 49.92-47.424l 100.96,97.376
+		c 6.336,6.048, 16.48,6.016, 22.624-0.448C 417.664,372.736, 417.472,362.624, 411.104,356.48z"  />
+<glyph unicode="&#xe0df;" d="M 480,160L 480,224 c0,17.664-14.336,32-32,32L 288,256 L 288,320 l 96,0 c 17.664,0, 32,14.336, 32,32L 416,384 c0,17.664-14.336,32-32,32L 160,416 C 142.336,416, 128,401.664, 128,384l0-32 
+		c0-17.664, 14.336-32, 32-32l 96,0 l0-64 L 96,256 C 78.336,256, 64,241.664, 64,224l0-64 c-17.664,0-32-14.336-32-32l0-64 c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l0,32 l0,32 
+		c0,17.664-14.336,32-32,32L 96,224 l 160,0 l0-64 c-17.664,0-32-14.336-32-32l0-32 l0-32 c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l0,32 l0,32 c0,17.664-14.336,32-32,32L 288,224 l 160,0 l0-64 
+		c-17.664,0-32-14.336-32-32l0-32 l0-32 c0-17.664, 14.336-32, 32-32l 32,0 c 17.664,0, 32,14.336, 32,32l0,64 C 512,145.664, 497.664,160, 480,160z"  />
+<glyph unicode="&#xe0f2;" d="M 64,480C 46.336,480, 32,465.664, 32,448l0-448 c0-17.664, 14.336-32, 32-32l 416,0 c 17.664,0, 32,14.336, 32,32L 512,448 c0,17.664-14.336,32-32,32L 64,480 z
+		 M 448,305.792L 448,32 l-96,0 L 352,305.792 L 448,305.792 z M 320,384l0-352 L 224,32 L 224,384 L 320,384 z M 192,188.448L 192,32 L 96,32 L 96,188.448 L 192,188.448 z"  />
+<glyph unicode="&#xe0f4;" d="M 480,352l-96,0 L 384,416 c0,17.664-14.336,32-32,32L 160,448 C 142.336,448, 128,433.664, 128,416l0-64 L 32,352 C 14.336,352,0,337.664,0,320l0-288 c0-17.664, 14.336-32, 32-32l 448,0 
+		c 17.664,0, 32,14.336, 32,32L 512,320 C 512,337.664, 497.664,352, 480,352z M 160,416l 192,0 l0-64 L 160,352 L 160,416 z"  />
+<glyph unicode="&#xe0d9;" d="M 247.2-30.752C 250.080-31.584, 253.056-32, 256-32s 5.92,0.416, 8.8,1.248c 198.048,56.576, 227.2,256.768, 214.976,354.752
+		C 477.76,339.968, 464.128,352, 448,352c-4.576,0.352-32,5.088-32,64c0,8.48-3.36,16.64-9.376,22.624C 399.712,445.536, 360,480, 256,480
+		S 112.288,445.536, 105.376,438.624C 99.36,432.64, 96,424.48, 96,416c0-58.912-27.424-63.648-32.928-64.032c-16.128,0-28.832-12-30.848-28
+		C 20,226.016, 49.184,25.824, 247.2-30.752z M 64,320c0,0, 64,0, 64,96c0,0, 32,32, 128,32l0-224 l 188.448,0 c-12.608-79.712-54.912-185.856-188.448-224L 256,224 L 67.552,224 
+		C 59.040,278.016, 64,320, 64,320z"  />
+<glyph unicode="&#xe0da;" d="M 160,304.992A16.992,16.992 180 1 1 193.984,304.99199999999996A16.992,16.992 180 1 1 160,304.99199999999996zM 256,480C 114.624,480,0,365.376,0,224s 114.624-256, 256-256s 256,114.624, 256,256S 397.376,480, 256,480z M 128,304.992c0,27.072, 21.952,48.992, 48.992,48.992
+		s 48.992-21.952, 48.992-48.992S 204.064,256, 176.992,256S 128,277.952, 128,304.992z M 171.328,116.672C 168.192,113.568, 164.096,112, 160,112
+		s-8.192,1.568-11.328,4.672c-6.24,6.24-6.24,16.384,0,22.624l 192,192c 6.24,6.24, 16.384,6.24, 22.624,0s 6.24-16.384,0-22.624
+		L 171.328,116.672z M 335.008,96c-27.072,0-48.992,21.952-48.992,48.992s 21.952,48.992, 48.992,48.992S 384,172.064, 384,144.992S 362.048,96, 335.008,96zM 318.016,144.992A16.992,16.992 180 1 1 352,144.99200000000002A16.992,16.992 180 1 1 318.016,144.99200000000002z"  />
+<glyph unicode="&#xe0de;" d="M 481.888,133.792c-87.136-87.104-228.928-87.168-316.064,0C 123.648,175.936, 100.448,232.064, 100.448,291.84
+		s 23.232,115.904, 65.344,158.016c 6.24,6.24, 6.24,16.384,0,22.624s-16.384,6.24-22.624,0C 94.976,424.32, 68.448,360.16, 68.448,291.84
+		s 26.56-132.512, 74.72-180.672C 183.84,70.464, 234.976,46.688, 288,39.232L 288,0 L 240,0 C 231.168,0, 224-7.168, 224-16C 224-24.832, 231.168-32, 240-32l 128,0 
+		c 8.832,0, 16,7.168, 16,16c0,8.832-7.168,16-16,16L 320,0 l0,36.608 c 1.28-0.032, 2.56-0.192, 3.84-0.192
+		c 65.408,0, 130.848,24.896, 180.672,74.72c 6.24,6.24, 6.24,16.384,0,22.624S 488.128,140.032, 481.888,133.792zM 135.68,291.84A188.16,188.16 180 1 1 512,291.84000000000003A188.16,188.16 180 1 1 135.68,291.84000000000003z"  />
+<glyph unicode="&#xe0e6;" d="M 416,448l-96,0 c0,17.664-14.336,32-32,32L 224,480 C 206.336,480, 192,465.664, 192,448L 96,448 C 78.336,448, 64,433.664, 64,416l0-416 c0-17.664, 14.336-32, 32-32l 320,0 
+		c 17.664,0, 32,14.336, 32,32L 448,416 C 448,433.664, 433.664,448, 416,448z M 416,32L 96,32 L 96,416 l 64,0 c0-17.664, 14.336-32, 32-32l 32,0 l 64,0 l 32,0 c 17.664,0, 32,14.336, 32,32l 64,0 L 416,32 zM 128,304C 128,295.168, 135.168,288, 144,288l 224,0 C 376.832,288, 384,295.168, 384,304C 384,312.832, 376.832,320, 368,320l-224,0 
+		C 135.168,320, 128,312.832, 128,304zM 368,224l-224,0 C 135.168,224, 128,216.832, 128,208C 128,199.168, 135.168,192, 144,192l 224,0 C 376.832,192, 384,199.168, 384,208
+		C 384,216.832, 376.832,224, 368,224zM 368,128l-224,0 C 135.168,128, 128,120.832, 128,112C 128,103.168, 135.168,96, 144,96l 224,0 c 8.832,0, 16,7.168, 16,16
+		C 384,120.832, 376.832,128, 368,128z"  />
+<glyph unicode="&#x20;" horiz-adv-x="256" />
+</font></defs></svg>
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.ttf b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.ttf
new file mode 100755
index 0000000..12ff680
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.ttf
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.woff b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.woff
new file mode 100755
index 0000000..3933052
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/fonts/ElegantIcons.woff
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/style.css b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/style.css
new file mode 100755
index 0000000..46681ce
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/elegant_font/css/style.css
@@ -0,0 +1,1159 @@
+@font-face {
+	font-family: 'ElegantIcons';
+	src:url('fonts/ElegantIcons.eot');
+	src:url('fonts/ElegantIcons.eot?#iefix') format('embedded-opentype'),
+		url('fonts/ElegantIcons.woff') format('woff'),
+		url('fonts/ElegantIcons.ttf') format('truetype'),
+		url('fonts/ElegantIcons.svg#ElegantIcons') format('svg');
+	font-weight: normal;
+	font-style: normal;
+}
+
+/* Use the following CSS code if you want to use data attributes for inserting your icons */
+[data-icon]:before {
+	font-family: 'ElegantIcons';
+	content: attr(data-icon);
+	speak: none;
+	font-weight: normal;
+	font-variant: normal;
+	text-transform: none;
+	line-height: 1;
+	-webkit-font-smoothing: antialiased;
+	-moz-osx-font-smoothing: grayscale;
+}
+
+/* Use the following CSS code if you want to have a class per icon */
+/*
+Instead of a list of all class selectors,
+you can use the generic selector below, but it's slower:
+[class*="your-class-prefix"] {
+*/
+.arrow_up, .arrow_down, .arrow_left, .arrow_right, .arrow_left-up, .arrow_right-up, .arrow_right-down, .arrow_left-down, .arrow-up-down, .arrow_up-down_alt, .arrow_left-right_alt, .arrow_left-right, .arrow_expand_alt2, .arrow_expand_alt, .arrow_condense, .arrow_expand, .arrow_move, .arrow_carrot-up, .arrow_carrot-down, .arrow_carrot-left, .arrow_carrot-right, .arrow_carrot-2up, .arrow_carrot-2down, .arrow_carrot-2left, .arrow_carrot-2right, .arrow_carrot-up_alt2, .arrow_carrot-down_alt2, .arrow_carrot-left_alt2, .arrow_carrot-right_alt2, .arrow_carrot-2up_alt2, .arrow_carrot-2down_alt2, .arrow_carrot-2left_alt2, .arrow_carrot-2right_alt2, .arrow_triangle-up, .arrow_triangle-down, .arrow_triangle-left, .arrow_triangle-right, .arrow_triangle-up_alt2, .arrow_triangle-down_alt2, .arrow_triangle-left_alt2, .arrow_triangle-right_alt2, .arrow_back, .icon_minus-06, .icon_plus, .icon_close, .icon_check, .icon_minus_alt2, .icon_plus_alt2, .icon_close_alt2, .icon_check_alt2, .icon_zoom-out_alt, .icon_zoom-in_alt, .icon_search, .icon_box-empty, .icon_box-selected, .icon_minus-box, .icon_plus-box, .icon_box-checked, .icon_circle-empty, .icon_circle-slelected, .icon_stop_alt2, .icon_stop, .icon_pause_alt2, .icon_pause, .icon_menu, .icon_menu-square_alt2, .icon_menu-circle_alt2, .icon_ul, .icon_ol, .icon_adjust-horiz, .icon_adjust-vert, .icon_document_alt, .icon_documents_alt, .icon_pencil, .icon_pencil-edit_alt, .icon_pencil-edit, .icon_folder-alt, .icon_folder-open_alt, .icon_folder-add_alt, .icon_info_alt, .icon_error-oct_alt, .icon_error-circle_alt, .icon_error-triangle_alt, .icon_question_alt2, .icon_question, .icon_comment_alt, .icon_chat_alt, .icon_vol-mute_alt, .icon_volume-low_alt, .icon_volume-high_alt, .icon_quotations, .icon_quotations_alt2, .icon_clock_alt, .icon_lock_alt, .icon_lock-open_alt, .icon_key_alt, .icon_cloud_alt, .icon_cloud-upload_alt, .icon_cloud-download_alt, .icon_image, .icon_images, .icon_lightbulb_alt, .icon_gift_alt, .icon_house_alt, .icon_genius, .icon_mobile, .icon_tablet, .icon_laptop, .icon_desktop, .icon_camera_alt, .icon_mail_alt, .icon_cone_alt, .icon_ribbon_alt, .icon_bag_alt, .icon_creditcard, .icon_cart_alt, .icon_paperclip, .icon_tag_alt, .icon_tags_alt, .icon_trash_alt, .icon_cursor_alt, .icon_mic_alt, .icon_compass_alt, .icon_pin_alt, .icon_pushpin_alt, .icon_map_alt, .icon_drawer_alt, .icon_toolbox_alt, .icon_book_alt, .icon_calendar, .icon_film, .icon_table, .icon_contacts_alt, .icon_headphones, .icon_lifesaver, .icon_piechart, .icon_refresh, .icon_link_alt, .icon_link, .icon_loading, .icon_blocked, .icon_archive_alt, .icon_heart_alt, .icon_star_alt, .icon_star-half_alt, .icon_star, .icon_star-half, .icon_tools, .icon_tool, .icon_cog, .icon_cogs, .arrow_up_alt, .arrow_down_alt, .arrow_left_alt, .arrow_right_alt, .arrow_left-up_alt, .arrow_right-up_alt, .arrow_right-down_alt, .arrow_left-down_alt, .arrow_condense_alt, .arrow_expand_alt3, .arrow_carrot_up_alt, .arrow_carrot-down_alt, .arrow_carrot-left_alt, .arrow_carrot-right_alt, .arrow_carrot-2up_alt, .arrow_carrot-2dwnn_alt, .arrow_carrot-2left_alt, .arrow_carrot-2right_alt, .arrow_triangle-up_alt, .arrow_triangle-down_alt, .arrow_triangle-left_alt, .arrow_triangle-right_alt, .icon_minus_alt, .icon_plus_alt, .icon_close_alt, .icon_check_alt, .icon_zoom-out, .icon_zoom-in, .icon_stop_alt, .icon_menu-square_alt, .icon_menu-circle_alt, .icon_document, .icon_documents, .icon_pencil_alt, .icon_folder, .icon_folder-open, .icon_folder-add, .icon_folder_upload, .icon_folder_download, .icon_info, .icon_error-circle, .icon_error-oct, .icon_error-triangle, .icon_question_alt, .icon_comment, .icon_chat, .icon_vol-mute, .icon_volume-low, .icon_volume-high, .icon_quotations_alt, .icon_clock, .icon_lock, .icon_lock-open, .icon_key, .icon_cloud, .icon_cloud-upload, .icon_cloud-download, .icon_lightbulb, .icon_gift, .icon_house, .icon_camera, .icon_mail, .icon_cone, .icon_ribbon, .icon_bag, .icon_cart, .icon_tag, .icon_tags, .icon_trash, .icon_cursor, .icon_mic, .icon_compass, .icon_pin, .icon_pushpin, .icon_map, .icon_drawer, .icon_toolbox, .icon_book, .icon_contacts, .icon_archive, .icon_heart, .icon_profile, .icon_group, .icon_grid-2x2, .icon_grid-3x3, .icon_music, .icon_pause_alt, .icon_phone, .icon_upload, .icon_download, .social_facebook, .social_twitter, .social_pinterest, .social_googleplus, .social_tumblr, .social_tumbleupon, .social_wordpress, .social_instagram, .social_dribbble, .social_vimeo, .social_linkedin, .social_rss, .social_deviantart, .social_share, .social_myspace, .social_skype, .social_youtube, .social_picassa, .social_googledrive, .social_flickr, .social_blogger, .social_spotify, .social_delicious, .social_facebook_circle, .social_twitter_circle, .social_pinterest_circle, .social_googleplus_circle, .social_tumblr_circle, .social_stumbleupon_circle, .social_wordpress_circle, .social_instagram_circle, .social_dribbble_circle, .social_vimeo_circle, .social_linkedin_circle, .social_rss_circle, .social_deviantart_circle, .social_share_circle, .social_myspace_circle, .social_skype_circle, .social_youtube_circle, .social_picassa_circle, .social_googledrive_alt2, .social_flickr_circle, .social_blogger_circle, .social_spotify_circle, .social_delicious_circle, .social_facebook_square, .social_twitter_square, .social_pinterest_square, .social_googleplus_square, .social_tumblr_square, .social_stumbleupon_square, .social_wordpress_square, .social_instagram_square, .social_dribbble_square, .social_vimeo_square, .social_linkedin_square, .social_rss_square, .social_deviantart_square, .social_share_square, .social_myspace_square, .social_skype_square, .social_youtube_square, .social_picassa_square, .social_googledrive_square, .social_flickr_square, .social_blogger_square, .social_spotify_square, .social_delicious_square, .icon_printer, .icon_calulator, .icon_building, .icon_floppy, .icon_drive, .icon_search-2, .icon_id, .icon_id-2, .icon_puzzle, .icon_like, .icon_dislike, .icon_mug, .icon_currency, .icon_wallet, .icon_pens, .icon_easel, .icon_flowchart, .icon_datareport, .icon_briefcase, .icon_shield, .icon_percent, .icon_globe, .icon_globe-2, .icon_target, .icon_hourglass, .icon_balance, .icon_rook, .icon_printer-alt, .icon_calculator_alt, .icon_building_alt, .icon_floppy_alt, .icon_drive_alt, .icon_search_alt, .icon_id_alt, .icon_id-2_alt, .icon_puzzle_alt, .icon_like_alt, .icon_dislike_alt, .icon_mug_alt, .icon_currency_alt, .icon_wallet_alt, .icon_pens_alt, .icon_easel_alt, .icon_flowchart_alt, .icon_datareport_alt, .icon_briefcase_alt, .icon_shield_alt, .icon_percent_alt, .icon_globe_alt, .icon_clipboard {
+	font-family: 'ElegantIcons';
+	speak: none;
+	font-style: normal;
+	font-weight: normal;
+	font-variant: normal;
+	text-transform: none;
+	line-height: 1;
+	-webkit-font-smoothing: antialiased;
+}
+.arrow_up:before {
+	content: "\21";
+}
+.arrow_down:before {
+	content: "\22";
+}
+.arrow_left:before {
+	content: "\23";
+}
+.arrow_right:before {
+	content: "\24";
+}
+.arrow_left-up:before {
+	content: "\25";
+}
+.arrow_right-up:before {
+	content: "\26";
+}
+.arrow_right-down:before {
+	content: "\27";
+}
+.arrow_left-down:before {
+	content: "\28";
+}
+.arrow-up-down:before {
+	content: "\29";
+}
+.arrow_up-down_alt:before {
+	content: "\2a";
+}
+.arrow_left-right_alt:before {
+	content: "\2b";
+}
+.arrow_left-right:before {
+	content: "\2c";
+}
+.arrow_expand_alt2:before {
+	content: "\2d";
+}
+.arrow_expand_alt:before {
+	content: "\2e";
+}
+.arrow_condense:before {
+	content: "\2f";
+}
+.arrow_expand:before {
+	content: "\30";
+}
+.arrow_move:before {
+	content: "\31";
+}
+.arrow_carrot-up:before {
+	content: "\32";
+}
+.arrow_carrot-down:before {
+	content: "\33";
+}
+.arrow_carrot-left:before {
+	content: "\34";
+}
+.arrow_carrot-right:before {
+	content: "\35";
+}
+.arrow_carrot-2up:before {
+	content: "\36";
+}
+.arrow_carrot-2down:before {
+	content: "\37";
+}
+.arrow_carrot-2left:before {
+	content: "\38";
+}
+.arrow_carrot-2right:before {
+	content: "\39";
+}
+.arrow_carrot-up_alt2:before {
+	content: "\3a";
+}
+.arrow_carrot-down_alt2:before {
+	content: "\3b";
+}
+.arrow_carrot-left_alt2:before {
+	content: "\3c";
+}
+.arrow_carrot-right_alt2:before {
+	content: "\3d";
+}
+.arrow_carrot-2up_alt2:before {
+	content: "\3e";
+}
+.arrow_carrot-2down_alt2:before {
+	content: "\3f";
+}
+.arrow_carrot-2left_alt2:before {
+	content: "\40";
+}
+.arrow_carrot-2right_alt2:before {
+	content: "\41";
+}
+.arrow_triangle-up:before {
+	content: "\42";
+}
+.arrow_triangle-down:before {
+	content: "\43";
+}
+.arrow_triangle-left:before {
+	content: "\44";
+}
+.arrow_triangle-right:before {
+	content: "\45";
+}
+.arrow_triangle-up_alt2:before {
+	content: "\46";
+}
+.arrow_triangle-down_alt2:before {
+	content: "\47";
+}
+.arrow_triangle-left_alt2:before {
+	content: "\48";
+}
+.arrow_triangle-right_alt2:before {
+	content: "\49";
+}
+.arrow_back:before {
+	content: "\4a";
+}
+.icon_minus-06:before {
+	content: "\4b";
+}
+.icon_plus:before {
+	content: "\4c";
+}
+.icon_close:before {
+	content: "\4d";
+}
+.icon_check:before {
+	content: "\4e";
+}
+.icon_minus_alt2:before {
+	content: "\4f";
+}
+.icon_plus_alt2:before {
+	content: "\50";
+}
+.icon_close_alt2:before {
+	content: "\51";
+}
+.icon_check_alt2:before {
+	content: "\52";
+}
+.icon_zoom-out_alt:before {
+	content: "\53";
+}
+.icon_zoom-in_alt:before {
+	content: "\54";
+}
+.icon_search:before {
+	content: "\55";
+}
+.icon_box-empty:before {
+	content: "\56";
+}
+.icon_box-selected:before {
+	content: "\57";
+}
+.icon_minus-box:before {
+	content: "\58";
+}
+.icon_plus-box:before {
+	content: "\59";
+}
+.icon_box-checked:before {
+	content: "\5a";
+}
+.icon_circle-empty:before {
+	content: "\5b";
+}
+.icon_circle-slelected:before {
+	content: "\5c";
+}
+.icon_stop_alt2:before {
+	content: "\5d";
+}
+.icon_stop:before {
+	content: "\5e";
+}
+.icon_pause_alt2:before {
+	content: "\5f";
+}
+.icon_pause:before {
+	content: "\60";
+}
+.icon_menu:before {
+	content: "\61";
+}
+.icon_menu-square_alt2:before {
+	content: "\62";
+}
+.icon_menu-circle_alt2:before {
+	content: "\63";
+}
+.icon_ul:before {
+	content: "\64";
+}
+.icon_ol:before {
+	content: "\65";
+}
+.icon_adjust-horiz:before {
+	content: "\66";
+}
+.icon_adjust-vert:before {
+	content: "\67";
+}
+.icon_document_alt:before {
+	content: "\68";
+}
+.icon_documents_alt:before {
+	content: "\69";
+}
+.icon_pencil:before {
+	content: "\6a";
+}
+.icon_pencil-edit_alt:before {
+	content: "\6b";
+}
+.icon_pencil-edit:before {
+	content: "\6c";
+}
+.icon_folder-alt:before {
+	content: "\6d";
+}
+.icon_folder-open_alt:before {
+	content: "\6e";
+}
+.icon_folder-add_alt:before {
+	content: "\6f";
+}
+.icon_info_alt:before {
+	content: "\70";
+}
+.icon_error-oct_alt:before {
+	content: "\71";
+}
+.icon_error-circle_alt:before {
+	content: "\72";
+}
+.icon_error-triangle_alt:before {
+	content: "\73";
+}
+.icon_question_alt2:before {
+	content: "\74";
+}
+.icon_question:before {
+	content: "\75";
+}
+.icon_comment_alt:before {
+	content: "\76";
+}
+.icon_chat_alt:before {
+	content: "\77";
+}
+.icon_vol-mute_alt:before {
+	content: "\78";
+}
+.icon_volume-low_alt:before {
+	content: "\79";
+}
+.icon_volume-high_alt:before {
+	content: "\7a";
+}
+.icon_quotations:before {
+	content: "\7b";
+}
+.icon_quotations_alt2:before {
+	content: "\7c";
+}
+.icon_clock_alt:before {
+	content: "\7d";
+}
+.icon_lock_alt:before {
+	content: "\7e";
+}
+.icon_lock-open_alt:before {
+	content: "\e000";
+}
+.icon_key_alt:before {
+	content: "\e001";
+}
+.icon_cloud_alt:before {
+	content: "\e002";
+}
+.icon_cloud-upload_alt:before {
+	content: "\e003";
+}
+.icon_cloud-download_alt:before {
+	content: "\e004";
+}
+.icon_image:before {
+	content: "\e005";
+}
+.icon_images:before {
+	content: "\e006";
+}
+.icon_lightbulb_alt:before {
+	content: "\e007";
+}
+.icon_gift_alt:before {
+	content: "\e008";
+}
+.icon_house_alt:before {
+	content: "\e009";
+}
+.icon_genius:before {
+	content: "\e00a";
+}
+.icon_mobile:before {
+	content: "\e00b";
+}
+.icon_tablet:before {
+	content: "\e00c";
+}
+.icon_laptop:before {
+	content: "\e00d";
+}
+.icon_desktop:before {
+	content: "\e00e";
+}
+.icon_camera_alt:before {
+	content: "\e00f";
+}
+.icon_mail_alt:before {
+	content: "\e010";
+}
+.icon_cone_alt:before {
+	content: "\e011";
+}
+.icon_ribbon_alt:before {
+	content: "\e012";
+}
+.icon_bag_alt:before {
+	content: "\e013";
+}
+.icon_creditcard:before {
+	content: "\e014";
+}
+.icon_cart_alt:before {
+	content: "\e015";
+}
+.icon_paperclip:before {
+	content: "\e016";
+}
+.icon_tag_alt:before {
+	content: "\e017";
+}
+.icon_tags_alt:before {
+	content: "\e018";
+}
+.icon_trash_alt:before {
+	content: "\e019";
+}
+.icon_cursor_alt:before {
+	content: "\e01a";
+}
+.icon_mic_alt:before {
+	content: "\e01b";
+}
+.icon_compass_alt:before {
+	content: "\e01c";
+}
+.icon_pin_alt:before {
+	content: "\e01d";
+}
+.icon_pushpin_alt:before {
+	content: "\e01e";
+}
+.icon_map_alt:before {
+	content: "\e01f";
+}
+.icon_drawer_alt:before {
+	content: "\e020";
+}
+.icon_toolbox_alt:before {
+	content: "\e021";
+}
+.icon_book_alt:before {
+	content: "\e022";
+}
+.icon_calendar:before {
+	content: "\e023";
+}
+.icon_film:before {
+	content: "\e024";
+}
+.icon_table:before {
+	content: "\e025";
+}
+.icon_contacts_alt:before {
+	content: "\e026";
+}
+.icon_headphones:before {
+	content: "\e027";
+}
+.icon_lifesaver:before {
+	content: "\e028";
+}
+.icon_piechart:before {
+	content: "\e029";
+}
+.icon_refresh:before {
+	content: "\e02a";
+}
+.icon_link_alt:before {
+	content: "\e02b";
+}
+.icon_link:before {
+	content: "\e02c";
+}
+.icon_loading:before {
+	content: "\e02d";
+}
+.icon_blocked:before {
+	content: "\e02e";
+}
+.icon_archive_alt:before {
+	content: "\e02f";
+}
+.icon_heart_alt:before {
+	content: "\e030";
+}
+.icon_star_alt:before {
+	content: "\e031";
+}
+.icon_star-half_alt:before {
+	content: "\e032";
+}
+.icon_star:before {
+	content: "\e033";
+}
+.icon_star-half:before {
+	content: "\e034";
+}
+.icon_tools:before {
+	content: "\e035";
+}
+.icon_tool:before {
+	content: "\e036";
+}
+.icon_cog:before {
+	content: "\e037";
+}
+.icon_cogs:before {
+	content: "\e038";
+}
+.arrow_up_alt:before {
+	content: "\e039";
+}
+.arrow_down_alt:before {
+	content: "\e03a";
+}
+.arrow_left_alt:before {
+	content: "\e03b";
+}
+.arrow_right_alt:before {
+	content: "\e03c";
+}
+.arrow_left-up_alt:before {
+	content: "\e03d";
+}
+.arrow_right-up_alt:before {
+	content: "\e03e";
+}
+.arrow_right-down_alt:before {
+	content: "\e03f";
+}
+.arrow_left-down_alt:before {
+	content: "\e040";
+}
+.arrow_condense_alt:before {
+	content: "\e041";
+}
+.arrow_expand_alt3:before {
+	content: "\e042";
+}
+.arrow_carrot_up_alt:before {
+	content: "\e043";
+}
+.arrow_carrot-down_alt:before {
+	content: "\e044";
+}
+.arrow_carrot-left_alt:before {
+	content: "\e045";
+}
+.arrow_carrot-right_alt:before {
+	content: "\e046";
+}
+.arrow_carrot-2up_alt:before {
+	content: "\e047";
+}
+.arrow_carrot-2dwnn_alt:before {
+	content: "\e048";
+}
+.arrow_carrot-2left_alt:before {
+	content: "\e049";
+}
+.arrow_carrot-2right_alt:before {
+	content: "\e04a";
+}
+.arrow_triangle-up_alt:before {
+	content: "\e04b";
+}
+.arrow_triangle-down_alt:before {
+	content: "\e04c";
+}
+.arrow_triangle-left_alt:before {
+	content: "\e04d";
+}
+.arrow_triangle-right_alt:before {
+	content: "\e04e";
+}
+.icon_minus_alt:before {
+	content: "\e04f";
+}
+.icon_plus_alt:before {
+	content: "\e050";
+}
+.icon_close_alt:before {
+	content: "\e051";
+}
+.icon_check_alt:before {
+	content: "\e052";
+}
+.icon_zoom-out:before {
+	content: "\e053";
+}
+.icon_zoom-in:before {
+	content: "\e054";
+}
+.icon_stop_alt:before {
+	content: "\e055";
+}
+.icon_menu-square_alt:before {
+	content: "\e056";
+}
+.icon_menu-circle_alt:before {
+	content: "\e057";
+}
+.icon_document:before {
+	content: "\e058";
+}
+.icon_documents:before {
+	content: "\e059";
+}
+.icon_pencil_alt:before {
+	content: "\e05a";
+}
+.icon_folder:before {
+	content: "\e05b";
+}
+.icon_folder-open:before {
+	content: "\e05c";
+}
+.icon_folder-add:before {
+	content: "\e05d";
+}
+.icon_folder_upload:before {
+	content: "\e05e";
+}
+.icon_folder_download:before {
+	content: "\e05f";
+}
+.icon_info:before {
+	content: "\e060";
+}
+.icon_error-circle:before {
+	content: "\e061";
+}
+.icon_error-oct:before {
+	content: "\e062";
+}
+.icon_error-triangle:before {
+	content: "\e063";
+}
+.icon_question_alt:before {
+	content: "\e064";
+}
+.icon_comment:before {
+	content: "\e065";
+}
+.icon_chat:before {
+	content: "\e066";
+}
+.icon_vol-mute:before {
+	content: "\e067";
+}
+.icon_volume-low:before {
+	content: "\e068";
+}
+.icon_volume-high:before {
+	content: "\e069";
+}
+.icon_quotations_alt:before {
+	content: "\e06a";
+}
+.icon_clock:before {
+	content: "\e06b";
+}
+.icon_lock:before {
+	content: "\e06c";
+}
+.icon_lock-open:before {
+	content: "\e06d";
+}
+.icon_key:before {
+	content: "\e06e";
+}
+.icon_cloud:before {
+	content: "\e06f";
+}
+.icon_cloud-upload:before {
+	content: "\e070";
+}
+.icon_cloud-download:before {
+	content: "\e071";
+}
+.icon_lightbulb:before {
+	content: "\e072";
+}
+.icon_gift:before {
+	content: "\e073";
+}
+.icon_house:before {
+	content: "\e074";
+}
+.icon_camera:before {
+	content: "\e075";
+}
+.icon_mail:before {
+	content: "\e076";
+}
+.icon_cone:before {
+	content: "\e077";
+}
+.icon_ribbon:before {
+	content: "\e078";
+}
+.icon_bag:before {
+	content: "\e079";
+}
+.icon_cart:before {
+	content: "\e07a";
+}
+.icon_tag:before {
+	content: "\e07b";
+}
+.icon_tags:before {
+	content: "\e07c";
+}
+.icon_trash:before {
+	content: "\e07d";
+}
+.icon_cursor:before {
+	content: "\e07e";
+}
+.icon_mic:before {
+	content: "\e07f";
+}
+.icon_compass:before {
+	content: "\e080";
+}
+.icon_pin:before {
+	content: "\e081";
+}
+.icon_pushpin:before {
+	content: "\e082";
+}
+.icon_map:before {
+	content: "\e083";
+}
+.icon_drawer:before {
+	content: "\e084";
+}
+.icon_toolbox:before {
+	content: "\e085";
+}
+.icon_book:before {
+	content: "\e086";
+}
+.icon_contacts:before {
+	content: "\e087";
+}
+.icon_archive:before {
+	content: "\e088";
+}
+.icon_heart:before {
+	content: "\e089";
+}
+.icon_profile:before {
+	content: "\e08a";
+}
+.icon_group:before {
+	content: "\e08b";
+}
+.icon_grid-2x2:before {
+	content: "\e08c";
+}
+.icon_grid-3x3:before {
+	content: "\e08d";
+}
+.icon_music:before {
+	content: "\e08e";
+}
+.icon_pause_alt:before {
+	content: "\e08f";
+}
+.icon_phone:before {
+	content: "\e090";
+}
+.icon_upload:before {
+	content: "\e091";
+}
+.icon_download:before {
+	content: "\e092";
+}
+.social_facebook:before {
+	content: "\e093";
+}
+.social_twitter:before {
+	content: "\e094";
+}
+.social_pinterest:before {
+	content: "\e095";
+}
+.social_googleplus:before {
+	content: "\e096";
+}
+.social_tumblr:before {
+	content: "\e097";
+}
+.social_tumbleupon:before {
+	content: "\e098";
+}
+.social_wordpress:before {
+	content: "\e099";
+}
+.social_instagram:before {
+	content: "\e09a";
+}
+.social_dribbble:before {
+	content: "\e09b";
+}
+.social_vimeo:before {
+	content: "\e09c";
+}
+.social_linkedin:before {
+	content: "\e09d";
+}
+.social_rss:before {
+	content: "\e09e";
+}
+.social_deviantart:before {
+	content: "\e09f";
+}
+.social_share:before {
+	content: "\e0a0";
+}
+.social_myspace:before {
+	content: "\e0a1";
+}
+.social_skype:before {
+	content: "\e0a2";
+}
+.social_youtube:before {
+	content: "\e0a3";
+}
+.social_picassa:before {
+	content: "\e0a4";
+}
+.social_googledrive:before {
+	content: "\e0a5";
+}
+.social_flickr:before {
+	content: "\e0a6";
+}
+.social_blogger:before {
+	content: "\e0a7";
+}
+.social_spotify:before {
+	content: "\e0a8";
+}
+.social_delicious:before {
+	content: "\e0a9";
+}
+.social_facebook_circle:before {
+	content: "\e0aa";
+}
+.social_twitter_circle:before {
+	content: "\e0ab";
+}
+.social_pinterest_circle:before {
+	content: "\e0ac";
+}
+.social_googleplus_circle:before {
+	content: "\e0ad";
+}
+.social_tumblr_circle:before {
+	content: "\e0ae";
+}
+.social_stumbleupon_circle:before {
+	content: "\e0af";
+}
+.social_wordpress_circle:before {
+	content: "\e0b0";
+}
+.social_instagram_circle:before {
+	content: "\e0b1";
+}
+.social_dribbble_circle:before {
+	content: "\e0b2";
+}
+.social_vimeo_circle:before {
+	content: "\e0b3";
+}
+.social_linkedin_circle:before {
+	content: "\e0b4";
+}
+.social_rss_circle:before {
+	content: "\e0b5";
+}
+.social_deviantart_circle:before {
+	content: "\e0b6";
+}
+.social_share_circle:before {
+	content: "\e0b7";
+}
+.social_myspace_circle:before {
+	content: "\e0b8";
+}
+.social_skype_circle:before {
+	content: "\e0b9";
+}
+.social_youtube_circle:before {
+	content: "\e0ba";
+}
+.social_picassa_circle:before {
+	content: "\e0bb";
+}
+.social_googledrive_alt2:before {
+	content: "\e0bc";
+}
+.social_flickr_circle:before {
+	content: "\e0bd";
+}
+.social_blogger_circle:before {
+	content: "\e0be";
+}
+.social_spotify_circle:before {
+	content: "\e0bf";
+}
+.social_delicious_circle:before {
+	content: "\e0c0";
+}
+.social_facebook_square:before {
+	content: "\e0c1";
+}
+.social_twitter_square:before {
+	content: "\e0c2";
+}
+.social_pinterest_square:before {
+	content: "\e0c3";
+}
+.social_googleplus_square:before {
+	content: "\e0c4";
+}
+.social_tumblr_square:before {
+	content: "\e0c5";
+}
+.social_stumbleupon_square:before {
+	content: "\e0c6";
+}
+.social_wordpress_square:before {
+	content: "\e0c7";
+}
+.social_instagram_square:before {
+	content: "\e0c8";
+}
+.social_dribbble_square:before {
+	content: "\e0c9";
+}
+.social_vimeo_square:before {
+	content: "\e0ca";
+}
+.social_linkedin_square:before {
+	content: "\e0cb";
+}
+.social_rss_square:before {
+	content: "\e0cc";
+}
+.social_deviantart_square:before {
+	content: "\e0cd";
+}
+.social_share_square:before {
+	content: "\e0ce";
+}
+.social_myspace_square:before {
+	content: "\e0cf";
+}
+.social_skype_square:before {
+	content: "\e0d0";
+}
+.social_youtube_square:before {
+	content: "\e0d1";
+}
+.social_picassa_square:before {
+	content: "\e0d2";
+}
+.social_googledrive_square:before {
+	content: "\e0d3";
+}
+.social_flickr_square:before {
+	content: "\e0d4";
+}
+.social_blogger_square:before {
+	content: "\e0d5";
+}
+.social_spotify_square:before {
+	content: "\e0d6";
+}
+.social_delicious_square:before {
+	content: "\e0d7";
+}
+.icon_printer:before {
+	content: "\e103";
+}
+.icon_calulator:before {
+	content: "\e0ee";
+}
+.icon_building:before {
+	content: "\e0ef";
+}
+.icon_floppy:before {
+	content: "\e0e8";
+}
+.icon_drive:before {
+	content: "\e0ea";
+}
+.icon_search-2:before {
+	content: "\e101";
+}
+.icon_id:before {
+	content: "\e107";
+}
+.icon_id-2:before {
+	content: "\e108";
+}
+.icon_puzzle:before {
+	content: "\e102";
+}
+.icon_like:before {
+	content: "\e106";
+}
+.icon_dislike:before {
+	content: "\e0eb";
+}
+.icon_mug:before {
+	content: "\e105";
+}
+.icon_currency:before {
+	content: "\e0ed";
+}
+.icon_wallet:before {
+	content: "\e100";
+}
+.icon_pens:before {
+	content: "\e104";
+}
+.icon_easel:before {
+	content: "\e0e9";
+}
+.icon_flowchart:before {
+	content: "\e109";
+}
+.icon_datareport:before {
+	content: "\e0ec";
+}
+.icon_briefcase:before {
+	content: "\e0fe";
+}
+.icon_shield:before {
+	content: "\e0f6";
+}
+.icon_percent:before {
+	content: "\e0fb";
+}
+.icon_globe:before {
+	content: "\e0e2";
+}
+.icon_globe-2:before {
+	content: "\e0e3";
+}
+.icon_target:before {
+	content: "\e0f5";
+}
+.icon_hourglass:before {
+	content: "\e0e1";
+}
+.icon_balance:before {
+	content: "\e0ff";
+}
+.icon_rook:before {
+	content: "\e0f8";
+}
+.icon_printer-alt:before {
+	content: "\e0fa";
+}
+.icon_calculator_alt:before {
+	content: "\e0e7";
+}
+.icon_building_alt:before {
+	content: "\e0fd";
+}
+.icon_floppy_alt:before {
+	content: "\e0e4";
+}
+.icon_drive_alt:before {
+	content: "\e0e5";
+}
+.icon_search_alt:before {
+	content: "\e0f7";
+}
+.icon_id_alt:before {
+	content: "\e0e0";
+}
+.icon_id-2_alt:before {
+	content: "\e0fc";
+}
+.icon_puzzle_alt:before {
+	content: "\e0f9";
+}
+.icon_like_alt:before {
+	content: "\e0dd";
+}
+.icon_dislike_alt:before {
+	content: "\e0f1";
+}
+.icon_mug_alt:before {
+	content: "\e0dc";
+}
+.icon_currency_alt:before {
+	content: "\e0f3";
+}
+.icon_wallet_alt:before {
+	content: "\e0d8";
+}
+.icon_pens_alt:before {
+	content: "\e0db";
+}
+.icon_easel_alt:before {
+	content: "\e0f0";
+}
+.icon_flowchart_alt:before {
+	content: "\e0df";
+}
+.icon_datareport_alt:before {
+	content: "\e0f2";
+}
+.icon_briefcase_alt:before {
+	content: "\e0f4";
+}
+.icon_shield_alt:before {
+	content: "\e0d9";
+}
+.icon_percent_alt:before {
+	content: "\e0da";
+}
+.icon_globe_alt:before {
+	content: "\e0de";
+}
+.icon_clipboard:before {
+	content: "\e0e6";
+}
+
+
+	.glyph {
+		float: left;
+		text-align: center;
+		padding: .75em;
+		margin: .4em 1.5em .75em 0;
+		width: 6em;
+text-shadow: none;
+	}
+        .glyph_big {
+        font-size: 128px;
+        color: #59c5dc;
+        float: left;
+        margin-right: 20px;
+        }
+
+        .glyph div { padding-bottom: 10px;}
+
+	.glyph input {
+		font-family: consolas, monospace;
+		font-size: 12px;
+		width: 100%;
+		text-align: center;
+		border: 0;
+		box-shadow: 0 0 0 1px #ccc;
+		padding: .2em;
+                -moz-border-radius: 5px;
+                -webkit-border-radius: 5px;
+	}
+	.centered {
+		margin-left: auto;
+		margin-right: auto;
+	}
+	.glyph .fs1 {
+		font-size: 2em;
+	}
+
+	
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/css/font-awesome.min.css b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/css/font-awesome.min.css
new file mode 100644
index 0000000..9b27f8e
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/css/font-awesome.min.css
@@ -0,0 +1,4 @@
+/*!
+ *  Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ *  License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+ */@font-face{font-family:'FontAwesome';src:url('../fonts/fontawesome-webfont.eot?v=4.6.3');src:url('../fonts/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),url('../fonts/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),url('../fonts/fontawesome-webfont.woff?v=4.6.3') format('woff'),url('../fonts/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),url('../fonts/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/FontAwesome.otf b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/FontAwesome.otf
new file mode 100644
index 0000000..d4de13e
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/FontAwesome.otf
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.eot b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.eot
new file mode 100644
index 0000000..c7b00d2
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.eot
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.svg b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.svg
new file mode 100644
index 0000000..8b66187
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.svg
@@ -0,0 +1,685 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata></metadata>
+<defs>
+<font id="fontawesomeregular" horiz-adv-x="1536" >
+<font-face units-per-em="1792" ascent="1536" descent="-256" />
+<missing-glyph horiz-adv-x="448" />
+<glyph unicode=" "  horiz-adv-x="448" />
+<glyph unicode="&#x09;" horiz-adv-x="448" />
+<glyph unicode="&#xa0;" horiz-adv-x="448" />
+<glyph unicode="&#xa8;" horiz-adv-x="1792" />
+<glyph unicode="&#xa9;" horiz-adv-x="1792" />
+<glyph unicode="&#xae;" horiz-adv-x="1792" />
+<glyph unicode="&#xb4;" horiz-adv-x="1792" />
+<glyph unicode="&#xc6;" horiz-adv-x="1792" />
+<glyph unicode="&#xd8;" horiz-adv-x="1792" />
+<glyph unicode="&#x2000;" horiz-adv-x="768" />
+<glyph unicode="&#x2001;" horiz-adv-x="1537" />
+<glyph unicode="&#x2002;" horiz-adv-x="768" />
+<glyph unicode="&#x2003;" horiz-adv-x="1537" />
+<glyph unicode="&#x2004;" horiz-adv-x="512" />
+<glyph unicode="&#x2005;" horiz-adv-x="384" />
+<glyph unicode="&#x2006;" horiz-adv-x="256" />
+<glyph unicode="&#x2007;" horiz-adv-x="256" />
+<glyph unicode="&#x2008;" horiz-adv-x="192" />
+<glyph unicode="&#x2009;" horiz-adv-x="307" />
+<glyph unicode="&#x200a;" horiz-adv-x="85" />
+<glyph unicode="&#x202f;" horiz-adv-x="307" />
+<glyph unicode="&#x205f;" horiz-adv-x="384" />
+<glyph unicode="&#x2122;" horiz-adv-x="1792" />
+<glyph unicode="&#x221e;" horiz-adv-x="1792" />
+<glyph unicode="&#x2260;" horiz-adv-x="1792" />
+<glyph unicode="&#x25fc;" horiz-adv-x="500" d="M0 0z" />
+<glyph unicode="&#xf000;" horiz-adv-x="1792" d="M1699 1350q0 -35 -43 -78l-632 -632v-768h320q26 0 45 -19t19 -45t-19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45t45 19h320v768l-632 632q-43 43 -43 78q0 23 18 36.5t38 17.5t43 4h1408q23 0 43 -4t38 -17.5t18 -36.5z" />
+<glyph unicode="&#xf001;" d="M1536 1312v-1120q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v537l-768 -237v-709q0 -50 -34 -89t-86 -60.5t-103.5 -32t-96.5 -10.5t-96.5 10.5t-103.5 32t-86 60.5t-34 89 t34 89t86 60.5t103.5 32t96.5 10.5q105 0 192 -39v967q0 31 19 56.5t49 35.5l832 256q12 4 28 4q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf002;" horiz-adv-x="1664" d="M1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -52 -38 -90t-90 -38q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5 t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf003;" horiz-adv-x="1792" d="M1664 32v768q-32 -36 -69 -66q-268 -206 -426 -338q-51 -43 -83 -67t-86.5 -48.5t-102.5 -24.5h-1h-1q-48 0 -102.5 24.5t-86.5 48.5t-83 67q-158 132 -426 338q-37 30 -69 66v-768q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1664 1083v11v13.5t-0.5 13 t-3 12.5t-5.5 9t-9 7.5t-14 2.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5q0 -168 147 -284q193 -152 401 -317q6 -5 35 -29.5t46 -37.5t44.5 -31.5t50.5 -27.5t43 -9h1h1q20 0 43 9t50.5 27.5t44.5 31.5t46 37.5t35 29.5q208 165 401 317q54 43 100.5 115.5t46.5 131.5z M1792 1120v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf004;" horiz-adv-x="1792" d="M896 -128q-26 0 -44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124t127 -344q0 -221 -229 -450l-623 -600 q-18 -18 -44 -18z" />
+<glyph unicode="&#xf005;" horiz-adv-x="1664" d="M1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -21 -10.5 -35.5t-30.5 -14.5q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455 l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf006;" horiz-adv-x="1664" d="M1137 532l306 297l-422 62l-189 382l-189 -382l-422 -62l306 -297l-73 -421l378 199l377 -199zM1664 889q0 -22 -26 -48l-363 -354l86 -500q1 -7 1 -20q0 -50 -41 -50q-19 0 -40 12l-449 236l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500 l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41t49 -41l225 -455l502 -73q56 -9 56 -46z" />
+<glyph unicode="&#xf007;" horiz-adv-x="1408" d="M1408 131q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q9 0 42 -21.5t74.5 -48t108 -48t133.5 -21.5t133.5 21.5t108 48t74.5 48t42 21.5q61 0 111.5 -20t85.5 -53.5t62 -81 t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf008;" horiz-adv-x="1920" d="M384 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 320v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM384 704v128q0 26 -19 45t-45 19h-128 q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 -64v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM384 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45 t45 -19h128q26 0 45 19t19 45zM1792 -64v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1408 704v512q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-512q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1792 320v128 q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 704v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1792 1088v128q0 26 -19 45t-45 19h-128q-26 0 -45 -19 t-19 -45v-128q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1920 1248v-1344q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1344q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf009;" horiz-adv-x="1664" d="M768 512v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM768 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 512v-384q0 -52 -38 -90t-90 -38 h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90zM1664 1280v-384q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf00a;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 288v-192q0 -40 -28 -68t-68 -28h-320 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1152 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00b;" horiz-adv-x="1792" d="M512 288v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM512 800v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 288v-192q0 -40 -28 -68t-68 -28h-960 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68zM512 1312v-192q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h320q40 0 68 -28t28 -68zM1792 800v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28 h960q40 0 68 -28t28 -68zM1792 1312v-192q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h960q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf00c;" horiz-adv-x="1792" d="M1671 970q0 -40 -28 -68l-724 -724l-136 -136q-28 -28 -68 -28t-68 28l-136 136l-362 362q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -295l656 657q28 28 68 28t68 -28l136 -136q28 -28 28 -68z" />
+<glyph unicode="&#xf00d;" horiz-adv-x="1408" d="M1298 214q0 -40 -28 -68l-136 -136q-28 -28 -68 -28t-68 28l-294 294l-294 -294q-28 -28 -68 -28t-68 28l-136 136q-28 28 -28 68t28 68l294 294l-294 294q-28 28 -28 68t28 68l136 136q28 28 68 28t68 -28l294 -294l294 294q28 28 68 28t68 -28l136 -136q28 -28 28 -68 t-28 -68l-294 -294l294 -294q28 -28 28 -68z" />
+<glyph unicode="&#xf00e;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-224q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v224h-224q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h224v224q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5v-224h224 q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5 t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z" />
+<glyph unicode="&#xf010;" horiz-adv-x="1664" d="M1024 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-576q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h576q13 0 22.5 -9.5t9.5 -22.5zM1152 704q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5z M1664 -128q0 -53 -37.5 -90.5t-90.5 -37.5q-54 0 -90 38l-343 342q-179 -124 -399 -124q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -220 -124 -399l343 -343q37 -37 37 -90z " />
+<glyph unicode="&#xf011;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61t-298 61t-245 164t-164 245t-61 298q0 182 80.5 343t226.5 270q43 32 95.5 25t83.5 -50q32 -42 24.5 -94.5t-49.5 -84.5q-98 -74 -151.5 -181t-53.5 -228q0 -104 40.5 -198.5t109.5 -163.5t163.5 -109.5 t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5q0 121 -53.5 228t-151.5 181q-42 32 -49.5 84.5t24.5 94.5q31 43 84 50t95 -25q146 -109 226.5 -270t80.5 -343zM896 1408v-640q0 -52 -38 -90t-90 -38t-90 38t-38 90v640q0 52 38 90t90 38t90 -38t38 -90z" />
+<glyph unicode="&#xf012;" horiz-adv-x="1792" d="M256 96v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 224v-320q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 480v-576q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1408 864v-960q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1376v-1472q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1472q0 14 9 23t23 9h192q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf013;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1536 749v-222q0 -12 -8 -23t-20 -13l-185 -28q-19 -54 -39 -91q35 -50 107 -138q10 -12 10 -25t-9 -23q-27 -37 -99 -108t-94 -71q-12 0 -26 9l-138 108q-44 -23 -91 -38 q-16 -136 -29 -186q-7 -28 -36 -28h-222q-14 0 -24.5 8.5t-11.5 21.5l-28 184q-49 16 -90 37l-141 -107q-10 -9 -25 -9q-14 0 -25 11q-126 114 -165 168q-7 10 -7 23q0 12 8 23q15 21 51 66.5t54 70.5q-27 50 -41 99l-183 27q-13 2 -21 12.5t-8 23.5v222q0 12 8 23t19 13 l186 28q14 46 39 92q-40 57 -107 138q-10 12 -10 24q0 10 9 23q26 36 98.5 107.5t94.5 71.5q13 0 26 -10l138 -107q44 23 91 38q16 136 29 186q7 28 36 28h222q14 0 24.5 -8.5t11.5 -21.5l28 -184q49 -16 90 -37l142 107q9 9 24 9q13 0 25 -10q129 -119 165 -170q7 -8 7 -22 q0 -12 -8 -23q-15 -21 -51 -66.5t-54 -70.5q26 -50 41 -98l183 -28q13 -2 21 -12.5t8 -23.5z" />
+<glyph unicode="&#xf014;" horiz-adv-x="1408" d="M512 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM768 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1024 800v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1152 76v948h-896v-948q0 -22 7 -40.5t14.5 -27t10.5 -8.5h832q3 0 10.5 8.5t14.5 27t7 40.5zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832 q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf015;" horiz-adv-x="1664" d="M1408 544v-480q0 -26 -19 -45t-45 -19h-384v384h-256v-384h-384q-26 0 -45 19t-19 45v480q0 1 0.5 3t0.5 3l575 474l575 -474q1 -2 1 -6zM1631 613l-62 -74q-8 -9 -21 -11h-3q-13 0 -21 7l-692 577l-692 -577q-12 -8 -24 -7q-13 2 -21 11l-62 74q-8 10 -7 23.5t11 21.5 l719 599q32 26 76 26t76 -26l244 -204v195q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-408l219 -182q10 -8 11 -21.5t-7 -23.5z" />
+<glyph unicode="&#xf016;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z " />
+<glyph unicode="&#xf017;" d="M896 992v-448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf018;" horiz-adv-x="1920" d="M1111 540v4l-24 320q-1 13 -11 22.5t-23 9.5h-186q-13 0 -23 -9.5t-11 -22.5l-24 -320v-4q-1 -12 8 -20t21 -8h244q12 0 21 8t8 20zM1870 73q0 -73 -46 -73h-704q13 0 22 9.5t8 22.5l-20 256q-1 13 -11 22.5t-23 9.5h-272q-13 0 -23 -9.5t-11 -22.5l-20 -256 q-1 -13 8 -22.5t22 -9.5h-704q-46 0 -46 73q0 54 26 116l417 1044q8 19 26 33t38 14h339q-13 0 -23 -9.5t-11 -22.5l-15 -192q-1 -14 8 -23t22 -9h166q13 0 22 9t8 23l-15 192q-1 13 -11 22.5t-23 9.5h339q20 0 38 -14t26 -33l417 -1044q26 -62 26 -116z" />
+<glyph unicode="&#xf019;" horiz-adv-x="1664" d="M1280 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 416v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h465l135 -136 q58 -56 136 -56t136 56l136 136h464q40 0 68 -28t28 -68zM1339 985q17 -41 -14 -70l-448 -448q-18 -19 -45 -19t-45 19l-448 448q-31 29 -14 70q17 39 59 39h256v448q0 26 19 45t45 19h256q26 0 45 -19t19 -45v-448h256q42 0 59 -39z" />
+<glyph unicode="&#xf01a;" d="M1120 608q0 -12 -10 -24l-319 -319q-11 -9 -23 -9t-23 9l-320 320q-15 16 -7 35q8 20 30 20h192v352q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-352h192q14 0 23 -9t9 -23zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273 t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01b;" d="M1118 660q-8 -20 -30 -20h-192v-352q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v352h-192q-14 0 -23 9t-9 23q0 12 10 24l319 319q11 9 23 9t23 -9l320 -320q15 -16 7 -35zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198 t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01c;" d="M1023 576h316q-1 3 -2.5 8t-2.5 8l-212 496h-708l-212 -496q-1 -2 -2.5 -8t-2.5 -8h316l95 -192h320zM1536 546v-482q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v482q0 62 25 123l238 552q10 25 36.5 42t52.5 17h832q26 0 52.5 -17t36.5 -42l238 -552 q25 -61 25 -123z" />
+<glyph unicode="&#xf01d;" d="M1184 640q0 -37 -32 -55l-544 -320q-15 -9 -32 -9q-16 0 -32 8q-32 19 -32 56v640q0 37 32 56q33 18 64 -1l544 -320q32 -18 32 -55zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf01e;" d="M1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l138 138q-148 137 -349 137q-104 0 -198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5q119 0 225 52t179 147q7 10 23 12q14 0 25 -9 l137 -138q9 -8 9.5 -20.5t-7.5 -22.5q-109 -132 -264 -204.5t-327 -72.5q-156 0 -298 61t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q147 0 284.5 -55.5t244.5 -156.5l130 129q29 31 70 14q39 -17 39 -59z" />
+<glyph unicode="&#xf021;" d="M1511 480q0 -5 -1 -7q-64 -268 -268 -434.5t-478 -166.5q-146 0 -282.5 55t-243.5 157l-129 -129q-19 -19 -45 -19t-45 19t-19 45v448q0 26 19 45t45 19h448q26 0 45 -19t19 -45t-19 -45l-137 -137q71 -66 161 -102t187 -36q134 0 250 65t186 179q11 17 53 117 q8 23 30 23h192q13 0 22.5 -9.5t9.5 -22.5zM1536 1280v-448q0 -26 -19 -45t-45 -19h-448q-26 0 -45 19t-19 45t19 45l138 138q-148 137 -349 137q-134 0 -250 -65t-186 -179q-11 -17 -53 -117q-8 -23 -30 -23h-199q-13 0 -22.5 9.5t-9.5 22.5v7q65 268 270 434.5t480 166.5 q146 0 284 -55.5t245 -156.5l130 129q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf022;" horiz-adv-x="1792" d="M384 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M384 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1536 352v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5z M1536 608v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5t9.5 -22.5zM1536 864v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h960q13 0 22.5 -9.5 t9.5 -22.5zM1664 160v832q0 13 -9.5 22.5t-22.5 9.5h-1472q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1472q13 0 22.5 9.5t9.5 22.5zM1792 1248v-1088q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1472q66 0 113 -47 t47 -113z" />
+<glyph unicode="&#xf023;" horiz-adv-x="1152" d="M320 768h512v192q0 106 -75 181t-181 75t-181 -75t-75 -181v-192zM1152 672v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v192q0 184 132 316t316 132t316 -132t132 -316v-192h32q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf024;" horiz-adv-x="1792" d="M320 1280q0 -72 -64 -110v-1266q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v1266q-64 38 -64 110q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -25 -12.5 -38.5t-39.5 -27.5q-215 -116 -369 -116q-61 0 -123.5 22t-108.5 48 t-115.5 48t-142.5 22q-192 0 -464 -146q-17 -9 -33 -9q-26 0 -45 19t-19 45v742q0 32 31 55q21 14 79 43q236 120 421 120q107 0 200 -29t219 -88q38 -19 88 -19q54 0 117.5 21t110 47t88 47t54.5 21q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf025;" horiz-adv-x="1664" d="M1664 650q0 -166 -60 -314l-20 -49l-185 -33q-22 -83 -90.5 -136.5t-156.5 -53.5v-32q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-32q71 0 130 -35.5t93 -95.5l68 12q29 95 29 193q0 148 -88 279t-236.5 209t-315.5 78 t-315.5 -78t-236.5 -209t-88 -279q0 -98 29 -193l68 -12q34 60 93 95.5t130 35.5v32q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v32q-88 0 -156.5 53.5t-90.5 136.5l-185 33l-20 49q-60 148 -60 314q0 151 67 291t179 242.5 t266 163.5t320 61t320 -61t266 -163.5t179 -242.5t67 -291z" />
+<glyph unicode="&#xf026;" horiz-adv-x="768" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf027;" horiz-adv-x="1152" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142z" />
+<glyph unicode="&#xf028;" horiz-adv-x="1664" d="M768 1184v-1088q0 -26 -19 -45t-45 -19t-45 19l-333 333h-262q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h262l333 333q19 19 45 19t45 -19t19 -45zM1152 640q0 -76 -42.5 -141.5t-112.5 -93.5q-10 -5 -25 -5q-26 0 -45 18.5t-19 45.5q0 21 12 35.5t29 25t34 23t29 35.5 t12 57t-12 57t-29 35.5t-34 23t-29 25t-12 35.5q0 27 19 45.5t45 18.5q15 0 25 -5q70 -27 112.5 -93t42.5 -142zM1408 640q0 -153 -85 -282.5t-225 -188.5q-13 -5 -25 -5q-27 0 -46 19t-19 45q0 39 39 59q56 29 76 44q74 54 115.5 135.5t41.5 173.5t-41.5 173.5 t-115.5 135.5q-20 15 -76 44q-39 20 -39 59q0 26 19 45t45 19q13 0 26 -5q140 -59 225 -188.5t85 -282.5zM1664 640q0 -230 -127 -422.5t-338 -283.5q-13 -5 -26 -5q-26 0 -45 19t-19 45q0 36 39 59q7 4 22.5 10.5t22.5 10.5q46 25 82 51q123 91 192 227t69 289t-69 289 t-192 227q-36 26 -82 51q-7 4 -22.5 10.5t-22.5 10.5q-39 23 -39 59q0 26 19 45t45 19q13 0 26 -5q211 -91 338 -283.5t127 -422.5z" />
+<glyph unicode="&#xf029;" horiz-adv-x="1408" d="M384 384v-128h-128v128h128zM384 1152v-128h-128v128h128zM1152 1152v-128h-128v128h128zM128 129h384v383h-384v-383zM128 896h384v384h-384v-384zM896 896h384v384h-384v-384zM640 640v-640h-640v640h640zM1152 128v-128h-128v128h128zM1408 128v-128h-128v128h128z M1408 640v-384h-384v128h-128v-384h-128v640h384v-128h128v128h128zM640 1408v-640h-640v640h640zM1408 1408v-640h-640v640h640z" />
+<glyph unicode="&#xf02a;" horiz-adv-x="1792" d="M63 0h-63v1408h63v-1408zM126 1h-32v1407h32v-1407zM220 1h-31v1407h31v-1407zM377 1h-31v1407h31v-1407zM534 1h-62v1407h62v-1407zM660 1h-31v1407h31v-1407zM723 1h-31v1407h31v-1407zM786 1h-31v1407h31v-1407zM943 1h-63v1407h63v-1407zM1100 1h-63v1407h63v-1407z M1226 1h-63v1407h63v-1407zM1352 1h-63v1407h63v-1407zM1446 1h-63v1407h63v-1407zM1635 1h-94v1407h94v-1407zM1698 1h-32v1407h32v-1407zM1792 0h-63v1408h63v-1408z" />
+<glyph unicode="&#xf02b;" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02c;" horiz-adv-x="1920" d="M448 1088q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1515 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-53 0 -90 37l-715 716q-38 37 -64.5 101t-26.5 117v416q0 52 38 90t90 38h416q53 0 117 -26.5t102 -64.5 l715 -714q37 -39 37 -91zM1899 512q0 -53 -37 -90l-491 -492q-39 -37 -91 -37q-36 0 -59 14t-53 45l470 470q37 37 37 90q0 52 -37 91l-715 714q-38 38 -102 64.5t-117 26.5h224q53 0 117 -26.5t102 -64.5l715 -714q37 -39 37 -91z" />
+<glyph unicode="&#xf02d;" horiz-adv-x="1664" d="M1639 1058q40 -57 18 -129l-275 -906q-19 -64 -76.5 -107.5t-122.5 -43.5h-923q-77 0 -148.5 53.5t-99.5 131.5q-24 67 -2 127q0 4 3 27t4 37q1 8 -3 21.5t-3 19.5q2 11 8 21t16.5 23.5t16.5 23.5q23 38 45 91.5t30 91.5q3 10 0.5 30t-0.5 28q3 11 17 28t17 23 q21 36 42 92t25 90q1 9 -2.5 32t0.5 28q4 13 22 30.5t22 22.5q19 26 42.5 84.5t27.5 96.5q1 8 -3 25.5t-2 26.5q2 8 9 18t18 23t17 21q8 12 16.5 30.5t15 35t16 36t19.5 32t26.5 23.5t36 11.5t47.5 -5.5l-1 -3q38 9 51 9h761q74 0 114 -56t18 -130l-274 -906 q-36 -119 -71.5 -153.5t-128.5 -34.5h-869q-27 0 -38 -15q-11 -16 -1 -43q24 -70 144 -70h923q29 0 56 15.5t35 41.5l300 987q7 22 5 57q38 -15 59 -43zM575 1056q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5 t-16.5 -22.5zM492 800q-4 -13 2 -22.5t20 -9.5h608q13 0 25.5 9.5t16.5 22.5l21 64q4 13 -2 22.5t-20 9.5h-608q-13 0 -25.5 -9.5t-16.5 -22.5z" />
+<glyph unicode="&#xf02e;" horiz-adv-x="1280" d="M1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf02f;" horiz-adv-x="1664" d="M384 0h896v256h-896v-256zM384 640h896v384h-160q-40 0 -68 28t-28 68v160h-640v-640zM1536 576q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 576v-416q0 -13 -9.5 -22.5t-22.5 -9.5h-224v-160q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68 v160h-224q-13 0 -22.5 9.5t-9.5 22.5v416q0 79 56.5 135.5t135.5 56.5h64v544q0 40 28 68t68 28h672q40 0 88 -20t76 -48l152 -152q28 -28 48 -76t20 -88v-256h64q79 0 135.5 -56.5t56.5 -135.5z" />
+<glyph unicode="&#xf030;" horiz-adv-x="1920" d="M960 864q119 0 203.5 -84.5t84.5 -203.5t-84.5 -203.5t-203.5 -84.5t-203.5 84.5t-84.5 203.5t84.5 203.5t203.5 84.5zM1664 1280q106 0 181 -75t75 -181v-896q0 -106 -75 -181t-181 -75h-1408q-106 0 -181 75t-75 181v896q0 106 75 181t181 75h224l51 136 q19 49 69.5 84.5t103.5 35.5h512q53 0 103.5 -35.5t69.5 -84.5l51 -136h224zM960 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf031;" horiz-adv-x="1664" d="M725 977l-170 -450q33 0 136.5 -2t160.5 -2q19 0 57 2q-87 253 -184 452zM0 -128l2 79q23 7 56 12.5t57 10.5t49.5 14.5t44.5 29t31 50.5l237 616l280 724h75h53q8 -14 11 -21l205 -480q33 -78 106 -257.5t114 -274.5q15 -34 58 -144.5t72 -168.5q20 -45 35 -57 q19 -15 88 -29.5t84 -20.5q6 -38 6 -57q0 -4 -0.5 -13t-0.5 -13q-63 0 -190 8t-191 8q-76 0 -215 -7t-178 -8q0 43 4 78l131 28q1 0 12.5 2.5t15.5 3.5t14.5 4.5t15 6.5t11 8t9 11t2.5 14q0 16 -31 96.5t-72 177.5t-42 100l-450 2q-26 -58 -76.5 -195.5t-50.5 -162.5 q0 -22 14 -37.5t43.5 -24.5t48.5 -13.5t57 -8.5t41 -4q1 -19 1 -58q0 -9 -2 -27q-58 0 -174.5 10t-174.5 10q-8 0 -26.5 -4t-21.5 -4q-80 -14 -188 -14z" />
+<glyph unicode="&#xf032;" horiz-adv-x="1408" d="M555 15q74 -32 140 -32q376 0 376 335q0 114 -41 180q-27 44 -61.5 74t-67.5 46.5t-80.5 25t-84 10.5t-94.5 2q-73 0 -101 -10q0 -53 -0.5 -159t-0.5 -158q0 -8 -1 -67.5t-0.5 -96.5t4.5 -83.5t12 -66.5zM541 761q42 -7 109 -7q82 0 143 13t110 44.5t74.5 89.5t25.5 142 q0 70 -29 122.5t-79 82t-108 43.5t-124 14q-50 0 -130 -13q0 -50 4 -151t4 -152q0 -27 -0.5 -80t-0.5 -79q0 -46 1 -69zM0 -128l2 94q15 4 85 16t106 27q7 12 12.5 27t8.5 33.5t5.5 32.5t3 37.5t0.5 34v35.5v30q0 982 -22 1025q-4 8 -22 14.5t-44.5 11t-49.5 7t-48.5 4.5 t-30.5 3l-4 83q98 2 340 11.5t373 9.5q23 0 68.5 -0.5t67.5 -0.5q70 0 136.5 -13t128.5 -42t108 -71t74 -104.5t28 -137.5q0 -52 -16.5 -95.5t-39 -72t-64.5 -57.5t-73 -45t-84 -40q154 -35 256.5 -134t102.5 -248q0 -100 -35 -179.5t-93.5 -130.5t-138 -85.5t-163.5 -48.5 t-176 -14q-44 0 -132 3t-132 3q-106 0 -307 -11t-231 -12z" />
+<glyph unicode="&#xf033;" horiz-adv-x="1024" d="M0 -126l17 85q6 2 81.5 21.5t111.5 37.5q28 35 41 101q1 7 62 289t114 543.5t52 296.5v25q-24 13 -54.5 18.5t-69.5 8t-58 5.5l19 103q33 -2 120 -6.5t149.5 -7t120.5 -2.5q48 0 98.5 2.5t121 7t98.5 6.5q-5 -39 -19 -89q-30 -10 -101.5 -28.5t-108.5 -33.5 q-8 -19 -14 -42.5t-9 -40t-7.5 -45.5t-6.5 -42q-27 -148 -87.5 -419.5t-77.5 -355.5q-2 -9 -13 -58t-20 -90t-16 -83.5t-6 -57.5l1 -18q17 -4 185 -31q-3 -44 -16 -99q-11 0 -32.5 -1.5t-32.5 -1.5q-29 0 -87 10t-86 10q-138 2 -206 2q-51 0 -143 -9t-121 -11z" />
+<glyph unicode="&#xf034;" horiz-adv-x="1792" d="M1744 128q33 0 42 -18.5t-11 -44.5l-126 -162q-20 -26 -49 -26t-49 26l-126 162q-20 26 -11 44.5t42 18.5h80v1024h-80q-33 0 -42 18.5t11 44.5l126 162q20 26 49 26t49 -26l126 -162q20 -26 11 -44.5t-42 -18.5h-80v-1024h80zM81 1407l54 -27q12 -5 211 -5q44 0 132 2 t132 2q36 0 107.5 -0.5t107.5 -0.5h293q6 0 21 -0.5t20.5 0t16 3t17.5 9t15 17.5l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 48t-14.5 73.5t-7.5 35.5q-6 8 -12 12.5t-15.5 6t-13 2.5t-18 0.5t-16.5 -0.5 q-17 0 -66.5 0.5t-74.5 0.5t-64 -2t-71 -6q-9 -81 -8 -136q0 -94 2 -388t2 -455q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q19 42 19 383q0 101 -3 303t-3 303v117q0 2 0.5 15.5t0.5 25t-1 25.5t-3 24t-5 14q-11 12 -162 12q-33 0 -93 -12t-80 -26q-19 -13 -34 -72.5t-31.5 -111t-42.5 -53.5q-42 26 -56 44v383z" />
+<glyph unicode="&#xf035;" d="M81 1407l54 -27q12 -5 211 -5q44 0 132 2t132 2q70 0 246.5 1t304.5 0.5t247 -4.5q33 -1 56 31l42 1q4 0 14 -0.5t14 -0.5q2 -112 2 -336q0 -80 -5 -109q-39 -14 -68 -18q-25 44 -54 128q-3 9 -11 47.5t-15 73.5t-7 36q-10 13 -27 19q-5 2 -66 2q-30 0 -93 1t-103 1 t-94 -2t-96 -7q-9 -81 -8 -136l1 -152v52q0 -55 1 -154t1.5 -180t0.5 -153q0 -16 -2.5 -71.5t0 -91.5t12.5 -69q40 -21 124 -42.5t120 -37.5q5 -40 5 -50q0 -14 -3 -29l-34 -1q-76 -2 -218 8t-207 10q-50 0 -151 -9t-152 -9q-3 51 -3 52v9q17 27 61.5 43t98.5 29t78 27 q7 16 11.5 74t6 145.5t1.5 155t-0.5 153.5t-0.5 89q0 7 -2.5 21.5t-2.5 22.5q0 7 0.5 44t1 73t0 76.5t-3 67.5t-6.5 32q-11 12 -162 12q-41 0 -163 -13.5t-138 -24.5q-19 -12 -34 -71.5t-31.5 -111.5t-42.5 -54q-42 26 -56 44v383zM1310 125q12 0 42 -19.5t57.5 -41.5 t59.5 -49t36 -30q26 -21 26 -49t-26 -49q-4 -3 -36 -30t-59.5 -49t-57.5 -41.5t-42 -19.5q-13 0 -20.5 10.5t-10 28.5t-2.5 33.5t1.5 33t1.5 19.5h-1024q0 -2 1.5 -19.5t1.5 -33t-2.5 -33.5t-10 -28.5t-20.5 -10.5q-12 0 -42 19.5t-57.5 41.5t-59.5 49t-36 30q-26 21 -26 49 t26 49q4 3 36 30t59.5 49t57.5 41.5t42 19.5q13 0 20.5 -10.5t10 -28.5t2.5 -33.5t-1.5 -33t-1.5 -19.5h1024q0 2 -1.5 19.5t-1.5 33t2.5 33.5t10 28.5t20.5 10.5z" />
+<glyph unicode="&#xf036;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf037;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1408 576v-128q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h896q26 0 45 -19t19 -45zM1664 960v-128q0 -26 -19 -45t-45 -19 h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1280 1344v-128q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h640q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf038;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1280q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1536q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1536q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1152q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf039;" horiz-adv-x="1792" d="M1792 192v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 576v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 960v-128q0 -26 -19 -45 t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-128q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf03a;" horiz-adv-x="1792" d="M256 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM256 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5 t9.5 -22.5zM256 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344 q13 0 22.5 -9.5t9.5 -22.5zM256 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v192 q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03b;" horiz-adv-x="1792" d="M384 992v-576q0 -13 -9.5 -22.5t-22.5 -9.5q-14 0 -23 9l-288 288q-9 9 -9 23t9 23l288 288q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03c;" horiz-adv-x="1792" d="M352 704q0 -14 -9 -23l-288 -288q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v576q0 13 9.5 22.5t22.5 9.5q14 0 23 -9l288 -288q9 -9 9 -23zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5 t9.5 -22.5zM1792 608v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088q13 0 22.5 -9.5t9.5 -22.5zM1792 992v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1088q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1088 q13 0 22.5 -9.5t9.5 -22.5zM1792 1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1728q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1728q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf03d;" horiz-adv-x="1792" d="M1792 1184v-1088q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-403 403v-166q0 -119 -84.5 -203.5t-203.5 -84.5h-704q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h704q119 0 203.5 -84.5t84.5 -203.5v-165l403 402q18 19 45 19q12 0 25 -5 q39 -17 39 -59z" />
+<glyph unicode="&#xf03e;" horiz-adv-x="1920" d="M640 960q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 576v-448h-1408v192l320 320l160 -160l512 512zM1760 1280h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-1216q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5v1216 q0 13 -9.5 22.5t-22.5 9.5zM1920 1248v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf040;" d="M363 0l91 91l-235 235l-91 -91v-107h128v-128h107zM886 928q0 22 -22 22q-10 0 -17 -7l-542 -542q-7 -7 -7 -17q0 -22 22 -22q10 0 17 7l542 542q7 7 7 17zM832 1120l416 -416l-832 -832h-416v416zM1515 1024q0 -53 -37 -90l-166 -166l-416 416l166 165q36 38 90 38 q53 0 91 -38l235 -234q37 -39 37 -91z" />
+<glyph unicode="&#xf041;" horiz-adv-x="1024" d="M768 896q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1024 896q0 -109 -33 -179l-364 -774q-16 -33 -47.5 -52t-67.5 -19t-67.5 19t-46.5 52l-365 774q-33 70 -33 179q0 212 150 362t362 150t362 -150t150 -362z" />
+<glyph unicode="&#xf042;" d="M768 96v1088q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf043;" horiz-adv-x="1024" d="M512 384q0 36 -20 69q-1 1 -15.5 22.5t-25.5 38t-25 44t-21 50.5q-4 16 -21 16t-21 -16q-7 -23 -21 -50.5t-25 -44t-25.5 -38t-15.5 -22.5q-20 -33 -20 -69q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 512q0 -212 -150 -362t-362 -150t-362 150t-150 362 q0 145 81 275q6 9 62.5 90.5t101 151t99.5 178t83 201.5q9 30 34 47t51 17t51.5 -17t33.5 -47q28 -93 83 -201.5t99.5 -178t101 -151t62.5 -90.5q81 -127 81 -275z" />
+<glyph unicode="&#xf044;" horiz-adv-x="1792" d="M888 352l116 116l-152 152l-116 -116v-56h96v-96h56zM1328 1072q-16 16 -33 -1l-350 -350q-17 -17 -1 -33t33 1l350 350q17 17 1 33zM1408 478v-190q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-14 -14 -32 -8q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v126q0 13 9 22l64 64q15 15 35 7t20 -29zM1312 1216l288 -288l-672 -672h-288v288zM1756 1084l-92 -92 l-288 288l92 92q28 28 68 28t68 -28l152 -152q28 -28 28 -68t-28 -68z" />
+<glyph unicode="&#xf045;" horiz-adv-x="1664" d="M1408 547v-259q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h255v0q13 0 22.5 -9.5t9.5 -22.5q0 -27 -26 -32q-77 -26 -133 -60q-10 -4 -16 -4h-112q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832 q66 0 113 47t47 113v214q0 19 18 29q28 13 54 37q16 16 35 8q21 -9 21 -29zM1645 1043l-384 -384q-18 -19 -45 -19q-12 0 -25 5q-39 17 -39 59v192h-160q-323 0 -438 -131q-119 -137 -74 -473q3 -23 -20 -34q-8 -2 -12 -2q-16 0 -26 13q-10 14 -21 31t-39.5 68.5t-49.5 99.5 t-38.5 114t-17.5 122q0 49 3.5 91t14 90t28 88t47 81.5t68.5 74t94.5 61.5t124.5 48.5t159.5 30.5t196.5 11h160v192q0 42 39 59q13 5 25 5q26 0 45 -19l384 -384q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf046;" horiz-adv-x="1664" d="M1408 606v-318q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q63 0 117 -25q15 -7 18 -23q3 -17 -9 -29l-49 -49q-10 -10 -23 -10q-3 0 -9 2q-23 6 -45 6h-832q-66 0 -113 -47t-47 -113v-832 q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v254q0 13 9 22l64 64q10 10 23 10q6 0 12 -3q20 -8 20 -29zM1639 1095l-814 -814q-24 -24 -57 -24t-57 24l-430 430q-24 24 -24 57t24 57l110 110q24 24 57 24t57 -24l263 -263l647 647q24 24 57 24t57 -24l110 -110 q24 -24 24 -57t-24 -57z" />
+<glyph unicode="&#xf047;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-384v-384h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v384h-384v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45 t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h384v384h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45t-19 -45t-45 -19h-128v-384h384v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf048;" horiz-adv-x="1024" d="M979 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19z" />
+<glyph unicode="&#xf049;" horiz-adv-x="1792" d="M1747 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-9 9 -13 19v-678q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-678q4 11 13 19l710 710 q19 19 32 13t13 -32v-710q4 11 13 19z" />
+<glyph unicode="&#xf04a;" horiz-adv-x="1664" d="M1619 1395q19 19 32 13t13 -32v-1472q0 -26 -13 -32t-32 13l-710 710q-8 9 -13 19v-710q0 -26 -13 -32t-32 13l-710 710q-19 19 -19 45t19 45l710 710q19 19 32 13t13 -32v-710q5 11 13 19z" />
+<glyph unicode="&#xf04b;" horiz-adv-x="1408" d="M1384 609l-1328 -738q-23 -13 -39.5 -3t-16.5 36v1472q0 26 16.5 36t39.5 -3l1328 -738q23 -13 23 -31t-23 -31z" />
+<glyph unicode="&#xf04c;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45zM640 1344v-1408q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04d;" d="M1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf04e;" horiz-adv-x="1664" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q19 -19 19 -45t-19 -45l-710 -710q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf050;" horiz-adv-x="1792" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v710q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19l-710 -710 q-19 -19 -32 -13t-13 32v710q-5 -10 -13 -19z" />
+<glyph unicode="&#xf051;" horiz-adv-x="1024" d="M45 -115q-19 -19 -32 -13t-13 32v1472q0 26 13 32t32 -13l710 -710q8 -8 13 -19v678q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-1408q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v678q-5 -10 -13 -19z" />
+<glyph unicode="&#xf052;" horiz-adv-x="1538" d="M14 557l710 710q19 19 45 19t45 -19l710 -710q19 -19 13 -32t-32 -13h-1472q-26 0 -32 13t13 32zM1473 0h-1408q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1408q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19z" />
+<glyph unicode="&#xf053;" horiz-adv-x="1280" d="M1171 1235l-531 -531l531 -531q19 -19 19 -45t-19 -45l-166 -166q-19 -19 -45 -19t-45 19l-742 742q-19 19 -19 45t19 45l742 742q19 19 45 19t45 -19l166 -166q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf054;" horiz-adv-x="1280" d="M1107 659l-742 -742q-19 -19 -45 -19t-45 19l-166 166q-19 19 -19 45t19 45l531 531l-531 531q-19 19 -19 45t19 45l166 166q19 19 45 19t45 -19l742 -742q19 -19 19 -45t-19 -45z" />
+<glyph unicode="&#xf055;" d="M1216 576v128q0 26 -19 45t-45 19h-256v256q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-256h-256q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h256v-256q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v256h256q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5 t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf056;" d="M1216 576v128q0 26 -19 45t-45 19h-768q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h768q26 0 45 19t19 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf057;" d="M1149 414q0 26 -19 45l-181 181l181 181q19 19 19 45q0 27 -19 46l-90 90q-19 19 -46 19q-26 0 -45 -19l-181 -181l-181 181q-19 19 -45 19q-27 0 -46 -19l-90 -90q-19 -19 -19 -46q0 -26 19 -45l181 -181l-181 -181q-19 -19 -19 -45q0 -27 19 -46l90 -90q19 -19 46 -19 q26 0 45 19l181 181l181 -181q19 -19 45 -19q27 0 46 19l90 90q19 19 19 46zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf058;" d="M1284 802q0 28 -18 46l-91 90q-19 19 -45 19t-45 -19l-408 -407l-226 226q-19 19 -45 19t-45 -19l-91 -90q-18 -18 -18 -46q0 -27 18 -45l362 -362q19 -19 45 -19q27 0 46 19l543 543q18 18 18 45zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf059;" d="M896 160v192q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h192q14 0 23 9t9 23zM1152 832q0 88 -55.5 163t-138.5 116t-170 41q-243 0 -371 -213q-15 -24 8 -42l132 -100q7 -6 19 -6q16 0 25 12q53 68 86 92q34 24 86 24q48 0 85.5 -26t37.5 -59 q0 -38 -20 -61t-68 -45q-63 -28 -115.5 -86.5t-52.5 -125.5v-36q0 -14 9 -23t23 -9h192q14 0 23 9t9 23q0 19 21.5 49.5t54.5 49.5q32 18 49 28.5t46 35t44.5 48t28 60.5t12.5 81zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05a;" d="M1024 160v160q0 14 -9 23t-23 9h-96v512q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h96v-320h-96q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23t23 -9h448q14 0 23 9t9 23zM896 1056v160q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-160q0 -14 9 -23 t23 -9h192q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05b;" d="M1197 512h-109q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h109q-32 108 -112.5 188.5t-188.5 112.5v-109q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v109q-108 -32 -188.5 -112.5t-112.5 -188.5h109q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-109 q32 -108 112.5 -188.5t188.5 -112.5v109q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-109q108 32 188.5 112.5t112.5 188.5zM1536 704v-128q0 -26 -19 -45t-45 -19h-143q-37 -161 -154.5 -278.5t-278.5 -154.5v-143q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v143 q-161 37 -278.5 154.5t-154.5 278.5h-143q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h143q37 161 154.5 278.5t278.5 154.5v143q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-143q161 -37 278.5 -154.5t154.5 -278.5h143q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf05c;" d="M1097 457l-146 -146q-10 -10 -23 -10t-23 10l-137 137l-137 -137q-10 -10 -23 -10t-23 10l-146 146q-10 10 -10 23t10 23l137 137l-137 137q-10 10 -10 23t10 23l146 146q10 10 23 10t23 -10l137 -137l137 137q10 10 23 10t23 -10l146 -146q10 -10 10 -23t-10 -23 l-137 -137l137 -137q10 -10 10 -23t-10 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5 t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05d;" d="M1171 723l-422 -422q-19 -19 -45 -19t-45 19l-294 294q-19 19 -19 45t19 45l102 102q19 19 45 19t45 -19l147 -147l275 275q19 19 45 19t45 -19l102 -102q19 -19 19 -45t-19 -45zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198 t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf05e;" d="M1312 643q0 161 -87 295l-754 -753q137 -89 297 -89q111 0 211.5 43.5t173.5 116.5t116 174.5t43 212.5zM313 344l755 754q-135 91 -300 91q-148 0 -273 -73t-198 -199t-73 -274q0 -162 89 -299zM1536 643q0 -157 -61 -300t-163.5 -246t-245 -164t-298.5 -61t-298.5 61 t-245 164t-163.5 246t-61 300t61 299.5t163.5 245.5t245 164t298.5 61t298.5 -61t245 -164t163.5 -245.5t61 -299.5z" />
+<glyph unicode="&#xf060;" d="M1536 640v-128q0 -53 -32.5 -90.5t-84.5 -37.5h-704l293 -294q38 -36 38 -90t-38 -90l-75 -76q-37 -37 -90 -37q-52 0 -91 37l-651 652q-37 37 -37 90q0 52 37 91l651 650q38 38 91 38q52 0 90 -38l75 -74q38 -38 38 -91t-38 -91l-293 -293h704q52 0 84.5 -37.5 t32.5 -90.5z" />
+<glyph unicode="&#xf061;" d="M1472 576q0 -54 -37 -91l-651 -651q-39 -37 -91 -37q-51 0 -90 37l-75 75q-38 38 -38 91t38 91l293 293h-704q-52 0 -84.5 37.5t-32.5 90.5v128q0 53 32.5 90.5t84.5 37.5h704l-293 294q-38 36 -38 90t38 90l75 75q38 38 90 38q53 0 91 -38l651 -651q37 -35 37 -90z" />
+<glyph unicode="&#xf062;" horiz-adv-x="1664" d="M1611 565q0 -51 -37 -90l-75 -75q-38 -38 -91 -38q-54 0 -90 38l-294 293v-704q0 -52 -37.5 -84.5t-90.5 -32.5h-128q-53 0 -90.5 32.5t-37.5 84.5v704l-294 -293q-36 -38 -90 -38t-90 38l-75 75q-38 38 -38 90q0 53 38 91l651 651q35 37 90 37q54 0 91 -37l651 -651 q37 -39 37 -91z" />
+<glyph unicode="&#xf063;" horiz-adv-x="1664" d="M1611 704q0 -53 -37 -90l-651 -652q-39 -37 -91 -37q-53 0 -90 37l-651 652q-38 36 -38 90q0 53 38 91l74 75q39 37 91 37q53 0 90 -37l294 -294v704q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-704l294 294q37 37 90 37q52 0 91 -37l75 -75q37 -39 37 -91z" />
+<glyph unicode="&#xf064;" horiz-adv-x="1792" d="M1792 896q0 -26 -19 -45l-512 -512q-19 -19 -45 -19t-45 19t-19 45v256h-224q-98 0 -175.5 -6t-154 -21.5t-133 -42.5t-105.5 -69.5t-80 -101t-48.5 -138.5t-17.5 -181q0 -55 5 -123q0 -6 2.5 -23.5t2.5 -26.5q0 -15 -8.5 -25t-23.5 -10q-16 0 -28 17q-7 9 -13 22 t-13.5 30t-10.5 24q-127 285 -127 451q0 199 53 333q162 403 875 403h224v256q0 26 19 45t45 19t45 -19l512 -512q19 -19 19 -45z" />
+<glyph unicode="&#xf065;" d="M755 480q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23zM1536 1344v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332 q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf066;" d="M768 576v-448q0 -26 -19 -45t-45 -19t-45 19l-144 144l-332 -332q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l332 332l-144 144q-19 19 -19 45t19 45t45 19h448q26 0 45 -19t19 -45zM1523 1248q0 -13 -10 -23l-332 -332l144 -144q19 -19 19 -45t-19 -45 t-45 -19h-448q-26 0 -45 19t-19 45v448q0 26 19 45t45 19t45 -19l144 -144l332 332q10 10 23 10t23 -10l114 -114q10 -10 10 -23z" />
+<glyph unicode="&#xf067;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-416v-416q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v416h-416q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h416v416q0 40 28 68t68 28h192q40 0 68 -28t28 -68v-416h416q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf068;" horiz-adv-x="1408" d="M1408 800v-192q0 -40 -28 -68t-68 -28h-1216q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h1216q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf069;" horiz-adv-x="1664" d="M1482 486q46 -26 59.5 -77.5t-12.5 -97.5l-64 -110q-26 -46 -77.5 -59.5t-97.5 12.5l-266 153v-307q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v307l-266 -153q-46 -26 -97.5 -12.5t-77.5 59.5l-64 110q-26 46 -12.5 97.5t59.5 77.5l266 154l-266 154 q-46 26 -59.5 77.5t12.5 97.5l64 110q26 46 77.5 59.5t97.5 -12.5l266 -153v307q0 52 38 90t90 38h128q52 0 90 -38t38 -90v-307l266 153q46 26 97.5 12.5t77.5 -59.5l64 -110q26 -46 12.5 -97.5t-59.5 -77.5l-266 -154z" />
+<glyph unicode="&#xf06a;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM896 161v190q0 14 -9 23.5t-22 9.5h-192q-13 0 -23 -10t-10 -23v-190q0 -13 10 -23t23 -10h192 q13 0 22 9.5t9 23.5zM894 505l18 621q0 12 -10 18q-10 8 -24 8h-220q-14 0 -24 -8q-10 -6 -10 -18l17 -621q0 -10 10 -17.5t24 -7.5h185q14 0 23.5 7.5t10.5 17.5z" />
+<glyph unicode="&#xf06b;" d="M928 180v56v468v192h-320v-192v-468v-56q0 -25 18 -38.5t46 -13.5h192q28 0 46 13.5t18 38.5zM472 1024h195l-126 161q-26 31 -69 31q-40 0 -68 -28t-28 -68t28 -68t68 -28zM1160 1120q0 40 -28 68t-68 28q-43 0 -69 -31l-125 -161h194q40 0 68 28t28 68zM1536 864v-320 q0 -14 -9 -23t-23 -9h-96v-416q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v416h-96q-14 0 -23 9t-9 23v320q0 14 9 23t23 9h440q-93 0 -158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5q107 0 168 -77l128 -165l128 165q61 77 168 77q93 0 158.5 -65.5t65.5 -158.5 t-65.5 -158.5t-158.5 -65.5h440q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf06c;" horiz-adv-x="1792" d="M1280 832q0 26 -19 45t-45 19q-172 0 -318 -49.5t-259.5 -134t-235.5 -219.5q-19 -21 -19 -45q0 -26 19 -45t45 -19q24 0 45 19q27 24 74 71t67 66q137 124 268.5 176t313.5 52q26 0 45 19t19 45zM1792 1030q0 -95 -20 -193q-46 -224 -184.5 -383t-357.5 -268 q-214 -108 -438 -108q-148 0 -286 47q-15 5 -88 42t-96 37q-16 0 -39.5 -32t-45 -70t-52.5 -70t-60 -32q-30 0 -51 11t-31 24t-27 42q-2 4 -6 11t-5.5 10t-3 9.5t-1.5 13.5q0 35 31 73.5t68 65.5t68 56t31 48q0 4 -14 38t-16 44q-9 51 -9 104q0 115 43.5 220t119 184.5 t170.5 139t204 95.5q55 18 145 25.5t179.5 9t178.5 6t163.5 24t113.5 56.5l29.5 29.5t29.5 28t27 20t36.5 16t43.5 4.5q39 0 70.5 -46t47.5 -112t24 -124t8 -96z" />
+<glyph unicode="&#xf06d;" horiz-adv-x="1408" d="M1408 -160v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-1344q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h1344q13 0 22.5 -9.5t9.5 -22.5zM1152 896q0 -78 -24.5 -144t-64 -112.5t-87.5 -88t-96 -77.5t-87.5 -72t-64 -81.5t-24.5 -96.5q0 -96 67 -224l-4 1l1 -1 q-90 41 -160 83t-138.5 100t-113.5 122.5t-72.5 150.5t-27.5 184q0 78 24.5 144t64 112.5t87.5 88t96 77.5t87.5 72t64 81.5t24.5 96.5q0 94 -66 224l3 -1l-1 1q90 -41 160 -83t138.5 -100t113.5 -122.5t72.5 -150.5t27.5 -184z" />
+<glyph unicode="&#xf06e;" horiz-adv-x="1792" d="M1664 576q-152 236 -381 353q61 -104 61 -225q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 121 61 225q-229 -117 -381 -353q133 -205 333.5 -326.5t434.5 -121.5t434.5 121.5t333.5 326.5zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5 t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1792 576q0 -34 -20 -69q-140 -230 -376.5 -368.5t-499.5 -138.5t-499.5 139t-376.5 368q-20 35 -20 69t20 69q140 229 376.5 368t499.5 139t499.5 -139t376.5 -368q20 -35 20 -69z" />
+<glyph unicode="&#xf070;" horiz-adv-x="1792" d="M555 201l78 141q-87 63 -136 159t-49 203q0 121 61 225q-229 -117 -381 -353q167 -258 427 -375zM944 960q0 20 -14 34t-34 14q-125 0 -214.5 -89.5t-89.5 -214.5q0 -20 14 -34t34 -14t34 14t14 34q0 86 61 147t147 61q20 0 34 14t14 34zM1307 1151q0 -7 -1 -9 q-105 -188 -315 -566t-316 -567l-49 -89q-10 -16 -28 -16q-12 0 -134 70q-16 10 -16 28q0 12 44 87q-143 65 -263.5 173t-208.5 245q-20 31 -20 69t20 69q153 235 380 371t496 136q89 0 180 -17l54 97q10 16 28 16q5 0 18 -6t31 -15.5t33 -18.5t31.5 -18.5t19.5 -11.5 q16 -10 16 -27zM1344 704q0 -139 -79 -253.5t-209 -164.5l280 502q8 -45 8 -84zM1792 576q0 -35 -20 -69q-39 -64 -109 -145q-150 -172 -347.5 -267t-419.5 -95l74 132q212 18 392.5 137t301.5 307q-115 179 -282 294l63 112q95 -64 182.5 -153t144.5 -184q20 -34 20 -69z " />
+<glyph unicode="&#xf071;" horiz-adv-x="1792" d="M1024 161v190q0 14 -9.5 23.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -23.5v-190q0 -14 9.5 -23.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 23.5zM1022 535l18 459q0 12 -10 19q-13 11 -24 11h-220q-11 0 -24 -11q-10 -7 -10 -21l17 -457q0 -10 10 -16.5t24 -6.5h185 q14 0 23.5 6.5t10.5 16.5zM1008 1469l768 -1408q35 -63 -2 -126q-17 -29 -46.5 -46t-63.5 -17h-1536q-34 0 -63.5 17t-46.5 46q-37 63 -2 126l768 1408q17 31 47 49t65 18t65 -18t47 -49z" />
+<glyph unicode="&#xf072;" horiz-adv-x="1408" d="M1376 1376q44 -52 12 -148t-108 -172l-161 -161l160 -696q5 -19 -12 -33l-128 -96q-7 -6 -19 -6q-4 0 -7 1q-15 3 -21 16l-279 508l-259 -259l53 -194q5 -17 -8 -31l-96 -96q-9 -9 -23 -9h-2q-15 2 -24 13l-189 252l-252 189q-11 7 -13 23q-1 13 9 25l96 97q9 9 23 9 q6 0 8 -1l194 -53l259 259l-508 279q-14 8 -17 24q-2 16 9 27l128 128q14 13 30 8l665 -159l160 160q76 76 172 108t148 -12z" />
+<glyph unicode="&#xf073;" horiz-adv-x="1664" d="M128 -128h288v288h-288v-288zM480 -128h320v288h-320v-288zM128 224h288v320h-288v-320zM480 224h320v320h-320v-320zM128 608h288v288h-288v-288zM864 -128h320v288h-320v-288zM480 608h320v288h-320v-288zM1248 -128h288v288h-288v-288zM864 224h320v320h-320v-320z M512 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1248 224h288v320h-288v-320zM864 608h320v288h-320v-288zM1248 608h288v288h-288v-288zM1280 1088v288q0 13 -9.5 22.5t-22.5 9.5h-64 q-13 0 -22.5 -9.5t-9.5 -22.5v-288q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47 h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf074;" horiz-adv-x="1792" d="M666 1055q-60 -92 -137 -273q-22 45 -37 72.5t-40.5 63.5t-51 56.5t-63 35t-81.5 14.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q250 0 410 -225zM1792 256q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192q-32 0 -85 -0.5t-81 -1t-73 1 t-71 5t-64 10.5t-63 18.5t-58 28.5t-59 40t-55 53.5t-56 69.5q59 93 136 273q22 -45 37 -72.5t40.5 -63.5t51 -56.5t63 -35t81.5 -14.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1792 1152q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5 v192h-256q-48 0 -87 -15t-69 -45t-51 -61.5t-45 -77.5q-32 -62 -78 -171q-29 -66 -49.5 -111t-54 -105t-64 -100t-74 -83t-90 -68.5t-106.5 -42t-128 -16.5h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224q48 0 87 15t69 45t51 61.5t45 77.5q32 62 78 171q29 66 49.5 111 t54 105t64 100t74 83t90 68.5t106.5 42t128 16.5h256v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf075;" horiz-adv-x="1792" d="M1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22q-17 -2 -30.5 9t-17.5 29v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281 q0 130 71 248.5t191 204.5t286 136.5t348 50.5q244 0 450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf076;" d="M1536 704v-128q0 -201 -98.5 -362t-274 -251.5t-395.5 -90.5t-395.5 90.5t-274 251.5t-98.5 362v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-128q0 -52 23.5 -90t53.5 -57t71 -30t64 -13t44 -2t44 2t64 13t71 30t53.5 57t23.5 90v128q0 26 19 45t45 19h384 q26 0 45 -19t19 -45zM512 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45zM1536 1344v-384q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h384q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf077;" horiz-adv-x="1792" d="M1683 205l-166 -165q-19 -19 -45 -19t-45 19l-531 531l-531 -531q-19 -19 -45 -19t-45 19l-166 165q-19 19 -19 45.5t19 45.5l742 741q19 19 45 19t45 -19l742 -741q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf078;" horiz-adv-x="1792" d="M1683 728l-742 -741q-19 -19 -45 -19t-45 19l-742 741q-19 19 -19 45.5t19 45.5l166 165q19 19 45 19t45 -19l531 -531l531 531q19 19 45 19t45 -19l166 -165q19 -19 19 -45.5t-19 -45.5z" />
+<glyph unicode="&#xf079;" horiz-adv-x="1920" d="M1280 32q0 -13 -9.5 -22.5t-22.5 -9.5h-960q-8 0 -13.5 2t-9 7t-5.5 8t-3 11.5t-1 11.5v13v11v160v416h-192q-26 0 -45 19t-19 45q0 24 15 41l320 384q19 22 49 22t49 -22l320 -384q15 -17 15 -41q0 -26 -19 -45t-45 -19h-192v-384h576q16 0 25 -11l160 -192q7 -11 7 -21 zM1920 448q0 -24 -15 -41l-320 -384q-20 -23 -49 -23t-49 23l-320 384q-15 17 -15 41q0 26 19 45t45 19h192v384h-576q-16 0 -25 12l-160 192q-7 9 -7 20q0 13 9.5 22.5t22.5 9.5h960q8 0 13.5 -2t9 -7t5.5 -8t3 -11.5t1 -11.5v-13v-11v-160v-416h192q26 0 45 -19t19 -45z " />
+<glyph unicode="&#xf07a;" horiz-adv-x="1664" d="M640 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1536 0q0 -52 -38 -90t-90 -38t-90 38t-38 90t38 90t90 38t90 -38t38 -90zM1664 1088v-512q0 -24 -16.5 -42.5t-40.5 -21.5l-1044 -122q13 -60 13 -70q0 -16 -24 -64h920q26 0 45 -19t19 -45 t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 11 8 31.5t16 36t21.5 40t15.5 29.5l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t19.5 -15.5t13 -24.5t8 -26t5.5 -29.5t4.5 -26h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf07b;" horiz-adv-x="1664" d="M1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07c;" horiz-adv-x="1920" d="M1879 584q0 -31 -31 -66l-336 -396q-43 -51 -120.5 -86.5t-143.5 -35.5h-1088q-34 0 -60.5 13t-26.5 43q0 31 31 66l336 396q43 51 120.5 86.5t143.5 35.5h1088q34 0 60.5 -13t26.5 -43zM1536 928v-160h-832q-94 0 -197 -47.5t-164 -119.5l-337 -396l-5 -6q0 4 -0.5 12.5 t-0.5 12.5v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf07d;" horiz-adv-x="768" d="M704 1216q0 -26 -19 -45t-45 -19h-128v-1024h128q26 0 45 -19t19 -45t-19 -45l-256 -256q-19 -19 -45 -19t-45 19l-256 256q-19 19 -19 45t19 45t45 19h128v1024h-128q-26 0 -45 19t-19 45t19 45l256 256q19 19 45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf07e;" horiz-adv-x="1792" d="M1792 640q0 -26 -19 -45l-256 -256q-19 -19 -45 -19t-45 19t-19 45v128h-1024v-128q0 -26 -19 -45t-45 -19t-45 19l-256 256q-19 19 -19 45t19 45l256 256q19 19 45 19t45 -19t19 -45v-128h1024v128q0 26 19 45t45 19t45 -19l256 -256q19 -19 19 -45z" />
+<glyph unicode="&#xf080;" horiz-adv-x="2048" d="M640 640v-512h-256v512h256zM1024 1152v-1024h-256v1024h256zM2048 0v-128h-2048v1536h128v-1408h1920zM1408 896v-768h-256v768h256zM1792 1280v-1152h-256v1152h256z" />
+<glyph unicode="&#xf081;" d="M1280 926q-56 -25 -121 -34q68 40 93 117q-65 -38 -134 -51q-61 66 -153 66q-87 0 -148.5 -61.5t-61.5 -148.5q0 -29 5 -48q-129 7 -242 65t-192 155q-29 -50 -29 -106q0 -114 91 -175q-47 1 -100 26v-2q0 -75 50 -133.5t123 -72.5q-29 -8 -51 -8q-13 0 -39 4 q21 -63 74.5 -104t121.5 -42q-116 -90 -261 -90q-26 0 -50 3q148 -94 322 -94q112 0 210 35.5t168 95t120.5 137t75 162t24.5 168.5q0 18 -1 27q63 45 105 109zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5 t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf082;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-188v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-532q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf083;" horiz-adv-x="1792" d="M928 704q0 14 -9 23t-23 9q-66 0 -113 -47t-47 -113q0 -14 9 -23t23 -9t23 9t9 23q0 40 28 68t68 28q14 0 23 9t9 23zM1152 574q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM128 0h1536v128h-1536v-128zM1280 574q0 159 -112.5 271.5 t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM256 1216h384v128h-384v-128zM128 1024h1536v118v138h-828l-64 -128h-644v-128zM1792 1280v-1280q0 -53 -37.5 -90.5t-90.5 -37.5h-1536q-53 0 -90.5 37.5t-37.5 90.5v1280 q0 53 37.5 90.5t90.5 37.5h1536q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf084;" horiz-adv-x="1792" d="M832 1024q0 80 -56 136t-136 56t-136 -56t-56 -136q0 -42 19 -83q-41 19 -83 19q-80 0 -136 -56t-56 -136t56 -136t136 -56t136 56t56 136q0 42 -19 83q41 -19 83 -19q80 0 136 56t56 136zM1683 320q0 -17 -49 -66t-66 -49q-9 0 -28.5 16t-36.5 33t-38.5 40t-24.5 26 l-96 -96l220 -220q28 -28 28 -68q0 -42 -39 -81t-81 -39q-40 0 -68 28l-671 671q-176 -131 -365 -131q-163 0 -265.5 102.5t-102.5 265.5q0 160 95 313t248 248t313 95q163 0 265.5 -102.5t102.5 -265.5q0 -189 -131 -365l355 -355l96 96q-3 3 -26 24.5t-40 38.5t-33 36.5 t-16 28.5q0 17 49 66t66 49q13 0 23 -10q6 -6 46 -44.5t82 -79.5t86.5 -86t73 -78t28.5 -41z" />
+<glyph unicode="&#xf085;" horiz-adv-x="1920" d="M896 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1664 128q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1152q0 52 -38 90t-90 38t-90 -38t-38 -90q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1280 731v-185q0 -10 -7 -19.5t-16 -10.5l-155 -24q-11 -35 -32 -76q34 -48 90 -115q7 -10 7 -20q0 -12 -7 -19q-23 -30 -82.5 -89.5t-78.5 -59.5q-11 0 -21 7l-115 90q-37 -19 -77 -31q-11 -108 -23 -155q-7 -24 -30 -24h-186q-11 0 -20 7.5t-10 17.5 l-23 153q-34 10 -75 31l-118 -89q-7 -7 -20 -7q-11 0 -21 8q-144 133 -144 160q0 9 7 19q10 14 41 53t47 61q-23 44 -35 82l-152 24q-10 1 -17 9.5t-7 19.5v185q0 10 7 19.5t16 10.5l155 24q11 35 32 76q-34 48 -90 115q-7 11 -7 20q0 12 7 20q22 30 82 89t79 59q11 0 21 -7 l115 -90q34 18 77 32q11 108 23 154q7 24 30 24h186q11 0 20 -7.5t10 -17.5l23 -153q34 -10 75 -31l118 89q8 7 20 7q11 0 21 -8q144 -133 144 -160q0 -9 -7 -19q-12 -16 -42 -54t-45 -60q23 -48 34 -82l152 -23q10 -2 17 -10.5t7 -19.5zM1920 198v-140q0 -16 -149 -31 q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20 t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31zM1920 1222v-140q0 -16 -149 -31q-12 -27 -30 -52q51 -113 51 -138q0 -4 -4 -7q-122 -71 -124 -71q-8 0 -46 47t-52 68 q-20 -2 -30 -2t-30 2q-14 -21 -52 -68t-46 -47q-2 0 -124 71q-4 3 -4 7q0 25 51 138q-18 25 -30 52q-149 15 -149 31v140q0 16 149 31q13 29 30 52q-51 113 -51 138q0 4 4 7q4 2 35 20t59 34t30 16q8 0 46 -46.5t52 -67.5q20 2 30 2t30 -2q51 71 92 112l6 2q4 0 124 -70 q4 -3 4 -7q0 -25 -51 -138q17 -23 30 -52q149 -15 149 -31z" />
+<glyph unicode="&#xf086;" horiz-adv-x="1792" d="M1408 768q0 -139 -94 -257t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224 q0 139 94 257t256.5 186.5t353.5 68.5t353.5 -68.5t256.5 -186.5t94 -257zM1792 512q0 -120 -71 -224.5t-195 -176.5q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7 q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230z" />
+<glyph unicode="&#xf087;" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 768q0 51 -39 89.5t-89 38.5h-352q0 58 48 159.5t48 160.5q0 98 -32 145t-128 47q-26 -26 -38 -85t-30.5 -125.5t-59.5 -109.5q-22 -23 -77 -91q-4 -5 -23 -30t-31.5 -41t-34.5 -42.5 t-40 -44t-38.5 -35.5t-40 -27t-35.5 -9h-32v-640h32q13 0 31.5 -3t33 -6.5t38 -11t35 -11.5t35.5 -12.5t29 -10.5q211 -73 342 -73h121q192 0 192 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5q32 1 53.5 47t21.5 81zM1536 769 q0 -89 -49 -163q9 -33 9 -69q0 -77 -38 -144q3 -21 3 -43q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5h-36h-93q-96 0 -189.5 22.5t-216.5 65.5q-116 40 -138 40h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h274q36 24 137 155q58 75 107 128 q24 25 35.5 85.5t30.5 126.5t62 108q39 37 90 37q84 0 151 -32.5t102 -101.5t35 -186q0 -93 -48 -192h176q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf088;" d="M256 1088q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 512q0 35 -21.5 81t-53.5 47q15 17 25 47.5t10 55.5q0 69 -53 119q18 32 18 69t-17.5 73.5t-47.5 52.5q5 30 5 56q0 85 -49 126t-136 41h-128q-131 0 -342 -73q-5 -2 -29 -10.5 t-35.5 -12.5t-35 -11.5t-38 -11t-33 -6.5t-31.5 -3h-32v-640h32q16 0 35.5 -9t40 -27t38.5 -35.5t40 -44t34.5 -42.5t31.5 -41t23 -30q55 -68 77 -91q41 -43 59.5 -109.5t30.5 -125.5t38 -85q96 0 128 47t32 145q0 59 -48 160.5t-48 159.5h352q50 0 89 38.5t39 89.5z M1536 511q0 -103 -76 -179t-180 -76h-176q48 -99 48 -192q0 -118 -35 -186q-35 -69 -102 -101.5t-151 -32.5q-51 0 -90 37q-34 33 -54 82t-25.5 90.5t-17.5 84.5t-31 64q-48 50 -107 127q-101 131 -137 155h-274q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5 h288q22 0 138 40q128 44 223 66t200 22h112q140 0 226.5 -79t85.5 -216v-5q60 -77 60 -178q0 -22 -3 -43q38 -67 38 -144q0 -36 -9 -69q49 -74 49 -163z" />
+<glyph unicode="&#xf089;" horiz-adv-x="896" d="M832 1504v-1339l-449 -236q-22 -12 -40 -12q-21 0 -31.5 14.5t-10.5 35.5q0 6 2 20l86 500l-364 354q-25 27 -25 48q0 37 56 46l502 73l225 455q19 41 49 41z" />
+<glyph unicode="&#xf08a;" horiz-adv-x="1792" d="M1664 940q0 81 -21.5 143t-55 98.5t-81.5 59.5t-94 31t-98 8t-112 -25.5t-110.5 -64t-86.5 -72t-60 -61.5q-18 -22 -49 -22t-49 22q-24 28 -60 61.5t-86.5 72t-110.5 64t-112 25.5t-98 -8t-94 -31t-81.5 -59.5t-55 -98.5t-21.5 -143q0 -168 187 -355l581 -560l580 559 q188 188 188 356zM1792 940q0 -221 -229 -450l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-10 8 -27.5 26t-55.5 65.5t-68 97.5t-53.5 121t-23.5 138q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5 q224 0 351 -124t127 -344z" />
+<glyph unicode="&#xf08b;" horiz-adv-x="1664" d="M640 96q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-119 0 -203.5 84.5t-84.5 203.5v704q0 119 84.5 203.5t203.5 84.5h320q13 0 22.5 -9.5t9.5 -22.5q0 -4 1 -20t0.5 -26.5t-3 -23.5t-10 -19.5t-20.5 -6.5h-320q-66 0 -113 -47t-47 -113v-704 q0 -66 47 -113t113 -47h288h11h13t11.5 -1t11.5 -3t8 -5.5t7 -9t2 -13.5zM1568 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45z" />
+<glyph unicode="&#xf08c;" d="M237 122h231v694h-231v-694zM483 1030q-1 52 -36 86t-93 34t-94.5 -34t-36.5 -86q0 -51 35.5 -85.5t92.5 -34.5h1q59 0 95 34.5t36 85.5zM1068 122h231v398q0 154 -73 233t-193 79q-136 0 -209 -117h2v101h-231q3 -66 0 -694h231v388q0 38 7 56q15 35 45 59.5t74 24.5 q116 0 116 -157v-371zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf08d;" horiz-adv-x="1152" d="M480 672v448q0 14 -9 23t-23 9t-23 -9t-9 -23v-448q0 -14 9 -23t23 -9t23 9t9 23zM1152 320q0 -26 -19 -45t-45 -19h-429l-51 -483q-2 -12 -10.5 -20.5t-20.5 -8.5h-1q-27 0 -32 27l-76 485h-404q-26 0 -45 19t-19 45q0 123 78.5 221.5t177.5 98.5v512q-52 0 -90 38 t-38 90t38 90t90 38h640q52 0 90 -38t38 -90t-38 -90t-90 -38v-512q99 0 177.5 -98.5t78.5 -221.5z" />
+<glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf092;" d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4 q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4 t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16 q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
+<glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
+<glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
+<glyph unicode="&#xf096;" horiz-adv-x="1408" d="M1120 1280h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v832q0 66 -47 113t-113 47zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf097;" horiz-adv-x="1280" d="M1152 1280h-1024v-1242l423 406l89 85l89 -85l423 -406v1242zM1164 1408q23 0 44 -9q33 -13 52.5 -41t19.5 -62v-1289q0 -34 -19.5 -62t-52.5 -41q-19 -8 -44 -8q-48 0 -83 32l-441 424l-441 -424q-36 -33 -83 -33q-23 0 -44 9q-33 13 -52.5 41t-19.5 62v1289 q0 34 19.5 62t52.5 41q21 9 44 9h1048z" />
+<glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
+<glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
+<glyph unicode="&#xf09b;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24 q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5 t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12 q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
+<glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
+<glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
+<glyph unicode="&#xf0a0;" d="M1040 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1296 320q0 -33 -23.5 -56.5t-56.5 -23.5t-56.5 23.5t-23.5 56.5t23.5 56.5t56.5 23.5t56.5 -23.5t23.5 -56.5zM1408 160v320q0 13 -9.5 22.5t-22.5 9.5 h-1216q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h1216q13 0 22.5 9.5t9.5 22.5zM178 640h1180l-157 482q-4 13 -16 21.5t-26 8.5h-782q-14 0 -26 -8.5t-16 -21.5zM1536 480v-320q0 -66 -47 -113t-113 -47h-1216q-66 0 -113 47t-47 113v320q0 25 16 75 l197 606q17 53 63 86t101 33h782q55 0 101 -33t63 -86l197 -606q16 -50 16 -75z" />
+<glyph unicode="&#xf0a1;" horiz-adv-x="1792" d="M1664 896q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5v-384q0 -52 -38 -90t-90 -38q-417 347 -812 380q-58 -19 -91 -66t-31 -100.5t40 -92.5q-20 -33 -23 -65.5t6 -58t33.5 -55t48 -50t61.5 -50.5q-29 -58 -111.5 -83t-168.5 -11.5t-132 55.5q-7 23 -29.5 87.5 t-32 94.5t-23 89t-15 101t3.5 98.5t22 110.5h-122q-66 0 -113 47t-47 113v192q0 66 47 113t113 47h480q435 0 896 384q52 0 90 -38t38 -90v-384zM1536 292v954q-394 -302 -768 -343v-270q377 -42 768 -341z" />
+<glyph unicode="&#xf0a2;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM246 128h1300q-266 300 -266 832q0 51 -24 105t-69 103t-121.5 80.5t-169.5 31.5t-169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -532 -266 -832z M1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5 t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0a3;" d="M1376 640l138 -135q30 -28 20 -70q-12 -41 -52 -51l-188 -48l53 -186q12 -41 -19 -70q-29 -31 -70 -19l-186 53l-48 -188q-10 -40 -51 -52q-12 -2 -19 -2q-31 0 -51 22l-135 138l-135 -138q-28 -30 -70 -20q-41 11 -51 52l-48 188l-186 -53q-41 -12 -70 19q-31 29 -19 70 l53 186l-188 48q-40 10 -52 51q-10 42 20 70l138 135l-138 135q-30 28 -20 70q12 41 52 51l188 48l-53 186q-12 41 19 70q29 31 70 19l186 -53l48 188q10 41 51 51q41 12 70 -19l135 -139l135 139q29 30 70 19q41 -10 51 -51l48 -188l186 53q41 12 70 -19q31 -29 19 -70 l-53 -186l188 -48q40 -10 52 -51q10 -42 -20 -70z" />
+<glyph unicode="&#xf0a4;" horiz-adv-x="1792" d="M256 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 768q0 51 -39 89.5t-89 38.5h-576q0 20 15 48.5t33 55t33 68t15 84.5q0 67 -44.5 97.5t-115.5 30.5q-24 0 -90 -139q-24 -44 -37 -65q-40 -64 -112 -145q-71 -81 -101 -106 q-69 -57 -140 -57h-32v-640h32q72 0 167 -32t193.5 -64t179.5 -32q189 0 189 167q0 26 -5 56q30 16 47.5 52.5t17.5 73.5t-18 69q53 50 53 119q0 25 -10 55.5t-25 47.5h331q52 0 90 38t38 90zM1792 769q0 -105 -75.5 -181t-180.5 -76h-169q-4 -62 -37 -119q3 -21 3 -43 q0 -101 -60 -178q1 -139 -85 -219.5t-227 -80.5q-133 0 -322 69q-164 59 -223 59h-288q-53 0 -90.5 37.5t-37.5 90.5v640q0 53 37.5 90.5t90.5 37.5h288q10 0 21.5 4.5t23.5 14t22.5 18t24 22.5t20.5 21.5t19 21.5t14 17q65 74 100 129q13 21 33 62t37 72t40.5 63t55 49.5 t69.5 17.5q125 0 206.5 -67t81.5 -189q0 -68 -22 -128h374q104 0 180 -76t76 -179z" />
+<glyph unicode="&#xf0a5;" horiz-adv-x="1792" d="M1376 128h32v640h-32q-35 0 -67.5 12t-62.5 37t-50 46t-49 54q-2 3 -3.5 4.5t-4 4.5t-4.5 5q-72 81 -112 145q-14 22 -38 68q-1 3 -10.5 22.5t-18.5 36t-20 35.5t-21.5 30.5t-18.5 11.5q-71 0 -115.5 -30.5t-44.5 -97.5q0 -43 15 -84.5t33 -68t33 -55t15 -48.5h-576 q-50 0 -89 -38.5t-39 -89.5q0 -52 38 -90t90 -38h331q-15 -17 -25 -47.5t-10 -55.5q0 -69 53 -119q-18 -32 -18 -69t17.5 -73.5t47.5 -52.5q-4 -24 -4 -56q0 -85 48.5 -126t135.5 -41q84 0 183 32t194 64t167 32zM1664 192q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45 t45 -19t45 19t19 45zM1792 768v-640q0 -53 -37.5 -90.5t-90.5 -37.5h-288q-59 0 -223 -59q-190 -69 -317 -69q-142 0 -230 77.5t-87 217.5l1 5q-61 76 -61 178q0 22 3 43q-33 57 -37 119h-169q-105 0 -180.5 76t-75.5 181q0 103 76 179t180 76h374q-22 60 -22 128 q0 122 81.5 189t206.5 67q38 0 69.5 -17.5t55 -49.5t40.5 -63t37 -72t33 -62q35 -55 100 -129q2 -3 14 -17t19 -21.5t20.5 -21.5t24 -22.5t22.5 -18t23.5 -14t21.5 -4.5h288q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf0a6;" d="M1280 -64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 700q0 189 -167 189q-26 0 -56 -5q-16 30 -52.5 47.5t-73.5 17.5t-69 -18q-50 53 -119 53q-25 0 -55.5 -10t-47.5 -25v331q0 52 -38 90t-90 38q-51 0 -89.5 -39t-38.5 -89v-576 q-20 0 -48.5 15t-55 33t-68 33t-84.5 15q-67 0 -97.5 -44.5t-30.5 -115.5q0 -24 139 -90q44 -24 65 -37q64 -40 145 -112q81 -71 106 -101q57 -69 57 -140v-32h640v32q0 72 32 167t64 193.5t32 179.5zM1536 705q0 -133 -69 -322q-59 -164 -59 -223v-288q0 -53 -37.5 -90.5 t-90.5 -37.5h-640q-53 0 -90.5 37.5t-37.5 90.5v288q0 10 -4.5 21.5t-14 23.5t-18 22.5t-22.5 24t-21.5 20.5t-21.5 19t-17 14q-74 65 -129 100q-21 13 -62 33t-72 37t-63 40.5t-49.5 55t-17.5 69.5q0 125 67 206.5t189 81.5q68 0 128 -22v374q0 104 76 180t179 76 q105 0 181 -75.5t76 -180.5v-169q62 -4 119 -37q21 3 43 3q101 0 178 -60q139 1 219.5 -85t80.5 -227z" />
+<glyph unicode="&#xf0a7;" d="M1408 576q0 84 -32 183t-64 194t-32 167v32h-640v-32q0 -35 -12 -67.5t-37 -62.5t-46 -50t-54 -49q-9 -8 -14 -12q-81 -72 -145 -112q-22 -14 -68 -38q-3 -1 -22.5 -10.5t-36 -18.5t-35.5 -20t-30.5 -21.5t-11.5 -18.5q0 -71 30.5 -115.5t97.5 -44.5q43 0 84.5 15t68 33 t55 33t48.5 15v-576q0 -50 38.5 -89t89.5 -39q52 0 90 38t38 90v331q46 -35 103 -35q69 0 119 53q32 -18 69 -18t73.5 17.5t52.5 47.5q24 -4 56 -4q85 0 126 48.5t41 135.5zM1280 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 580 q0 -142 -77.5 -230t-217.5 -87l-5 1q-76 -61 -178 -61q-22 0 -43 3q-54 -30 -119 -37v-169q0 -105 -76 -180.5t-181 -75.5q-103 0 -179 76t-76 180v374q-54 -22 -128 -22q-121 0 -188.5 81.5t-67.5 206.5q0 38 17.5 69.5t49.5 55t63 40.5t72 37t62 33q55 35 129 100 q3 2 17 14t21.5 19t21.5 20.5t22.5 24t18 22.5t14 23.5t4.5 21.5v288q0 53 37.5 90.5t90.5 37.5h640q53 0 90.5 -37.5t37.5 -90.5v-288q0 -59 59 -223q69 -190 69 -317z" />
+<glyph unicode="&#xf0a8;" d="M1280 576v128q0 26 -19 45t-45 19h-502l189 189q19 19 19 45t-19 45l-91 91q-18 18 -45 18t-45 -18l-362 -362l-91 -91q-18 -18 -18 -45t18 -45l91 -91l362 -362q18 -18 45 -18t45 18l91 91q18 18 18 45t-18 45l-189 189h502q26 0 45 19t19 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0a9;" d="M1285 640q0 27 -18 45l-91 91l-362 362q-18 18 -45 18t-45 -18l-91 -91q-18 -18 -18 -45t18 -45l189 -189h-502q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h502l-189 -189q-19 -19 -19 -45t19 -45l91 -91q18 -18 45 -18t45 18l362 362l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0aa;" d="M1284 641q0 27 -18 45l-362 362l-91 91q-18 18 -45 18t-45 -18l-91 -91l-362 -362q-18 -18 -18 -45t18 -45l91 -91q18 -18 45 -18t45 18l189 189v-502q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v502l189 -189q19 -19 45 -19t45 19l91 91q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ab;" d="M1284 639q0 27 -18 45l-91 91q-18 18 -45 18t-45 -18l-189 -189v502q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-502l-189 189q-19 19 -45 19t-45 -19l-91 -91q-18 -18 -18 -45t18 -45l362 -362l91 -91q18 -18 45 -18t45 18l91 91l362 362q18 18 18 45zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0ac;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1042 887q-2 -1 -9.5 -9.5t-13.5 -9.5q2 0 4.5 5t5 11t3.5 7q6 7 22 15q14 6 52 12q34 8 51 -11 q-2 2 9.5 13t14.5 12q3 2 15 4.5t15 7.5l2 22q-12 -1 -17.5 7t-6.5 21q0 -2 -6 -8q0 7 -4.5 8t-11.5 -1t-9 -1q-10 3 -15 7.5t-8 16.5t-4 15q-2 5 -9.5 10.5t-9.5 10.5q-1 2 -2.5 5.5t-3 6.5t-4 5.5t-5.5 2.5t-7 -5t-7.5 -10t-4.5 -5q-3 2 -6 1.5t-4.5 -1t-4.5 -3t-5 -3.5 q-3 -2 -8.5 -3t-8.5 -2q15 5 -1 11q-10 4 -16 3q9 4 7.5 12t-8.5 14h5q-1 4 -8.5 8.5t-17.5 8.5t-13 6q-8 5 -34 9.5t-33 0.5q-5 -6 -4.5 -10.5t4 -14t3.5 -12.5q1 -6 -5.5 -13t-6.5 -12q0 -7 14 -15.5t10 -21.5q-3 -8 -16 -16t-16 -12q-5 -8 -1.5 -18.5t10.5 -16.5 q2 -2 1.5 -4t-3.5 -4.5t-5.5 -4t-6.5 -3.5l-3 -2q-11 -5 -20.5 6t-13.5 26q-7 25 -16 30q-23 8 -29 -1q-5 13 -41 26q-25 9 -58 4q6 1 0 15q-7 15 -19 12q3 6 4 17.5t1 13.5q3 13 12 23q1 1 7 8.5t9.5 13.5t0.5 6q35 -4 50 11q5 5 11.5 17t10.5 17q9 6 14 5.5t14.5 -5.5 t14.5 -5q14 -1 15.5 11t-7.5 20q12 -1 3 17q-5 7 -8 9q-12 4 -27 -5q-8 -4 2 -8q-1 1 -9.5 -10.5t-16.5 -17.5t-16 5q-1 1 -5.5 13.5t-9.5 13.5q-8 0 -16 -15q3 8 -11 15t-24 8q19 12 -8 27q-7 4 -20.5 5t-19.5 -4q-5 -7 -5.5 -11.5t5 -8t10.5 -5.5t11.5 -4t8.5 -3 q14 -10 8 -14q-2 -1 -8.5 -3.5t-11.5 -4.5t-6 -4q-3 -4 0 -14t-2 -14q-5 5 -9 17.5t-7 16.5q7 -9 -25 -6l-10 1q-4 0 -16 -2t-20.5 -1t-13.5 8q-4 8 0 20q1 4 4 2q-4 3 -11 9.5t-10 8.5q-46 -15 -94 -41q6 -1 12 1q5 2 13 6.5t10 5.5q34 14 42 7l5 5q14 -16 20 -25 q-7 4 -30 1q-20 -6 -22 -12q7 -12 5 -18q-4 3 -11.5 10t-14.5 11t-15 5q-16 0 -22 -1q-146 -80 -235 -222q7 -7 12 -8q4 -1 5 -9t2.5 -11t11.5 3q9 -8 3 -19q1 1 44 -27q19 -17 21 -21q3 -11 -10 -18q-1 2 -9 9t-9 4q-3 -5 0.5 -18.5t10.5 -12.5q-7 0 -9.5 -16t-2.5 -35.5 t-1 -23.5l2 -1q-3 -12 5.5 -34.5t21.5 -19.5q-13 -3 20 -43q6 -8 8 -9q3 -2 12 -7.5t15 -10t10 -10.5q4 -5 10 -22.5t14 -23.5q-2 -6 9.5 -20t10.5 -23q-1 0 -2.5 -1t-2.5 -1q3 -7 15.5 -14t15.5 -13q1 -3 2 -10t3 -11t8 -2q2 20 -24 62q-15 25 -17 29q-3 5 -5.5 15.5 t-4.5 14.5q2 0 6 -1.5t8.5 -3.5t7.5 -4t2 -3q-3 -7 2 -17.5t12 -18.5t17 -19t12 -13q6 -6 14 -19.5t0 -13.5q9 0 20 -10t17 -20q5 -8 8 -26t5 -24q2 -7 8.5 -13.5t12.5 -9.5l16 -8t13 -7q5 -2 18.5 -10.5t21.5 -11.5q10 -4 16 -4t14.5 2.5t13.5 3.5q15 2 29 -15t21 -21 q36 -19 55 -11q-2 -1 0.5 -7.5t8 -15.5t9 -14.5t5.5 -8.5q5 -6 18 -15t18 -15q6 4 7 9q-3 -8 7 -20t18 -10q14 3 14 32q-31 -15 -49 18q0 1 -2.5 5.5t-4 8.5t-2.5 8.5t0 7.5t5 3q9 0 10 3.5t-2 12.5t-4 13q-1 8 -11 20t-12 15q-5 -9 -16 -8t-16 9q0 -1 -1.5 -5.5t-1.5 -6.5 q-13 0 -15 1q1 3 2.5 17.5t3.5 22.5q1 4 5.5 12t7.5 14.5t4 12.5t-4.5 9.5t-17.5 2.5q-19 -1 -26 -20q-1 -3 -3 -10.5t-5 -11.5t-9 -7q-7 -3 -24 -2t-24 5q-13 8 -22.5 29t-9.5 37q0 10 2.5 26.5t3 25t-5.5 24.5q3 2 9 9.5t10 10.5q2 1 4.5 1.5t4.5 0t4 1.5t3 6q-1 1 -4 3 q-3 3 -4 3q7 -3 28.5 1.5t27.5 -1.5q15 -11 22 2q0 1 -2.5 9.5t-0.5 13.5q5 -27 29 -9q3 -3 15.5 -5t17.5 -5q3 -2 7 -5.5t5.5 -4.5t5 0.5t8.5 6.5q10 -14 12 -24q11 -40 19 -44q7 -3 11 -2t4.5 9.5t0 14t-1.5 12.5l-1 8v18l-1 8q-15 3 -18.5 12t1.5 18.5t15 18.5q1 1 8 3.5 t15.5 6.5t12.5 8q21 19 15 35q7 0 11 9q-1 0 -5 3t-7.5 5t-4.5 2q9 5 2 16q5 3 7.5 11t7.5 10q9 -12 21 -2q7 8 1 16q5 7 20.5 10.5t18.5 9.5q7 -2 8 2t1 12t3 12q4 5 15 9t13 5l17 11q3 4 0 4q18 -2 31 11q10 11 -6 20q3 6 -3 9.5t-15 5.5q3 1 11.5 0.5t10.5 1.5 q15 10 -7 16q-17 5 -43 -12zM879 10q206 36 351 189q-3 3 -12.5 4.5t-12.5 3.5q-18 7 -24 8q1 7 -2.5 13t-8 9t-12.5 8t-11 7q-2 2 -7 6t-7 5.5t-7.5 4.5t-8.5 2t-10 -1l-3 -1q-3 -1 -5.5 -2.5t-5.5 -3t-4 -3t0 -2.5q-21 17 -36 22q-5 1 -11 5.5t-10.5 7t-10 1.5t-11.5 -7 q-5 -5 -6 -15t-2 -13q-7 5 0 17.5t2 18.5q-3 6 -10.5 4.5t-12 -4.5t-11.5 -8.5t-9 -6.5t-8.5 -5.5t-8.5 -7.5q-3 -4 -6 -12t-5 -11q-2 4 -11.5 6.5t-9.5 5.5q2 -10 4 -35t5 -38q7 -31 -12 -48q-27 -25 -29 -40q-4 -22 12 -26q0 -7 -8 -20.5t-7 -21.5q0 -6 2 -16z" />
+<glyph unicode="&#xf0ad;" horiz-adv-x="1664" d="M384 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1028 484l-682 -682q-37 -37 -90 -37q-52 0 -91 37l-106 108q-38 36 -38 90q0 53 38 91l681 681q39 -98 114.5 -173.5t173.5 -114.5zM1662 919q0 -39 -23 -106q-47 -134 -164.5 -217.5 t-258.5 -83.5q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q58 0 121.5 -16.5t107.5 -46.5q16 -11 16 -28t-16 -28l-293 -169v-224l193 -107q5 3 79 48.5t135.5 81t70.5 35.5q15 0 23.5 -10t8.5 -25z" />
+<glyph unicode="&#xf0ae;" horiz-adv-x="1792" d="M1024 128h640v128h-640v-128zM640 640h1024v128h-1024v-128zM1280 1152h384v128h-384v-128zM1792 320v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 832v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19 t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45zM1792 1344v-256q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1664q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0b0;" horiz-adv-x="1408" d="M1403 1241q17 -41 -14 -70l-493 -493v-742q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-256 256q-19 19 -19 45v486l-493 493q-31 29 -14 70q17 39 59 39h1280q42 0 59 -39z" />
+<glyph unicode="&#xf0b1;" horiz-adv-x="1792" d="M640 1280h512v128h-512v-128zM1792 640v-480q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v480h672v-160q0 -26 19 -45t45 -19h320q26 0 45 19t19 45v160h672zM1024 640v-128h-256v128h256zM1792 1120v-384h-1792v384q0 66 47 113t113 47h352v160q0 40 28 68 t68 28h576q40 0 68 -28t28 -68v-160h352q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0b2;" d="M1283 995l-355 -355l355 -355l144 144q29 31 70 14q39 -17 39 -59v-448q0 -26 -19 -45t-45 -19h-448q-42 0 -59 40q-17 39 14 69l144 144l-355 355l-355 -355l144 -144q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l144 -144 l355 355l-355 355l-144 -144q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v448q0 26 19 45t45 19h448q42 0 59 -40q17 -39 -14 -69l-144 -144l355 -355l355 355l-144 144q-31 30 -14 69q17 40 59 40h448q26 0 45 -19t19 -45v-448q0 -42 -39 -59q-13 -5 -25 -5q-26 0 -45 19z " />
+<glyph unicode="&#xf0c0;" horiz-adv-x="1920" d="M593 640q-162 -5 -265 -128h-134q-82 0 -138 40.5t-56 118.5q0 353 124 353q6 0 43.5 -21t97.5 -42.5t119 -21.5q67 0 133 23q-5 -37 -5 -66q0 -139 81 -256zM1664 3q0 -120 -73 -189.5t-194 -69.5h-874q-121 0 -194 69.5t-73 189.5q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q10 0 43 -21.5t73 -48t107 -48t135 -21.5t135 21.5t107 48t73 48t43 21.5q61 0 111.5 -20t85.5 -53.5t62 -81t43 -97.5t26.5 -108.5t14 -109t3.5 -103.5zM640 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75 t75 -181zM1344 896q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5zM1920 671q0 -78 -56 -118.5t-138 -40.5h-134q-103 123 -265 128q81 117 81 256q0 29 -5 66q66 -23 133 -23q59 0 119 21.5t97.5 42.5 t43.5 21q124 0 124 -353zM1792 1280q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181z" />
+<glyph unicode="&#xf0c1;" horiz-adv-x="1664" d="M1456 320q0 40 -28 68l-208 208q-28 28 -68 28q-42 0 -72 -32q3 -3 19 -18.5t21.5 -21.5t15 -19t13 -25.5t3.5 -27.5q0 -40 -28 -68t-68 -28q-15 0 -27.5 3.5t-25.5 13t-19 15t-21.5 21.5t-18.5 19q-33 -31 -33 -73q0 -40 28 -68l206 -207q27 -27 68 -27q40 0 68 26 l147 146q28 28 28 67zM753 1025q0 40 -28 68l-206 207q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l208 -208q27 -27 68 -27q42 0 72 31q-3 3 -19 18.5t-21.5 21.5t-15 19t-13 25.5t-3.5 27.5q0 40 28 68t68 28q15 0 27.5 -3.5t25.5 -13t19 -15 t21.5 -21.5t18.5 -19q33 31 33 73zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-206 207q-83 83 -83 203q0 123 88 209l-88 88q-86 -88 -208 -88q-120 0 -204 84l-208 208q-84 84 -84 204t85 203l147 146q83 83 203 83q121 0 204 -85l206 -207 q83 -83 83 -203q0 -123 -88 -209l88 -88q86 88 208 88q120 0 204 -84l208 -208q84 -84 84 -204z" />
+<glyph unicode="&#xf0c2;" horiz-adv-x="1920" d="M1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088q-185 0 -316.5 131.5t-131.5 316.5q0 132 71 241.5t187 163.5q-2 28 -2 43q0 212 150 362t362 150q158 0 286.5 -88t187.5 -230q70 62 166 62q106 0 181 -75t75 -181q0 -75 -41 -138q129 -30 213 -134.5t84 -239.5z " />
+<glyph unicode="&#xf0c3;" horiz-adv-x="1664" d="M1527 88q56 -89 21.5 -152.5t-140.5 -63.5h-1152q-106 0 -140.5 63.5t21.5 152.5l503 793v399h-64q-26 0 -45 19t-19 45t19 45t45 19h512q26 0 45 -19t19 -45t-19 -45t-45 -19h-64v-399zM748 813l-272 -429h712l-272 429l-20 31v37v399h-128v-399v-37z" />
+<glyph unicode="&#xf0c4;" horiz-adv-x="1792" d="M960 640q26 0 45 -19t19 -45t-19 -45t-45 -19t-45 19t-19 45t19 45t45 19zM1260 576l507 -398q28 -20 25 -56q-5 -35 -35 -51l-128 -64q-13 -7 -29 -7q-17 0 -31 8l-690 387l-110 -66q-8 -4 -12 -5q14 -49 10 -97q-7 -77 -56 -147.5t-132 -123.5q-132 -84 -277 -84 q-136 0 -222 78q-90 84 -79 207q7 76 56 147t131 124q132 84 278 84q83 0 151 -31q9 13 22 22l122 73l-122 73q-13 9 -22 22q-68 -31 -151 -31q-146 0 -278 84q-82 53 -131 124t-56 147q-5 59 15.5 113t63.5 93q85 79 222 79q145 0 277 -84q83 -52 132 -123t56 -148 q4 -48 -10 -97q4 -1 12 -5l110 -66l690 387q14 8 31 8q16 0 29 -7l128 -64q30 -16 35 -51q3 -36 -25 -56zM579 836q46 42 21 108t-106 117q-92 59 -192 59q-74 0 -113 -36q-46 -42 -21 -108t106 -117q92 -59 192 -59q74 0 113 36zM494 91q81 51 106 117t-21 108 q-39 36 -113 36q-100 0 -192 -59q-81 -51 -106 -117t21 -108q39 -36 113 -36q100 0 192 59zM672 704l96 -58v11q0 36 33 56l14 8l-79 47l-26 -26q-3 -3 -10 -11t-12 -12q-2 -2 -4 -3.5t-3 -2.5zM896 480l96 -32l736 576l-128 64l-768 -431v-113l-160 -96l9 -8q2 -2 7 -6 q4 -4 11 -12t11 -12l26 -26zM1600 64l128 64l-520 408l-177 -138q-2 -3 -13 -7z" />
+<glyph unicode="&#xf0c5;" horiz-adv-x="1792" d="M1696 1152q40 0 68 -28t28 -68v-1216q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v288h-544q-40 0 -68 28t-28 68v672q0 40 20 88t48 76l408 408q28 28 76 48t88 20h416q40 0 68 -28t28 -68v-328q68 40 128 40h416zM1152 939l-299 -299h299v299zM512 1323l-299 -299 h299v299zM708 676l316 316v416h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h512v256q0 40 20 88t48 76zM1664 -128v1152h-384v-416q0 -40 -28 -68t-68 -28h-416v-640h896z" />
+<glyph unicode="&#xf0c6;" horiz-adv-x="1408" d="M1404 151q0 -117 -79 -196t-196 -79q-135 0 -235 100l-777 776q-113 115 -113 271q0 159 110 270t269 111q158 0 273 -113l605 -606q10 -10 10 -22q0 -16 -30.5 -46.5t-46.5 -30.5q-13 0 -23 10l-606 607q-79 77 -181 77q-106 0 -179 -75t-73 -181q0 -105 76 -181 l776 -777q63 -63 145 -63q64 0 106 42t42 106q0 82 -63 145l-581 581q-26 24 -60 24q-29 0 -48 -19t-19 -48q0 -32 25 -59l410 -410q10 -10 10 -22q0 -16 -31 -47t-47 -31q-12 0 -22 10l-410 410q-63 61 -63 149q0 82 57 139t139 57q88 0 149 -63l581 -581q100 -98 100 -235 z" />
+<glyph unicode="&#xf0c7;" d="M384 0h768v384h-768v-384zM1280 0h128v896q0 14 -10 38.5t-20 34.5l-281 281q-10 10 -34 20t-39 10v-416q0 -40 -28 -68t-68 -28h-576q-40 0 -68 28t-28 68v416h-128v-1280h128v416q0 40 28 68t68 28h832q40 0 68 -28t28 -68v-416zM896 928v320q0 13 -9.5 22.5t-22.5 9.5 h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5zM1536 896v-928q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h928q40 0 88 -20t76 -48l280 -280q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0c8;" d="M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0c9;" d="M1536 192v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 704v-128q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1536 1216v-128q0 -26 -19 -45 t-45 -19h-1408q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0ca;" horiz-adv-x="1792" d="M384 128q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 640q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 224v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5 t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1152q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z M1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cb;" horiz-adv-x="1792" d="M381 -84q0 -80 -54.5 -126t-135.5 -46q-106 0 -172 66l57 88q49 -45 106 -45q29 0 50.5 14.5t21.5 42.5q0 64 -105 56l-26 56q8 10 32.5 43.5t42.5 54t37 38.5v1q-16 0 -48.5 -1t-48.5 -1v-53h-106v152h333v-88l-95 -115q51 -12 81 -49t30 -88zM383 543v-159h-362 q-6 36 -6 54q0 51 23.5 93t56.5 68t66 47.5t56.5 43.5t23.5 45q0 25 -14.5 38.5t-39.5 13.5q-46 0 -81 -58l-85 59q24 51 71.5 79.5t105.5 28.5q73 0 123 -41.5t50 -112.5q0 -50 -34 -91.5t-75 -64.5t-75.5 -50.5t-35.5 -52.5h127v60h105zM1792 224v-192q0 -13 -9.5 -22.5 t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM384 1123v-99h-335v99h107q0 41 0.5 122t0.5 121v12h-2q-8 -17 -50 -54l-71 76l136 127h106v-404h108zM1792 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5 t-9.5 22.5v192q0 14 9 23t23 9h1216q13 0 22.5 -9.5t9.5 -22.5zM1792 1248v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1216q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1216q13 0 22.5 -9.5t9.5 -22.5z" />
+<glyph unicode="&#xf0cc;" horiz-adv-x="1792" d="M1760 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1728q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h1728zM483 704q-28 35 -51 80q-48 97 -48 188q0 181 134 309q133 127 393 127q50 0 167 -19q66 -12 177 -48q10 -38 21 -118q14 -123 14 -183q0 -18 -5 -45l-12 -3l-84 6 l-14 2q-50 149 -103 205q-88 91 -210 91q-114 0 -182 -59q-67 -58 -67 -146q0 -73 66 -140t279 -129q69 -20 173 -66q58 -28 95 -52h-743zM990 448h411q7 -39 7 -92q0 -111 -41 -212q-23 -55 -71 -104q-37 -35 -109 -81q-80 -48 -153 -66q-80 -21 -203 -21q-114 0 -195 23 l-140 40q-57 16 -72 28q-8 8 -8 22v13q0 108 -2 156q-1 30 0 68l2 37v44l102 2q15 -34 30 -71t22.5 -56t12.5 -27q35 -57 80 -94q43 -36 105 -57q59 -22 132 -22q64 0 139 27q77 26 122 86q47 61 47 129q0 84 -81 157q-34 29 -137 71z" />
+<glyph unicode="&#xf0cd;" d="M48 1313q-37 2 -45 4l-3 88q13 1 40 1q60 0 112 -4q132 -7 166 -7q86 0 168 3q116 4 146 5q56 0 86 2l-1 -14l2 -64v-9q-60 -9 -124 -9q-60 0 -79 -25q-13 -14 -13 -132q0 -13 0.5 -32.5t0.5 -25.5l1 -229l14 -280q6 -124 51 -202q35 -59 96 -92q88 -47 177 -47 q104 0 191 28q56 18 99 51q48 36 65 64q36 56 53 114q21 73 21 229q0 79 -3.5 128t-11 122.5t-13.5 159.5l-4 59q-5 67 -24 88q-34 35 -77 34l-100 -2l-14 3l2 86h84l205 -10q76 -3 196 10l18 -2q6 -38 6 -51q0 -7 -4 -31q-45 -12 -84 -13q-73 -11 -79 -17q-15 -15 -15 -41 q0 -7 1.5 -27t1.5 -31q8 -19 22 -396q6 -195 -15 -304q-15 -76 -41 -122q-38 -65 -112 -123q-75 -57 -182 -89q-109 -33 -255 -33q-167 0 -284 46q-119 47 -179 122q-61 76 -83 195q-16 80 -16 237v333q0 188 -17 213q-25 36 -147 39zM1536 -96v64q0 14 -9 23t-23 9h-1472 q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h1472q14 0 23 9t9 23z" />
+<glyph unicode="&#xf0ce;" horiz-adv-x="1664" d="M512 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 160v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23 v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM512 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 160v192 q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1024 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 544v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192 q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1536 928v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM1664 1248v-1088q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1344q66 0 113 -47t47 -113 z" />
+<glyph unicode="&#xf0d0;" horiz-adv-x="1664" d="M1190 955l293 293l-107 107l-293 -293zM1637 1248q0 -27 -18 -45l-1286 -1286q-18 -18 -45 -18t-45 18l-198 198q-18 18 -18 45t18 45l1286 1286q18 18 45 18t45 -18l198 -198q18 -18 18 -45zM286 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM636 1276 l196 -60l-196 -60l-60 -196l-60 196l-196 60l196 60l60 196zM1566 798l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98zM926 1438l98 -30l-98 -30l-30 -98l-30 98l-98 30l98 30l30 98z" />
+<glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
+<glyph unicode="&#xf0d4;" d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585 h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0d5;" horiz-adv-x="2304" d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62 q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
+<glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0d9;" horiz-adv-x="640" d="M640 1088v-896q0 -26 -19 -45t-45 -19t-45 19l-448 448q-19 19 -19 45t19 45l448 448q19 19 45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0da;" horiz-adv-x="640" d="M576 640q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19t-19 45v896q0 26 19 45t45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0db;" horiz-adv-x="1664" d="M160 0h608v1152h-640v-1120q0 -13 9.5 -22.5t22.5 -9.5zM1536 32v1120h-640v-1152h608q13 0 22.5 9.5t9.5 22.5zM1664 1248v-1216q0 -66 -47 -113t-113 -47h-1344q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1344q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf0dc;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45zM1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0dd;" horiz-adv-x="1024" d="M1024 448q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0de;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
+<glyph unicode="&#xf0e0;" horiz-adv-x="1792" d="M1792 826v-794q0 -66 -47 -113t-113 -47h-1472q-66 0 -113 47t-47 113v794q44 -49 101 -87q362 -246 497 -345q57 -42 92.5 -65.5t94.5 -48t110 -24.5h1h1q51 0 110 24.5t94.5 48t92.5 65.5q170 123 498 345q57 39 100 87zM1792 1120q0 -79 -49 -151t-122 -123 q-376 -261 -468 -325q-10 -7 -42.5 -30.5t-54 -38t-52 -32.5t-57.5 -27t-50 -9h-1h-1q-23 0 -50 9t-57.5 27t-52 32.5t-54 38t-42.5 30.5q-91 64 -262 182.5t-205 142.5q-62 42 -117 115.5t-55 136.5q0 78 41.5 130t118.5 52h1472q65 0 112.5 -47t47.5 -113z" />
+<glyph unicode="&#xf0e1;" d="M349 911v-991h-330v991h330zM370 1217q1 -73 -50.5 -122t-135.5 -49h-2q-82 0 -132 49t-50 122q0 74 51.5 122.5t134.5 48.5t133 -48.5t51 -122.5zM1536 488v-568h-329v530q0 105 -40.5 164.5t-126.5 59.5q-63 0 -105.5 -34.5t-63.5 -85.5q-11 -30 -11 -81v-553h-329 q2 399 2 647t-1 296l-1 48h329v-144h-2q20 32 41 56t56.5 52t87 43.5t114.5 15.5q171 0 275 -113.5t104 -332.5z" />
+<glyph unicode="&#xf0e2;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298z" />
+<glyph unicode="&#xf0e3;" horiz-adv-x="1792" d="M1771 0q0 -53 -37 -90l-107 -108q-39 -37 -91 -37q-53 0 -90 37l-363 364q-38 36 -38 90q0 53 43 96l-256 256l-126 -126q-14 -14 -34 -14t-34 14q2 -2 12.5 -12t12.5 -13t10 -11.5t10 -13.5t6 -13.5t5.5 -16.5t1.5 -18q0 -38 -28 -68q-3 -3 -16.5 -18t-19 -20.5 t-18.5 -16.5t-22 -15.5t-22 -9t-26 -4.5q-40 0 -68 28l-408 408q-28 28 -28 68q0 13 4.5 26t9 22t15.5 22t16.5 18.5t20.5 19t18 16.5q30 28 68 28q10 0 18 -1.5t16.5 -5.5t13.5 -6t13.5 -10t11.5 -10t13 -12.5t12 -12.5q-14 14 -14 34t14 34l348 348q14 14 34 14t34 -14 q-2 2 -12.5 12t-12.5 13t-10 11.5t-10 13.5t-6 13.5t-5.5 16.5t-1.5 18q0 38 28 68q3 3 16.5 18t19 20.5t18.5 16.5t22 15.5t22 9t26 4.5q40 0 68 -28l408 -408q28 -28 28 -68q0 -13 -4.5 -26t-9 -22t-15.5 -22t-16.5 -18.5t-20.5 -19t-18 -16.5q-30 -28 -68 -28 q-10 0 -18 1.5t-16.5 5.5t-13.5 6t-13.5 10t-11.5 10t-13 12.5t-12 12.5q14 -14 14 -34t-14 -34l-126 -126l256 -256q43 43 96 43q52 0 91 -37l363 -363q37 -39 37 -91z" />
+<glyph unicode="&#xf0e4;" horiz-adv-x="1792" d="M384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM576 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1004 351l101 382q6 26 -7.5 48.5t-38.5 29.5 t-48 -6.5t-30 -39.5l-101 -382q-60 -5 -107 -43.5t-63 -98.5q-20 -77 20 -146t117 -89t146 20t89 117q16 60 -6 117t-72 91zM1664 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 1024q0 53 -37.5 90.5 t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1472 832q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 384q0 -261 -141 -483q-19 -29 -54 -29h-1402q-35 0 -54 29 q-141 221 -141 483q0 182 71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf0e5;" horiz-adv-x="1792" d="M896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640 q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 174 120 321.5 t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf0e6;" horiz-adv-x="1792" d="M704 1152q-153 0 -286 -52t-211.5 -141t-78.5 -191q0 -82 53 -158t149 -132l97 -56l-35 -84q34 20 62 39l44 31l53 -10q78 -14 153 -14q153 0 286 52t211.5 141t78.5 191t-78.5 191t-211.5 141t-286 52zM704 1280q191 0 353.5 -68.5t256.5 -186.5t94 -257t-94 -257 t-256.5 -186.5t-353.5 -68.5q-86 0 -176 16q-124 -88 -278 -128q-36 -9 -86 -16h-3q-11 0 -20.5 8t-11.5 21q-1 3 -1 6.5t0.5 6.5t2 6l2.5 5t3.5 5.5t4 5t4.5 5t4 4.5q5 6 23 25t26 29.5t22.5 29t25 38.5t20.5 44q-124 72 -195 177t-71 224q0 139 94 257t256.5 186.5 t353.5 68.5zM1526 111q10 -24 20.5 -44t25 -38.5t22.5 -29t26 -29.5t23 -25q1 -1 4 -4.5t4.5 -5t4 -5t3.5 -5.5l2.5 -5t2 -6t0.5 -6.5t-1 -6.5q-3 -14 -13 -22t-22 -7q-50 7 -86 16q-154 40 -278 128q-90 -16 -176 -16q-271 0 -472 132q58 -4 88 -4q161 0 309 45t264 129 q125 92 192 212t67 254q0 77 -23 152q129 -71 204 -178t75 -230q0 -120 -71 -224.5t-195 -176.5z" />
+<glyph unicode="&#xf0e7;" horiz-adv-x="896" d="M885 970q18 -20 7 -44l-540 -1157q-13 -25 -42 -25q-4 0 -14 2q-17 5 -25.5 19t-4.5 30l197 808l-406 -101q-4 -1 -12 -1q-18 0 -31 11q-18 15 -13 39l201 825q4 14 16 23t28 9h328q19 0 32 -12.5t13 -29.5q0 -8 -5 -18l-171 -463l396 98q8 2 12 2q19 0 34 -15z" />
+<glyph unicode="&#xf0e8;" horiz-adv-x="1792" d="M1792 288v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192h-512v-192h96q40 0 68 -28t28 -68v-320 q0 -40 -28 -68t-68 -28h-320q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h96v192q0 52 38 90t90 38h512v192h-96q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h320q40 0 68 -28t28 -68v-320q0 -40 -28 -68t-68 -28h-96v-192h512q52 0 90 -38t38 -90v-192h96q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf0e9;" horiz-adv-x="1664" d="M896 708v-580q0 -104 -76 -180t-180 -76t-180 76t-76 180q0 26 19 45t45 19t45 -19t19 -45q0 -50 39 -89t89 -39t89 39t39 89v580q33 11 64 11t64 -11zM1664 681q0 -13 -9.5 -22.5t-22.5 -9.5q-11 0 -23 10q-49 46 -93 69t-102 23q-68 0 -128 -37t-103 -97 q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -28 -17q-18 0 -29 17q-4 6 -14.5 24t-17.5 28q-43 60 -102.5 97t-127.5 37t-127.5 -37t-102.5 -97q-7 -10 -17.5 -28t-14.5 -24q-11 -17 -29 -17q-17 0 -28 17q-4 6 -14.5 24t-17.5 28q-43 60 -103 97t-128 37q-58 0 -102 -23t-93 -69 q-12 -10 -23 -10q-13 0 -22.5 9.5t-9.5 22.5q0 5 1 7q45 183 172.5 319.5t298 204.5t360.5 68q140 0 274.5 -40t246.5 -113.5t194.5 -187t115.5 -251.5q1 -2 1 -7zM896 1408v-98q-42 2 -64 2t-64 -2v98q0 26 19 45t45 19t45 -19t19 -45z" />
+<glyph unicode="&#xf0ea;" horiz-adv-x="1792" d="M768 -128h896v640h-416q-40 0 -68 28t-28 68v416h-384v-1152zM1024 1312v64q0 13 -9.5 22.5t-22.5 9.5h-704q-13 0 -22.5 -9.5t-9.5 -22.5v-64q0 -13 9.5 -22.5t22.5 -9.5h704q13 0 22.5 9.5t9.5 22.5zM1280 640h299l-299 299v-299zM1792 512v-672q0 -40 -28 -68t-68 -28 h-960q-40 0 -68 28t-28 68v160h-544q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1088q40 0 68 -28t28 -68v-328q21 -13 36 -28l408 -408q28 -28 48 -76t20 -88z" />
+<glyph unicode="&#xf0eb;" horiz-adv-x="1024" d="M736 960q0 -13 -9.5 -22.5t-22.5 -9.5t-22.5 9.5t-9.5 22.5q0 46 -54 71t-106 25q-13 0 -22.5 9.5t-9.5 22.5t9.5 22.5t22.5 9.5q50 0 99.5 -16t87 -54t37.5 -90zM896 960q0 72 -34.5 134t-90 101.5t-123 62t-136.5 22.5t-136.5 -22.5t-123 -62t-90 -101.5t-34.5 -134 q0 -101 68 -180q10 -11 30.5 -33t30.5 -33q128 -153 141 -298h228q13 145 141 298q10 11 30.5 33t30.5 33q68 79 68 180zM1024 960q0 -155 -103 -268q-45 -49 -74.5 -87t-59.5 -95.5t-34 -107.5q47 -28 47 -82q0 -37 -25 -64q25 -27 25 -64q0 -52 -45 -81q13 -23 13 -47 q0 -46 -31.5 -71t-77.5 -25q-20 -44 -60 -70t-87 -26t-87 26t-60 70q-46 0 -77.5 25t-31.5 71q0 24 13 47q-45 29 -45 81q0 37 25 64q-25 27 -25 64q0 54 47 82q-4 50 -34 107.5t-59.5 95.5t-74.5 87q-103 113 -103 268q0 99 44.5 184.5t117 142t164 89t186.5 32.5 t186.5 -32.5t164 -89t117 -142t44.5 -184.5z" />
+<glyph unicode="&#xf0ec;" horiz-adv-x="1792" d="M1792 352v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-1376v-192q0 -13 -9.5 -22.5t-22.5 -9.5q-12 0 -24 10l-319 320q-9 9 -9 22q0 14 9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h1376q13 0 22.5 -9.5t9.5 -22.5zM1792 896q0 -14 -9 -23l-320 -320q-9 -9 -23 -9 q-13 0 -22.5 9.5t-9.5 22.5v192h-1376q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h1376v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23z" />
+<glyph unicode="&#xf0ed;" horiz-adv-x="1920" d="M1280 608q0 14 -9 23t-23 9h-224v352q0 13 -9.5 22.5t-22.5 9.5h-192q-13 0 -22.5 -9.5t-9.5 -22.5v-352h-224q-13 0 -22.5 -9.5t-9.5 -22.5q0 -14 9 -23l352 -352q9 -9 23 -9t23 9l351 351q10 12 10 24zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0ee;" horiz-adv-x="1920" d="M1280 672q0 14 -9 23l-352 352q-9 9 -23 9t-23 -9l-351 -351q-10 -12 -10 -24q0 -14 9 -23t23 -9h224v-352q0 -13 9.5 -22.5t22.5 -9.5h192q13 0 22.5 9.5t9.5 22.5v352h224q13 0 22.5 9.5t9.5 22.5zM1920 384q0 -159 -112.5 -271.5t-271.5 -112.5h-1088 q-185 0 -316.5 131.5t-131.5 316.5q0 130 70 240t188 165q-2 30 -2 43q0 212 150 362t362 150q156 0 285.5 -87t188.5 -231q71 62 166 62q106 0 181 -75t75 -181q0 -76 -41 -138q130 -31 213.5 -135.5t83.5 -238.5z" />
+<glyph unicode="&#xf0f0;" horiz-adv-x="1408" d="M384 192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 68 5.5 131t24 138t47.5 132.5t81 103t120 60.5q-22 -52 -22 -120v-203q-58 -20 -93 -70t-35 -111q0 -80 56 -136t136 -56 t136 56t56 136q0 61 -35.5 111t-92.5 70v203q0 62 25 93q132 -104 295 -104t295 104q25 -31 25 -93v-64q-106 0 -181 -75t-75 -181v-89q-32 -29 -32 -71q0 -40 28 -68t68 -28t68 28t28 68q0 42 -32 71v89q0 52 38 90t90 38t90 -38t38 -90v-89q-32 -29 -32 -71q0 -40 28 -68 t68 -28t68 28t28 68q0 42 -32 71v89q0 68 -34.5 127.5t-93.5 93.5q0 10 0.5 42.5t0 48t-2.5 41.5t-7 47t-13 40q68 -15 120 -60.5t81 -103t47.5 -132.5t24 -138t5.5 -131zM1088 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f1;" horiz-adv-x="1408" d="M1280 832q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 832q0 -62 -35.5 -111t-92.5 -70v-395q0 -159 -131.5 -271.5t-316.5 -112.5t-316.5 112.5t-131.5 271.5v132q-164 20 -274 128t-110 252v512q0 26 19 45t45 19q6 0 16 -2q17 30 47 48 t65 18q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5q-33 0 -64 18v-402q0 -106 94 -181t226 -75t226 75t94 181v402q-31 -18 -64 -18q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5q35 0 65 -18t47 -48q10 2 16 2q26 0 45 -19t19 -45v-512q0 -144 -110 -252 t-274 -128v-132q0 -106 94 -181t226 -75t226 75t94 181v395q-57 21 -92.5 70t-35.5 111q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf0f2;" horiz-adv-x="1792" d="M640 1152h512v128h-512v-128zM288 1152v-1280h-64q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h64zM1408 1152v-1280h-1024v1280h128v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h128zM1792 928v-832q0 -92 -66 -158t-158 -66h-64v1280h64q92 0 158 -66 t66 -158z" />
+<glyph unicode="&#xf0f3;" horiz-adv-x="1792" d="M912 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM1728 128q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-181 75t-75 181h-448q-52 0 -90 38t-38 90q50 42 91 88t85 119.5t74.5 158.5 t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q190 -28 307 -158.5t117 -282.5q0 -139 19.5 -260t50 -206t74.5 -158.5t85 -119.5t91 -88z" />
+<glyph unicode="&#xf0f4;" horiz-adv-x="1920" d="M1664 896q0 80 -56 136t-136 56h-64v-384h64q80 0 136 56t56 136zM0 128h1792q0 -106 -75 -181t-181 -75h-1280q-106 0 -181 75t-75 181zM1856 896q0 -159 -112.5 -271.5t-271.5 -112.5h-64v-32q0 -92 -66 -158t-158 -66h-704q-92 0 -158 66t-66 158v736q0 26 19 45 t45 19h1152q159 0 271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf0f5;" horiz-adv-x="1408" d="M640 1472v-640q0 -61 -35.5 -111t-92.5 -70v-779q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v779q-57 20 -92.5 70t-35.5 111v640q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45v-416q0 -26 19 -45 t45 -19t45 19t19 45v416q0 26 19 45t45 19t45 -19t19 -45zM1408 1472v-1600q0 -52 -38 -90t-90 -38h-128q-52 0 -90 38t-38 90v512h-224q-13 0 -22.5 9.5t-9.5 22.5v800q0 132 94 226t226 94h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f6;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M384 736q0 14 9 23t23 9h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64zM1120 512q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704zM1120 256q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704 q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h704z" />
+<glyph unicode="&#xf0f7;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 992v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 1248v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1536h-1152v-1536h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM1408 1472v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f8;" horiz-adv-x="1408" d="M384 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM384 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M1152 224v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM896 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M640 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 480v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5zM1152 736v-64q0 -13 -9.5 -22.5t-22.5 -9.5h-64q-13 0 -22.5 9.5t-9.5 22.5v64q0 13 9.5 22.5t22.5 9.5h64q13 0 22.5 -9.5t9.5 -22.5z M896 -128h384v1152h-256v-32q0 -40 -28 -68t-68 -28h-448q-40 0 -68 28t-28 68v32h-256v-1152h384v224q0 13 9.5 22.5t22.5 9.5h320q13 0 22.5 -9.5t9.5 -22.5v-224zM896 1056v320q0 13 -9.5 22.5t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-96h-128v96q0 13 -9.5 22.5 t-22.5 9.5h-64q-13 0 -22.5 -9.5t-9.5 -22.5v-320q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5v96h128v-96q0 -13 9.5 -22.5t22.5 -9.5h64q13 0 22.5 9.5t9.5 22.5zM1408 1088v-1280q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1280q0 26 19 45t45 19h320 v288q0 40 28 68t68 28h448q40 0 68 -28t28 -68v-288h320q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0f9;" horiz-adv-x="1920" d="M640 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM256 640h384v256h-158q-14 -2 -22 -9l-195 -195q-7 -12 -9 -22v-30zM1536 128q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5zM1664 800v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM1920 1344v-1152 q0 -26 -19 -45t-45 -19h-192q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-128q-26 0 -45 19t-19 45t19 45t45 19v416q0 26 13 58t32 51l198 198q19 19 51 32t58 13h160v320q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf0fa;" horiz-adv-x="1792" d="M1280 416v192q0 14 -9 23t-23 9h-224v224q0 14 -9 23t-23 9h-192q-14 0 -23 -9t-9 -23v-224h-224q-14 0 -23 -9t-9 -23v-192q0 -14 9 -23t23 -9h224v-224q0 -14 9 -23t23 -9h192q14 0 23 9t9 23v224h224q14 0 23 9t9 23zM640 1152h512v128h-512v-128zM256 1152v-1280h-32 q-92 0 -158 66t-66 158v832q0 92 66 158t158 66h32zM1440 1152v-1280h-1088v1280h160v160q0 40 28 68t68 28h576q40 0 68 -28t28 -68v-160h160zM1792 928v-832q0 -92 -66 -158t-158 -66h-32v1280h32q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf0fb;" horiz-adv-x="1920" d="M1920 576q-1 -32 -288 -96l-352 -32l-224 -64h-64l-293 -352h69q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-96h-160h-64v32h64v416h-160l-192 -224h-96l-32 32v192h32v32h128v8l-192 24v128l192 24v8h-128v32h-32v192l32 32h96l192 -224h160v416h-64v32h64h160h96 q26 0 45 -4.5t19 -11.5t-19 -11.5t-45 -4.5h-69l293 -352h64l224 -64l352 -32q261 -58 287 -93z" />
+<glyph unicode="&#xf0fc;" horiz-adv-x="1664" d="M640 640v384h-256v-256q0 -53 37.5 -90.5t90.5 -37.5h128zM1664 192v-192h-1152v192l128 192h-128q-159 0 -271.5 112.5t-112.5 271.5v320l-64 64l32 128h480l32 128h960l32 -192l-64 -32v-800z" />
+<glyph unicode="&#xf0fd;" d="M1280 192v896q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-512v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-896q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h512v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf0fe;" d="M1280 576v128q0 26 -19 45t-45 19h-320v320q0 26 -19 45t-45 19h-128q-26 0 -45 -19t-19 -45v-320h-320q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h320v-320q0 -26 19 -45t45 -19h128q26 0 45 19t19 45v320h320q26 0 45 19t19 45zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf100;" horiz-adv-x="1024" d="M627 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23zM1011 160q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23z" />
+<glyph unicode="&#xf101;" horiz-adv-x="1024" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM979 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23 l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf102;" horiz-adv-x="1152" d="M1075 224q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23zM1075 608q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393 q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf103;" horiz-adv-x="1152" d="M1075 672q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23zM1075 1056q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23 t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf104;" horiz-adv-x="640" d="M627 992q0 -13 -10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf105;" horiz-adv-x="640" d="M595 576q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf106;" horiz-adv-x="1152" d="M1075 352q0 -13 -10 -23l-50 -50q-10 -10 -23 -10t-23 10l-393 393l-393 -393q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l466 -466q10 -10 10 -23z" />
+<glyph unicode="&#xf107;" horiz-adv-x="1152" d="M1075 800q0 -13 -10 -23l-466 -466q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l393 -393l393 393q10 10 23 10t23 -10l50 -50q10 -10 10 -23z" />
+<glyph unicode="&#xf108;" horiz-adv-x="1920" d="M1792 544v832q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-832q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1376v-1088q0 -66 -47 -113t-113 -47h-544q0 -37 16 -77.5t32 -71t16 -43.5q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19 t-19 45q0 14 16 44t32 70t16 78h-544q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf109;" horiz-adv-x="1920" d="M416 256q-66 0 -113 47t-47 113v704q0 66 47 113t113 47h1088q66 0 113 -47t47 -113v-704q0 -66 -47 -113t-113 -47h-1088zM384 1120v-704q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5v704q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5z M1760 192h160v-96q0 -40 -47 -68t-113 -28h-1600q-66 0 -113 28t-47 68v96h160h1600zM1040 96q16 0 16 16t-16 16h-160q-16 0 -16 -16t16 -16h160z" />
+<glyph unicode="&#xf10a;" horiz-adv-x="1152" d="M640 128q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1024 288v960q0 13 -9.5 22.5t-22.5 9.5h-832q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h832q13 0 22.5 9.5t9.5 22.5zM1152 1248v-1088q0 -66 -47 -113t-113 -47h-832 q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h832q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf10b;" horiz-adv-x="768" d="M464 128q0 33 -23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5t56.5 23.5t23.5 56.5zM672 288v704q0 13 -9.5 22.5t-22.5 9.5h-512q-13 0 -22.5 -9.5t-9.5 -22.5v-704q0 -13 9.5 -22.5t22.5 -9.5h512q13 0 22.5 9.5t9.5 22.5zM480 1136 q0 16 -16 16h-160q-16 0 -16 -16t16 -16h160q16 0 16 16zM768 1152v-1024q0 -52 -38 -90t-90 -38h-512q-52 0 -90 38t-38 90v1024q0 52 38 90t90 38h512q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf10c;" d="M768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103 t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf10d;" horiz-adv-x="1664" d="M768 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z M1664 576v-384q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v704q0 104 40.5 198.5t109.5 163.5t163.5 109.5t198.5 40.5h64q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-64q-106 0 -181 -75t-75 -181v-32q0 -40 28 -68t68 -28h224q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf10e;" horiz-adv-x="1664" d="M768 1216v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136zM1664 1216 v-704q0 -104 -40.5 -198.5t-109.5 -163.5t-163.5 -109.5t-198.5 -40.5h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64q106 0 181 75t75 181v32q0 40 -28 68t-68 28h-224q-80 0 -136 56t-56 136v384q0 80 56 136t136 56h384q80 0 136 -56t56 -136z" />
+<glyph unicode="&#xf110;" horiz-adv-x="1792" d="M526 142q0 -53 -37.5 -90.5t-90.5 -37.5q-52 0 -90 38t-38 90q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 -64q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM320 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1522 142q0 -52 -38 -90t-90 -38q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM558 1138q0 -66 -47 -113t-113 -47t-113 47t-47 113t47 113t113 47t113 -47t47 -113z M1728 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1088 1344q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1618 1138q0 -93 -66 -158.5t-158 -65.5q-93 0 -158.5 65.5t-65.5 158.5 q0 92 65.5 158t158.5 66q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf111;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf112;" horiz-adv-x="1792" d="M1792 416q0 -166 -127 -451q-3 -7 -10.5 -24t-13.5 -30t-13 -22q-12 -17 -28 -17q-15 0 -23.5 10t-8.5 25q0 9 2.5 26.5t2.5 23.5q5 68 5 123q0 101 -17.5 181t-48.5 138.5t-80 101t-105.5 69.5t-133 42.5t-154 21.5t-175.5 6h-224v-256q0 -26 -19 -45t-45 -19t-45 19 l-512 512q-19 19 -19 45t19 45l512 512q19 19 45 19t45 -19t19 -45v-256h224q713 0 875 -403q53 -134 53 -333z" />
+<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
+<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
+<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
+<glyph unicode="&#xf116;" horiz-adv-x="1792" />
+<glyph unicode="&#xf117;" horiz-adv-x="1792" />
+<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf11b;" horiz-adv-x="1920" d="M832 448v128q0 14 -9 23t-23 9h-192v192q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-192h-192q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h192v-192q0 -14 9 -23t23 -9h128q14 0 23 9t9 23v192h192q14 0 23 9t9 23zM1408 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1920 512q0 -212 -150 -362t-362 -150q-192 0 -338 128h-220q-146 -128 -338 -128q-212 0 -362 150 t-150 362t150 362t362 150h896q212 0 362 -150t150 -362z" />
+<glyph unicode="&#xf11c;" horiz-adv-x="1920" d="M384 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM512 624v-96q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h224q16 0 16 -16zM384 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 368v-96q0 -16 -16 -16 h-864q-16 0 -16 16v96q0 16 16 16h864q16 0 16 -16zM768 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM640 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1024 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16 h96q16 0 16 -16zM896 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1280 624v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 368v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1152 880v-96 q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1408 880v-96q0 -16 -16 -16h-96q-16 0 -16 16v96q0 16 16 16h96q16 0 16 -16zM1664 880v-352q0 -16 -16 -16h-224q-16 0 -16 16v96q0 16 16 16h112v240q0 16 16 16h96q16 0 16 -16zM1792 128v896h-1664v-896 h1664zM1920 1024v-896q0 -53 -37.5 -90.5t-90.5 -37.5h-1664q-53 0 -90.5 37.5t-37.5 90.5v896q0 53 37.5 90.5t90.5 37.5h1664q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf11d;" horiz-adv-x="1792" d="M1664 491v616q-169 -91 -306 -91q-82 0 -145 32q-100 49 -184 76.5t-178 27.5q-173 0 -403 -127v-599q245 113 433 113q55 0 103.5 -7.5t98 -26t77 -31t82.5 -39.5l28 -14q44 -22 101 -22q120 0 293 92zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9 h-64q-14 0 -23 9t-9 23v1266q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102 q-15 -9 -33 -9q-16 0 -32 8q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf11e;" horiz-adv-x="1792" d="M832 536v192q-181 -16 -384 -117v-185q205 96 384 110zM832 954v197q-172 -8 -384 -126v-189q215 111 384 118zM1664 491v184q-235 -116 -384 -71v224q-20 6 -39 15q-5 3 -33 17t-34.5 17t-31.5 15t-34.5 15.5t-32.5 13t-36 12.5t-35 8.5t-39.5 7.5t-39.5 4t-44 2 q-23 0 -49 -3v-222h19q102 0 192.5 -29t197.5 -82q19 -9 39 -15v-188q42 -17 91 -17q120 0 293 92zM1664 918v189q-169 -91 -306 -91q-45 0 -78 8v-196q148 -42 384 90zM320 1280q0 -35 -17.5 -64t-46.5 -46v-1266q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v1266 q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1792 1216v-763q0 -39 -35 -57q-10 -5 -17 -9q-218 -116 -369 -116q-88 0 -158 35l-28 14q-64 33 -99 48t-91 29t-114 14q-102 0 -235.5 -44t-228.5 -102q-15 -9 -33 -9q-16 0 -32 8 q-32 19 -32 56v742q0 35 31 55q35 21 78.5 42.5t114 52t152.5 49.5t155 19q112 0 209 -31t209 -86q38 -19 89 -19q122 0 310 112q22 12 31 17q31 16 62 -2q31 -20 31 -55z" />
+<glyph unicode="&#xf120;" horiz-adv-x="1664" d="M585 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23zM1664 96v-64q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h960q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf121;" horiz-adv-x="1920" d="M617 137l-50 -50q-10 -10 -23 -10t-23 10l-466 466q-10 10 -10 23t10 23l466 466q10 10 23 10t23 -10l50 -50q10 -10 10 -23t-10 -23l-393 -393l393 -393q10 -10 10 -23t-10 -23zM1208 1204l-373 -1291q-4 -13 -15.5 -19.5t-23.5 -2.5l-62 17q-13 4 -19.5 15.5t-2.5 24.5 l373 1291q4 13 15.5 19.5t23.5 2.5l62 -17q13 -4 19.5 -15.5t2.5 -24.5zM1865 553l-466 -466q-10 -10 -23 -10t-23 10l-50 50q-10 10 -10 23t10 23l393 393l-393 393q-10 10 -10 23t10 23l50 50q10 10 23 10t23 -10l466 -466q10 -10 10 -23t-10 -23z" />
+<glyph unicode="&#xf122;" horiz-adv-x="1792" d="M640 454v-70q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-69l-397 -398q-19 -19 -19 -45t19 -45zM1792 416q0 -58 -17 -133.5t-38.5 -138t-48 -125t-40.5 -90.5l-20 -40q-8 -17 -28 -17q-6 0 -9 1 q-25 8 -23 34q43 400 -106 565q-64 71 -170.5 110.5t-267.5 52.5v-251q0 -42 -39 -59q-13 -5 -25 -5q-27 0 -45 19l-512 512q-19 19 -19 45t19 45l512 512q29 31 70 14q39 -17 39 -59v-262q411 -28 599 -221q169 -173 169 -509z" />
+<glyph unicode="&#xf123;" horiz-adv-x="1664" d="M1186 579l257 250l-356 52l-66 10l-30 60l-159 322v-963l59 -31l318 -168l-60 355l-12 66zM1638 841l-363 -354l86 -500q5 -33 -6 -51.5t-34 -18.5q-17 0 -40 12l-449 236l-449 -236q-23 -12 -40 -12q-23 0 -34 18.5t-6 51.5l86 500l-364 354q-32 32 -23 59.5t54 34.5 l502 73l225 455q20 41 49 41q28 0 49 -41l225 -455l502 -73q45 -7 54 -34.5t-24 -59.5z" />
+<glyph unicode="&#xf124;" horiz-adv-x="1408" d="M1401 1187l-640 -1280q-17 -35 -57 -35q-5 0 -15 2q-22 5 -35.5 22.5t-13.5 39.5v576h-576q-22 0 -39.5 13.5t-22.5 35.5t4 42t29 30l1280 640q13 7 29 7q27 0 45 -19q15 -14 18.5 -34.5t-6.5 -39.5z" />
+<glyph unicode="&#xf125;" horiz-adv-x="1664" d="M557 256h595v595zM512 301l595 595h-595v-595zM1664 224v-192q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v224h-864q-14 0 -23 9t-9 23v864h-224q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h224v224q0 14 9 23t23 9h192q14 0 23 -9t9 -23 v-224h851l246 247q10 9 23 9t23 -9q9 -10 9 -23t-9 -23l-247 -246v-851h224q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf126;" horiz-adv-x="1024" d="M288 64q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM288 1216q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM928 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1024 1088q0 -52 -26 -96.5t-70 -69.5 q-2 -287 -226 -414q-68 -38 -203 -81q-128 -40 -169.5 -71t-41.5 -100v-26q44 -25 70 -69.5t26 -96.5q0 -80 -56 -136t-136 -56t-136 56t-56 136q0 52 26 96.5t70 69.5v820q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136q0 -52 -26 -96.5t-70 -69.5v-497 q54 26 154 57q55 17 87.5 29.5t70.5 31t59 39.5t40.5 51t28 69.5t8.5 91.5q-44 25 -70 69.5t-26 96.5q0 80 56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf127;" horiz-adv-x="1664" d="M439 265l-256 -256q-10 -9 -23 -9q-12 0 -23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23zM608 224v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM384 448q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23t9 23t23 9h320 q14 0 23 -9t9 -23zM1648 320q0 -120 -85 -203l-147 -146q-83 -83 -203 -83q-121 0 -204 85l-334 335q-21 21 -42 56l239 18l273 -274q27 -27 68 -27.5t68 26.5l147 146q28 28 28 67q0 40 -28 68l-274 275l18 239q35 -21 56 -42l336 -336q84 -86 84 -204zM1031 1044l-239 -18 l-273 274q-28 28 -68 28q-39 0 -68 -27l-147 -146q-28 -28 -28 -67q0 -40 28 -68l274 -274l-18 -240q-35 21 -56 42l-336 336q-84 86 -84 204q0 120 85 203l147 146q83 83 203 83q121 0 204 -85l334 -335q21 -21 42 -56zM1664 960q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9 t-9 23t9 23t23 9h320q14 0 23 -9t9 -23zM1120 1504v-320q0 -14 -9 -23t-23 -9t-23 9t-9 23v320q0 14 9 23t23 9t23 -9t9 -23zM1527 1353l-256 -256q-11 -9 -23 -9t-23 9q-9 10 -9 23t9 23l256 256q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf128;" horiz-adv-x="1024" d="M704 280v-240q0 -16 -12 -28t-28 -12h-240q-16 0 -28 12t-12 28v240q0 16 12 28t28 12h240q16 0 28 -12t12 -28zM1020 880q0 -54 -15.5 -101t-35 -76.5t-55 -59.5t-57.5 -43.5t-61 -35.5q-41 -23 -68.5 -65t-27.5 -67q0 -17 -12 -32.5t-28 -15.5h-240q-15 0 -25.5 18.5 t-10.5 37.5v45q0 83 65 156.5t143 108.5q59 27 84 56t25 76q0 42 -46.5 74t-107.5 32q-65 0 -108 -29q-35 -25 -107 -115q-13 -16 -31 -16q-12 0 -25 8l-164 125q-13 10 -15.5 25t5.5 28q160 266 464 266q80 0 161 -31t146 -83t106 -127.5t41 -158.5z" />
+<glyph unicode="&#xf129;" horiz-adv-x="640" d="M640 192v-128q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h64v384h-64q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h384q26 0 45 -19t19 -45v-576h64q26 0 45 -19t19 -45zM512 1344v-192q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v192 q0 26 19 45t45 19h256q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf12a;" horiz-adv-x="640" d="M512 288v-224q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v224q0 26 19 45t45 19h256q26 0 45 -19t19 -45zM542 1344l-28 -768q-1 -26 -20.5 -45t-45.5 -19h-256q-26 0 -45.5 19t-20.5 45l-28 768q-1 26 17.5 45t44.5 19h320q26 0 44.5 -19t17.5 -45z" />
+<glyph unicode="&#xf12b;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1534 846v-206h-514l-3 27 q-4 28 -4 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q83 65 188 65q110 0 178 -59.5t68 -158.5q0 -56 -24.5 -103t-62 -76.5t-81.5 -58.5t-82 -50.5t-65.5 -51.5t-30.5 -63h232v80 h126z" />
+<glyph unicode="&#xf12c;" d="M897 167v-167h-248l-159 252l-24 42q-8 9 -11 21h-3l-9 -21q-10 -20 -25 -44l-155 -250h-258v167h128l197 291l-185 272h-137v168h276l139 -228q2 -4 23 -42q8 -9 11 -21h3q3 9 11 21l25 42l140 228h257v-168h-125l-184 -267l204 -296h109zM1536 -50v-206h-514l-4 27 q-3 45 -3 46q0 64 26 117t65 86.5t84 65t84 54.5t65 54t26 64q0 38 -29.5 62.5t-70.5 24.5q-51 0 -97 -39q-14 -11 -36 -38l-105 92q26 37 63 66q80 65 188 65q110 0 178 -59.5t68 -158.5q0 -66 -34.5 -118.5t-84 -86t-99.5 -62.5t-87 -63t-41 -73h232v80h126z" />
+<glyph unicode="&#xf12d;" horiz-adv-x="1920" d="M896 128l336 384h-768l-336 -384h768zM1909 1205q15 -34 9.5 -71.5t-30.5 -65.5l-896 -1024q-38 -44 -96 -44h-768q-38 0 -69.5 20.5t-47.5 54.5q-15 34 -9.5 71.5t30.5 65.5l896 1024q38 44 96 44h768q38 0 69.5 -20.5t47.5 -54.5z" />
+<glyph unicode="&#xf12e;" horiz-adv-x="1664" d="M1664 438q0 -81 -44.5 -135t-123.5 -54q-41 0 -77.5 17.5t-59 38t-56.5 38t-71 17.5q-110 0 -110 -124q0 -39 16 -115t15 -115v-5q-22 0 -33 -1q-34 -3 -97.5 -11.5t-115.5 -13.5t-98 -5q-61 0 -103 26.5t-42 83.5q0 37 17.5 71t38 56.5t38 59t17.5 77.5q0 79 -54 123.5 t-135 44.5q-84 0 -143 -45.5t-59 -127.5q0 -43 15 -83t33.5 -64.5t33.5 -53t15 -50.5q0 -45 -46 -89q-37 -35 -117 -35q-95 0 -245 24q-9 2 -27.5 4t-27.5 4l-13 2q-1 0 -3 1q-2 0 -2 1v1024q2 -1 17.5 -3.5t34 -5t21.5 -3.5q150 -24 245 -24q80 0 117 35q46 44 46 89 q0 22 -15 50.5t-33.5 53t-33.5 64.5t-15 83q0 82 59 127.5t144 45.5q80 0 134 -44.5t54 -123.5q0 -41 -17.5 -77.5t-38 -59t-38 -56.5t-17.5 -71q0 -57 42 -83.5t103 -26.5q64 0 180 15t163 17v-2q-1 -2 -3.5 -17.5t-5 -34t-3.5 -21.5q-24 -150 -24 -245q0 -80 35 -117 q44 -46 89 -46q22 0 50.5 15t53 33.5t64.5 33.5t83 15q82 0 127.5 -59t45.5 -143z" />
+<glyph unicode="&#xf130;" horiz-adv-x="1152" d="M1152 832v-128q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-217 24 -364.5 187.5t-147.5 384.5v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -185 131.5 -316.5t316.5 -131.5 t316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45zM896 1216v-512q0 -132 -94 -226t-226 -94t-226 94t-94 226v512q0 132 94 226t226 94t226 -94t94 -226z" />
+<glyph unicode="&#xf131;" horiz-adv-x="1408" d="M271 591l-101 -101q-42 103 -42 214v128q0 26 19 45t45 19t45 -19t19 -45v-128q0 -53 15 -113zM1385 1193l-361 -361v-128q0 -132 -94 -226t-226 -94q-55 0 -109 19l-96 -96q97 -51 205 -51q185 0 316.5 131.5t131.5 316.5v128q0 26 19 45t45 19t45 -19t19 -45v-128 q0 -221 -147.5 -384.5t-364.5 -187.5v-132h256q26 0 45 -19t19 -45t-19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h256v132q-125 13 -235 81l-254 -254q-10 -10 -23 -10t-23 10l-82 82q-10 10 -10 23t10 23l1234 1234q10 10 23 10t23 -10l82 -82q10 -10 10 -23 t-10 -23zM1005 1325l-621 -621v512q0 132 94 226t226 94q102 0 184.5 -59t116.5 -152z" />
+<glyph unicode="&#xf132;" horiz-adv-x="1280" d="M1088 576v640h-448v-1137q119 63 213 137q235 184 235 360zM1280 1344v-768q0 -86 -33.5 -170.5t-83 -150t-118 -127.5t-126.5 -103t-121 -77.5t-89.5 -49.5t-42.5 -20q-12 -6 -26 -6t-26 6q-16 7 -42.5 20t-89.5 49.5t-121 77.5t-126.5 103t-118 127.5t-83 150 t-33.5 170.5v768q0 26 19 45t45 19h1152q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
+<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
+<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
+<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13a;" d="M813 237l454 454q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-307 -307l-307 307q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf13b;" horiz-adv-x="1408" d="M1130 939l16 175h-884l47 -534h612l-22 -228l-197 -53l-196 53l-13 140h-175l22 -278l362 -100h4v1l359 99l50 544h-644l-15 181h674zM0 1408h1408l-128 -1438l-578 -162l-574 162z" />
+<glyph unicode="&#xf13c;" horiz-adv-x="1792" d="M275 1408h1505l-266 -1333l-804 -267l-698 267l71 356h297l-29 -147l422 -161l486 161l68 339h-1208l58 297h1209l38 191h-1208z" />
+<glyph unicode="&#xf13d;" horiz-adv-x="1792" d="M960 1280q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1792 352v-352q0 -22 -20 -30q-8 -2 -12 -2q-13 0 -23 9l-93 93q-119 -143 -318.5 -226.5t-429.5 -83.5t-429.5 83.5t-318.5 226.5l-93 -93q-9 -9 -23 -9q-4 0 -12 2q-20 8 -20 30v352 q0 14 9 23t23 9h352q22 0 30 -20q8 -19 -7 -35l-100 -100q67 -91 189.5 -153.5t271.5 -82.5v647h-192q-26 0 -45 19t-19 45v128q0 26 19 45t45 19h192v163q-58 34 -93 92.5t-35 128.5q0 106 75 181t181 75t181 -75t75 -181q0 -70 -35 -128.5t-93 -92.5v-163h192q26 0 45 -19 t19 -45v-128q0 -26 -19 -45t-45 -19h-192v-647q149 20 271.5 82.5t189.5 153.5l-100 100q-15 16 -7 35q8 20 30 20h352q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf13e;" horiz-adv-x="1152" d="M1056 768q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h32v320q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45q0 106 -75 181t-181 75t-181 -75t-75 -181 v-320h736z" />
+<glyph unicode="&#xf140;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM1152 640q0 159 -112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5t271.5 -112.5t271.5 112.5t112.5 271.5zM1280 640q0 -212 -150 -362t-362 -150t-362 150 t-150 362t150 362t362 150t362 -150t150 -362zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf141;" horiz-adv-x="1408" d="M384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM896 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM1408 800v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf142;" horiz-adv-x="384" d="M384 288v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 800v-192q0 -40 -28 -68t-68 -28h-192q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68zM384 1312v-192q0 -40 -28 -68t-68 -28h-192 q-40 0 -68 28t-28 68v192q0 40 28 68t68 28h192q40 0 68 -28t28 -68z" />
+<glyph unicode="&#xf143;" d="M512 256q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM863 162q-13 232 -177 396t-396 177q-14 1 -24 -9t-10 -23v-128q0 -13 8.5 -22t21.5 -10q154 -11 264 -121t121 -264q1 -13 10 -21.5t22 -8.5h128q13 0 23 10 t9 24zM1247 161q-5 154 -56 297.5t-139.5 260t-205 205t-260 139.5t-297.5 56q-14 1 -23 -9q-10 -10 -10 -23v-128q0 -13 9 -22t22 -10q204 -7 378 -111.5t278.5 -278.5t111.5 -378q1 -13 10 -22t22 -9h128q13 0 23 10q11 9 9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf144;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM1152 585q32 18 32 55t-32 55l-544 320q-31 19 -64 1q-32 -19 -32 -56v-640q0 -37 32 -56 q16 -8 32 -8q17 0 32 9z" />
+<glyph unicode="&#xf145;" horiz-adv-x="1792" d="M1024 1084l316 -316l-572 -572l-316 316zM813 105l618 618q19 19 19 45t-19 45l-362 362q-18 18 -45 18t-45 -18l-618 -618q-19 -19 -19 -45t19 -45l362 -362q18 -18 45 -18t45 18zM1702 742l-907 -908q-37 -37 -90.5 -37t-90.5 37l-126 126q56 56 56 136t-56 136 t-136 56t-136 -56l-125 126q-37 37 -37 90.5t37 90.5l907 906q37 37 90.5 37t90.5 -37l125 -125q-56 -56 -56 -136t56 -136t136 -56t136 56l126 -125q37 -37 37 -90.5t-37 -90.5z" />
+<glyph unicode="&#xf146;" d="M1280 576v128q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-128q0 -26 19 -45t45 -19h896q26 0 45 19t19 45zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf147;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h832q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5 t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf148;" horiz-adv-x="1024" d="M1018 933q-18 -37 -58 -37h-192v-864q0 -14 -9 -23t-23 -9h-704q-21 0 -29 18q-8 20 4 35l160 192q9 11 25 11h320v640h-192q-40 0 -58 37q-17 37 9 68l320 384q18 22 49 22t49 -22l320 -384q27 -32 9 -68z" />
+<glyph unicode="&#xf149;" horiz-adv-x="1024" d="M32 1280h704q13 0 22.5 -9.5t9.5 -23.5v-863h192q40 0 58 -37t-9 -69l-320 -384q-18 -22 -49 -22t-49 22l-320 384q-26 31 -9 69q18 37 58 37h192v640h-320q-14 0 -25 11l-160 192q-13 14 -4 34q9 19 29 19z" />
+<glyph unicode="&#xf14a;" d="M685 237l614 614q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-467 -467l-211 211q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l358 -358q19 -19 45 -19t45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5 t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14b;" d="M404 428l152 -152l-52 -52h-56v96h-96v56zM818 818q14 -13 -3 -30l-291 -291q-17 -17 -30 -3q-14 13 3 30l291 291q17 17 30 3zM544 128l544 544l-288 288l-544 -544v-288h288zM1152 736l92 92q28 28 28 68t-28 68l-152 152q-28 28 -68 28t-68 -28l-92 -92zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14c;" d="M1280 608v480q0 26 -19 45t-45 19h-480q-42 0 -59 -39q-17 -41 14 -70l144 -144l-534 -534q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l534 534l144 -144q18 -19 45 -19q12 0 25 5q39 17 39 59zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14d;" d="M1005 435l352 352q19 19 19 45t-19 45l-352 352q-30 31 -69 14q-40 -17 -40 -59v-160q-119 0 -216 -19.5t-162.5 -51t-114 -79t-76.5 -95.5t-44.5 -109t-21.5 -111.5t-5 -110.5q0 -181 167 -404q10 -12 25 -12q7 0 13 3q22 9 19 33q-44 354 62 473q46 52 130 75.5 t224 23.5v-160q0 -42 40 -59q12 -5 24 -5q26 0 45 19zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf14e;" d="M640 448l256 128l-256 128v-256zM1024 1039v-542l-512 -256v542zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf150;" d="M1145 861q18 -35 -5 -66l-320 -448q-19 -27 -52 -27t-52 27l-320 448q-23 31 -5 66q17 35 57 35h640q40 0 57 -35zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf151;" d="M1145 419q-17 -35 -57 -35h-640q-40 0 -57 35q-18 35 5 66l320 448q19 27 52 27t52 -27l320 -448q23 -31 5 -66zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf152;" d="M1088 640q0 -33 -27 -52l-448 -320q-31 -23 -66 -5q-35 17 -35 57v640q0 40 35 57q35 18 66 -5l448 -320q27 -19 27 -52zM1280 160v960q0 14 -9 23t-23 9h-960q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h960q14 0 23 9t9 23zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf153;" horiz-adv-x="1024" d="M976 229l35 -159q3 -12 -3 -22.5t-17 -14.5l-5 -1q-4 -2 -10.5 -3.5t-16 -4.5t-21.5 -5.5t-25.5 -5t-30 -5t-33.5 -4.5t-36.5 -3t-38.5 -1q-234 0 -409 130.5t-238 351.5h-95q-13 0 -22.5 9.5t-9.5 22.5v113q0 13 9.5 22.5t22.5 9.5h66q-2 57 1 105h-67q-14 0 -23 9 t-9 23v114q0 14 9 23t23 9h98q67 210 243.5 338t400.5 128q102 0 194 -23q11 -3 20 -15q6 -11 3 -24l-43 -159q-3 -13 -14 -19.5t-24 -2.5l-4 1q-4 1 -11.5 2.5l-17.5 3.5t-22.5 3.5t-26 3t-29 2.5t-29.5 1q-126 0 -226 -64t-150 -176h468q16 0 25 -12q10 -12 7 -26 l-24 -114q-5 -26 -32 -26h-488q-3 -37 0 -105h459q15 0 25 -12q9 -12 6 -27l-24 -112q-2 -11 -11 -18.5t-20 -7.5h-387q48 -117 149.5 -185.5t228.5 -68.5q18 0 36 1.5t33.5 3.5t29.5 4.5t24.5 5t18.5 4.5l12 3l5 2q13 5 26 -2q12 -7 15 -21z" />
+<glyph unicode="&#xf154;" horiz-adv-x="1024" d="M1020 399v-367q0 -14 -9 -23t-23 -9h-956q-14 0 -23 9t-9 23v150q0 13 9.5 22.5t22.5 9.5h97v383h-95q-14 0 -23 9.5t-9 22.5v131q0 14 9 23t23 9h95v223q0 171 123.5 282t314.5 111q185 0 335 -125q9 -8 10 -20.5t-7 -22.5l-103 -127q-9 -11 -22 -12q-13 -2 -23 7 q-5 5 -26 19t-69 32t-93 18q-85 0 -137 -47t-52 -123v-215h305q13 0 22.5 -9t9.5 -23v-131q0 -13 -9.5 -22.5t-22.5 -9.5h-305v-379h414v181q0 13 9 22.5t23 9.5h162q14 0 23 -9.5t9 -22.5z" />
+<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
+<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
+<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
+<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
+<glyph unicode="&#xf15b;" d="M1024 1024v472q22 -14 36 -28l408 -408q14 -14 28 -36h-472zM896 992q0 -40 28 -68t68 -28h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544z" />
+<glyph unicode="&#xf15c;" d="M1468 1060q14 -14 28 -36h-472v472q22 -14 36 -28zM992 896h544v-1056q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h800v-544q0 -40 28 -68t68 -28zM1152 160v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-704q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h704q14 0 23 9t9 23z" />
+<glyph unicode="&#xf15d;" horiz-adv-x="1664" d="M1191 1128h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1572 -23 v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -11v-2l14 2q9 2 30 2h248v119h121zM1661 874v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162 l230 -662h70z" />
+<glyph unicode="&#xf15e;" horiz-adv-x="1664" d="M1191 104h177l-72 218l-12 47q-2 16 -2 20h-4l-3 -20q0 -1 -3.5 -18t-7.5 -29zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1661 -150 v-106h-288v106h75l-47 144h-243l-47 -144h75v-106h-287v106h70l230 662h162l230 -662h70zM1572 1001v-233h-584v90l369 529q12 18 21 27l11 9v3q-2 0 -6.5 -0.5t-7.5 -0.5q-12 -3 -30 -3h-232v-115h-120v229h567v-89l-369 -530q-6 -8 -21 -26l-11 -10v-3l14 3q9 1 30 1h248 v119h121z" />
+<glyph unicode="&#xf160;" horiz-adv-x="1792" d="M736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23zM1792 -32v-192q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832 q14 0 23 -9t9 -23zM1600 480v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1408 992v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1216 1504v-192q0 -14 -9 -23t-23 -9h-256 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf161;" horiz-adv-x="1792" d="M1216 -32v-192q0 -14 -9 -23t-23 -9h-256q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h256q14 0 23 -9t9 -23zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192 q14 0 23 -9t9 -23zM1408 480v-192q0 -14 -9 -23t-23 -9h-448q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h448q14 0 23 -9t9 -23zM1600 992v-192q0 -14 -9 -23t-23 -9h-640q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h640q14 0 23 -9t9 -23zM1792 1504v-192q0 -14 -9 -23t-23 -9h-832 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h832q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf162;" d="M1346 223q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9t9 -23 zM1486 165q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5 t82 -252.5zM1456 882v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165z" />
+<glyph unicode="&#xf163;" d="M1346 1247q0 63 -44 116t-103 53q-52 0 -83 -37t-31 -94t36.5 -95t104.5 -38q50 0 85 27t35 68zM736 96q0 -12 -10 -24l-319 -319q-10 -9 -23 -9q-12 0 -23 9l-320 320q-15 16 -7 35q8 20 30 20h192v1376q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1376h192q14 0 23 -9 t9 -23zM1456 -142v-114h-469v114h167v432q0 7 0.5 19t0.5 17v16h-2l-7 -12q-8 -13 -26 -31l-62 -58l-82 86l192 185h123v-654h165zM1486 1189q0 -62 -13 -121.5t-41 -114t-68 -95.5t-98.5 -65.5t-127.5 -24.5q-62 0 -108 16q-24 8 -42 15l39 113q15 -7 31 -11q37 -13 75 -13 q84 0 134.5 58.5t66.5 145.5h-2q-21 -23 -61.5 -37t-84.5 -14q-106 0 -173 71.5t-67 172.5q0 105 72 178t181 73q123 0 205 -94.5t82 -252.5z" />
+<glyph unicode="&#xf164;" horiz-adv-x="1664" d="M256 192q0 26 -19 45t-45 19q-27 0 -45.5 -19t-18.5 -45q0 -27 18.5 -45.5t45.5 -18.5q26 0 45 18.5t19 45.5zM416 704v-640q0 -26 -19 -45t-45 -19h-288q-26 0 -45 19t-19 45v640q0 26 19 45t45 19h288q26 0 45 -19t19 -45zM1600 704q0 -86 -55 -149q15 -44 15 -76 q3 -76 -43 -137q17 -56 0 -117q-15 -57 -54 -94q9 -112 -49 -181q-64 -76 -197 -78h-36h-76h-17q-66 0 -144 15.5t-121.5 29t-120.5 39.5q-123 43 -158 44q-26 1 -45 19.5t-19 44.5v641q0 25 18 43.5t43 20.5q24 2 76 59t101 121q68 87 101 120q18 18 31 48t17.5 48.5 t13.5 60.5q7 39 12.5 61t19.5 52t34 50q19 19 45 19q46 0 82.5 -10.5t60 -26t40 -40.5t24 -45t12 -50t5 -45t0.5 -39q0 -38 -9.5 -76t-19 -60t-27.5 -56q-3 -6 -10 -18t-11 -22t-8 -24h277q78 0 135 -57t57 -135z" />
+<glyph unicode="&#xf165;" horiz-adv-x="1664" d="M256 960q0 -26 -19 -45t-45 -19q-27 0 -45.5 19t-18.5 45q0 27 18.5 45.5t45.5 18.5q26 0 45 -18.5t19 -45.5zM416 448v640q0 26 -19 45t-45 19h-288q-26 0 -45 -19t-19 -45v-640q0 -26 19 -45t45 -19h288q26 0 45 19t19 45zM1545 597q55 -61 55 -149q-1 -78 -57.5 -135 t-134.5 -57h-277q4 -14 8 -24t11 -22t10 -18q18 -37 27 -57t19 -58.5t10 -76.5q0 -24 -0.5 -39t-5 -45t-12 -50t-24 -45t-40 -40.5t-60 -26t-82.5 -10.5q-26 0 -45 19q-20 20 -34 50t-19.5 52t-12.5 61q-9 42 -13.5 60.5t-17.5 48.5t-31 48q-33 33 -101 120q-49 64 -101 121 t-76 59q-25 2 -43 20.5t-18 43.5v641q0 26 19 44.5t45 19.5q35 1 158 44q77 26 120.5 39.5t121.5 29t144 15.5h17h76h36q133 -2 197 -78q58 -69 49 -181q39 -37 54 -94q17 -61 0 -117q46 -61 43 -137q0 -32 -15 -76z" />
+<glyph unicode="&#xf166;" d="M919 233v157q0 50 -29 50q-17 0 -33 -16v-224q16 -16 33 -16q29 0 29 49zM1103 355h66v34q0 51 -33 51t-33 -51v-34zM532 621v-70h-80v-423h-74v423h-78v70h232zM733 495v-367h-67v40q-39 -45 -76 -45q-33 0 -42 28q-6 16 -6 54v290h66v-270q0 -24 1 -26q1 -15 15 -15 q20 0 42 31v280h67zM985 384v-146q0 -52 -7 -73q-12 -42 -53 -42q-35 0 -68 41v-36h-67v493h67v-161q32 40 68 40q41 0 53 -42q7 -21 7 -74zM1236 255v-9q0 -29 -2 -43q-3 -22 -15 -40q-27 -40 -80 -40q-52 0 -81 38q-21 27 -21 86v129q0 59 20 86q29 38 80 38t78 -38 q21 -28 21 -86v-76h-133v-65q0 -51 34 -51q24 0 30 26q0 1 0.5 7t0.5 16.5v21.5h68zM785 1079v-156q0 -51 -32 -51t-32 51v156q0 52 32 52t32 -52zM1318 366q0 177 -19 260q-10 44 -43 73.5t-76 34.5q-136 15 -412 15q-275 0 -411 -15q-44 -5 -76.5 -34.5t-42.5 -73.5 q-20 -87 -20 -260q0 -176 20 -260q10 -43 42.5 -73t75.5 -35q137 -15 412 -15t412 15q43 5 75.5 35t42.5 73q20 84 20 260zM563 1017l90 296h-75l-51 -195l-53 195h-78l24 -69t23 -69q35 -103 46 -158v-201h74v201zM852 936v130q0 58 -21 87q-29 38 -78 38q-51 0 -78 -38 q-21 -29 -21 -87v-130q0 -58 21 -87q27 -38 78 -38q49 0 78 38q21 27 21 87zM1033 816h67v370h-67v-283q-22 -31 -42 -31q-15 0 -16 16q-1 2 -1 26v272h-67v-293q0 -37 6 -55q11 -27 43 -27q36 0 77 45v-40zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960 q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf167;" d="M971 292v-211q0 -67 -39 -67q-23 0 -45 22v301q22 22 45 22q39 0 39 -67zM1309 291v-46h-90v46q0 68 45 68t45 -68zM343 509h107v94h-312v-94h105v-569h100v569zM631 -60h89v494h-89v-378q-30 -42 -57 -42q-18 0 -21 21q-1 3 -1 35v364h-89v-391q0 -49 8 -73 q12 -37 58 -37q48 0 102 61v-54zM1060 88v197q0 73 -9 99q-17 56 -71 56q-50 0 -93 -54v217h-89v-663h89v48q45 -55 93 -55q54 0 71 55q9 27 9 100zM1398 98v13h-91q0 -51 -2 -61q-7 -36 -40 -36q-46 0 -46 69v87h179v103q0 79 -27 116q-39 51 -106 51q-68 0 -107 -51 q-28 -37 -28 -116v-173q0 -79 29 -116q39 -51 108 -51q72 0 108 53q18 27 21 54q2 9 2 58zM790 1011v210q0 69 -43 69t-43 -69v-210q0 -70 43 -70t43 70zM1509 260q0 -234 -26 -350q-14 -59 -58 -99t-102 -46q-184 -21 -555 -21t-555 21q-58 6 -102.5 46t-57.5 99 q-26 112 -26 350q0 234 26 350q14 59 58 99t103 47q183 20 554 20t555 -20q58 -7 102.5 -47t57.5 -99q26 -112 26 -350zM511 1536h102l-121 -399v-271h-100v271q-14 74 -61 212q-37 103 -65 187h106l71 -263zM881 1203v-175q0 -81 -28 -118q-37 -51 -106 -51q-67 0 -105 51 q-28 38 -28 118v175q0 80 28 117q38 51 105 51q69 0 106 -51q28 -37 28 -117zM1216 1365v-499h-91v55q-53 -62 -103 -62q-46 0 -59 37q-8 24 -8 75v394h91v-367q0 -33 1 -35q3 -22 21 -22q27 0 57 43v381h91z" />
+<glyph unicode="&#xf168;" horiz-adv-x="1408" d="M597 869q-10 -18 -257 -456q-27 -46 -65 -46h-239q-21 0 -31 17t0 36l253 448q1 0 0 1l-161 279q-12 22 -1 37q9 15 32 15h239q40 0 66 -45zM1403 1511q11 -16 0 -37l-528 -934v-1l336 -615q11 -20 1 -37q-10 -15 -32 -15h-239q-42 0 -66 45l-339 622q18 32 531 942 q25 45 64 45h241q22 0 31 -15z" />
+<glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
+<glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
+<glyph unicode="&#xf16c;" d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
+<glyph unicode="&#xf16d;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270 q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5 t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317 q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
+<glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
+<glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
+<glyph unicode="&#xf172;" d="M848 666q0 43 -41 66t-77 1q-43 -20 -42.5 -72.5t43.5 -70.5q39 -23 81 4t36 72zM928 682q8 -66 -36 -121t-110 -61t-119 40t-56 113q-2 49 25.5 93t72.5 64q70 31 141.5 -10t81.5 -118zM1100 1073q-20 -21 -53.5 -34t-53 -16t-63.5 -8q-155 -20 -324 0q-44 6 -63 9.5 t-52.5 16t-54.5 32.5q13 19 36 31t40 15.5t47 8.5q198 35 408 1q33 -5 51 -8.5t43 -16t39 -31.5zM1142 327q0 7 5.5 26.5t3 32t-17.5 16.5q-161 -106 -365 -106t-366 106l-12 -6l-5 -12q26 -154 41 -210q47 -81 204 -108q249 -46 428 53q34 19 49 51.5t22.5 85.5t12.5 71z M1272 1020q9 53 -8 75q-43 55 -155 88q-216 63 -487 36q-132 -12 -226 -46q-38 -15 -59.5 -25t-47 -34t-29.5 -54q8 -68 19 -138t29 -171t24 -137q1 -5 5 -31t7 -36t12 -27t22 -28q105 -80 284 -100q259 -28 440 63q24 13 39.5 23t31 29t19.5 40q48 267 80 473zM1536 1120 v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf173;" horiz-adv-x="1024" d="M944 207l80 -237q-23 -35 -111 -66t-177 -32q-104 -2 -190.5 26t-142.5 74t-95 106t-55.5 120t-16.5 118v544h-168v215q72 26 129 69.5t91 90t58 102t34 99t15 88.5q1 5 4.5 8.5t7.5 3.5h244v-424h333v-252h-334v-518q0 -30 6.5 -56t22.5 -52.5t49.5 -41.5t81.5 -14 q78 2 134 29z" />
+<glyph unicode="&#xf174;" d="M1136 75l-62 183q-44 -22 -103 -22q-36 -1 -62 10.5t-38.5 31.5t-17.5 40.5t-5 43.5v398h257v194h-256v326h-188q-8 0 -9 -10q-5 -44 -17.5 -87t-39 -95t-77 -95t-118.5 -68v-165h130v-418q0 -57 21.5 -115t65 -111t121 -85.5t176.5 -30.5q69 1 136.5 25t85.5 50z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf175;" horiz-adv-x="768" d="M765 237q8 -19 -5 -35l-350 -384q-10 -10 -23 -10q-14 0 -24 10l-355 384q-13 16 -5 35q9 19 29 19h224v1248q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-1248h224q21 0 29 -19z" />
+<glyph unicode="&#xf176;" horiz-adv-x="768" d="M765 1043q-9 -19 -29 -19h-224v-1248q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v1248h-224q-21 0 -29 19t5 35l350 384q10 10 23 10q14 0 24 -10l355 -384q13 -16 5 -35z" />
+<glyph unicode="&#xf177;" horiz-adv-x="1792" d="M1792 736v-192q0 -14 -9 -23t-23 -9h-1248v-224q0 -21 -19 -29t-35 5l-384 350q-10 10 -10 23q0 14 10 24l384 354q16 14 35 6q19 -9 19 -29v-224h1248q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf178;" horiz-adv-x="1792" d="M1728 643q0 -14 -10 -24l-384 -354q-16 -14 -35 -6q-19 9 -19 29v224h-1248q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h1248v224q0 21 19 29t35 -5l384 -350q10 -10 10 -23z" />
+<glyph unicode="&#xf179;" horiz-adv-x="1408" d="M1393 321q-39 -125 -123 -250q-129 -196 -257 -196q-49 0 -140 32q-86 32 -151 32q-61 0 -142 -33q-81 -34 -132 -34q-152 0 -301 259q-147 261 -147 503q0 228 113 374q112 144 284 144q72 0 177 -30q104 -30 138 -30q45 0 143 34q102 34 173 34q119 0 213 -65 q52 -36 104 -100q-79 -67 -114 -118q-65 -94 -65 -207q0 -124 69 -223t158 -126zM1017 1494q0 -61 -29 -136q-30 -75 -93 -138q-54 -54 -108 -72q-37 -11 -104 -17q3 149 78 257q74 107 250 148q1 -3 2.5 -11t2.5 -11q0 -4 0.5 -10t0.5 -10z" />
+<glyph unicode="&#xf17a;" horiz-adv-x="1664" d="M682 530v-651l-682 94v557h682zM682 1273v-659h-682v565zM1664 530v-786l-907 125v661h907zM1664 1408v-794h-907v669z" />
+<glyph unicode="&#xf17b;" horiz-adv-x="1408" d="M493 1053q16 0 27.5 11.5t11.5 27.5t-11.5 27.5t-27.5 11.5t-27 -11.5t-11 -27.5t11 -27.5t27 -11.5zM915 1053q16 0 27 11.5t11 27.5t-11 27.5t-27 11.5t-27.5 -11.5t-11.5 -27.5t11.5 -27.5t27.5 -11.5zM103 869q42 0 72 -30t30 -72v-430q0 -43 -29.5 -73t-72.5 -30 t-73 30t-30 73v430q0 42 30 72t73 30zM1163 850v-666q0 -46 -32 -78t-77 -32h-75v-227q0 -43 -30 -73t-73 -30t-73 30t-30 73v227h-138v-227q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73l-1 227h-74q-46 0 -78 32t-32 78v666h918zM931 1255q107 -55 171 -153.5t64 -215.5 h-925q0 117 64 215.5t172 153.5l-71 131q-7 13 5 20q13 6 20 -6l72 -132q95 42 201 42t201 -42l72 132q7 12 20 6q12 -7 5 -20zM1408 767v-430q0 -43 -30 -73t-73 -30q-42 0 -72 30t-30 73v430q0 43 30 72.5t72 29.5q43 0 73 -29.5t30 -72.5z" />
+<glyph unicode="&#xf17c;" d="M663 1125q-11 -1 -15.5 -10.5t-8.5 -9.5q-5 -1 -5 5q0 12 19 15h10zM750 1111q-4 -1 -11.5 6.5t-17.5 4.5q24 11 32 -2q3 -6 -3 -9zM399 684q-4 1 -6 -3t-4.5 -12.5t-5.5 -13.5t-10 -13q-7 -10 -1 -12q4 -1 12.5 7t12.5 18q1 3 2 7t2 6t1.5 4.5t0.5 4v3t-1 2.5t-3 2z M1254 325q0 18 -55 42q4 15 7.5 27.5t5 26t3 21.5t0.5 22.5t-1 19.5t-3.5 22t-4 20.5t-5 25t-5.5 26.5q-10 48 -47 103t-72 75q24 -20 57 -83q87 -162 54 -278q-11 -40 -50 -42q-31 -4 -38.5 18.5t-8 83.5t-11.5 107q-9 39 -19.5 69t-19.5 45.5t-15.5 24.5t-13 15t-7.5 7 q-14 62 -31 103t-29.5 56t-23.5 33t-15 40q-4 21 6 53.5t4.5 49.5t-44.5 25q-15 3 -44.5 18t-35.5 16q-8 1 -11 26t8 51t36 27q37 3 51 -30t4 -58q-11 -19 -2 -26.5t30 -0.5q13 4 13 36v37q-5 30 -13.5 50t-21 30.5t-23.5 15t-27 7.5q-107 -8 -89 -134q0 -15 -1 -15 q-9 9 -29.5 10.5t-33 -0.5t-15.5 5q1 57 -16 90t-45 34q-27 1 -41.5 -27.5t-16.5 -59.5q-1 -15 3.5 -37t13 -37.5t15.5 -13.5q10 3 16 14q4 9 -7 8q-7 0 -15.5 14.5t-9.5 33.5q-1 22 9 37t34 14q17 0 27 -21t9.5 -39t-1.5 -22q-22 -15 -31 -29q-8 -12 -27.5 -23.5 t-20.5 -12.5q-13 -14 -15.5 -27t7.5 -18q14 -8 25 -19.5t16 -19t18.5 -13t35.5 -6.5q47 -2 102 15q2 1 23 7t34.5 10.5t29.5 13t21 17.5q9 14 20 8q5 -3 6.5 -8.5t-3 -12t-16.5 -9.5q-20 -6 -56.5 -21.5t-45.5 -19.5q-44 -19 -70 -23q-25 -5 -79 2q-10 2 -9 -2t17 -19 q25 -23 67 -22q17 1 36 7t36 14t33.5 17.5t30 17t24.5 12t17.5 2.5t8.5 -11q0 -2 -1 -4.5t-4 -5t-6 -4.5t-8.5 -5t-9 -4.5t-10 -5t-9.5 -4.5q-28 -14 -67.5 -44t-66.5 -43t-49 -1q-21 11 -63 73q-22 31 -25 22q-1 -3 -1 -10q0 -25 -15 -56.5t-29.5 -55.5t-21 -58t11.5 -63 q-23 -6 -62.5 -90t-47.5 -141q-2 -18 -1.5 -69t-5.5 -59q-8 -24 -29 -3q-32 31 -36 94q-2 28 4 56q4 19 -1 18l-4 -5q-36 -65 10 -166q5 -12 25 -28t24 -20q20 -23 104 -90.5t93 -76.5q16 -15 17.5 -38t-14 -43t-45.5 -23q8 -15 29 -44.5t28 -54t7 -70.5q46 24 7 92 q-4 8 -10.5 16t-9.5 12t-2 6q3 5 13 9.5t20 -2.5q46 -52 166 -36q133 15 177 87q23 38 34 30q12 -6 10 -52q-1 -25 -23 -92q-9 -23 -6 -37.5t24 -15.5q3 19 14.5 77t13.5 90q2 21 -6.5 73.5t-7.5 97t23 70.5q15 18 51 18q1 37 34.5 53t72.5 10.5t60 -22.5zM626 1152 q3 17 -2.5 30t-11.5 15q-9 2 -9 -7q2 -5 5 -6q10 0 7 -15q-3 -20 8 -20q3 0 3 3zM1045 955q-2 8 -6.5 11.5t-13 5t-14.5 5.5q-5 3 -9.5 8t-7 8t-5.5 6.5t-4 4t-4 -1.5q-14 -16 7 -43.5t39 -31.5q9 -1 14.5 8t3.5 20zM867 1168q0 11 -5 19.5t-11 12.5t-9 3q-14 -1 -7 -7l4 -2 q14 -4 18 -31q0 -3 8 2zM921 1401q0 2 -2.5 5t-9 7t-9.5 6q-15 15 -24 15q-9 -1 -11.5 -7.5t-1 -13t-0.5 -12.5q-1 -4 -6 -10.5t-6 -9t3 -8.5q4 -3 8 0t11 9t15 9q1 1 9 1t15 2t9 7zM1486 60q20 -12 31 -24.5t12 -24t-2.5 -22.5t-15.5 -22t-23.5 -19.5t-30 -18.5 t-31.5 -16.5t-32 -15.5t-27 -13q-38 -19 -85.5 -56t-75.5 -64q-17 -16 -68 -19.5t-89 14.5q-18 9 -29.5 23.5t-16.5 25.5t-22 19.5t-47 9.5q-44 1 -130 1q-19 0 -57 -1.5t-58 -2.5q-44 -1 -79.5 -15t-53.5 -30t-43.5 -28.5t-53.5 -11.5q-29 1 -111 31t-146 43q-19 4 -51 9.5 t-50 9t-39.5 9.5t-33.5 14.5t-17 19.5q-10 23 7 66.5t18 54.5q1 16 -4 40t-10 42.5t-4.5 36.5t10.5 27q14 12 57 14t60 12q30 18 42 35t12 51q21 -73 -32 -106q-32 -20 -83 -15q-34 3 -43 -10q-13 -15 5 -57q2 -6 8 -18t8.5 -18t4.5 -17t1 -22q0 -15 -17 -49t-14 -48 q3 -17 37 -26q20 -6 84.5 -18.5t99.5 -20.5q24 -6 74 -22t82.5 -23t55.5 -4q43 6 64.5 28t23 48t-7.5 58.5t-19 52t-20 36.5q-121 190 -169 242q-68 74 -113 40q-11 -9 -15 15q-3 16 -2 38q1 29 10 52t24 47t22 42q8 21 26.5 72t29.5 78t30 61t39 54q110 143 124 195 q-12 112 -16 310q-2 90 24 151.5t106 104.5q39 21 104 21q53 1 106 -13.5t89 -41.5q57 -42 91.5 -121.5t29.5 -147.5q-5 -95 30 -214q34 -113 133 -218q55 -59 99.5 -163t59.5 -191q8 -49 5 -84.5t-12 -55.5t-20 -22q-10 -2 -23.5 -19t-27 -35.5t-40.5 -33.5t-61 -14 q-18 1 -31.5 5t-22.5 13.5t-13.5 15.5t-11.5 20.5t-9 19.5q-22 37 -41 30t-28 -49t7 -97q20 -70 1 -195q-10 -65 18 -100.5t73 -33t85 35.5q59 49 89.5 66.5t103.5 42.5q53 18 77 36.5t18.5 34.5t-25 28.5t-51.5 23.5q-33 11 -49.5 48t-15 72.5t15.5 47.5q1 -31 8 -56.5 t14.5 -40.5t20.5 -28.5t21 -19t21.5 -13t16.5 -9.5z" />
+<glyph unicode="&#xf17d;" d="M1024 36q-42 241 -140 498h-2l-2 -1q-16 -6 -43 -16.5t-101 -49t-137 -82t-131 -114.5t-103 -148l-15 11q184 -150 418 -150q132 0 256 52zM839 643q-21 49 -53 111q-311 -93 -673 -93q-1 -7 -1 -21q0 -124 44 -236.5t124 -201.5q50 89 123.5 166.5t142.5 124.5t130.5 81 t99.5 48l37 13q4 1 13 3.5t13 4.5zM732 855q-120 213 -244 378q-138 -65 -234 -186t-128 -272q302 0 606 80zM1416 536q-210 60 -409 29q87 -239 128 -469q111 75 185 189.5t96 250.5zM611 1277q-1 0 -2 -1q1 1 2 1zM1201 1132q-185 164 -433 164q-76 0 -155 -19 q131 -170 246 -382q69 26 130 60.5t96.5 61.5t65.5 57t37.5 40.5zM1424 647q-3 232 -149 410l-1 -1q-9 -12 -19 -24.5t-43.5 -44.5t-71 -60.5t-100 -65t-131.5 -64.5q25 -53 44 -95q2 -6 6.5 -17.5t7.5 -16.5q36 5 74.5 7t73.5 2t69 -1.5t64 -4t56.5 -5.5t48 -6.5t36.5 -6 t25 -4.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf17e;" d="M1173 473q0 50 -19.5 91.5t-48.5 68.5t-73 49t-82.5 34t-87.5 23l-104 24q-30 7 -44 10.5t-35 11.5t-30 16t-16.5 21t-7.5 30q0 77 144 77q43 0 77 -12t54 -28.5t38 -33.5t40 -29t48 -12q47 0 75.5 32t28.5 77q0 55 -56 99.5t-142 67.5t-182 23q-68 0 -132 -15.5 t-119.5 -47t-89 -87t-33.5 -128.5q0 -61 19 -106.5t56 -75.5t80 -48.5t103 -32.5l146 -36q90 -22 112 -36q32 -20 32 -60q0 -39 -40 -64.5t-105 -25.5q-51 0 -91.5 16t-65 38.5t-45.5 45t-46 38.5t-54 16q-50 0 -75.5 -30t-25.5 -75q0 -92 122 -157.5t291 -65.5 q73 0 140 18.5t122.5 53.5t88.5 93.5t33 131.5zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5q-130 0 -234 80q-77 -16 -150 -16q-143 0 -273.5 55.5t-225 150t-150 225t-55.5 273.5q0 73 16 150q-80 104 -80 234q0 159 112.5 271.5t271.5 112.5q130 0 234 -80 q77 16 150 16q143 0 273.5 -55.5t225 -150t150 -225t55.5 -273.5q0 -73 -16 -150q80 -104 80 -234z" />
+<glyph unicode="&#xf180;" horiz-adv-x="1280" d="M1000 1102l37 194q5 23 -9 40t-35 17h-712q-23 0 -38.5 -17t-15.5 -37v-1101q0 -7 6 -1l291 352q23 26 38 33.5t48 7.5h239q22 0 37 14.5t18 29.5q24 130 37 191q4 21 -11.5 40t-36.5 19h-294q-29 0 -48 19t-19 48v42q0 29 19 47.5t48 18.5h346q18 0 35 13.5t20 29.5z M1227 1324q-15 -73 -53.5 -266.5t-69.5 -350t-35 -173.5q-6 -22 -9 -32.5t-14 -32.5t-24.5 -33t-38.5 -21t-58 -10h-271q-13 0 -22 -10q-8 -9 -426 -494q-22 -25 -58.5 -28.5t-48.5 5.5q-55 22 -55 98v1410q0 55 38 102.5t120 47.5h888q95 0 127 -53t10 -159zM1227 1324 l-158 -790q4 17 35 173.5t69.5 350t53.5 266.5z" />
+<glyph unicode="&#xf181;" d="M704 192v1024q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-1024q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1376 576v640q0 14 -9 23t-23 9h-480q-14 0 -23 -9t-9 -23v-640q0 -14 9 -23t23 -9h480q14 0 23 9t9 23zM1536 1344v-1408q0 -26 -19 -45t-45 -19h-1408 q-26 0 -45 19t-19 45v1408q0 26 19 45t45 19h1408q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf182;" horiz-adv-x="1280" d="M1280 480q0 -40 -28 -68t-68 -28q-51 0 -80 43l-227 341h-45v-132l247 -411q9 -15 9 -33q0 -26 -19 -45t-45 -19h-192v-272q0 -46 -33 -79t-79 -33h-160q-46 0 -79 33t-33 79v272h-192q-26 0 -45 19t-19 45q0 18 9 33l247 411v132h-45l-227 -341q-29 -43 -80 -43 q-40 0 -68 28t-28 68q0 29 16 53l256 384q73 107 176 107h384q103 0 176 -107l256 -384q16 -24 16 -53zM864 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf183;" horiz-adv-x="1024" d="M1024 832v-416q0 -40 -28 -68t-68 -28t-68 28t-28 68v352h-64v-912q0 -46 -33 -79t-79 -33t-79 33t-33 79v464h-64v-464q0 -46 -33 -79t-79 -33t-79 33t-33 79v912h-64v-352q0 -40 -28 -68t-68 -28t-68 28t-28 68v416q0 80 56 136t136 56h640q80 0 136 -56t56 -136z M736 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf184;" d="M773 234l350 473q16 22 24.5 59t-6 85t-61.5 79q-40 26 -83 25.5t-73.5 -17.5t-54.5 -45q-36 -40 -96 -40q-59 0 -95 40q-24 28 -54.5 45t-73.5 17.5t-84 -25.5q-46 -31 -60.5 -79t-6 -85t24.5 -59zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf185;" horiz-adv-x="1792" d="M1472 640q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5t-223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5t45.5 -223.5t123 -184t184 -123t223.5 -45.5t223.5 45.5t184 123t123 184t45.5 223.5zM1748 363q-4 -15 -20 -20l-292 -96v-306q0 -16 -13 -26q-15 -10 -29 -4 l-292 94l-180 -248q-10 -13 -26 -13t-26 13l-180 248l-292 -94q-14 -6 -29 4q-13 10 -13 26v306l-292 96q-16 5 -20 20q-5 17 4 29l180 248l-180 248q-9 13 -4 29q4 15 20 20l292 96v306q0 16 13 26q15 10 29 4l292 -94l180 248q9 12 26 12t26 -12l180 -248l292 94 q14 6 29 -4q13 -10 13 -26v-306l292 -96q16 -5 20 -20q5 -16 -4 -29l-180 -248l180 -248q9 -12 4 -29z" />
+<glyph unicode="&#xf186;" d="M1262 233q-54 -9 -110 -9q-182 0 -337 90t-245 245t-90 337q0 192 104 357q-201 -60 -328.5 -229t-127.5 -384q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51q144 0 273.5 61.5t220.5 171.5zM1465 318q-94 -203 -283.5 -324.5t-413.5 -121.5q-156 0 -298 61 t-245 164t-164 245t-61 298q0 153 57.5 292.5t156 241.5t235.5 164.5t290 68.5q44 2 61 -39q18 -41 -15 -72q-86 -78 -131.5 -181.5t-45.5 -218.5q0 -148 73 -273t198 -198t273 -73q118 0 228 51q41 18 72 -13q14 -14 17.5 -34t-4.5 -38z" />
+<glyph unicode="&#xf187;" horiz-adv-x="1792" d="M1088 704q0 26 -19 45t-45 19h-256q-26 0 -45 -19t-19 -45t19 -45t45 -19h256q26 0 45 19t19 45zM1664 896v-960q0 -26 -19 -45t-45 -19h-1408q-26 0 -45 19t-19 45v960q0 26 19 45t45 19h1408q26 0 45 -19t19 -45zM1728 1344v-256q0 -26 -19 -45t-45 -19h-1536 q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h1536q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
+<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
+<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
+<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
+<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
+<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
+<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
+<glyph unicode="&#xf194;" d="M1292 898q10 216 -161 222q-231 8 -312 -261q44 19 82 19q85 0 74 -96q-4 -57 -74 -167t-105 -110q-43 0 -82 169q-13 54 -45 255q-30 189 -160 177q-59 -7 -164 -100l-81 -72l-81 -72l52 -67q76 52 87 52q57 0 107 -179q15 -55 45 -164.5t45 -164.5q68 -179 164 -179 q157 0 383 294q220 283 226 444zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf197;" horiz-adv-x="2176" d="M620 416q-110 -64 -268 -64h-128v64h-64q-13 0 -22.5 23.5t-9.5 56.5q0 24 7 49q-58 2 -96.5 10.5t-38.5 20.5t38.5 20.5t96.5 10.5q-7 25 -7 49q0 33 9.5 56.5t22.5 23.5h64v64h128q158 0 268 -64h1113q42 -7 106.5 -18t80.5 -14q89 -15 150 -40.5t83.5 -47.5t22.5 -40 t-22.5 -40t-83.5 -47.5t-150 -40.5q-16 -3 -80.5 -14t-106.5 -18h-1113zM1739 668q53 -36 53 -92t-53 -92l81 -30q68 48 68 122t-68 122zM625 400h1015q-217 -38 -456 -80q-57 0 -113 -24t-83 -48l-28 -24l-288 -288q-26 -26 -70.5 -45t-89.5 -19h-96l-93 464h29 q157 0 273 64zM352 816h-29l93 464h96q46 0 90 -19t70 -45l288 -288q4 -4 11 -10.5t30.5 -23t48.5 -29t61.5 -23t72.5 -10.5l456 -80h-1015q-116 64 -273 64z" />
+<glyph unicode="&#xf198;" horiz-adv-x="1664" d="M1519 760q62 0 103.5 -40.5t41.5 -101.5q0 -97 -93 -130l-172 -59l56 -167q7 -21 7 -47q0 -59 -42 -102t-101 -43q-47 0 -85.5 27t-53.5 72l-55 165l-310 -106l55 -164q8 -24 8 -47q0 -59 -42 -102t-102 -43q-47 0 -85 27t-53 72l-55 163l-153 -53q-29 -9 -50 -9 q-61 0 -101.5 40t-40.5 101q0 47 27.5 85t71.5 53l156 53l-105 313l-156 -54q-26 -8 -48 -8q-60 0 -101 40.5t-41 100.5q0 47 27.5 85t71.5 53l157 53l-53 159q-8 24 -8 47q0 60 42 102.5t102 42.5q47 0 85 -27t53 -72l54 -160l310 105l-54 160q-8 24 -8 47q0 59 42.5 102 t101.5 43q47 0 85.5 -27.5t53.5 -71.5l53 -161l162 55q21 6 43 6q60 0 102.5 -39.5t42.5 -98.5q0 -45 -30 -81.5t-74 -51.5l-157 -54l105 -316l164 56q24 8 46 8zM725 498l310 105l-105 315l-310 -107z" />
+<glyph unicode="&#xf199;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM1280 352v436q-31 -35 -64 -55q-34 -22 -132.5 -85t-151.5 -99q-98 -69 -164 -69v0v0q-66 0 -164 69 q-46 32 -141.5 92.5t-142.5 92.5q-12 8 -33 27t-31 27v-436q0 -40 28 -68t68 -28h832q40 0 68 28t28 68zM1280 925q0 41 -27.5 70t-68.5 29h-832q-40 0 -68 -28t-28 -68q0 -37 30.5 -76.5t67.5 -64.5q47 -32 137.5 -89t129.5 -83q3 -2 17 -11.5t21 -14t21 -13t23.5 -13 t21.5 -9.5t22.5 -7.5t20.5 -2.5t20.5 2.5t22.5 7.5t21.5 9.5t23.5 13t21 13t21 14t17 11.5l267 174q35 23 66.5 62.5t31.5 73.5z" />
+<glyph unicode="&#xf19a;" horiz-adv-x="1792" d="M127 640q0 163 67 313l367 -1005q-196 95 -315 281t-119 411zM1415 679q0 -19 -2.5 -38.5t-10 -49.5t-11.5 -44t-17.5 -59t-17.5 -58l-76 -256l-278 826q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-75 1 -202 10q-12 1 -20.5 -5t-11.5 -15t-1.5 -18.5t9 -16.5 t19.5 -8l80 -8l120 -328l-168 -504l-280 832q46 3 88 8q19 2 26 18.5t-2.5 31t-28.5 13.5l-205 -10q-7 0 -23 0.5t-26 0.5q105 160 274.5 253.5t367.5 93.5q147 0 280.5 -53t238.5 -149h-10q-55 0 -92 -40.5t-37 -95.5q0 -12 2 -24t4 -21.5t8 -23t9 -21t12 -22.5t12.5 -21 t14.5 -24t14 -23q63 -107 63 -212zM909 573l237 -647q1 -6 5 -11q-126 -44 -255 -44q-112 0 -217 32zM1570 1009q95 -174 95 -369q0 -209 -104 -385.5t-279 -278.5l235 678q59 169 59 276q0 42 -6 79zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286 t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 -215q173 0 331.5 68t273 182.5t182.5 273t68 331.5t-68 331.5t-182.5 273t-273 182.5t-331.5 68t-331.5 -68t-273 -182.5t-182.5 -273t-68 -331.5t68 -331.5t182.5 -273 t273 -182.5t331.5 -68z" />
+<glyph unicode="&#xf19b;" horiz-adv-x="1792" d="M1086 1536v-1536l-272 -128q-228 20 -414 102t-293 208.5t-107 272.5q0 140 100.5 263.5t275 205.5t391.5 108v-172q-217 -38 -356.5 -150t-139.5 -255q0 -152 154.5 -267t388.5 -145v1360zM1755 954l37 -390l-525 114l147 83q-119 70 -280 99v172q277 -33 481 -157z" />
+<glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
+<glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
+<glyph unicode="&#xf19e;" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
+<glyph unicode="&#xf1a0;" d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5 t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
+<glyph unicode="&#xf1a1;" horiz-adv-x="1792" d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf1a2;" d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1a3;" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1a4;" horiz-adv-x="1920" d="M1062 824v118q0 42 -30 72t-72 30t-72 -30t-30 -72v-612q0 -175 -126 -299t-303 -124q-178 0 -303.5 125.5t-125.5 303.5v266h328v-262q0 -43 30 -72.5t72 -29.5t72 29.5t30 72.5v620q0 171 126.5 292t301.5 121q176 0 302 -122t126 -294v-136l-195 -58zM1592 602h328 v-266q0 -178 -125.5 -303.5t-303.5 -125.5q-177 0 -303 124.5t-126 300.5v268l131 -61l195 58v-270q0 -42 30 -71.5t72 -29.5t72 29.5t30 71.5v275z" />
+<glyph unicode="&#xf1a5;" d="M1472 160v480h-704v704h-480q-93 0 -158.5 -65.5t-65.5 -158.5v-480h704v-704h480q93 0 158.5 65.5t65.5 158.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf1a6;" horiz-adv-x="2048" d="M328 1254h204v-983h-532v697h328v286zM328 435v369h-123v-369h123zM614 968v-697h205v697h-205zM614 1254v-204h205v204h-205zM901 968h533v-942h-533v163h328v82h-328v697zM1229 435v369h-123v-369h123zM1516 968h532v-942h-532v163h327v82h-327v697zM1843 435v369h-123 v-369h123z" />
+<glyph unicode="&#xf1a7;" d="M1046 516q0 -64 -38 -109t-91 -45q-43 0 -70 15v277q28 17 70 17q53 0 91 -45.5t38 -109.5zM703 944q0 -64 -38 -109.5t-91 -45.5q-43 0 -70 15v277q28 17 70 17q53 0 91 -45t38 -109zM1265 513q0 134 -88 229t-213 95q-20 0 -39 -3q-23 -78 -78 -136q-87 -95 -211 -101 v-636l211 41v206q51 -19 117 -19q125 0 213 95t88 229zM922 940q0 134 -88.5 229t-213.5 95q-74 0 -141 -36h-186v-840l211 41v206q55 -19 116 -19q125 0 213.5 95t88.5 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1a8;" horiz-adv-x="2038" d="M1222 607q75 3 143.5 -20.5t118 -58.5t101 -94.5t84 -108t75.5 -120.5q33 -56 78.5 -109t75.5 -80.5t99 -88.5q-48 -30 -108.5 -57.5t-138.5 -59t-114 -47.5q-44 37 -74 115t-43.5 164.5t-33 180.5t-42.5 168.5t-72.5 123t-122.5 48.5l-10 -2l-6 -4q4 -5 13 -14 q6 -5 28 -23.5t25.5 -22t19 -18t18 -20.5t11.5 -21t10.5 -27.5t4.5 -31t4 -40.5l1 -33q1 -26 -2.5 -57.5t-7.5 -52t-12.5 -58.5t-11.5 -53q-35 1 -101 -9.5t-98 -10.5q-39 0 -72 10q-2 16 -2 47q0 74 3 96q2 13 31.5 41.5t57 59t26.5 51.5q-24 2 -43 -24 q-36 -53 -111.5 -99.5t-136.5 -46.5q-25 0 -75.5 63t-106.5 139.5t-84 96.5q-6 4 -27 30q-482 -112 -513 -112q-16 0 -28 11t-12 27q0 15 8.5 26.5t22.5 14.5l486 106q-8 14 -8 25t5.5 17.5t16 11.5t20 7t23 4.5t18.5 4.5q4 1 15.5 7.5t17.5 6.5q15 0 28 -16t20 -33 q163 37 172 37q17 0 29.5 -11t12.5 -28q0 -15 -8.5 -26t-23.5 -14l-182 -40l-1 -16q-1 -26 81.5 -117.5t104.5 -91.5q47 0 119 80t72 129q0 36 -23.5 53t-51 18.5t-51 11.5t-23.5 34q0 16 10 34l-68 19q43 44 43 117q0 26 -5 58q82 16 144 16q44 0 71.5 -1.5t48.5 -8.5 t31 -13.5t20.5 -24.5t15.5 -33.5t17 -47.5t24 -60l50 25q-3 -40 -23 -60t-42.5 -21t-40 -6.5t-16.5 -20.5zM1282 842q-5 5 -13.5 15.5t-12 14.5t-10.5 11.5t-10 10.5l-8 8t-8.5 7.5t-8 5t-8.5 4.5q-7 3 -14.5 5t-20.5 2.5t-22 0.5h-32.5h-37.5q-126 0 -217 -43 q16 30 36 46.5t54 29.5t65.5 36t46 36.5t50 55t43.5 50.5q12 -9 28 -31.5t32 -36.5t38 -13l12 1v-76l22 -1q247 95 371 190q28 21 50 39t42.5 37.5t33 31t29.5 34t24 31t24.5 37t23 38t27 47.5t29.5 53l7 9q-2 -53 -43 -139q-79 -165 -205 -264t-306 -142q-14 -3 -42 -7.5 t-50 -9.5t-39 -14q3 -19 24.5 -46t21.5 -34q0 -11 -26 -30zM1061 -79q39 26 131.5 47.5t146.5 21.5q9 0 22.5 -15.5t28 -42.5t26 -50t24 -51t14.5 -33q-121 -45 -244 -45q-61 0 -125 11zM822 568l48 12l109 -177l-73 -48zM1323 51q3 -15 3 -16q0 -7 -17.5 -14.5t-46 -13 t-54 -9.5t-53.5 -7.5t-32 -4.5l-7 43q21 2 60.5 8.5t72 10t60.5 3.5h14zM866 679l-96 -20l-6 17q10 1 32.5 7t34.5 6q19 0 35 -10zM1061 45h31l10 -83l-41 -12v95zM1950 1535v1v-1zM1950 1535l-1 -5l-2 -2l1 3zM1950 1535l1 1z" />
+<glyph unicode="&#xf1a9;" d="M1167 -50q-5 19 -24 5q-30 -22 -87 -39t-131 -17q-129 0 -193 49q-5 4 -13 4q-11 0 -26 -12q-7 -6 -7.5 -16t7.5 -20q34 -32 87.5 -46t102.5 -12.5t99 4.5q41 4 84.5 20.5t65 30t28.5 20.5q12 12 7 29zM1128 65q-19 47 -39 61q-23 15 -76 15q-47 0 -71 -10 q-29 -12 -78 -56q-26 -24 -12 -44q9 -8 17.5 -4.5t31.5 23.5q3 2 10.5 8.5t10.5 8.5t10 7t11.5 7t12.5 5t15 4.5t16.5 2.5t20.5 1q27 0 44.5 -7.5t23 -14.5t13.5 -22q10 -17 12.5 -20t12.5 1q23 12 14 34zM1483 346q0 22 -5 44.5t-16.5 45t-34 36.5t-52.5 14 q-33 0 -97 -41.5t-129 -83.5t-101 -42q-27 -1 -63.5 19t-76 49t-83.5 58t-100 49t-111 19q-115 -1 -197 -78.5t-84 -178.5q-2 -112 74 -164q29 -20 62.5 -28.5t103.5 -8.5q57 0 132 32.5t134 71t120 70.5t93 31q26 -1 65 -31.5t71.5 -67t68 -67.5t55.5 -32q35 -3 58.5 14 t55.5 63q28 41 42.5 101t14.5 106zM1536 506q0 -164 -62 -304.5t-166 -236t-242.5 -149.5t-290.5 -54t-293 57.5t-247.5 157t-170.5 241.5t-64 302q0 89 19.5 172.5t49 145.5t70.5 118.5t78.5 94t78.5 69.5t64.5 46.5t42.5 24.5q14 8 51 26.5t54.5 28.5t48 30t60.5 44 q36 28 58 72.5t30 125.5q129 -155 186 -193q44 -29 130 -68t129 -66q21 -13 39 -25t60.5 -46.5t76 -70.5t75 -95t69 -122t47 -148.5t19.5 -177.5z" />
+<glyph unicode="&#xf1aa;" d="M1070 463l-160 -160l-151 -152l-30 -30q-65 -64 -151.5 -87t-171.5 -2q-16 -70 -72 -115t-129 -45q-85 0 -145 60.5t-60 145.5q0 72 44.5 128t113.5 72q-22 86 1 173t88 152l12 12l151 -152l-11 -11q-37 -37 -37 -89t37 -90q37 -37 89 -37t89 37l30 30l151 152l161 160z M729 1145l12 -12l-152 -152l-12 12q-37 37 -89 37t-89 -37t-37 -89.5t37 -89.5l29 -29l152 -152l160 -160l-151 -152l-161 160l-151 152l-30 30q-68 67 -90 159.5t5 179.5q-70 15 -115 71t-45 129q0 85 60 145.5t145 60.5q76 0 133.5 -49t69.5 -123q84 20 169.5 -3.5 t149.5 -87.5zM1536 78q0 -85 -60 -145.5t-145 -60.5q-74 0 -131 47t-71 118q-86 -28 -179.5 -6t-161.5 90l-11 12l151 152l12 -12q37 -37 89 -37t89 37t37 89t-37 89l-30 30l-152 152l-160 160l152 152l160 -160l152 -152l29 -30q64 -64 87.5 -150.5t2.5 -171.5 q76 -11 126.5 -68.5t50.5 -134.5zM1534 1202q0 -77 -51 -135t-127 -69q26 -85 3 -176.5t-90 -158.5l-12 -12l-151 152l12 12q37 37 37 89t-37 89t-89 37t-89 -37l-30 -30l-152 -152l-160 -160l-152 152l161 160l152 152l29 30q67 67 159 89.5t178 -3.5q11 75 68.5 126 t135.5 51q85 0 145 -60.5t60 -145.5z" />
+<glyph unicode="&#xf1ab;" d="M654 458q-1 -3 -12.5 0.5t-31.5 11.5l-20 9q-44 20 -87 49q-7 5 -41 31.5t-38 28.5q-67 -103 -134 -181q-81 -95 -105 -110q-4 -2 -19.5 -4t-18.5 0q6 4 82 92q21 24 85.5 115t78.5 118q17 30 51 98.5t36 77.5q-8 1 -110 -33q-8 -2 -27.5 -7.5t-34.5 -9.5t-17 -5 q-2 -2 -2 -10.5t-1 -9.5q-5 -10 -31 -15q-23 -7 -47 0q-18 4 -28 21q-4 6 -5 23q6 2 24.5 5t29.5 6q58 16 105 32q100 35 102 35q10 2 43 19.5t44 21.5q9 3 21.5 8t14.5 5.5t6 -0.5q2 -12 -1 -33q0 -2 -12.5 -27t-26.5 -53.5t-17 -33.5q-25 -50 -77 -131l64 -28 q12 -6 74.5 -32t67.5 -28q4 -1 10.5 -25.5t4.5 -30.5zM449 944q3 -15 -4 -28q-12 -23 -50 -38q-30 -12 -60 -12q-26 3 -49 26q-14 15 -18 41l1 3q3 -3 19.5 -5t26.5 0t58 16q36 12 55 14q17 0 21 -17zM1147 815l63 -227l-139 42zM39 15l694 232v1032l-694 -233v-1031z M1280 332l102 -31l-181 657l-100 31l-216 -536l102 -31l45 110l211 -65zM777 1294l573 -184v380zM1088 -29l158 -13l-54 -160l-40 66q-130 -83 -276 -108q-58 -12 -91 -12h-84q-79 0 -199.5 39t-183.5 85q-8 7 -8 16q0 8 5 13.5t13 5.5q4 0 18 -7.5t30.5 -16.5t20.5 -11 q73 -37 159.5 -61.5t157.5 -24.5q95 0 167 14.5t157 50.5q15 7 30.5 15.5t34 19t28.5 16.5zM1536 1050v-1079l-774 246q-14 -6 -375 -127.5t-368 -121.5q-13 0 -18 13q0 1 -1 3v1078q3 9 4 10q5 6 20 11q106 35 149 50v384l558 -198q2 0 160.5 55t316 108.5t161.5 53.5 q20 0 20 -21v-418z" />
+<glyph unicode="&#xf1ac;" horiz-adv-x="1792" d="M288 1152q66 0 113 -47t47 -113v-1088q0 -66 -47 -113t-113 -47h-128q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h128zM1664 989q58 -34 93 -93t35 -128v-768q0 -106 -75 -181t-181 -75h-864q-66 0 -113 47t-47 113v1536q0 40 28 68t68 28h672q40 0 88 -20t76 -48 l152 -152q28 -28 48 -76t20 -88v-163zM928 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM928 512v128q0 14 -9 23 t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1184 256v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128 q14 0 23 9t9 23zM1184 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 0v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 256v128q0 14 -9 23t-23 9h-128 q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1440 512v128q0 14 -9 23t-23 9h-128q-14 0 -23 -9t-9 -23v-128q0 -14 9 -23t23 -9h128q14 0 23 9t9 23zM1536 896v256h-160q-40 0 -68 28t-28 68v160h-640v-512h896z" />
+<glyph unicode="&#xf1ad;" d="M1344 1536q26 0 45 -19t19 -45v-1664q0 -26 -19 -45t-45 -19h-1280q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h1280zM512 1248v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 992v-64q0 -14 9 -23t23 -9h64q14 0 23 9 t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 736v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM512 480v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 160v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM384 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM384 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 -96v192q0 14 -9 23t-23 9h-320q-14 0 -23 -9 t-9 -23v-192q0 -14 9 -23t23 -9h320q14 0 23 9t9 23zM896 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 928v64 q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM896 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 160v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64 q14 0 23 9t9 23zM1152 416v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 672v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 928v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9 t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1152 1184v64q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-64q0 -14 9 -23t23 -9h64q14 0 23 9t9 23z" />
+<glyph unicode="&#xf1ae;" horiz-adv-x="1280" d="M1188 988l-292 -292v-824q0 -46 -33 -79t-79 -33t-79 33t-33 79v384h-64v-384q0 -46 -33 -79t-79 -33t-79 33t-33 79v824l-292 292q-28 28 -28 68t28 68t68 28t68 -28l228 -228h368l228 228q28 28 68 28t68 -28t28 -68t-28 -68zM864 1152q0 -93 -65.5 -158.5 t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1b0;" horiz-adv-x="1664" d="M780 1064q0 -60 -19 -113.5t-63 -92.5t-105 -39q-76 0 -138 57.5t-92 135.5t-30 151q0 60 19 113.5t63 92.5t105 39q77 0 138.5 -57.5t91.5 -135t30 -151.5zM438 581q0 -80 -42 -139t-119 -59q-76 0 -141.5 55.5t-100.5 133.5t-35 152q0 80 42 139.5t119 59.5 q76 0 141.5 -55.5t100.5 -134t35 -152.5zM832 608q118 0 255 -97.5t229 -237t92 -254.5q0 -46 -17 -76.5t-48.5 -45t-64.5 -20t-76 -5.5q-68 0 -187.5 45t-182.5 45q-66 0 -192.5 -44.5t-200.5 -44.5q-183 0 -183 146q0 86 56 191.5t139.5 192.5t187.5 146t193 59zM1071 819 q-61 0 -105 39t-63 92.5t-19 113.5q0 74 30 151.5t91.5 135t138.5 57.5q61 0 105 -39t63 -92.5t19 -113.5q0 -73 -30 -151t-92 -135.5t-138 -57.5zM1503 923q77 0 119 -59.5t42 -139.5q0 -74 -35 -152t-100.5 -133.5t-141.5 -55.5q-77 0 -119 59t-42 139q0 74 35 152.5 t100.5 134t141.5 55.5z" />
+<glyph unicode="&#xf1b1;" horiz-adv-x="768" d="M704 1008q0 -145 -57 -243.5t-152 -135.5l45 -821q2 -26 -16 -45t-44 -19h-192q-26 0 -44 19t-16 45l45 821q-95 37 -152 135.5t-57 243.5q0 128 42.5 249.5t117.5 200t160 78.5t160 -78.5t117.5 -200t42.5 -249.5z" />
+<glyph unicode="&#xf1b2;" horiz-adv-x="1792" d="M896 -93l640 349v636l-640 -233v-752zM832 772l698 254l-698 254l-698 -254zM1664 1024v-768q0 -35 -18 -65t-49 -47l-704 -384q-28 -16 -61 -16t-61 16l-704 384q-31 17 -49 47t-18 65v768q0 40 23 73t61 47l704 256q22 8 44 8t44 -8l704 -256q38 -14 61 -47t23 -73z " />
+<glyph unicode="&#xf1b3;" horiz-adv-x="2304" d="M640 -96l384 192v314l-384 -164v-342zM576 358l404 173l-404 173l-404 -173zM1664 -96l384 192v314l-384 -164v-342zM1600 358l404 173l-404 173l-404 -173zM1152 651l384 165v266l-384 -164v-267zM1088 1030l441 189l-441 189l-441 -189zM2176 512v-416q0 -36 -19 -67 t-52 -47l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-5 2 -7 4q-2 -2 -7 -4l-448 -224q-25 -14 -57 -14t-57 14l-448 224q-33 16 -52 47t-19 67v416q0 38 21.5 70t56.5 48l434 186v400q0 38 21.5 70t56.5 48l448 192q23 10 50 10t50 -10l448 -192q35 -16 56.5 -48t21.5 -70 v-400l434 -186q36 -16 57 -48t21 -70z" />
+<glyph unicode="&#xf1b4;" horiz-adv-x="2048" d="M1848 1197h-511v-124h511v124zM1596 771q-90 0 -146 -52.5t-62 -142.5h408q-18 195 -200 195zM1612 186q63 0 122 32t76 87h221q-100 -307 -427 -307q-214 0 -340.5 132t-126.5 347q0 208 130.5 345.5t336.5 137.5q138 0 240.5 -68t153 -179t50.5 -248q0 -17 -2 -47h-658 q0 -111 57.5 -171.5t166.5 -60.5zM277 236h296q205 0 205 167q0 180 -199 180h-302v-347zM277 773h281q78 0 123.5 36.5t45.5 113.5q0 144 -190 144h-260v-294zM0 1282h594q87 0 155 -14t126.5 -47.5t90 -96.5t31.5 -154q0 -181 -172 -263q114 -32 172 -115t58 -204 q0 -75 -24.5 -136.5t-66 -103.5t-98.5 -71t-121 -42t-134 -13h-611v1260z" />
+<glyph unicode="&#xf1b5;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM499 1041h-371v-787h382q117 0 197 57.5t80 170.5q0 158 -143 200q107 52 107 164q0 57 -19.5 96.5 t-56.5 60.5t-79 29.5t-97 8.5zM477 723h-176v184h163q119 0 119 -90q0 -94 -106 -94zM486 388h-185v217h189q124 0 124 -113q0 -104 -128 -104zM1136 356q-68 0 -104 38t-36 107h411q1 10 1 30q0 132 -74.5 220.5t-203.5 88.5q-128 0 -210 -86t-82 -216q0 -135 79 -217 t213 -82q205 0 267 191h-138q-11 -34 -47.5 -54t-75.5 -20zM1126 722q113 0 124 -122h-254q4 56 39 89t91 33zM964 988h319v-77h-319v77z" />
+<glyph unicode="&#xf1b6;" horiz-adv-x="1792" d="M1582 954q0 -101 -71.5 -172.5t-172.5 -71.5t-172.5 71.5t-71.5 172.5t71.5 172.5t172.5 71.5t172.5 -71.5t71.5 -172.5zM812 212q0 104 -73 177t-177 73q-27 0 -54 -6l104 -42q77 -31 109.5 -106.5t1.5 -151.5q-31 -77 -107 -109t-152 -1q-21 8 -62 24.5t-61 24.5 q32 -60 91 -96.5t130 -36.5q104 0 177 73t73 177zM1642 953q0 126 -89.5 215.5t-215.5 89.5q-127 0 -216.5 -89.5t-89.5 -215.5q0 -127 89.5 -216t216.5 -89q126 0 215.5 89t89.5 216zM1792 953q0 -189 -133.5 -322t-321.5 -133l-437 -319q-12 -129 -109 -218t-229 -89 q-121 0 -214 76t-118 192l-230 92v429l389 -157q79 48 173 48q13 0 35 -2l284 407q2 187 135.5 319t320.5 132q188 0 321.5 -133.5t133.5 -321.5z" />
+<glyph unicode="&#xf1b7;" d="M1242 889q0 80 -57 136.5t-137 56.5t-136.5 -57t-56.5 -136q0 -80 56.5 -136.5t136.5 -56.5t137 56.5t57 136.5zM632 301q0 -83 -58 -140.5t-140 -57.5q-56 0 -103 29t-72 77q52 -20 98 -40q60 -24 120 1.5t85 86.5q24 60 -1.5 120t-86.5 84l-82 33q22 5 42 5 q82 0 140 -57.5t58 -140.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v153l172 -69q20 -92 93.5 -152t168.5 -60q104 0 181 70t87 173l345 252q150 0 255.5 105.5t105.5 254.5q0 150 -105.5 255.5t-255.5 105.5 q-148 0 -253 -104.5t-107 -252.5l-225 -322q-9 1 -28 1q-75 0 -137 -37l-297 119v468q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5zM1289 887q0 -100 -71 -170.5t-171 -70.5t-170.5 70.5t-70.5 170.5t70.5 171t170.5 71q101 0 171.5 -70.5t70.5 -171.5z " />
+<glyph unicode="&#xf1b8;" horiz-adv-x="1792" d="M836 367l-15 -368l-2 -22l-420 29q-36 3 -67 31.5t-47 65.5q-11 27 -14.5 55t4 65t12 55t21.5 64t19 53q78 -12 509 -28zM449 953l180 -379l-147 92q-63 -72 -111.5 -144.5t-72.5 -125t-39.5 -94.5t-18.5 -63l-4 -21l-190 357q-17 26 -18 56t6 47l8 18q35 63 114 188 l-140 86zM1680 436l-188 -359q-12 -29 -36.5 -46.5t-43.5 -20.5l-18 -4q-71 -7 -219 -12l8 -164l-230 367l211 362l7 -173q170 -16 283 -5t170 33zM895 1360q-47 -63 -265 -435l-317 187l-19 12l225 356q20 31 60 45t80 10q24 -2 48.5 -12t42 -21t41.5 -33t36 -34.5 t36 -39.5t32 -35zM1550 1053l212 -363q18 -37 12.5 -76t-27.5 -74q-13 -20 -33 -37t-38 -28t-48.5 -22t-47 -16t-51.5 -14t-46 -12q-34 72 -265 436l313 195zM1407 1279l142 83l-220 -373l-419 20l151 86q-34 89 -75 166t-75.5 123.5t-64.5 80t-47 46.5l-17 13l405 -1 q31 3 58 -10.5t39 -28.5l11 -15q39 -61 112 -190z" />
+<glyph unicode="&#xf1b9;" horiz-adv-x="2048" d="M480 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM516 768h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5zM1888 448q0 66 -47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47t113 47t47 113zM2048 544v-384 q0 -14 -9 -23t-23 -9h-96v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-1024v-128q0 -80 -56 -136t-136 -56t-136 56t-56 136v128h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5t179 63.5h768q98 0 179 -63.5t104 -157.5 l105 -419h28q93 0 158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf1ba;" horiz-adv-x="2048" d="M1824 640q93 0 158.5 -65.5t65.5 -158.5v-384q0 -14 -9 -23t-23 -9h-96v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-1024v-64q0 -80 -56 -136t-136 -56t-136 56t-56 136v64h-96q-14 0 -23 9t-9 23v384q0 93 65.5 158.5t158.5 65.5h28l105 419q23 94 104 157.5 t179 63.5h128v224q0 14 9 23t23 9h448q14 0 23 -9t9 -23v-224h128q98 0 179 -63.5t104 -157.5l105 -419h28zM320 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM516 640h1016l-89 357q-2 8 -14 17.5t-21 9.5h-768q-9 0 -21 -9.5t-14 -17.5z M1728 160q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47z" />
+<glyph unicode="&#xf1bb;" d="M1504 64q0 -26 -19 -45t-45 -19h-462q1 -17 6 -87.5t5 -108.5q0 -25 -18 -42.5t-43 -17.5h-320q-25 0 -43 17.5t-18 42.5q0 38 5 108.5t6 87.5h-462q-26 0 -45 19t-19 45t19 45l402 403h-229q-26 0 -45 19t-19 45t19 45l402 403h-197q-26 0 -45 19t-19 45t19 45l384 384 q19 19 45 19t45 -19l384 -384q19 -19 19 -45t-19 -45t-45 -19h-197l402 -403q19 -19 19 -45t-19 -45t-45 -19h-229l402 -403q19 -19 19 -45z" />
+<glyph unicode="&#xf1bc;" d="M1127 326q0 32 -30 51q-193 115 -447 115q-133 0 -287 -34q-42 -9 -42 -52q0 -20 13.5 -34.5t35.5 -14.5q5 0 37 8q132 27 243 27q226 0 397 -103q19 -11 33 -11q19 0 33 13.5t14 34.5zM1223 541q0 40 -35 61q-237 141 -548 141q-153 0 -303 -42q-48 -13 -48 -64 q0 -25 17.5 -42.5t42.5 -17.5q7 0 37 8q122 33 251 33q279 0 488 -124q24 -13 38 -13q25 0 42.5 17.5t17.5 42.5zM1331 789q0 47 -40 70q-126 73 -293 110.5t-343 37.5q-204 0 -364 -47q-23 -7 -38.5 -25.5t-15.5 -48.5q0 -31 20.5 -52t51.5 -21q11 0 40 8q133 37 307 37 q159 0 309.5 -34t253.5 -95q21 -12 40 -12q29 0 50.5 20.5t21.5 51.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1bd;" horiz-adv-x="1024" d="M1024 1233l-303 -582l24 -31h279v-415h-507l-44 -30l-142 -273l-30 -30h-301v303l303 583l-24 30h-279v415h507l44 30l142 273l30 30h301v-303z" />
+<glyph unicode="&#xf1be;" horiz-adv-x="2304" d="M784 164l16 241l-16 523q-1 10 -7.5 17t-16.5 7q-9 0 -16 -7t-7 -17l-14 -523l14 -241q1 -10 7.5 -16.5t15.5 -6.5q22 0 24 23zM1080 193l11 211l-12 586q0 16 -13 24q-8 5 -16 5t-16 -5q-13 -8 -13 -24l-1 -6l-10 -579q0 -1 11 -236v-1q0 -10 6 -17q9 -11 23 -11 q11 0 20 9q9 7 9 20zM35 533l20 -128l-20 -126q-2 -9 -9 -9t-9 9l-17 126l17 128q2 9 9 9t9 -9zM121 612l26 -207l-26 -203q-2 -9 -10 -9q-9 0 -9 10l-23 202l23 207q0 9 9 9q8 0 10 -9zM401 159zM213 650l25 -245l-25 -237q0 -11 -11 -11q-10 0 -12 11l-21 237l21 245 q2 12 12 12q11 0 11 -12zM307 657l23 -252l-23 -244q-2 -13 -14 -13q-13 0 -13 13l-21 244l21 252q0 13 13 13q12 0 14 -13zM401 639l21 -234l-21 -246q-2 -16 -16 -16q-6 0 -10.5 4.5t-4.5 11.5l-20 246l20 234q0 6 4.5 10.5t10.5 4.5q14 0 16 -15zM784 164zM495 785 l21 -380l-21 -246q0 -7 -5 -12.5t-12 -5.5q-16 0 -18 18l-18 246l18 380q2 18 18 18q7 0 12 -5.5t5 -12.5zM589 871l19 -468l-19 -244q0 -8 -5.5 -13.5t-13.5 -5.5q-18 0 -20 19l-16 244l16 468q2 19 20 19q8 0 13.5 -5.5t5.5 -13.5zM687 911l18 -506l-18 -242 q-2 -21 -22 -21q-19 0 -21 21l-16 242l16 506q0 9 6.5 15.5t14.5 6.5q9 0 15 -6.5t7 -15.5zM1079 169v0v0zM881 915l15 -510l-15 -239q0 -10 -7.5 -17.5t-17.5 -7.5t-17 7t-8 18l-14 239l14 510q0 11 7.5 18t17.5 7t17.5 -7t7.5 -18zM980 896l14 -492l-14 -236q0 -11 -8 -19 t-19 -8t-19 8t-9 19l-12 236l12 492q1 12 9 20t19 8t18.5 -8t8.5 -20zM1192 404l-14 -231v0q0 -13 -9 -22t-22 -9t-22 9t-10 22l-6 114l-6 117l12 636v3q2 15 12 24q9 7 20 7q8 0 15 -5q14 -8 16 -26zM2304 423q0 -117 -83 -199.5t-200 -82.5h-786q-13 2 -22 11t-9 22v899 q0 23 28 33q85 34 181 34q195 0 338 -131.5t160 -323.5q53 22 110 22q117 0 200 -83t83 -201z" />
+<glyph unicode="&#xf1c0;" d="M768 768q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 0q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127 t443 -43zM768 384q237 0 443 43t325 127v-170q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5t-103 128v170q119 -84 325 -127t443 -43zM768 1536q208 0 385 -34.5t280 -93.5t103 -128v-128q0 -69 -103 -128t-280 -93.5t-385 -34.5t-385 34.5t-280 93.5 t-103 128v128q0 69 103 128t280 93.5t385 34.5z" />
+<glyph unicode="&#xf1c1;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M894 465q33 -26 84 -56q59 7 117 7q147 0 177 -49q16 -22 2 -52q0 -1 -1 -2l-2 -2v-1q-6 -38 -71 -38q-48 0 -115 20t-130 53q-221 -24 -392 -83q-153 -262 -242 -262q-15 0 -28 7l-24 12q-1 1 -6 5q-10 10 -6 36q9 40 56 91.5t132 96.5q14 9 23 -6q2 -2 2 -4q52 85 107 197 q68 136 104 262q-24 82 -30.5 159.5t6.5 127.5q11 40 42 40h21h1q23 0 35 -15q18 -21 9 -68q-2 -6 -4 -8q1 -3 1 -8v-30q-2 -123 -14 -192q55 -164 146 -238zM318 54q52 24 137 158q-51 -40 -87.5 -84t-49.5 -74zM716 974q-15 -42 -2 -132q1 7 7 44q0 3 7 43q1 4 4 8 q-1 1 -1 2t-0.5 1.5t-0.5 1.5q-1 22 -13 36q0 -1 -1 -2v-2zM592 313q135 54 284 81q-2 1 -13 9.5t-16 13.5q-76 67 -127 176q-27 -86 -83 -197q-30 -56 -45 -83zM1238 329q-24 24 -140 24q76 -28 124 -28q14 0 18 1q0 1 -2 3z" />
+<glyph unicode="&#xf1c2;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M233 768v-107h70l164 -661h159l128 485q7 20 10 46q2 16 2 24h4l3 -24q1 -3 3.5 -20t5.5 -26l128 -485h159l164 661h70v107h-300v-107h90l-99 -438q-5 -20 -7 -46l-2 -21h-4l-3 21q-1 5 -4 21t-5 25l-144 545h-114l-144 -545q-2 -9 -4.5 -24.5t-3.5 -21.5l-4 -21h-4l-2 21 q-2 26 -7 46l-99 438h90v107h-300z" />
+<glyph unicode="&#xf1c3;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M429 106v-106h281v106h-75l103 161q5 7 10 16.5t7.5 13.5t3.5 4h2q1 -4 5 -10q2 -4 4.5 -7.5t6 -8t6.5 -8.5l107 -161h-76v-106h291v106h-68l-192 273l195 282h67v107h-279v-107h74l-103 -159q-4 -7 -10 -16.5t-9 -13.5l-2 -3h-2q-1 4 -5 10q-6 11 -17 23l-106 159h76v107 h-290v-107h68l189 -272l-194 -283h-68z" />
+<glyph unicode="&#xf1c4;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M416 106v-106h327v106h-93v167h137q76 0 118 15q67 23 106.5 87t39.5 146q0 81 -37 141t-100 87q-48 19 -130 19h-368v-107h92v-555h-92zM769 386h-119v268h120q52 0 83 -18q56 -33 56 -115q0 -89 -62 -120q-31 -15 -78 -15z" />
+<glyph unicode="&#xf1c5;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M1280 320v-320h-1024v192l192 192l128 -128l384 384zM448 512q-80 0 -136 56t-56 136t56 136t136 56t136 -56t56 -136t-56 -136t-136 -56z" />
+<glyph unicode="&#xf1c6;" d="M640 1152v128h-128v-128h128zM768 1024v128h-128v-128h128zM640 896v128h-128v-128h128zM768 768v128h-128v-128h128zM1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400 v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-128v-128h-128v128h-512v-1536h1280zM781 593l107 -349q8 -27 8 -52q0 -83 -72.5 -137.5t-183.5 -54.5t-183.5 54.5t-72.5 137.5q0 25 8 52q21 63 120 396v128h128v-128h79 q22 0 39 -13t23 -34zM640 128q53 0 90.5 19t37.5 45t-37.5 45t-90.5 19t-90.5 -19t-37.5 -45t37.5 -45t90.5 -19z" />
+<glyph unicode="&#xf1c7;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M620 686q20 -8 20 -30v-544q0 -22 -20 -30q-8 -2 -12 -2q-12 0 -23 9l-166 167h-131q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h131l166 167q16 15 35 7zM1037 -3q31 0 50 24q129 159 129 363t-129 363q-16 21 -43 24t-47 -14q-21 -17 -23.5 -43.5t14.5 -47.5 q100 -123 100 -282t-100 -282q-17 -21 -14.5 -47.5t23.5 -42.5q18 -15 40 -15zM826 145q27 0 47 20q87 93 87 219t-87 219q-18 19 -45 20t-46 -17t-20 -44.5t18 -46.5q52 -57 52 -131t-52 -131q-19 -20 -18 -46.5t20 -44.5q20 -17 44 -17z" />
+<glyph unicode="&#xf1c8;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M768 768q52 0 90 -38t38 -90v-384q0 -52 -38 -90t-90 -38h-384q-52 0 -90 38t-38 90v384q0 52 38 90t90 38h384zM1260 766q20 -8 20 -30v-576q0 -22 -20 -30q-8 -2 -12 -2q-14 0 -23 9l-265 266v90l265 266q9 9 23 9q4 0 12 -2z" />
+<glyph unicode="&#xf1c9;" d="M1468 1156q28 -28 48 -76t20 -88v-1152q0 -40 -28 -68t-68 -28h-1344q-40 0 -68 28t-28 68v1600q0 40 28 68t68 28h896q40 0 88 -20t76 -48zM1024 1400v-376h376q-10 29 -22 41l-313 313q-12 12 -41 22zM1408 -128v1024h-416q-40 0 -68 28t-28 68v416h-768v-1536h1280z M480 768q8 11 21 12.5t24 -6.5l51 -38q11 -8 12.5 -21t-6.5 -24l-182 -243l182 -243q8 -11 6.5 -24t-12.5 -21l-51 -38q-11 -8 -24 -6.5t-21 12.5l-226 301q-14 19 0 38zM1282 467q14 -19 0 -38l-226 -301q-8 -11 -21 -12.5t-24 6.5l-51 38q-11 8 -12.5 21t6.5 24l182 243 l-182 243q-8 11 -6.5 24t12.5 21l51 38q11 8 24 6.5t21 -12.5zM662 6q-13 2 -20.5 13t-5.5 24l138 831q2 13 13 20.5t24 5.5l63 -10q13 -2 20.5 -13t5.5 -24l-138 -831q-2 -13 -13 -20.5t-24 -5.5z" />
+<glyph unicode="&#xf1ca;" d="M1497 709v-198q-101 -23 -198 -23q-65 -136 -165.5 -271t-181.5 -215.5t-128 -106.5q-80 -45 -162 3q-28 17 -60.5 43.5t-85 83.5t-102.5 128.5t-107.5 184t-105.5 244t-91.5 314.5t-70.5 390h283q26 -218 70 -398.5t104.5 -317t121.5 -235.5t140 -195q169 169 287 406 q-142 72 -223 220t-81 333q0 192 104 314.5t284 122.5q178 0 273 -105.5t95 -297.5q0 -159 -58 -286q-7 -1 -19.5 -3t-46 -2t-63 6t-62 25.5t-50.5 51.5q31 103 31 184q0 87 -29 132t-79 45q-53 0 -85 -49.5t-32 -140.5q0 -186 105 -293.5t267 -107.5q62 0 121 14z" />
+<glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
+<glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
+<glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
+<glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5 t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
+<glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
+<glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf1d2;" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d3;" horiz-adv-x="1792" d="M595 22q0 100 -165 100q-158 0 -158 -104q0 -101 172 -101q151 0 151 105zM536 777q0 61 -30 102t-89 41q-124 0 -124 -145q0 -135 124 -135q119 0 119 137zM805 1101v-202q-36 -12 -79 -22q16 -43 16 -84q0 -127 -73 -216.5t-197 -112.5q-40 -8 -59.5 -27t-19.5 -58 q0 -31 22.5 -51.5t58 -32t78.5 -22t86 -25.5t78.5 -37.5t58 -64t22.5 -98.5q0 -304 -363 -304q-69 0 -130 12.5t-116 41t-87.5 82t-32.5 127.5q0 165 182 225v4q-67 41 -67 126q0 109 63 137v4q-72 24 -119.5 108.5t-47.5 165.5q0 139 95 231.5t235 92.5q96 0 178 -47 q98 0 218 47zM1123 220h-222q4 45 4 134v609q0 94 -4 128h222q-4 -33 -4 -124v-613q0 -89 4 -134zM1724 442v-196q-71 -39 -174 -39q-62 0 -107 20t-70 50t-39.5 78t-18.5 92t-4 103v351h2v4q-7 0 -19 1t-18 1q-21 0 -59 -6v190h96v76q0 54 -6 89h227q-6 -41 -6 -165h171 v-190q-15 0 -43.5 2t-42.5 2h-85v-365q0 -131 87 -131q61 0 109 33zM1148 1389q0 -58 -39 -101.5t-96 -43.5q-58 0 -98 43.5t-40 101.5q0 59 39.5 103t98.5 44q58 0 96.5 -44.5t38.5 -102.5z" />
+<glyph unicode="&#xf1d4;" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1d5;" horiz-adv-x="1280" d="M842 964q0 -80 -57 -136.5t-136 -56.5q-60 0 -111 35q-62 -67 -115 -146q-247 -371 -202 -859q1 -22 -12.5 -38.5t-34.5 -18.5h-5q-20 0 -35 13.5t-17 33.5q-14 126 -3.5 247.5t29.5 217t54 186t69 155.5t74 125q61 90 132 165q-16 35 -16 77q0 80 56.5 136.5t136.5 56.5 t136.5 -56.5t56.5 -136.5zM1223 953q0 -158 -78 -292t-212.5 -212t-292.5 -78q-64 0 -131 14q-21 5 -32.5 23.5t-6.5 39.5q5 20 23 31.5t39 7.5q51 -13 108 -13q97 0 186 38t153 102t102 153t38 186t-38 186t-102 153t-153 102t-186 38t-186 -38t-153 -102t-102 -153 t-38 -186q0 -114 52 -218q10 -20 3.5 -40t-25.5 -30t-39.5 -3t-30.5 26q-64 123 -64 265q0 119 46.5 227t124.5 186t186 124t226 46q158 0 292.5 -78t212.5 -212.5t78 -292.5z" />
+<glyph unicode="&#xf1d6;" horiz-adv-x="1792" d="M270 730q-8 19 -8 52q0 20 11 49t24 45q-1 22 7.5 53t22.5 43q0 139 92.5 288.5t217.5 209.5q139 66 324 66q133 0 266 -55q49 -21 90 -48t71 -56t55 -68t42 -74t32.5 -84.5t25.5 -89.5t22 -98l1 -5q55 -83 55 -150q0 -14 -9 -40t-9 -38q0 -1 1.5 -3.5t3.5 -5t2 -3.5 q77 -114 120.5 -214.5t43.5 -208.5q0 -43 -19.5 -100t-55.5 -57q-9 0 -19.5 7.5t-19 17.5t-19 26t-16 26.5t-13.5 26t-9 17.5q-1 1 -3 1l-5 -4q-59 -154 -132 -223q20 -20 61.5 -38.5t69 -41.5t35.5 -65q-2 -4 -4 -16t-7 -18q-64 -97 -302 -97q-53 0 -110.5 9t-98 20 t-104.5 30q-15 5 -23 7q-14 4 -46 4.5t-40 1.5q-41 -45 -127.5 -65t-168.5 -20q-35 0 -69 1.5t-93 9t-101 20.5t-74.5 40t-32.5 64q0 40 10 59.5t41 48.5q11 2 40.5 13t49.5 12q4 0 14 2q2 2 2 4l-2 3q-48 11 -108 105.5t-73 156.5l-5 3q-4 0 -12 -20q-18 -41 -54.5 -74.5 t-77.5 -37.5h-1q-4 0 -6 4.5t-5 5.5q-23 54 -23 100q0 275 252 466z" />
+<glyph unicode="&#xf1d7;" horiz-adv-x="2048" d="M580 1075q0 41 -25 66t-66 25q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 66 24.5t25 65.5zM1323 568q0 28 -25.5 50t-65.5 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q40 0 65.5 22t25.5 51zM1087 1075q0 41 -24.5 66t-65.5 25 q-43 0 -76 -25.5t-33 -65.5q0 -39 33 -64.5t76 -25.5q41 0 65.5 24.5t24.5 65.5zM1722 568q0 28 -26 50t-65 22q-27 0 -49.5 -22.5t-22.5 -49.5q0 -28 22.5 -50.5t49.5 -22.5q39 0 65 22t26 51zM1456 965q-31 4 -70 4q-169 0 -311 -77t-223.5 -208.5t-81.5 -287.5 q0 -78 23 -152q-35 -3 -68 -3q-26 0 -50 1.5t-55 6.5t-44.5 7t-54.5 10.5t-50 10.5l-253 -127l72 218q-290 203 -290 490q0 169 97.5 311t264 223.5t363.5 81.5q176 0 332.5 -66t262 -182.5t136.5 -260.5zM2048 404q0 -117 -68.5 -223.5t-185.5 -193.5l55 -181l-199 109 q-150 -37 -218 -37q-169 0 -311 70.5t-223.5 191.5t-81.5 264t81.5 264t223.5 191.5t311 70.5q161 0 303 -70.5t227.5 -192t85.5 -263.5z" />
+<glyph unicode="&#xf1d8;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-453 185l-242 -295q-18 -23 -49 -23q-13 0 -22 4q-19 7 -30.5 23.5t-11.5 36.5v349l864 1059l-1069 -925l-395 162q-37 14 -40 55q-2 40 32 59l1664 960q15 9 32 9q20 0 36 -11z" />
+<glyph unicode="&#xf1d9;" horiz-adv-x="1792" d="M1764 1525q33 -24 27 -64l-256 -1536q-5 -29 -32 -45q-14 -8 -31 -8q-11 0 -24 5l-527 215l-298 -327q-18 -21 -47 -21q-14 0 -23 4q-19 7 -30 23.5t-11 36.5v452l-472 193q-37 14 -40 55q-3 39 32 59l1664 960q35 21 68 -2zM1422 26l221 1323l-1434 -827l336 -137 l863 639l-478 -797z" />
+<glyph unicode="&#xf1da;" d="M1536 640q0 -156 -61 -298t-164 -245t-245 -164t-298 -61q-172 0 -327 72.5t-264 204.5q-7 10 -6.5 22.5t8.5 20.5l137 138q10 9 25 9q16 -2 23 -12q73 -95 179 -147t225 -52q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5 t-163.5 109.5t-198.5 40.5q-98 0 -188 -35.5t-160 -101.5l137 -138q31 -30 14 -69q-17 -40 -59 -40h-448q-26 0 -45 19t-19 45v448q0 42 40 59q39 17 69 -14l130 -129q107 101 244.5 156.5t284.5 55.5q156 0 298 -61t245 -164t164 -245t61 -298zM896 928v-448q0 -14 -9 -23 t-23 -9h-320q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1db;" d="M768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103 t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1dc;" horiz-adv-x="1792" d="M1682 -128q-44 0 -132.5 3.5t-133.5 3.5q-44 0 -132 -3.5t-132 -3.5q-24 0 -37 20.5t-13 45.5q0 31 17 46t39 17t51 7t45 15q33 21 33 140l-1 391q0 21 -1 31q-13 4 -50 4h-675q-38 0 -51 -4q-1 -10 -1 -31l-1 -371q0 -142 37 -164q16 -10 48 -13t57 -3.5t45 -15 t20 -45.5q0 -26 -12.5 -48t-36.5 -22q-47 0 -139.5 3.5t-138.5 3.5q-43 0 -128 -3.5t-127 -3.5q-23 0 -35.5 21t-12.5 45q0 30 15.5 45t36 17.5t47.5 7.5t42 15q33 23 33 143l-1 57v813q0 3 0.5 26t0 36.5t-1.5 38.5t-3.5 42t-6.5 36.5t-11 31.5t-16 18q-15 10 -45 12t-53 2 t-41 14t-18 45q0 26 12 48t36 22q46 0 138.5 -3.5t138.5 -3.5q42 0 126.5 3.5t126.5 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17 -43.5t-38.5 -14.5t-49.5 -4t-43 -13q-35 -21 -35 -160l1 -320q0 -21 1 -32q13 -3 39 -3h699q25 0 38 3q1 11 1 32l1 320q0 139 -35 160 q-18 11 -58.5 12.5t-66 13t-25.5 49.5q0 26 12.5 48t37.5 22q44 0 132 -3.5t132 -3.5q43 0 129 3.5t129 3.5q25 0 37.5 -22t12.5 -48q0 -30 -17.5 -44t-40 -14.5t-51.5 -3t-44 -12.5q-35 -23 -35 -161l1 -943q0 -119 34 -140q16 -10 46 -13.5t53.5 -4.5t41.5 -15.5t18 -44.5 q0 -26 -12 -48t-36 -22z" />
+<glyph unicode="&#xf1dd;" horiz-adv-x="1280" d="M1278 1347v-73q0 -29 -18.5 -61t-42.5 -32q-50 0 -54 -1q-26 -6 -32 -31q-3 -11 -3 -64v-1152q0 -25 -18 -43t-43 -18h-108q-25 0 -43 18t-18 43v1218h-143v-1218q0 -25 -17.5 -43t-43.5 -18h-108q-26 0 -43.5 18t-17.5 43v496q-147 12 -245 59q-126 58 -192 179 q-64 117 -64 259q0 166 88 286q88 118 209 159q111 37 417 37h479q25 0 43 -18t18 -43z" />
+<glyph unicode="&#xf1de;" d="M352 128v-128h-352v128h352zM704 256q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM864 640v-128h-864v128h864zM224 1152v-128h-224v128h224zM1536 128v-128h-736v128h736zM576 1280q26 0 45 -19t19 -45v-256 q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1216 768q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h256zM1536 640v-128h-224v128h224zM1536 1152v-128h-864v128h864z" />
+<glyph unicode="&#xf1e0;" d="M1216 512q133 0 226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5t-226.5 93.5t-93.5 226.5q0 12 2 34l-360 180q-92 -86 -218 -86q-133 0 -226.5 93.5t-93.5 226.5t93.5 226.5t226.5 93.5q126 0 218 -86l360 180q-2 22 -2 34q0 133 93.5 226.5t226.5 93.5 t226.5 -93.5t93.5 -226.5t-93.5 -226.5t-226.5 -93.5q-126 0 -218 86l-360 -180q2 -22 2 -34t-2 -34l360 -180q92 86 218 86z" />
+<glyph unicode="&#xf1e1;" d="M1280 341q0 88 -62.5 151t-150.5 63q-84 0 -145 -58l-241 120q2 16 2 23t-2 23l241 120q61 -58 145 -58q88 0 150.5 63t62.5 151t-62.5 150.5t-150.5 62.5t-151 -62.5t-63 -150.5q0 -7 2 -23l-241 -120q-62 57 -145 57q-88 0 -150.5 -62.5t-62.5 -150.5t62.5 -150.5 t150.5 -62.5q83 0 145 57l241 -120q-2 -16 -2 -23q0 -88 63 -150.5t151 -62.5t150.5 62.5t62.5 150.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf1e2;" horiz-adv-x="1792" d="M571 947q-10 25 -34 35t-49 0q-108 -44 -191 -127t-127 -191q-10 -25 0 -49t35 -34q13 -5 24 -5q42 0 60 40q34 84 98.5 148.5t148.5 98.5q25 11 35 35t0 49zM1513 1303l46 -46l-244 -243l68 -68q19 -19 19 -45.5t-19 -45.5l-64 -64q89 -161 89 -343q0 -143 -55.5 -273.5 t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5q182 0 343 -89l64 64q19 19 45.5 19t45.5 -19l68 -68zM1521 1359q-10 -10 -22 -10q-13 0 -23 10l-91 90q-9 10 -9 23t9 23q10 9 23 9t23 -9l90 -91 q10 -9 10 -22.5t-10 -22.5zM1751 1129q-11 -9 -23 -9t-23 9l-90 91q-10 9 -10 22.5t10 22.5q9 10 22.5 10t22.5 -10l91 -90q9 -10 9 -23t-9 -23zM1792 1312q0 -14 -9 -23t-23 -9h-96q-14 0 -23 9t-9 23t9 23t23 9h96q14 0 23 -9t9 -23zM1600 1504v-96q0 -14 -9 -23t-23 -9 t-23 9t-9 23v96q0 14 9 23t23 9t23 -9t9 -23zM1751 1449l-91 -90q-10 -10 -22 -10q-13 0 -23 10q-10 9 -10 22.5t10 22.5l90 91q10 9 23 9t23 -9q9 -10 9 -23t-9 -23z" />
+<glyph unicode="&#xf1e3;" horiz-adv-x="1792" d="M609 720l287 208l287 -208l-109 -336h-355zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM1515 186q149 203 149 454v3l-102 -89l-240 224l63 323 l134 -12q-150 206 -389 282l53 -124l-287 -159l-287 159l53 124q-239 -76 -389 -282l135 12l62 -323l-240 -224l-102 89v-3q0 -251 149 -454l30 132l326 -40l139 -298l-116 -69q117 -39 240 -39t240 39l-116 69l139 298l326 40z" />
+<glyph unicode="&#xf1e4;" horiz-adv-x="1792" d="M448 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM256 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM832 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23 v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM640 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM66 768q-28 0 -47 19t-19 46v129h514v-129q0 -27 -19 -46t-46 -19h-383zM1216 224v-192q0 -14 -9 -23t-23 -9h-192 q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1024 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1600 224v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23 zM1408 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 1016v-13h-514v10q0 104 -382 102q-382 -1 -382 -102v-10h-514v13q0 17 8.5 43t34 64t65.5 75.5t110.5 76t160 67.5t224 47.5t293.5 18.5t293 -18.5t224 -47.5 t160.5 -67.5t110.5 -76t65.5 -75.5t34 -64t8.5 -43zM1792 608v-192q0 -14 -9 -23t-23 -9h-192q-14 0 -23 9t-9 23v192q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1792 962v-129q0 -27 -19 -46t-46 -19h-384q-27 0 -46 19t-19 46v129h514z" />
+<glyph unicode="&#xf1e5;" horiz-adv-x="1792" d="M704 1216v-768q0 -26 -19 -45t-45 -19v-576q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v512l249 873q7 23 31 23h424zM1024 1216v-704h-256v704h256zM1792 320v-512q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v576q-26 0 -45 19t-19 45v768h424q24 0 31 -23z M736 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23zM1408 1504v-224h-352v224q0 14 9 23t23 9h288q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1e6;" horiz-adv-x="1792" d="M1755 1083q37 -37 37 -90t-37 -91l-401 -400l150 -150l-160 -160q-163 -163 -389.5 -186.5t-411.5 100.5l-362 -362h-181v181l362 362q-124 185 -100.5 411.5t186.5 389.5l160 160l150 -150l400 401q38 37 91 37t90 -37t37 -90.5t-37 -90.5l-400 -401l234 -234l401 400 q38 37 91 37t90 -37z" />
+<glyph unicode="&#xf1e7;" horiz-adv-x="1792" d="M873 796q0 -83 -63.5 -142.5t-152.5 -59.5t-152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59t152.5 -59t63.5 -143zM1375 796q0 -83 -63 -142.5t-153 -59.5q-89 0 -152.5 59.5t-63.5 142.5q0 84 63.5 143t152.5 59q90 0 153 -59t63 -143zM1600 616v667q0 87 -32 123.5 t-111 36.5h-1112q-83 0 -112.5 -34t-29.5 -126v-673q43 -23 88.5 -40t81 -28t81 -18.5t71 -11t70 -4t58.5 -0.5t56.5 2t44.5 2q68 1 95 -27q6 -6 10 -9q26 -25 61 -51q7 91 118 87q5 0 36.5 -1.5t43 -2t45.5 -1t53 1t54.5 4.5t61 8.5t62 13.5t67 19.5t67.5 27t72 34.5z M1763 621q-121 -149 -372 -252q84 -285 -23 -465q-66 -113 -183 -148q-104 -32 -182 15q-86 51 -82 164l-1 326v1q-8 2 -24.5 6t-23.5 5l-1 -338q4 -114 -83 -164q-79 -47 -183 -15q-117 36 -182 150q-105 180 -22 463q-251 103 -372 252q-25 37 -4 63t60 -1q3 -2 11 -7 t11 -8v694q0 72 47 123t114 51h1257q67 0 114 -51t47 -123v-694l21 15q39 27 60 1t-4 -63z" />
+<glyph unicode="&#xf1e8;" horiz-adv-x="1792" d="M896 1102v-434h-145v434h145zM1294 1102v-434h-145v434h145zM1294 342l253 254v795h-1194v-1049h326v-217l217 217h398zM1692 1536v-1013l-434 -434h-326l-217 -217h-217v217h-398v1158l109 289h1483z" />
+<glyph unicode="&#xf1e9;" d="M773 217v-127q-1 -292 -6 -305q-12 -32 -51 -40q-54 -9 -181.5 38t-162.5 89q-13 15 -17 36q-1 12 4 26q4 10 34 47t181 216q1 0 60 70q15 19 39.5 24.5t49.5 -3.5q24 -10 37.5 -29t12.5 -42zM624 468q-3 -55 -52 -70l-120 -39q-275 -88 -292 -88q-35 2 -54 36 q-12 25 -17 75q-8 76 1 166.5t30 124.5t56 32q13 0 202 -77q70 -29 115 -47l84 -34q23 -9 35.5 -30.5t11.5 -48.5zM1450 171q-7 -54 -91.5 -161t-135.5 -127q-37 -14 -63 7q-14 10 -184 287l-47 77q-14 21 -11.5 46t19.5 46q35 43 83 26q1 -1 119 -40q203 -66 242 -79.5 t47 -20.5q28 -22 22 -61zM778 803q5 -102 -54 -122q-58 -17 -114 71l-378 598q-8 35 19 62q41 43 207.5 89.5t224.5 31.5q40 -10 49 -45q3 -18 22 -305.5t24 -379.5zM1440 695q3 -39 -26 -59q-15 -10 -329 -86q-67 -15 -91 -23l1 2q-23 -6 -46 4t-37 32q-30 47 0 87 q1 1 75 102q125 171 150 204t34 39q28 19 65 2q48 -23 123 -133.5t81 -167.5v-3z" />
+<glyph unicode="&#xf1ea;" horiz-adv-x="2048" d="M1024 1024h-384v-384h384v384zM1152 384v-128h-640v128h640zM1152 1152v-640h-640v640h640zM1792 384v-128h-512v128h512zM1792 640v-128h-512v128h512zM1792 896v-128h-512v128h512zM1792 1152v-128h-512v128h512zM256 192v960h-128v-960q0 -26 19 -45t45 -19t45 19 t19 45zM1920 192v1088h-1536v-1088q0 -33 -11 -64h1483q26 0 45 19t19 45zM2048 1408v-1216q0 -80 -56 -136t-136 -56h-1664q-80 0 -136 56t-56 136v1088h256v128h1792z" />
+<glyph unicode="&#xf1eb;" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
+<glyph unicode="&#xf1ec;" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1ed;" d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246 q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598 q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
+<glyph unicode="&#xf1ee;" horiz-adv-x="1792" d="M441 864q32 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640 q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
+<glyph unicode="&#xf1f0;" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f1;" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f2;" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
+<glyph unicode="&#xf1f3;" horiz-adv-x="2304" d="M119 854h89l-45 108zM740 328l74 79l-70 79h-163v-49h142v-55h-142v-54h159zM898 406l99 -110v217zM1186 453q0 33 -40 33h-84v-69h83q41 0 41 36zM1475 457q0 29 -42 29h-82v-61h81q43 0 43 32zM1197 923q0 29 -42 29h-82v-60h81q43 0 43 31zM1656 854h89l-44 108z M699 1009v-271h-66v212l-94 -212h-57l-94 212v-212h-132l-25 60h-135l-25 -60h-70l116 271h96l110 -257v257h106l85 -184l77 184h108zM1255 453q0 -20 -5.5 -35t-14 -25t-22.5 -16.5t-26 -10t-31.5 -4.5t-31.5 -1t-32.5 0.5t-29.5 0.5v-91h-126l-80 90l-83 -90h-256v271h260 l80 -89l82 89h207q109 0 109 -89zM964 794v-56h-217v271h217v-57h-152v-49h148v-55h-148v-54h152zM2304 235v-229q0 -55 -38.5 -94.5t-93.5 -39.5h-2040q-55 0 -93.5 39.5t-38.5 94.5v678h111l25 61h55l25 -61h218v46l19 -46h113l20 47v-47h541v99l10 1q10 0 10 -14v-86h279 v23q23 -12 55 -18t52.5 -6.5t63 0.5t51.5 1l25 61h56l25 -61h227v58l34 -58h182v378h-180v-44l-25 44h-185v-44l-23 44h-249q-69 0 -109 -22v22h-172v-22q-24 22 -73 22h-628l-43 -97l-43 97h-198v-44l-22 44h-169l-78 -179v391q0 55 38.5 94.5t93.5 39.5h2040 q55 0 93.5 -39.5t38.5 -94.5v-678h-120q-51 0 -81 -22v22h-177q-55 0 -78 -22v22h-316v-22q-31 22 -87 22h-209v-22q-23 22 -91 22h-234l-54 -58l-50 58h-349v-378h343l55 59l52 -59h211v89h21q59 0 90 13v-102h174v99h8q8 0 10 -2t2 -10v-87h529q57 0 88 24v-24h168 q60 0 95 17zM1546 469q0 -23 -12 -43t-34 -29q25 -9 34 -26t9 -46v-54h-65v45q0 33 -12 43.5t-46 10.5h-69v-99h-65v271h154q48 0 77 -15t29 -58zM1269 936q0 -24 -12.5 -44t-33.5 -29q26 -9 34.5 -25.5t8.5 -46.5v-53h-65q0 9 0.5 26.5t0 25t-3 18.5t-8.5 16t-17.5 8.5 t-29.5 3.5h-70v-98h-64v271l153 -1q49 0 78 -14.5t29 -57.5zM1798 327v-56h-216v271h216v-56h-151v-49h148v-55h-148v-54zM1372 1009v-271h-66v271h66zM2065 357q0 -86 -102 -86h-126v58h126q34 0 34 25q0 16 -17 21t-41.5 5t-49.5 3.5t-42 22.5t-17 55q0 39 26 60t66 21 h130v-57h-119q-36 0 -36 -25q0 -16 17.5 -20.5t42 -4t49 -2.5t42 -21.5t17.5 -54.5zM2304 407v-101q-24 -35 -88 -35h-125v58h125q33 0 33 25q0 13 -12.5 19t-31 5.5t-40 2t-40 8t-31 24t-12.5 48.5q0 39 26.5 60t66.5 21h129v-57h-118q-36 0 -36 -25q0 -20 29 -22t68.5 -5 t56.5 -26zM2139 1008v-270h-92l-122 203v-203h-132l-26 60h-134l-25 -60h-75q-129 0 -129 133q0 138 133 138h63v-59q-7 0 -28 1t-28.5 0.5t-23 -2t-21.5 -6.5t-14.5 -13.5t-11.5 -23t-3 -33.5q0 -38 13.5 -58t49.5 -20h29l92 213h97l109 -256v256h99l114 -188v188h66z" />
+<glyph unicode="&#xf1f4;" horiz-adv-x="2304" d="M745 630q0 -37 -25.5 -61.5t-62.5 -24.5q-29 0 -46.5 16t-17.5 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM1530 779q0 -42 -22 -57t-66 -15l-32 -1l17 107q2 11 13 11h18q22 0 35 -2t25 -12.5t12 -30.5zM1881 630q0 -36 -25.5 -61t-61.5 -25q-29 0 -47 16 t-18 44q0 37 25 62.5t62 25.5q28 0 46.5 -16.5t18.5 -45.5zM513 801q0 59 -38.5 85.5t-100.5 26.5h-160q-19 0 -21 -19l-65 -408q-1 -6 3 -11t10 -5h76q20 0 22 19l18 110q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM822 489l41 261q1 6 -3 11t-10 5h-76 q-14 0 -17 -33q-27 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q28 0 58 12t48 32q-4 -12 -4 -21q0 -16 13 -16h69q19 0 22 19zM1269 752q0 5 -4 9.5t-9 4.5h-77q-11 0 -18 -10l-106 -156l-44 150q-5 16 -22 16h-75q-5 0 -9 -4.5t-4 -9.5q0 -2 19.5 -59 t42 -123t23.5 -70q-82 -112 -82 -120q0 -13 13 -13h77q11 0 18 10l255 368q2 2 2 7zM1649 801q0 59 -38.5 85.5t-100.5 26.5h-159q-20 0 -22 -19l-65 -408q-1 -6 3 -11t10 -5h82q12 0 16 13l18 116q1 8 7 13t15 6.5t17 1.5t19 -1t14 -1q86 0 135 48.5t49 134.5zM1958 489 l41 261q1 6 -3 11t-10 5h-76q-14 0 -17 -33q-26 40 -95 40q-72 0 -122.5 -54t-50.5 -127q0 -59 34.5 -94t92.5 -35q29 0 59 12t47 32q0 -1 -2 -9t-2 -12q0 -16 13 -16h69q19 0 22 19zM2176 898v1q0 14 -13 14h-74q-11 0 -13 -11l-65 -416l-1 -2q0 -5 4 -9.5t10 -4.5h66 q19 0 21 19zM392 764q-5 -35 -26 -46t-60 -11l-33 -1l17 107q2 11 13 11h19q40 0 58 -11.5t12 -48.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f5;" horiz-adv-x="2304" d="M1597 633q0 -69 -21 -106q-19 -35 -52 -35q-23 0 -41 9v224q29 30 57 30q57 0 57 -122zM2035 669h-110q6 98 56 98q51 0 54 -98zM476 534q0 59 -33 91.5t-101 57.5q-36 13 -52 24t-16 25q0 26 38 26q58 0 124 -33l18 112q-67 32 -149 32q-77 0 -123 -38q-48 -39 -48 -109 q0 -58 32.5 -90.5t99.5 -56.5q39 -14 54.5 -25.5t15.5 -27.5q0 -31 -48 -31q-29 0 -70 12.5t-72 30.5l-18 -113q72 -41 168 -41q81 0 129 37q51 41 51 117zM771 749l19 111h-96v135l-129 -21l-18 -114l-46 -8l-17 -103h62v-219q0 -84 44 -120q38 -30 111 -30q32 0 79 11v118 q-32 -7 -44 -7q-42 0 -42 50v197h77zM1087 724v139q-15 3 -28 3q-32 0 -55.5 -16t-33.5 -46l-10 56h-131v-471h150v306q26 31 82 31q16 0 26 -2zM1124 389h150v471h-150v-471zM1746 638q0 122 -45 179q-40 52 -111 52q-64 0 -117 -56l-8 47h-132v-645l150 25v151 q36 -11 68 -11q83 0 134 56q61 65 61 202zM1278 986q0 33 -23 56t-56 23t-56 -23t-23 -56t23 -56.5t56 -23.5t56 23.5t23 56.5zM2176 629q0 113 -48 176q-50 64 -144 64q-96 0 -151.5 -66t-55.5 -180q0 -128 63 -188q55 -55 161 -55q101 0 160 40l-16 103q-57 -31 -128 -31 q-43 0 -63 19q-23 19 -28 66h248q2 14 2 52zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf1f6;" horiz-adv-x="2048" d="M1558 684q61 -356 298 -556q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5zM1024 -176q16 0 16 16t-16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5zM2026 1424q8 -10 7.5 -23.5t-10.5 -22.5 l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5 l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f7;" horiz-adv-x="2048" d="M1040 -160q0 16 -16 16q-59 0 -101.5 42.5t-42.5 101.5q0 16 -16 16t-16 -16q0 -73 51.5 -124.5t124.5 -51.5q16 0 16 16zM503 315l877 760q-42 88 -132.5 146.5t-223.5 58.5q-93 0 -169.5 -31.5t-121.5 -80.5t-69 -103t-24 -105q0 -384 -137 -645zM1856 128 q0 -52 -38 -90t-90 -38h-448q0 -106 -75 -181t-181 -75t-180.5 74.5t-75.5 180.5l149 129h757q-166 187 -227 459l111 97q61 -356 298 -556zM1942 1520l84 -96q8 -10 7.5 -23.5t-10.5 -22.5l-1872 -1622q-10 -8 -23.5 -7t-21.5 11l-84 96q-8 10 -7.5 23.5t10.5 21.5l186 161 q-19 32 -19 66q50 42 91 88t85 119.5t74.5 158.5t50 206t19.5 260q0 152 117 282.5t307 158.5q-8 19 -8 39q0 40 28 68t68 28t68 -28t28 -68q0 -20 -8 -39q124 -18 219 -82.5t148 -157.5l418 363q10 8 23.5 7t21.5 -11z" />
+<glyph unicode="&#xf1f8;" horiz-adv-x="1408" d="M512 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM768 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1024 160v704q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-704 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM480 1152h448l-48 117q-7 9 -17 11h-317q-10 -2 -17 -11zM1408 1120v-64q0 -14 -9 -23t-23 -9h-96v-948q0 -83 -47 -143.5t-113 -60.5h-832q-66 0 -113 58.5t-47 141.5v952h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h309l70 167 q15 37 54 63t79 26h320q40 0 79 -26t54 -63l70 -167h309q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf1f9;" d="M1150 462v-109q0 -50 -36.5 -89t-94 -60.5t-118 -32.5t-117.5 -11q-205 0 -342.5 139t-137.5 346q0 203 136 339t339 136q34 0 75.5 -4.5t93 -18t92.5 -34t69 -56.5t28 -81v-109q0 -16 -16 -16h-118q-16 0 -16 16v70q0 43 -65.5 67.5t-137.5 24.5q-140 0 -228.5 -91.5 t-88.5 -237.5q0 -151 91.5 -249.5t233.5 -98.5q68 0 138 24t70 66v70q0 7 4.5 11.5t10.5 4.5h119q6 0 11 -4.5t5 -11.5zM768 1280q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf1fa;" d="M972 761q0 108 -53.5 169t-147.5 61q-63 0 -124 -30.5t-110 -84.5t-79.5 -137t-30.5 -180q0 -112 53.5 -173t150.5 -61q96 0 176 66.5t122.5 166t42.5 203.5zM1536 640q0 -111 -37 -197t-98.5 -135t-131.5 -74.5t-145 -27.5q-6 0 -15.5 -0.5t-16.5 -0.5q-95 0 -142 53 q-28 33 -33 83q-52 -66 -131.5 -110t-173.5 -44q-161 0 -249.5 95.5t-88.5 269.5q0 157 66 290t179 210.5t246 77.5q87 0 155 -35.5t106 -99.5l2 19l11 56q1 6 5.5 12t9.5 6h118q5 0 13 -11q5 -5 3 -16l-120 -614q-5 -24 -5 -48q0 -39 12.5 -52t44.5 -13q28 1 57 5.5t73 24 t77 50t57 89.5t24 137q0 292 -174 466t-466 174q-130 0 -248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51q228 0 405 144q11 9 24 8t21 -12l41 -49q8 -12 7 -24q-2 -13 -12 -22q-102 -83 -227.5 -128t-258.5 -45q-156 0 -298 61 t-245 164t-164 245t-61 298t61 298t164 245t245 164t298 61q344 0 556 -212t212 -556z" />
+<glyph unicode="&#xf1fb;" horiz-adv-x="1792" d="M1698 1442q94 -94 94 -226.5t-94 -225.5l-225 -223l104 -104q10 -10 10 -23t-10 -23l-210 -210q-10 -10 -23 -10t-23 10l-105 105l-603 -603q-37 -37 -90 -37h-203l-256 -128l-64 64l128 256v203q0 53 37 90l603 603l-105 105q-10 10 -10 23t10 23l210 210q10 10 23 10 t23 -10l104 -104l223 225q93 94 225.5 94t226.5 -94zM512 64l576 576l-192 192l-576 -576v-192h192z" />
+<glyph unicode="&#xf1fc;" horiz-adv-x="1792" d="M1615 1536q70 0 122.5 -46.5t52.5 -116.5q0 -63 -45 -151q-332 -629 -465 -752q-97 -91 -218 -91q-126 0 -216.5 92.5t-90.5 219.5q0 128 92 212l638 579q59 54 130 54zM706 502q39 -76 106.5 -130t150.5 -76l1 -71q4 -213 -129.5 -347t-348.5 -134q-123 0 -218 46.5 t-152.5 127.5t-86.5 183t-29 220q7 -5 41 -30t62 -44.5t59 -36.5t46 -17q41 0 55 37q25 66 57.5 112.5t69.5 76t88 47.5t103 25.5t125 10.5z" />
+<glyph unicode="&#xf1fd;" horiz-adv-x="1792" d="M1792 128v-384h-1792v384q45 0 85 14t59 27.5t47 37.5q30 27 51.5 38t56.5 11t55.5 -11t52.5 -38q29 -25 47 -38t58 -27t86 -14q45 0 85 14.5t58 27t48 37.5q21 19 32.5 27t31 15t43.5 7q35 0 56.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14t85 14t59 27.5t47 37.5 q30 27 51.5 38t56.5 11q34 0 55.5 -11t51.5 -38q28 -24 47 -37.5t59 -27.5t85 -14zM1792 448v-192q-35 0 -55.5 11t-52.5 38q-29 25 -47 38t-58 27t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-22 -19 -33 -27t-31 -15t-44 -7q-35 0 -56.5 11t-51.5 38q-29 25 -47 38t-58 27 t-86 14q-45 0 -85 -14.5t-58 -27t-48 -37.5q-21 -19 -32.5 -27t-31 -15t-43.5 -7q-35 0 -56.5 11t-51.5 38q-28 24 -47 37.5t-59 27.5t-85 14q-46 0 -86 -14t-58 -27t-47 -38q-30 -27 -51.5 -38t-56.5 -11v192q0 80 56 136t136 56h64v448h256v-448h256v448h256v-448h256v448 h256v-448h64q80 0 136 -56t56 -136zM512 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1024 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51 t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150zM1536 1312q0 -77 -36 -118.5t-92 -41.5q-53 0 -90.5 37.5t-37.5 90.5q0 29 9.5 51t23.5 34t31 28t31 31.5t23.5 44.5t9.5 67q38 0 83 -74t45 -150z" />
+<glyph unicode="&#xf1fe;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1664 1024l256 -896h-1664v576l448 576l576 -576z" />
+<glyph unicode="&#xf200;" horiz-adv-x="1792" d="M768 646l546 -546q-106 -108 -247.5 -168t-298.5 -60q-209 0 -385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103v-762zM955 640h773q0 -157 -60 -298.5t-168 -247.5zM1664 768h-768v768q209 0 385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf201;" horiz-adv-x="2048" d="M2048 0v-128h-2048v1536h128v-1408h1920zM1920 1248v-435q0 -21 -19.5 -29.5t-35.5 7.5l-121 121l-633 -633q-10 -10 -23 -10t-23 10l-233 233l-416 -416l-192 192l585 585q10 10 23 10t23 -10l233 -233l464 464l-121 121q-16 16 -7.5 35.5t29.5 19.5h435q14 0 23 -9 t9 -23z" />
+<glyph unicode="&#xf202;" horiz-adv-x="1792" d="M1292 832q0 -6 10 -41q10 -29 25 -49.5t41 -34t44 -20t55 -16.5q325 -91 325 -332q0 -146 -105.5 -242.5t-254.5 -96.5q-59 0 -111.5 18.5t-91.5 45.5t-77 74.5t-63 87.5t-53.5 103.5t-43.5 103t-39.5 106.5t-35.5 95q-32 81 -61.5 133.5t-73.5 96.5t-104 64t-142 20 q-96 0 -183 -55.5t-138 -144.5t-51 -185q0 -160 106.5 -279.5t263.5 -119.5q177 0 258 95q56 63 83 116l84 -152q-15 -34 -44 -70l1 -1q-131 -152 -388 -152q-147 0 -269.5 79t-190.5 207.5t-68 274.5q0 105 43.5 206t116 176.5t172 121.5t204.5 46q87 0 159 -19t123.5 -50 t95 -80t72.5 -99t58.5 -117t50.5 -124.5t50 -130.5t55 -127q96 -200 233 -200q81 0 138.5 48.5t57.5 128.5q0 42 -19 72t-50.5 46t-72.5 31.5t-84.5 27t-87.5 34t-81 52t-65 82t-39 122.5q-3 16 -3 33q0 110 87.5 192t198.5 78q78 -3 120.5 -14.5t90.5 -53.5h-1 q12 -11 23 -24.5t26 -36t19 -27.5l-129 -99q-26 49 -54 70v1q-23 21 -97 21q-49 0 -84 -33t-35 -83z" />
+<glyph unicode="&#xf203;" d="M1432 484q0 173 -234 239q-35 10 -53 16.5t-38 25t-29 46.5q0 2 -2 8.5t-3 12t-1 7.5q0 36 24.5 59.5t60.5 23.5q54 0 71 -15h-1q20 -15 39 -51l93 71q-39 54 -49 64q-33 29 -67.5 39t-85.5 10q-80 0 -142 -57.5t-62 -137.5q0 -7 2 -23q16 -96 64.5 -140t148.5 -73 q29 -8 49 -15.5t45 -21.5t38.5 -34.5t13.5 -46.5v-5q1 -58 -40.5 -93t-100.5 -35q-97 0 -167 144q-23 47 -51.5 121.5t-48 125.5t-54 110.5t-74 95.5t-103.5 60.5t-147 24.5q-101 0 -192 -56t-144 -148t-50 -192v-1q4 -108 50.5 -199t133.5 -147.5t196 -56.5q186 0 279 110 q20 27 31 51l-60 109q-42 -80 -99 -116t-146 -36q-115 0 -191 87t-76 204q0 105 82 189t186 84q112 0 170 -53.5t104 -172.5q8 -21 25.5 -68.5t28.5 -76.5t31.5 -74.5t38.5 -74t45.5 -62.5t55.5 -53.5t66 -33t80 -13.5q107 0 183 69.5t76 174.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf204;" horiz-adv-x="2048" d="M1152 640q0 104 -40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5t198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM1920 640q0 104 -40.5 198.5 t-109.5 163.5t-163.5 109.5t-198.5 40.5h-386q119 -90 188.5 -224t69.5 -288t-69.5 -288t-188.5 -224h386q104 0 198.5 40.5t163.5 109.5t109.5 163.5t40.5 198.5zM2048 640q0 -130 -51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5 t-136.5 204t-51 248.5t51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5z" />
+<glyph unicode="&#xf205;" horiz-adv-x="2048" d="M0 640q0 130 51 248.5t136.5 204t204 136.5t248.5 51h768q130 0 248.5 -51t204 -136.5t136.5 -204t51 -248.5t-51 -248.5t-136.5 -204t-204 -136.5t-248.5 -51h-768q-130 0 -248.5 51t-204 136.5t-136.5 204t-51 248.5zM1408 128q104 0 198.5 40.5t163.5 109.5 t109.5 163.5t40.5 198.5t-40.5 198.5t-109.5 163.5t-163.5 109.5t-198.5 40.5t-198.5 -40.5t-163.5 -109.5t-109.5 -163.5t-40.5 -198.5t40.5 -198.5t109.5 -163.5t163.5 -109.5t198.5 -40.5z" />
+<glyph unicode="&#xf206;" horiz-adv-x="2304" d="M762 384h-314q-40 0 -57.5 35t6.5 67l188 251q-65 31 -137 31q-132 0 -226 -94t-94 -226t94 -226t226 -94q115 0 203 72.5t111 183.5zM576 512h186q-18 85 -75 148zM1056 512l288 384h-480l-99 -132q105 -103 126 -252h165zM2176 448q0 132 -94 226t-226 94 q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94t226 94t94 226zM2304 448q0 -185 -131.5 -316.5t-316.5 -131.5t-316.5 131.5t-131.5 316.5q0 97 39.5 183.5t109.5 149.5l-65 98l-353 -469 q-18 -26 -51 -26h-197q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5t-131.5 316.5t131.5 316.5t316.5 131.5q114 0 215 -55l137 183h-224q-26 0 -45 19t-19 45t19 45t45 19h384v-128h435l-85 128h-222q-26 0 -45 19t-19 45t19 45t45 19h256q33 0 53 -28l267 -400 q91 44 192 44q185 0 316.5 -131.5t131.5 -316.5z" />
+<glyph unicode="&#xf207;" d="M384 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 320q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1362 716l-72 384q-5 23 -22.5 37.5t-40.5 14.5 h-918q-23 0 -40.5 -14.5t-22.5 -37.5l-72 -384q-5 -30 14 -53t49 -23h1062q30 0 49 23t14 53zM1136 1328q0 20 -14 34t-34 14h-640q-20 0 -34 -14t-14 -34t14 -34t34 -14h640q20 0 34 14t14 34zM1536 603v-603h-128v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5v128h-768v-128q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5v128h-128v603q0 112 25 223l103 454q9 78 97.5 137t230 89t312.5 30t312.5 -30t230 -89t97.5 -137l105 -454q23 -102 23 -223z" />
+<glyph unicode="&#xf208;" horiz-adv-x="2048" d="M1463 704q0 -35 -25 -60.5t-61 -25.5h-702q-36 0 -61 25.5t-25 60.5t25 60.5t61 25.5h702q36 0 61 -25.5t25 -60.5zM1677 704q0 86 -23 170h-982q-36 0 -61 25t-25 60q0 36 25 61t61 25h908q-88 143 -235 227t-320 84q-177 0 -327.5 -87.5t-238 -237.5t-87.5 -327 q0 -86 23 -170h982q36 0 61 -25t25 -60q0 -36 -25 -61t-61 -25h-908q88 -143 235.5 -227t320.5 -84q132 0 253 51.5t208 139t139 208t52 253.5zM2048 959q0 -35 -25 -60t-61 -25h-131q17 -85 17 -170q0 -167 -65.5 -319.5t-175.5 -263t-262.5 -176t-319.5 -65.5 q-246 0 -448.5 133t-301.5 350h-189q-36 0 -61 25t-25 61q0 35 25 60t61 25h132q-17 85 -17 170q0 167 65.5 319.5t175.5 263t262.5 176t320.5 65.5q245 0 447.5 -133t301.5 -350h188q36 0 61 -25t25 -61z" />
+<glyph unicode="&#xf209;" horiz-adv-x="1280" d="M953 1158l-114 -328l117 -21q165 451 165 518q0 56 -38 56q-57 0 -130 -225zM654 471l33 -88q37 42 71 67l-33 5.5t-38.5 7t-32.5 8.5zM362 1367q0 -98 159 -521q18 10 49 10q15 0 75 -5l-121 351q-75 220 -123 220q-19 0 -29 -17.5t-10 -37.5zM283 608q0 -36 51.5 -119 t117.5 -153t100 -70q14 0 25.5 13t11.5 27q0 24 -32 102q-13 32 -32 72t-47.5 89t-61.5 81t-62 32q-20 0 -45.5 -27t-25.5 -47zM125 273q0 -41 25 -104q59 -145 183.5 -227t281.5 -82q227 0 382 170q152 169 152 427q0 43 -1 67t-11.5 62t-30.5 56q-56 49 -211.5 75.5 t-270.5 26.5q-37 0 -49 -11q-12 -5 -12 -35q0 -34 21.5 -60t55.5 -40t77.5 -23.5t87.5 -11.5t85 -4t70 0h23q24 0 40 -19q15 -19 19 -55q-28 -28 -96 -54q-61 -22 -93 -46q-64 -46 -108.5 -114t-44.5 -137q0 -31 18.5 -88.5t18.5 -87.5l-3 -12q-4 -12 -4 -14 q-137 10 -146 216q-8 -2 -41 -2q2 -7 2 -21q0 -53 -40.5 -89.5t-94.5 -36.5q-82 0 -166.5 78t-84.5 159q0 34 33 67q52 -64 60 -76q77 -104 133 -104q12 0 26.5 8.5t14.5 20.5q0 34 -87.5 145t-116.5 111q-43 0 -70 -44.5t-27 -90.5zM11 264q0 101 42.5 163t136.5 88 q-28 74 -28 104q0 62 61 123t122 61q29 0 70 -15q-163 462 -163 567q0 80 41 130.5t119 50.5q131 0 325 -581q6 -17 8 -23q6 16 29 79.5t43.5 118.5t54 127.5t64.5 123t70.5 86.5t76.5 36q71 0 112 -49t41 -122q0 -108 -159 -550q61 -15 100.5 -46t58.5 -78t26 -93.5 t7 -110.5q0 -150 -47 -280t-132 -225t-211 -150t-278 -55q-111 0 -223 42q-149 57 -258 191.5t-109 286.5z" />
+<glyph unicode="&#xf20a;" horiz-adv-x="2048" d="M785 528h207q-14 -158 -98.5 -248.5t-214.5 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-203q-5 64 -35.5 99t-81.5 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t40 -51.5t66 -18q95 0 109 139zM1497 528h206 q-14 -158 -98 -248.5t-214 -90.5q-162 0 -254.5 116t-92.5 316q0 194 93 311.5t233 117.5q148 0 232 -87t97 -247h-204q-4 64 -35 99t-81 35q-57 0 -88.5 -60.5t-31.5 -177.5q0 -48 5 -84t18 -69.5t39.5 -51.5t65.5 -18q49 0 76.5 38t33.5 101zM1856 647q0 207 -15.5 307 t-60.5 161q-6 8 -13.5 14t-21.5 15t-16 11q-86 63 -697 63q-625 0 -710 -63q-5 -4 -17.5 -11.5t-21 -14t-14.5 -14.5q-45 -60 -60 -159.5t-15 -308.5q0 -208 15 -307.5t60 -160.5q6 -8 15 -15t20.5 -14t17.5 -12q44 -33 239.5 -49t470.5 -16q610 0 697 65q5 4 17 11t20.5 14 t13.5 16q46 60 61 159t15 309zM2048 1408v-1536h-2048v1536h2048z" />
+<glyph unicode="&#xf20b;" d="M992 912v-496q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v496q0 112 -80 192t-192 80h-272v-1152q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v1344q0 14 9 23t23 9h464q135 0 249 -66.5t180.5 -180.5t66.5 -249zM1376 1376v-880q0 -135 -66.5 -249t-180.5 -180.5 t-249 -66.5h-464q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h160q14 0 23 -9t9 -23v-768h272q112 0 192 80t80 192v880q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
+<glyph unicode="&#xf20c;" d="M1311 694v-114q0 -24 -13.5 -38t-37.5 -14h-202q-24 0 -38 14t-14 38v114q0 24 14 38t38 14h202q24 0 37.5 -14t13.5 -38zM821 464v250q0 53 -32.5 85.5t-85.5 32.5h-133q-68 0 -96 -52q-28 52 -96 52h-130q-53 0 -85.5 -32.5t-32.5 -85.5v-250q0 -22 21 -22h55 q22 0 22 22v230q0 24 13.5 38t38.5 14h94q24 0 38 -14t14 -38v-230q0 -22 21 -22h54q22 0 22 22v230q0 24 14 38t38 14h97q24 0 37.5 -14t13.5 -38v-230q0 -22 22 -22h55q21 0 21 22zM1410 560v154q0 53 -33 85.5t-86 32.5h-264q-53 0 -86 -32.5t-33 -85.5v-410 q0 -21 22 -21h55q21 0 21 21v180q31 -42 94 -42h191q53 0 86 32.5t33 85.5zM1536 1176v-1072q0 -96 -68 -164t-164 -68h-1072q-96 0 -164 68t-68 164v1072q0 96 68 164t164 68h1072q96 0 164 -68t68 -164z" />
+<glyph unicode="&#xf20d;" d="M915 450h-294l147 551zM1001 128h311l-324 1024h-440l-324 -1024h311l383 314zM1536 1120v-960q0 -118 -85 -203t-203 -85h-960q-118 0 -203 85t-85 203v960q0 118 85 203t203 85h960q118 0 203 -85t85 -203z" />
+<glyph unicode="&#xf20e;" horiz-adv-x="2048" d="M2048 641q0 -21 -13 -36.5t-33 -19.5l-205 -356q3 -9 3 -18q0 -20 -12.5 -35.5t-32.5 -19.5l-193 -337q3 -8 3 -16q0 -23 -16.5 -40t-40.5 -17q-25 0 -41 18h-400q-17 -20 -43 -20t-43 20h-399q-17 -20 -43 -20q-23 0 -40 16.5t-17 40.5q0 8 4 20l-193 335 q-20 4 -32.5 19.5t-12.5 35.5q0 9 3 18l-206 356q-20 5 -32.5 20.5t-12.5 35.5q0 21 13.5 36.5t33.5 19.5l199 344q0 1 -0.5 3t-0.5 3q0 36 34 51l209 363q-4 10 -4 18q0 24 17 40.5t40 16.5q26 0 44 -21h396q16 21 43 21t43 -21h398q18 21 44 21q23 0 40 -16.5t17 -40.5 q0 -6 -4 -18l207 -358q23 -1 39 -17.5t16 -38.5q0 -13 -7 -27l187 -324q19 -4 31.5 -19.5t12.5 -35.5zM1063 -158h389l-342 354h-143l-342 -354h360q18 16 39 16t39 -16zM112 654q1 -4 1 -13q0 -10 -2 -15l208 -360q2 0 4.5 -1t5.5 -2.5l5 -2.5l188 199v347l-187 194 q-13 -8 -29 -10zM986 1438h-388l190 -200l554 200h-280q-16 -16 -38 -16t-38 16zM1689 226q1 6 5 11l-64 68l-17 -79h76zM1583 226l22 105l-252 266l-296 -307l63 -64h463zM1495 -142l16 28l65 310h-427l333 -343q8 4 13 5zM578 -158h5l342 354h-373v-335l4 -6q14 -5 22 -13 zM552 226h402l64 66l-309 321l-157 -166v-221zM359 226h163v189l-168 -177q4 -8 5 -12zM358 1051q0 -1 0.5 -2t0.5 -2q0 -16 -8 -29l171 -177v269zM552 1121v-311l153 -157l297 314l-223 236zM556 1425l-4 -8v-264l205 74l-191 201q-6 -2 -10 -3zM1447 1438h-16l-621 -224 l213 -225zM1023 946l-297 -315l311 -319l296 307zM688 634l-136 141v-284zM1038 270l-42 -44h85zM1374 618l238 -251l132 624l-3 5l-1 1zM1718 1018q-8 13 -8 29v2l-216 376q-5 1 -13 5l-437 -463l310 -327zM522 1142v223l-163 -282zM522 196h-163l163 -283v283zM1607 196 l-48 -227l130 227h-82zM1729 266l207 361q-2 10 -2 14q0 1 3 16l-171 296l-129 -612l77 -82q5 3 15 7z" />
+<glyph unicode="&#xf210;" d="M0 856q0 131 91.5 226.5t222.5 95.5h742l352 358v-1470q0 -132 -91.5 -227t-222.5 -95h-780q-131 0 -222.5 95t-91.5 227v790zM1232 102l-176 180v425q0 46 -32 79t-78 33h-484q-46 0 -78 -33t-32 -79v-492q0 -46 32.5 -79.5t77.5 -33.5h770z" />
+<glyph unicode="&#xf211;" d="M934 1386q-317 -121 -556 -362.5t-358 -560.5q-20 89 -20 176q0 208 102.5 384.5t278.5 279t384 102.5q82 0 169 -19zM1203 1267q93 -65 164 -155q-389 -113 -674.5 -400.5t-396.5 -676.5q-93 72 -155 162q112 386 395 671t667 399zM470 -67q115 356 379.5 622t619.5 384 q40 -92 54 -195q-292 -120 -516 -345t-343 -518q-103 14 -194 52zM1536 -125q-193 50 -367 115q-135 -84 -290 -107q109 205 274 370.5t369 275.5q-21 -152 -101 -284q65 -175 115 -370z" />
+<glyph unicode="&#xf212;" horiz-adv-x="2048" d="M1893 1144l155 -1272q-131 0 -257 57q-200 91 -393 91q-226 0 -374 -148q-148 148 -374 148q-193 0 -393 -91q-128 -57 -252 -57h-5l155 1272q224 127 482 127q233 0 387 -106q154 106 387 106q258 0 482 -127zM1398 157q129 0 232 -28.5t260 -93.5l-124 1021 q-171 78 -368 78q-224 0 -374 -141q-150 141 -374 141q-197 0 -368 -78l-124 -1021q105 43 165.5 65t148.5 39.5t178 17.5q202 0 374 -108q172 108 374 108zM1438 191l-55 907q-211 -4 -359 -155q-152 155 -374 155q-176 0 -336 -66l-114 -941q124 51 228.5 76t221.5 25 q209 0 374 -102q172 107 374 102z" />
+<glyph unicode="&#xf213;" horiz-adv-x="2048" d="M1500 165v733q0 21 -15 36t-35 15h-93q-20 0 -35 -15t-15 -36v-733q0 -20 15 -35t35 -15h93q20 0 35 15t15 35zM1216 165v531q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-531q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM924 165v429q0 20 -15 35t-35 15h-101 q-20 0 -35 -15t-15 -35v-429q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM632 165v362q0 20 -15 35t-35 15h-101q-20 0 -35 -15t-15 -35v-362q0 -20 15 -35t35 -15h101q20 0 35 15t15 35zM2048 311q0 -166 -118 -284t-284 -118h-1244q-166 0 -284 118t-118 284 q0 116 63 214.5t168 148.5q-10 34 -10 73q0 113 80.5 193.5t193.5 80.5q102 0 180 -67q45 183 194 300t338 117q149 0 275 -73.5t199.5 -199.5t73.5 -275q0 -66 -14 -122q135 -33 221 -142.5t86 -247.5z" />
+<glyph unicode="&#xf214;" d="M0 1536h1536v-1392l-776 -338l-760 338v1392zM1436 209v926h-1336v-926l661 -294zM1436 1235v201h-1336v-201h1336zM181 937v-115h-37v115h37zM181 789v-115h-37v115h37zM181 641v-115h-37v115h37zM181 493v-115h-37v115h37zM181 345v-115h-37v115h37zM207 202l15 34 l105 -47l-15 -33zM343 142l15 34l105 -46l-15 -34zM478 82l15 34l105 -46l-15 -34zM614 23l15 33l104 -46l-15 -34zM797 10l105 46l15 -33l-105 -47zM932 70l105 46l15 -34l-105 -46zM1068 130l105 46l15 -34l-105 -46zM1203 189l105 47l15 -34l-105 -46zM259 1389v-36h-114 v36h114zM421 1389v-36h-115v36h115zM583 1389v-36h-115v36h115zM744 1389v-36h-114v36h114zM906 1389v-36h-114v36h114zM1068 1389v-36h-115v36h115zM1230 1389v-36h-115v36h115zM1391 1389v-36h-114v36h114zM181 1049v-79h-37v115h115v-36h-78zM421 1085v-36h-115v36h115z M583 1085v-36h-115v36h115zM744 1085v-36h-114v36h114zM906 1085v-36h-114v36h114zM1068 1085v-36h-115v36h115zM1230 1085v-36h-115v36h115zM1355 970v79h-78v36h115v-115h-37zM1355 822v115h37v-115h-37zM1355 674v115h37v-115h-37zM1355 526v115h37v-115h-37zM1355 378 v115h37v-115h-37zM1355 230v115h37v-115h-37zM760 265q-129 0 -221 91.5t-92 221.5q0 129 92 221t221 92q130 0 221.5 -92t91.5 -221q0 -130 -91.5 -221.5t-221.5 -91.5zM595 646q0 -36 19.5 -56.5t49.5 -25t64 -7t64 -2t49.5 -9t19.5 -30.5q0 -49 -112 -49q-97 0 -123 51 h-3l-31 -63q67 -42 162 -42q29 0 56.5 5t55.5 16t45.5 33t17.5 53q0 46 -27.5 69.5t-67.5 27t-79.5 3t-67 5t-27.5 25.5q0 21 20.5 33t40.5 15t41 3q34 0 70.5 -11t51.5 -34h3l30 58q-3 1 -21 8.5t-22.5 9t-19.5 7t-22 7t-20 4.5t-24 4t-23 1q-29 0 -56.5 -5t-54 -16.5 t-43 -34t-16.5 -53.5z" />
+<glyph unicode="&#xf215;" horiz-adv-x="2048" d="M863 504q0 112 -79.5 191.5t-191.5 79.5t-191 -79.5t-79 -191.5t79 -191t191 -79t191.5 79t79.5 191zM1726 505q0 112 -79 191t-191 79t-191.5 -79t-79.5 -191q0 -113 79.5 -192t191.5 -79t191 79.5t79 191.5zM2048 1314v-1348q0 -44 -31.5 -75.5t-76.5 -31.5h-1832 q-45 0 -76.5 31.5t-31.5 75.5v1348q0 44 31.5 75.5t76.5 31.5h431q44 0 76 -31.5t32 -75.5v-161h754v161q0 44 32 75.5t76 31.5h431q45 0 76.5 -31.5t31.5 -75.5z" />
+<glyph unicode="&#xf216;" horiz-adv-x="2048" d="M1430 953zM1690 749q148 0 253 -98.5t105 -244.5q0 -157 -109 -261.5t-267 -104.5q-85 0 -162 27.5t-138 73.5t-118 106t-109 126.5t-103.5 132.5t-108.5 126t-117 106t-136 73.5t-159 27.5q-154 0 -251.5 -91.5t-97.5 -244.5q0 -157 104 -250t263 -93q100 0 208 37.5 t193 98.5q5 4 21 18.5t30 24t22 9.5q14 0 24.5 -10.5t10.5 -24.5q0 -24 -60 -77q-101 -88 -234.5 -142t-260.5 -54q-133 0 -245.5 58t-180 165t-67.5 241q0 205 141.5 341t347.5 136q120 0 226.5 -43.5t185.5 -113t151.5 -153t139 -167.5t133.5 -153.5t149.5 -113 t172.5 -43.5q102 0 168.5 61.5t66.5 162.5q0 95 -64.5 159t-159.5 64q-30 0 -81.5 -18.5t-68.5 -18.5q-20 0 -35.5 15t-15.5 35q0 18 8.5 57t8.5 59q0 159 -107.5 263t-266.5 104q-58 0 -111.5 -18.5t-84 -40.5t-55.5 -40.5t-33 -18.5q-15 0 -25.5 10.5t-10.5 25.5 q0 19 25 46q59 67 147 103.5t182 36.5q191 0 318 -125.5t127 -315.5q0 -37 -4 -66q57 15 115 15z" />
+<glyph unicode="&#xf217;" horiz-adv-x="1664" d="M1216 832q0 26 -19 45t-45 19h-128v128q0 26 -19 45t-45 19t-45 -19t-19 -45v-128h-128q-26 0 -45 -19t-19 -45t19 -45t45 -19h128v-128q0 -26 19 -45t45 -19t45 19t19 45v128h128q26 0 45 19t19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf218;" horiz-adv-x="1664" d="M1280 832q0 26 -19 45t-45 19t-45 -19l-147 -146v293q0 26 -19 45t-45 19t-45 -19t-19 -45v-293l-147 146q-19 19 -45 19t-45 -19t-19 -45t19 -45l256 -256q19 -19 45 -19t45 19l256 256q19 19 19 45zM640 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1536 0q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1664 1088v-512q0 -24 -16 -42.5t-41 -21.5l-1044 -122q1 -7 4.5 -21.5t6 -26.5t2.5 -22q0 -16 -24 -64h920 q26 0 45 -19t19 -45t-19 -45t-45 -19h-1024q-26 0 -45 19t-19 45q0 14 11 39.5t29.5 59.5t20.5 38l-177 823h-204q-26 0 -45 19t-19 45t19 45t45 19h256q16 0 28.5 -6.5t20 -15.5t13 -24.5t7.5 -26.5t5.5 -29.5t4.5 -25.5h1201q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf219;" horiz-adv-x="2048" d="M212 768l623 -665l-300 665h-323zM1024 -4l349 772h-698zM538 896l204 384h-262l-288 -384h346zM1213 103l623 665h-323zM683 896h682l-204 384h-274zM1510 896h346l-288 384h-262zM1651 1382l384 -512q14 -18 13 -41.5t-17 -40.5l-960 -1024q-18 -20 -47 -20t-47 20 l-960 1024q-16 17 -17 40.5t13 41.5l384 512q18 26 51 26h1152q33 0 51 -26z" />
+<glyph unicode="&#xf21a;" horiz-adv-x="2048" d="M1811 -19q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83q19 19 45 19t45 -19l83 -83l83 83 q19 19 45 19t45 -19l83 -83zM237 19q-19 -19 -45 -19t-45 19l-128 128l90 90l83 -82l83 82q19 19 45 19t45 -19l83 -82l64 64v293l-210 314q-17 26 -7 56.5t40 40.5l177 58v299h128v128h256v128h256v-128h256v-128h128v-299l177 -58q30 -10 40 -40.5t-7 -56.5l-210 -314 v-293l19 18q19 19 45 19t45 -19l83 -82l83 82q19 19 45 19t45 -19l128 -128l-90 -90l-83 83l-83 -83q-18 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83l-83 -83 q-19 -19 -45 -19t-45 19l-83 83l-83 -83q-19 -19 -45 -19t-45 19l-83 83zM640 1152v-128l384 128l384 -128v128h-128v128h-512v-128h-128z" />
+<glyph unicode="&#xf21b;" d="M576 0l96 448l-96 128l-128 64zM832 0l128 640l-128 -64l-96 -128zM992 1010q-2 4 -4 6q-10 8 -96 8q-70 0 -167 -19q-7 -2 -21 -2t-21 2q-97 19 -167 19q-86 0 -96 -8q-2 -2 -4 -6q2 -18 4 -27q2 -3 7.5 -6.5t7.5 -10.5q2 -4 7.5 -20.5t7 -20.5t7.5 -17t8.5 -17t9 -14 t12 -13.5t14 -9.5t17.5 -8t20.5 -4t24.5 -2q36 0 59 12.5t32.5 30t14.5 34.5t11.5 29.5t17.5 12.5h12q11 0 17.5 -12.5t11.5 -29.5t14.5 -34.5t32.5 -30t59 -12.5q13 0 24.5 2t20.5 4t17.5 8t14 9.5t12 13.5t9 14t8.5 17t7.5 17t7 20.5t7.5 20.5q2 7 7.5 10.5t7.5 6.5 q2 9 4 27zM1408 131q0 -121 -73 -190t-194 -69h-874q-121 0 -194 69t-73 190q0 61 4.5 118t19 125.5t37.5 123.5t63.5 103.5t93.5 74.5l-90 220h214q-22 64 -22 128q0 12 2 32q-194 40 -194 96q0 57 210 99q17 62 51.5 134t70.5 114q32 37 76 37q30 0 84 -31t84 -31t84 31 t84 31q44 0 76 -37q36 -42 70.5 -114t51.5 -134q210 -42 210 -99q0 -56 -194 -96q7 -81 -20 -160h214l-82 -225q63 -33 107.5 -96.5t65.5 -143.5t29 -151.5t8 -148.5z" />
+<glyph unicode="&#xf21c;" horiz-adv-x="2304" d="M2301 500q12 -103 -22 -198.5t-99 -163.5t-158.5 -106t-196.5 -31q-161 11 -279.5 125t-134.5 274q-12 111 27.5 210.5t118.5 170.5l-71 107q-96 -80 -151 -194t-55 -244q0 -27 -18.5 -46.5t-45.5 -19.5h-256h-69q-23 -164 -149 -274t-294 -110q-185 0 -316.5 131.5 t-131.5 316.5t131.5 316.5t316.5 131.5q76 0 152 -27l24 45q-123 110 -304 110h-64q-26 0 -45 19t-19 45t19 45t45 19h128q78 0 145 -13.5t116.5 -38.5t71.5 -39.5t51 -36.5h512h115l-85 128h-222q-30 0 -49 22.5t-14 52.5q4 23 23 38t43 15h253q33 0 53 -28l70 -105 l114 114q19 19 46 19h101q26 0 45 -19t19 -45v-128q0 -26 -19 -45t-45 -19h-179l115 -172q131 63 275 36q143 -26 244 -134.5t118 -253.5zM448 128q115 0 203 72.5t111 183.5h-314q-35 0 -55 31q-18 32 -1 63l147 277q-47 13 -91 13q-132 0 -226 -94t-94 -226t94 -226 t226 -94zM1856 128q132 0 226 94t94 226t-94 226t-226 94q-60 0 -121 -24l174 -260q15 -23 10 -49t-27 -40q-15 -11 -36 -11q-35 0 -53 29l-174 260q-93 -95 -93 -225q0 -132 94 -226t226 -94z" />
+<glyph unicode="&#xf21d;" d="M1408 0q0 -63 -61.5 -113.5t-164 -81t-225 -46t-253.5 -15.5t-253.5 15.5t-225 46t-164 81t-61.5 113.5q0 49 33 88.5t91 66.5t118 44.5t131 29.5q26 5 48 -10.5t26 -41.5q5 -26 -10.5 -48t-41.5 -26q-58 -10 -106 -23.5t-76.5 -25.5t-48.5 -23.5t-27.5 -19.5t-8.5 -12 q3 -11 27 -26.5t73 -33t114 -32.5t160.5 -25t201.5 -10t201.5 10t160.5 25t114 33t73 33.5t27 27.5q-1 4 -8.5 11t-27.5 19t-48.5 23.5t-76.5 25t-106 23.5q-26 4 -41.5 26t-10.5 48q4 26 26 41.5t48 10.5q71 -12 131 -29.5t118 -44.5t91 -66.5t33 -88.5zM1024 896v-384 q0 -26 -19 -45t-45 -19h-64v-384q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v384h-64q-26 0 -45 19t-19 45v384q0 53 37.5 90.5t90.5 37.5h384q53 0 90.5 -37.5t37.5 -90.5zM928 1280q0 -93 -65.5 -158.5t-158.5 -65.5t-158.5 65.5t-65.5 158.5t65.5 158.5t158.5 65.5 t158.5 -65.5t65.5 -158.5z" />
+<glyph unicode="&#xf21e;" horiz-adv-x="1792" d="M1280 512h305q-5 -6 -10 -10.5t-9 -7.5l-3 -4l-623 -600q-18 -18 -44 -18t-44 18l-624 602q-5 2 -21 20h369q22 0 39.5 13.5t22.5 34.5l70 281l190 -667q6 -20 23 -33t39 -13q21 0 38 13t23 33l146 485l56 -112q18 -35 57 -35zM1792 940q0 -145 -103 -300h-369l-111 221 q-8 17 -25.5 27t-36.5 8q-45 -5 -56 -46l-129 -430l-196 686q-6 20 -23.5 33t-39.5 13t-39 -13.5t-22 -34.5l-116 -464h-423q-103 155 -103 300q0 220 127 344t351 124q62 0 126.5 -21.5t120 -58t95.5 -68.5t76 -68q36 36 76 68t95.5 68.5t120 58t126.5 21.5q224 0 351 -124 t127 -344z" />
+<glyph unicode="&#xf221;" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292 q11 134 80.5 249t182 188t245.5 88q170 19 319 -54t236 -212t87 -306zM128 960q0 -185 131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5z" />
+<glyph unicode="&#xf222;" d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-382 -383q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5 q203 0 359 -126l382 382h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf223;" horiz-adv-x="1280" d="M830 1220q145 -72 233.5 -210.5t88.5 -305.5q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5 t-147.5 384.5q0 167 88.5 305.5t233.5 210.5q-165 96 -228 273q-6 16 3.5 29.5t26.5 13.5h69q21 0 29 -20q44 -106 140 -171t214 -65t214 65t140 171q8 20 37 20h61q17 0 26.5 -13.5t3.5 -29.5q-63 -177 -228 -273zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf224;" d="M1024 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-149 16 -270.5 103t-186.5 223.5t-53 291.5q16 204 160 353.5t347 172.5q118 14 228 -19t198 -103l255 254h-134q-14 0 -23 9t-9 23v64zM576 256q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf225;" horiz-adv-x="1792" d="M1280 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q126 -158 126 -359q0 -221 -147.5 -384.5t-364.5 -187.5v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64 q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-217 24 -364.5 187.5t-147.5 384.5q0 201 126 359l-52 53l-101 -111q-9 -10 -22 -10.5t-23 7.5l-48 44q-10 8 -10.5 21.5t8.5 23.5l105 115l-111 112v-134q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9 t-9 23v288q0 26 19 45t45 19h288q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-133l106 -107l86 94q9 10 22 10.5t23 -7.5l48 -44q10 -8 10.5 -21.5t-8.5 -23.5l-90 -99l57 -56q158 126 359 126t359 -126l255 254h-134q-14 0 -23 9t-9 23v64zM832 256q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf226;" horiz-adv-x="1792" d="M1790 1007q12 -155 -52.5 -292t-186 -224t-271.5 -103v-260h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-512v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23 t23 9h224v260q-150 16 -271.5 103t-186 224t-52.5 292q17 206 164.5 356.5t352.5 169.5q206 21 377 -94q171 115 377 94q205 -19 352.5 -169.5t164.5 -356.5zM896 647q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM576 512q115 0 218 57q-154 165 -154 391 q0 224 154 391q-103 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5zM1152 128v260q-137 15 -256 94q-119 -79 -256 -94v-260h512zM1216 512q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5q-115 0 -218 -57q154 -167 154 -391 q0 -226 -154 -391q103 -57 218 -57z" />
+<glyph unicode="&#xf227;" horiz-adv-x="1920" d="M1536 1120q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-31 -182 -166 -312t-318 -156q-210 -29 -384.5 80t-241.5 300q-117 6 -221 57.5t-177.5 133t-113.5 192.5t-32 230 q9 135 78 252t182 191.5t248 89.5q118 14 227.5 -19t198.5 -103l255 254h-134q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q59 -74 93 -169q182 -9 328 -124l255 254h-134q-14 0 -23 9 t-9 23v64zM1024 704q0 20 -4 58q-162 -25 -271 -150t-109 -292q0 -20 4 -58q162 25 271 150t109 292zM128 704q0 -168 111 -294t276 -149q-3 29 -3 59q0 210 135 369.5t338 196.5q-53 120 -163.5 193t-245.5 73q-185 0 -316.5 -131.5t-131.5 -316.5zM1088 -128 q185 0 316.5 131.5t131.5 316.5q0 168 -111 294t-276 149q3 -29 3 -59q0 -210 -135 -369.5t-338 -196.5q53 -120 163.5 -193t245.5 -73z" />
+<glyph unicode="&#xf228;" horiz-adv-x="2048" d="M1664 1504q0 14 9 23t23 9h288q26 0 45 -19t19 -45v-288q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v134l-254 -255q76 -95 107.5 -214t9.5 -247q-32 -180 -164.5 -310t-313.5 -157q-223 -34 -409 90q-117 -78 -256 -93v-132h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23 t-23 -9h-96v-96q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v96h-96q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96v132q-155 17 -279.5 109.5t-187 237.5t-39.5 307q25 187 159.5 322.5t320.5 164.5q224 34 410 -90q146 97 320 97q201 0 359 -126l255 254h-134q-14 0 -23 9 t-9 23v64zM896 391q128 131 128 313t-128 313q-128 -131 -128 -313t128 -313zM128 704q0 -185 131.5 -316.5t316.5 -131.5q117 0 218 57q-154 167 -154 391t154 391q-101 57 -218 57q-185 0 -316.5 -131.5t-131.5 -316.5zM1216 256q185 0 316.5 131.5t131.5 316.5 t-131.5 316.5t-316.5 131.5q-117 0 -218 -57q154 -167 154 -391t-154 -391q101 -57 218 -57z" />
+<glyph unicode="&#xf229;" d="M1472 1408q26 0 45 -19t19 -45v-416q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v262l-213 -214l140 -140q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-140 141l-78 -79q126 -156 126 -359q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5 t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123t223.5 45.5q203 0 359 -126l78 78l-172 172q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l172 -172l213 213h-261q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h416zM576 0q185 0 316.5 131.5t131.5 316.5t-131.5 316.5 t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22a;" horiz-adv-x="1280" d="M640 892q217 -24 364.5 -187.5t147.5 -384.5q0 -167 -87 -306t-236 -212t-319 -54q-133 15 -245.5 88t-182 188t-80.5 249q-12 155 52.5 292t186 224t271.5 103v132h-160q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h160v165l-92 -92q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22 t9 23l202 201q19 19 45 19t45 -19l202 -201q9 -10 9 -23t-9 -22l-46 -46q-9 -9 -22 -9t-23 9l-92 92v-165h160q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-160v-132zM576 -128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5 t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22b;" horiz-adv-x="2048" d="M1901 621q19 -19 19 -45t-19 -45l-294 -294q-9 -10 -22.5 -10t-22.5 10l-45 45q-10 9 -10 22.5t10 22.5l185 185h-294v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-132q-24 -217 -187.5 -364.5t-384.5 -147.5q-167 0 -306 87t-212 236t-54 319q15 133 88 245.5 t188 182t249 80.5q155 12 292 -52.5t224 -186t103 -271.5h132v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h294l-185 185q-10 9 -10 22.5t10 22.5l45 45q9 10 22.5 10t22.5 -10zM576 128q185 0 316.5 131.5t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5 t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22c;" horiz-adv-x="1280" d="M1152 960q0 -221 -147.5 -384.5t-364.5 -187.5v-612q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v612q-217 24 -364.5 187.5t-147.5 384.5q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM576 512q185 0 316.5 131.5 t131.5 316.5t-131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5z" />
+<glyph unicode="&#xf22d;" horiz-adv-x="1280" d="M1024 576q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5t131.5 -316.5t316.5 -131.5t316.5 131.5t131.5 316.5zM1152 576q0 -117 -45.5 -223.5t-123 -184t-184 -123t-223.5 -45.5t-223.5 45.5t-184 123t-123 184t-45.5 223.5t45.5 223.5t123 184t184 123 t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5z" />
+<glyph unicode="&#xf22e;" horiz-adv-x="1792" />
+<glyph unicode="&#xf22f;" horiz-adv-x="1792" />
+<glyph unicode="&#xf230;" d="M1451 1408q35 0 60 -25t25 -60v-1366q0 -35 -25 -60t-60 -25h-391v595h199l30 232h-229v148q0 56 23.5 84t91.5 28l122 1v207q-63 9 -178 9q-136 0 -217.5 -80t-81.5 -226v-171h-200v-232h200v-595h-735q-35 0 -60 25t-25 60v1366q0 35 25 60t60 25h1366z" />
+<glyph unicode="&#xf231;" horiz-adv-x="1280" d="M0 939q0 108 37.5 203.5t103.5 166.5t152 123t185 78t202 26q158 0 294 -66.5t221 -193.5t85 -287q0 -96 -19 -188t-60 -177t-100 -149.5t-145 -103t-189 -38.5q-68 0 -135 32t-96 88q-10 -39 -28 -112.5t-23.5 -95t-20.5 -71t-26 -71t-32 -62.5t-46 -77.5t-62 -86.5 l-14 -5l-9 10q-15 157 -15 188q0 92 21.5 206.5t66.5 287.5t52 203q-32 65 -32 169q0 83 52 156t132 73q61 0 95 -40.5t34 -102.5q0 -66 -44 -191t-44 -187q0 -63 45 -104.5t109 -41.5q55 0 102 25t78.5 68t56 95t38 110.5t20 111t6.5 99.5q0 173 -109.5 269.5t-285.5 96.5 q-200 0 -334 -129.5t-134 -328.5q0 -44 12.5 -85t27 -65t27 -45.5t12.5 -30.5q0 -28 -15 -73t-37 -45q-2 0 -17 3q-51 15 -90.5 56t-61 94.5t-32.5 108t-11 106.5z" />
+<glyph unicode="&#xf232;" d="M985 562q13 0 97.5 -44t89.5 -53q2 -5 2 -15q0 -33 -17 -76q-16 -39 -71 -65.5t-102 -26.5q-57 0 -190 62q-98 45 -170 118t-148 185q-72 107 -71 194v8q3 91 74 158q24 22 52 22q6 0 18 -1.5t19 -1.5q19 0 26.5 -6.5t15.5 -27.5q8 -20 33 -88t25 -75q0 -21 -34.5 -57.5 t-34.5 -46.5q0 -7 5 -15q34 -73 102 -137q56 -53 151 -101q12 -7 22 -7q15 0 54 48.5t52 48.5zM782 32q127 0 243.5 50t200.5 134t134 200.5t50 243.5t-50 243.5t-134 200.5t-200.5 134t-243.5 50t-243.5 -50t-200.5 -134t-134 -200.5t-50 -243.5q0 -203 120 -368l-79 -233 l242 77q158 -104 345 -104zM782 1414q153 0 292.5 -60t240.5 -161t161 -240.5t60 -292.5t-60 -292.5t-161 -240.5t-240.5 -161t-292.5 -60q-195 0 -365 94l-417 -134l136 405q-108 178 -108 389q0 153 60 292.5t161 240.5t240.5 161t292.5 60z" />
+<glyph unicode="&#xf233;" horiz-adv-x="1792" d="M128 128h1024v128h-1024v-128zM128 640h1024v128h-1024v-128zM1696 192q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM128 1152h1024v128h-1024v-128zM1696 704q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1696 1216 q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1792 384v-384h-1792v384h1792zM1792 896v-384h-1792v384h1792zM1792 1408v-384h-1792v384h1792z" />
+<glyph unicode="&#xf234;" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1664 512h352q13 0 22.5 -9.5t9.5 -22.5v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-352q0 -13 -9.5 -22.5t-22.5 -9.5h-192q-13 0 -22.5 9.5 t-9.5 22.5v352h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v352q0 13 9.5 22.5t22.5 9.5h192q13 0 22.5 -9.5t9.5 -22.5v-352zM928 288q0 -52 38 -90t90 -38h256v-238q-68 -50 -171 -50h-874q-121 0 -194 69t-73 190q0 53 3.5 103.5t14 109t26.5 108.5 t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q79 -61 154.5 -91.5t164.5 -30.5t164.5 30.5t154.5 91.5q20 17 39 17q132 0 217 -96h-223q-52 0 -90 -38t-38 -90v-192z" />
+<glyph unicode="&#xf235;" horiz-adv-x="2048" d="M704 640q-159 0 -271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5t-112.5 -271.5t-271.5 -112.5zM1781 320l249 -249q9 -9 9 -23q0 -13 -9 -22l-136 -136q-9 -9 -22 -9q-14 0 -23 9l-249 249l-249 -249q-9 -9 -23 -9q-13 0 -22 9l-136 136 q-9 9 -9 22q0 14 9 23l249 249l-249 249q-9 9 -9 23q0 13 9 22l136 136q9 9 22 9q14 0 23 -9l249 -249l249 249q9 9 23 9q13 0 22 -9l136 -136q9 -9 9 -22q0 -14 -9 -23zM1283 320l-181 -181q-37 -37 -37 -91q0 -53 37 -90l83 -83q-21 -3 -44 -3h-874q-121 0 -194 69 t-73 190q0 53 3.5 103.5t14 109t26.5 108.5t43 97.5t62 81t85.5 53.5t111.5 20q19 0 39 -17q154 -122 319 -122t319 122q20 17 39 17q28 0 57 -6q-28 -27 -41 -50t-13 -56q0 -54 37 -91z" />
+<glyph unicode="&#xf236;" horiz-adv-x="2048" d="M256 512h1728q26 0 45 -19t19 -45v-448h-256v256h-1536v-256h-256v1216q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-704zM832 832q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM2048 576v64q0 159 -112.5 271.5t-271.5 112.5h-704 q-26 0 -45 -19t-19 -45v-384h1152z" />
+<glyph unicode="&#xf237;" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
+<glyph unicode="&#xf238;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
+<glyph unicode="&#xf239;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
+<glyph unicode="&#xf23a;" horiz-adv-x="1792" d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116 q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
+<glyph unicode="&#xf23b;" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
+<glyph unicode="&#xf23c;" horiz-adv-x="2296" d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 4 5 8q16 18 60 23h13q5 18 19 30t33 8 t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-106 2 -211 0v1q-1 -27 2.5 -86 t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34l3 9v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4l-10 -2.5t-12 -2 l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-2 0 -3 -0.5t-3 -0.5h-3q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130t-73 70 q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -2 -1 -5t-1 -4q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
+<glyph unicode="&#xf23d;" horiz-adv-x="2304" d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
+<glyph unicode="&#xf23e;" horiz-adv-x="1792" d="M896 1472q-169 0 -323 -66t-265.5 -177.5t-177.5 -265.5t-66 -323t66 -323t177.5 -265.5t265.5 -177.5t323 -66t323 66t265.5 177.5t177.5 265.5t66 323t-66 323t-177.5 265.5t-265.5 177.5t-323 66zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348 t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM496 704q16 0 16 -16v-480q0 -16 -16 -16h-32q-16 0 -16 16v480q0 16 16 16h32zM896 640q53 0 90.5 -37.5t37.5 -90.5q0 -35 -17.5 -64t-46.5 -46v-114q0 -14 -9 -23 t-23 -9h-64q-14 0 -23 9t-9 23v114q-29 17 -46.5 46t-17.5 64q0 53 37.5 90.5t90.5 37.5zM896 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM544 928v-96 q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 93 65.5 158.5t158.5 65.5t158.5 -65.5t65.5 -158.5v-96q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v96q0 146 -103 249t-249 103t-249 -103t-103 -249zM1408 192v512q0 26 -19 45t-45 19h-896q-26 0 -45 -19t-19 -45v-512 q0 -26 19 -45t45 -19h896q26 0 45 19t19 45z" />
+<glyph unicode="&#xf240;" horiz-adv-x="2304" d="M1920 1024v-768h-1664v768h1664zM2048 448h128v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288zM2304 832v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113 v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160q53 0 90.5 -37.5t37.5 -90.5z" />
+<glyph unicode="&#xf241;" horiz-adv-x="2304" d="M256 256v768h1280v-768h-1280zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf242;" horiz-adv-x="2304" d="M256 256v768h896v-768h-896zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf243;" horiz-adv-x="2304" d="M256 256v768h512v-768h-512zM2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9 h-1856q-14 0 -23 -9t-9 -23v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf244;" horiz-adv-x="2304" d="M2176 960q53 0 90.5 -37.5t37.5 -90.5v-384q0 -53 -37.5 -90.5t-90.5 -37.5v-160q0 -66 -47 -113t-113 -47h-1856q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1856q66 0 113 -47t47 -113v-160zM2176 448v384h-128v288q0 14 -9 23t-23 9h-1856q-14 0 -23 -9t-9 -23 v-960q0 -14 9 -23t23 -9h1856q14 0 23 9t9 23v288h128z" />
+<glyph unicode="&#xf245;" horiz-adv-x="1280" d="M1133 493q31 -30 14 -69q-17 -40 -59 -40h-382l201 -476q10 -25 0 -49t-34 -35l-177 -75q-25 -10 -49 0t-35 34l-191 452l-312 -312q-19 -19 -45 -19q-12 0 -24 5q-40 17 -40 59v1504q0 42 40 59q12 5 24 5q27 0 45 -19z" />
+<glyph unicode="&#xf246;" horiz-adv-x="1024" d="M832 1408q-320 0 -320 -224v-416h128v-128h-128v-544q0 -224 320 -224h64v-128h-64q-272 0 -384 146q-112 -146 -384 -146h-64v128h64q320 0 320 224v544h-128v128h128v416q0 224 -320 224h-64v128h64q272 0 384 -146q112 146 384 146h64v-128h-64z" />
+<glyph unicode="&#xf247;" horiz-adv-x="2048" d="M2048 1152h-128v-1024h128v-384h-384v128h-1280v-128h-384v384h128v1024h-128v384h384v-128h1280v128h384v-384zM1792 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 -128v128h-128v-128h128zM1664 0v128h128v1024h-128v128h-1280v-128h-128v-1024h128v-128 h1280zM1920 -128v128h-128v-128h128zM1280 896h384v-768h-896v256h-384v768h896v-256zM512 512h640v512h-640v-512zM1536 256v512h-256v-384h-384v-128h640z" />
+<glyph unicode="&#xf248;" horiz-adv-x="2304" d="M2304 768h-128v-640h128v-384h-384v128h-896v-128h-384v384h128v128h-384v-128h-384v384h128v640h-128v384h384v-128h896v128h384v-384h-128v-128h384v128h384v-384zM2048 1024v-128h128v128h-128zM1408 1408v-128h128v128h-128zM128 1408v-128h128v128h-128zM256 256 v128h-128v-128h128zM1536 384h-128v-128h128v128zM384 384h896v128h128v640h-128v128h-896v-128h-128v-640h128v-128zM896 -128v128h-128v-128h128zM2176 -128v128h-128v-128h128zM2048 128v640h-128v128h-384v-384h128v-384h-384v128h-384v-128h128v-128h896v128h128z" />
+<glyph unicode="&#xf249;" d="M1024 288v-416h-928q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68v-928h-416q-40 0 -68 -28t-28 -68zM1152 256h381q-15 -82 -65 -132l-184 -184q-50 -50 -132 -65v381z" />
+<glyph unicode="&#xf24a;" d="M1400 256h-248v-248q29 10 41 22l185 185q12 12 22 41zM1120 384h288v896h-1280v-1280h896v288q0 40 28 68t68 28zM1536 1312v-1024q0 -40 -20 -88t-48 -76l-184 -184q-28 -28 -76 -48t-88 -20h-1024q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h1344q40 0 68 -28t28 -68 z" />
+<glyph unicode="&#xf24b;" horiz-adv-x="2304" d="M1951 538q0 -26 -15.5 -44.5t-38.5 -23.5q-8 -2 -18 -2h-153v140h153q10 0 18 -2q23 -5 38.5 -23.5t15.5 -44.5zM1933 751q0 -25 -15 -42t-38 -21q-3 -1 -15 -1h-139v129h139q3 0 8.5 -0.5t6.5 -0.5q23 -4 38 -21.5t15 -42.5zM728 587v308h-228v-308q0 -58 -38 -94.5 t-105 -36.5q-108 0 -229 59v-112q53 -15 121 -23t109 -9l42 -1q328 0 328 217zM1442 403v113q-99 -52 -200 -59q-108 -8 -169 41t-61 142t61 142t169 41q101 -7 200 -58v112q-48 12 -100 19.5t-80 9.5l-28 2q-127 6 -218.5 -14t-140.5 -60t-71 -88t-22 -106t22 -106t71 -88 t140.5 -60t218.5 -14q101 4 208 31zM2176 518q0 54 -43 88.5t-109 39.5v3q57 8 89 41.5t32 79.5q0 55 -41 88t-107 36q-3 0 -12 0.5t-14 0.5h-455v-510h491q74 0 121.5 36.5t47.5 96.5zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90 t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf24c;" horiz-adv-x="2304" d="M858 295v693q-106 -41 -172 -135.5t-66 -211.5t66 -211.5t172 -134.5zM1362 641q0 117 -66 211.5t-172 135.5v-694q106 41 172 135.5t66 211.5zM1577 641q0 -159 -78.5 -294t-213.5 -213.5t-294 -78.5q-119 0 -227.5 46.5t-187 125t-125 187t-46.5 227.5q0 159 78.5 294 t213.5 213.5t294 78.5t294 -78.5t213.5 -213.5t78.5 -294zM1960 634q0 139 -55.5 261.5t-147.5 205.5t-213.5 131t-252.5 48h-301q-176 0 -323.5 -81t-235 -230t-87.5 -335q0 -171 87 -317.5t236 -231.5t323 -85h301q129 0 251.5 50.5t214.5 135t147.5 202.5t55.5 246z M2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf24d;" horiz-adv-x="1792" d="M1664 -96v1088q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h1088q13 0 22.5 9.5t9.5 22.5zM1792 992v-1088q0 -66 -47 -113t-113 -47h-1088q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113 zM1408 1376v-160h-128v160q0 13 -9.5 22.5t-22.5 9.5h-1088q-13 0 -22.5 -9.5t-9.5 -22.5v-1088q0 -13 9.5 -22.5t22.5 -9.5h160v-128h-160q-66 0 -113 47t-47 113v1088q0 66 47 113t113 47h1088q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf24e;" horiz-adv-x="2304" d="M1728 1088l-384 -704h768zM448 1088l-384 -704h768zM1269 1280q-14 -40 -45.5 -71.5t-71.5 -45.5v-1291h608q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1344q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h608v1291q-40 14 -71.5 45.5t-45.5 71.5h-491q-14 0 -23 9t-9 23v64 q0 14 9 23t23 9h491q21 57 70 92.5t111 35.5t111 -35.5t70 -92.5h491q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-491zM1088 1264q33 0 56.5 23.5t23.5 56.5t-23.5 56.5t-56.5 23.5t-56.5 -23.5t-23.5 -56.5t23.5 -56.5t56.5 -23.5zM2176 384q0 -73 -46.5 -131t-117.5 -91 t-144.5 -49.5t-139.5 -16.5t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81zM896 384q0 -73 -46.5 -131t-117.5 -91t-144.5 -49.5t-139.5 -16.5 t-139.5 16.5t-144.5 49.5t-117.5 91t-46.5 131q0 11 35 81t92 174.5t107 195.5t102 184t56 100q18 33 56 33t56 -33q4 -7 56 -100t102 -184t107 -195.5t92 -174.5t35 -81z" />
+<glyph unicode="&#xf250;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-77 -29 -149 -92.5 t-129.5 -152.5t-92.5 -210t-35 -253h1024q0 132 -35 253t-92.5 210t-129.5 152.5t-149 92.5q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+<glyph unicode="&#xf251;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -66 9 -128h1006q9 61 9 128zM1280 -128q0 130 -34 249.5t-90.5 208t-126.5 152t-146 94.5h-230q-76 -31 -146 -94.5t-126.5 -152t-90.5 -208t-34 -249.5h1024z" />
+<glyph unicode="&#xf252;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM1280 1408h-1024q0 -206 85 -384h854q85 178 85 384zM1223 192q-54 141 -145.5 241.5t-194.5 142.5h-230q-103 -42 -194.5 -142.5t-145.5 -241.5h910z" />
+<glyph unicode="&#xf253;" d="M1408 1408q0 -261 -106.5 -461.5t-266.5 -306.5q160 -106 266.5 -306.5t106.5 -461.5h96q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h96q0 261 106.5 461.5t266.5 306.5q-160 106 -266.5 306.5t-106.5 461.5h-96q-14 0 -23 9 t-9 23v64q0 14 9 23t23 9h1472q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-96zM874 700q77 29 149 92.5t129.5 152.5t92.5 210t35 253h-1024q0 -132 35 -253t92.5 -210t129.5 -152.5t149 -92.5q19 -7 30.5 -23.5t11.5 -36.5t-11.5 -36.5t-30.5 -23.5q-137 -51 -244 -196 h700q-107 145 -244 196q-19 7 -30.5 23.5t-11.5 36.5t11.5 36.5t30.5 23.5z" />
+<glyph unicode="&#xf254;" d="M1504 -64q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472zM130 0q3 55 16 107t30 95t46 87t53.5 76t64.5 69.5t66 60t70.5 55t66.5 47.5t65 43q-43 28 -65 43t-66.5 47.5t-70.5 55t-66 60t-64.5 69.5t-53.5 76t-46 87 t-30 95t-16 107h1276q-3 -55 -16 -107t-30 -95t-46 -87t-53.5 -76t-64.5 -69.5t-66 -60t-70.5 -55t-66.5 -47.5t-65 -43q43 -28 65 -43t66.5 -47.5t70.5 -55t66 -60t64.5 -69.5t53.5 -76t46 -87t30 -95t16 -107h-1276zM1504 1536q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9 h-1472q-14 0 -23 9t-9 23v128q0 14 9 23t23 9h1472z" />
+<glyph unicode="&#xf255;" d="M768 1152q-53 0 -90.5 -37.5t-37.5 -90.5v-128h-32v93q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-429l-32 30v172q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-224q0 -47 35 -82l310 -296q39 -39 39 -102q0 -26 19 -45t45 -19h640q26 0 45 19t19 45v25 q0 41 10 77l108 436q10 36 10 77v246q0 48 -32 81.5t-80 33.5q-46 0 -79 -33t-33 -79v-32h-32v125q0 40 -25 72.5t-64 40.5q-14 2 -23 2q-46 0 -79 -33t-33 -79v-128h-32v122q0 51 -32.5 89.5t-82.5 43.5q-5 1 -13 1zM768 1280q84 0 149 -50q57 34 123 34q59 0 111 -27 t86 -76q27 7 59 7q100 0 170 -71.5t70 -171.5v-246q0 -51 -13 -108l-109 -436q-6 -24 -6 -71q0 -80 -56 -136t-136 -56h-640q-84 0 -138 58.5t-54 142.5l-308 296q-76 73 -76 175v224q0 99 70.5 169.5t169.5 70.5q11 0 16 -1q6 95 75.5 160t164.5 65q52 0 98 -21 q72 69 174 69z" />
+<glyph unicode="&#xf256;" horiz-adv-x="1792" d="M880 1408q-46 0 -79 -33t-33 -79v-656h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528v-256l-154 205q-38 51 -102 51q-53 0 -90.5 -37.5t-37.5 -90.5q0 -43 26 -77l384 -512q38 -51 102 -51h688q34 0 61 22t34 56l76 405q5 32 5 59v498q0 46 -33 79t-79 33t-79 -33 t-33 -79v-272h-32v528q0 46 -33 79t-79 33t-79 -33t-33 -79v-528h-32v656q0 46 -33 79t-79 33zM880 1536q68 0 125.5 -35.5t88.5 -96.5q19 4 42 4q99 0 169.5 -70.5t70.5 -169.5v-17q105 6 180.5 -64t75.5 -175v-498q0 -40 -8 -83l-76 -404q-14 -79 -76.5 -131t-143.5 -52 h-688q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 106 75 181t181 75q78 0 128 -34v434q0 99 70.5 169.5t169.5 70.5q23 0 42 -4q31 61 88.5 96.5t125.5 35.5z" />
+<glyph unicode="&#xf257;" horiz-adv-x="1792" d="M1073 -128h-177q-163 0 -226 141q-23 49 -23 102v5q-62 30 -98.5 88.5t-36.5 127.5q0 38 5 48h-261q-106 0 -181 75t-75 181t75 181t181 75h113l-44 17q-74 28 -119.5 93.5t-45.5 145.5q0 106 75 181t181 75q46 0 91 -17l628 -239h401q106 0 181 -75t75 -181v-668 q0 -88 -54 -157.5t-140 -90.5l-339 -85q-92 -23 -186 -23zM1024 583l-155 -71l-163 -74q-30 -14 -48 -41.5t-18 -60.5q0 -46 33 -79t79 -33q26 0 46 10l338 154q-49 10 -80.5 50t-31.5 90v55zM1344 272q0 46 -33 79t-79 33q-26 0 -46 -10l-290 -132q-28 -13 -37 -17 t-30.5 -17t-29.5 -23.5t-16 -29t-8 -40.5q0 -50 31.5 -82t81.5 -32q20 0 38 9l352 160q30 14 48 41.5t18 60.5zM1112 1024l-650 248q-24 8 -46 8q-53 0 -90.5 -37.5t-37.5 -90.5q0 -40 22.5 -73t59.5 -47l526 -200v-64h-640q-53 0 -90.5 -37.5t-37.5 -90.5t37.5 -90.5 t90.5 -37.5h535l233 106v198q0 63 46 106l111 102h-69zM1073 0q82 0 155 19l339 85q43 11 70 45.5t27 78.5v668q0 53 -37.5 90.5t-90.5 37.5h-308l-136 -126q-36 -33 -36 -82v-296q0 -46 33 -77t79 -31t79 35t33 81v208h32v-208q0 -70 -57 -114q52 -8 86.5 -48.5t34.5 -93.5 q0 -42 -23 -78t-61 -53l-310 -141h91z" />
+<glyph unicode="&#xf258;" horiz-adv-x="2048" d="M1151 1536q61 0 116 -28t91 -77l572 -781q118 -159 118 -359v-355q0 -80 -56 -136t-136 -56h-384q-80 0 -136 56t-56 136v177l-286 143h-546q-80 0 -136 56t-56 136v32q0 119 84.5 203.5t203.5 84.5h420l42 128h-686q-100 0 -173.5 67.5t-81.5 166.5q-65 79 -65 182v32 q0 80 56 136t136 56h959zM1920 -64v355q0 157 -93 284l-573 781q-39 52 -103 52h-959q-26 0 -45 -19t-19 -45q0 -32 1.5 -49.5t9.5 -40.5t25 -43q10 31 35.5 50t56.5 19h832v-32h-832q-26 0 -45 -19t-19 -45q0 -44 3 -58q8 -44 44 -73t81 -29h640h91q40 0 68 -28t28 -68 q0 -15 -5 -30l-64 -192q-10 -29 -35 -47.5t-56 -18.5h-443q-66 0 -113 -47t-47 -113v-32q0 -26 19 -45t45 -19h561q16 0 29 -7l317 -158q24 -13 38.5 -36t14.5 -50v-197q0 -26 19 -45t45 -19h384q26 0 45 19t19 45z" />
+<glyph unicode="&#xf259;" horiz-adv-x="2048" d="M816 1408q-48 0 -79.5 -34t-31.5 -82q0 -14 3 -28l150 -624h-26l-116 482q-9 38 -39.5 62t-69.5 24q-47 0 -79 -34t-32 -81q0 -11 4 -29q3 -13 39 -161t68 -282t32 -138v-227l-307 230q-34 26 -77 26q-52 0 -89.5 -36.5t-37.5 -88.5q0 -67 56 -110l507 -379 q34 -26 76 -26h694q33 0 59 20.5t34 52.5l100 401q8 30 10 88t9 86l116 478q3 12 3 26q0 46 -33 79t-80 33q-38 0 -69 -25.5t-40 -62.5l-99 -408h-26l132 547q3 14 3 28q0 47 -32 80t-80 33q-38 0 -68.5 -24t-39.5 -62l-145 -602h-127l-164 682q-9 38 -39.5 62t-68.5 24z M1461 -256h-694q-85 0 -153 51l-507 380q-50 38 -78.5 94t-28.5 118q0 105 75 179t180 74q25 0 49.5 -5.5t41.5 -11t41 -20.5t35 -23t38.5 -29.5t37.5 -28.5l-123 512q-7 35 -7 59q0 93 60 162t152 79q14 87 80.5 144.5t155.5 57.5q83 0 148 -51.5t85 -132.5l103 -428 l83 348q20 81 85 132.5t148 51.5q87 0 152.5 -54t82.5 -139q93 -10 155 -78t62 -161q0 -30 -7 -57l-116 -477q-5 -22 -5 -67q0 -51 -13 -108l-101 -401q-19 -75 -79.5 -122.5t-137.5 -47.5z" />
+<glyph unicode="&#xf25a;" horiz-adv-x="1792" d="M640 1408q-53 0 -90.5 -37.5t-37.5 -90.5v-512v-384l-151 202q-41 54 -107 54q-52 0 -89 -38t-37 -90q0 -43 26 -77l384 -512q38 -51 102 -51h718q22 0 39.5 13.5t22.5 34.5l92 368q24 96 24 194v217q0 41 -28 71t-68 30t-68 -28t-28 -68h-32v61q0 48 -32 81.5t-80 33.5 q-46 0 -79 -33t-33 -79v-64h-32v90q0 55 -37 94.5t-91 39.5q-53 0 -90.5 -37.5t-37.5 -90.5v-96h-32v570q0 55 -37 94.5t-91 39.5zM640 1536q107 0 181.5 -77.5t74.5 -184.5v-220q22 2 32 2q99 0 173 -69q47 21 99 21q113 0 184 -87q27 7 56 7q94 0 159 -67.5t65 -161.5 v-217q0 -116 -28 -225l-92 -368q-16 -64 -68 -104.5t-118 -40.5h-718q-60 0 -114.5 27.5t-90.5 74.5l-384 512q-51 68 -51 154q0 105 74.5 180.5t179.5 75.5q71 0 130 -35v547q0 106 75 181t181 75zM768 128v384h-32v-384h32zM1024 128v384h-32v-384h32zM1280 128v384h-32 v-384h32z" />
+<glyph unicode="&#xf25b;" d="M1288 889q60 0 107 -23q141 -63 141 -226v-177q0 -94 -23 -186l-85 -339q-21 -86 -90.5 -140t-157.5 -54h-668q-106 0 -181 75t-75 181v401l-239 628q-17 45 -17 91q0 106 75 181t181 75q80 0 145.5 -45.5t93.5 -119.5l17 -44v113q0 106 75 181t181 75t181 -75t75 -181 v-261q27 5 48 5q69 0 127.5 -36.5t88.5 -98.5zM1072 896q-33 0 -60.5 -18t-41.5 -48l-74 -163l-71 -155h55q50 0 90 -31.5t50 -80.5l154 338q10 20 10 46q0 46 -33 79t-79 33zM1293 761q-22 0 -40.5 -8t-29 -16t-23.5 -29.5t-17 -30.5t-17 -37l-132 -290q-10 -20 -10 -46 q0 -46 33 -79t79 -33q33 0 60.5 18t41.5 48l160 352q9 18 9 38q0 50 -32 81.5t-82 31.5zM128 1120q0 -22 8 -46l248 -650v-69l102 111q43 46 106 46h198l106 233v535q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5v-640h-64l-200 526q-14 37 -47 59.5t-73 22.5 q-53 0 -90.5 -37.5t-37.5 -90.5zM1180 -128q44 0 78.5 27t45.5 70l85 339q19 73 19 155v91l-141 -310q-17 -38 -53 -61t-78 -23q-53 0 -93.5 34.5t-48.5 86.5q-44 -57 -114 -57h-208v32h208q46 0 81 33t35 79t-31 79t-77 33h-296q-49 0 -82 -36l-126 -136v-308 q0 -53 37.5 -90.5t90.5 -37.5h668z" />
+<glyph unicode="&#xf25c;" horiz-adv-x="1973" d="M857 992v-117q0 -13 -9.5 -22t-22.5 -9h-298v-812q0 -13 -9 -22.5t-22 -9.5h-135q-13 0 -22.5 9t-9.5 23v812h-297q-13 0 -22.5 9t-9.5 22v117q0 14 9 23t23 9h793q13 0 22.5 -9.5t9.5 -22.5zM1895 995l77 -961q1 -13 -8 -24q-10 -10 -23 -10h-134q-12 0 -21 8.5 t-10 20.5l-46 588l-189 -425q-8 -19 -29 -19h-120q-20 0 -29 19l-188 427l-45 -590q-1 -12 -10 -20.5t-21 -8.5h-135q-13 0 -23 10q-9 10 -9 24l78 961q1 12 10 20.5t21 8.5h142q20 0 29 -19l220 -520q10 -24 20 -51q3 7 9.5 24.5t10.5 26.5l221 520q9 19 29 19h141 q13 0 22 -8.5t10 -20.5z" />
+<glyph unicode="&#xf25d;" horiz-adv-x="1792" d="M1042 833q0 88 -60 121q-33 18 -117 18h-123v-281h162q66 0 102 37t36 105zM1094 548l205 -373q8 -17 -1 -31q-8 -16 -27 -16h-152q-20 0 -28 17l-194 365h-155v-350q0 -14 -9 -23t-23 -9h-134q-14 0 -23 9t-9 23v960q0 14 9 23t23 9h294q128 0 190 -24q85 -31 134 -109 t49 -180q0 -92 -42.5 -165.5t-115.5 -109.5q6 -10 9 -16zM896 1376q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM1792 640 q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf25e;" horiz-adv-x="1792" d="M605 303q153 0 257 104q14 18 3 36l-45 82q-6 13 -24 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13t-23.5 -14.5t-28.5 -13.5t-33.5 -9.5t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78 q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-148 0 -246 -96.5t-98 -240.5q0 -146 97 -241.5t247 -95.5zM1235 303q153 0 257 104q14 18 4 36l-45 82q-8 14 -25 17q-16 2 -27 -11l-4 -3q-4 -4 -11.5 -10t-17.5 -13t-23.5 -14.5t-28.5 -13.5t-33.5 -9.5 t-37.5 -3.5q-76 0 -125 50t-49 127q0 76 48 125.5t122 49.5q37 0 71.5 -14t50.5 -28l16 -14q11 -11 26 -10q16 2 24 14l53 78q13 20 -2 39q-3 4 -11 12t-30 23.5t-48.5 28t-67.5 22.5t-86 10q-147 0 -245.5 -96.5t-98.5 -240.5q0 -146 97 -241.5t247 -95.5zM896 1376 q-150 0 -286 -58.5t-234.5 -157t-157 -234.5t-58.5 -286t58.5 -286t157 -234.5t234.5 -157t286 -58.5t286 58.5t234.5 157t157 234.5t58.5 286t-58.5 286t-157 234.5t-234.5 157t-286 58.5zM896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191 t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71z" />
+<glyph unicode="&#xf260;" horiz-adv-x="2048" d="M736 736l384 -384l-384 -384l-672 672l672 672l168 -168l-96 -96l-72 72l-480 -480l480 -480l193 193l-289 287zM1312 1312l672 -672l-672 -672l-168 168l96 96l72 -72l480 480l-480 480l-193 -193l289 -287l-96 -96l-384 384z" />
+<glyph unicode="&#xf261;" horiz-adv-x="1792" d="M717 182l271 271l-279 279l-88 -88l192 -191l-96 -96l-279 279l279 279l40 -40l87 87l-127 128l-454 -454zM1075 190l454 454l-454 454l-271 -271l279 -279l88 88l-192 191l96 96l279 -279l-279 -279l-40 40l-87 -88zM1792 640q0 -182 -71 -348t-191 -286t-286 -191 t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf262;" horiz-adv-x="2304" d="M651 539q0 -39 -27.5 -66.5t-65.5 -27.5q-39 0 -66.5 27.5t-27.5 66.5q0 38 27.5 65.5t66.5 27.5q38 0 65.5 -27.5t27.5 -65.5zM1805 540q0 -39 -27.5 -66.5t-66.5 -27.5t-66.5 27.5t-27.5 66.5t27.5 66t66.5 27t66.5 -27t27.5 -66zM765 539q0 79 -56.5 136t-136.5 57 t-136.5 -56.5t-56.5 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM1918 540q0 80 -56.5 136.5t-136.5 56.5q-79 0 -136 -56.5t-57 -136.5t56.5 -136.5t136.5 -56.5t136.5 56.5t56.5 136.5zM850 539q0 -116 -81.5 -197.5t-196.5 -81.5q-116 0 -197.5 82t-81.5 197 t82 196.5t197 81.5t196.5 -81.5t81.5 -196.5zM2004 540q0 -115 -81.5 -196.5t-197.5 -81.5q-115 0 -196.5 81.5t-81.5 196.5t81.5 196.5t196.5 81.5q116 0 197.5 -81.5t81.5 -196.5zM1040 537q0 191 -135.5 326.5t-326.5 135.5q-125 0 -231 -62t-168 -168.5t-62 -231.5 t62 -231.5t168 -168.5t231 -62q191 0 326.5 135.5t135.5 326.5zM1708 1110q-254 111 -556 111q-319 0 -573 -110q117 0 223 -45.5t182.5 -122.5t122 -183t45.5 -223q0 115 43.5 219.5t118 180.5t177.5 123t217 50zM2187 537q0 191 -135 326.5t-326 135.5t-326.5 -135.5 t-135.5 -326.5t135.5 -326.5t326.5 -135.5t326 135.5t135 326.5zM1921 1103h383q-44 -51 -75 -114.5t-40 -114.5q110 -151 110 -337q0 -156 -77 -288t-209 -208.5t-287 -76.5q-133 0 -249 56t-196 155q-47 -56 -129 -179q-11 22 -53.5 82.5t-74.5 97.5 q-80 -99 -196.5 -155.5t-249.5 -56.5q-155 0 -287 76.5t-209 208.5t-77 288q0 186 110 337q-9 51 -40 114.5t-75 114.5h365q149 100 355 156.5t432 56.5q224 0 421 -56t348 -157z" />
+<glyph unicode="&#xf263;" horiz-adv-x="1280" d="M640 629q-188 0 -321 133t-133 320q0 188 133 321t321 133t321 -133t133 -321q0 -187 -133 -320t-321 -133zM640 1306q-92 0 -157.5 -65.5t-65.5 -158.5q0 -92 65.5 -157.5t157.5 -65.5t157.5 65.5t65.5 157.5q0 93 -65.5 158.5t-157.5 65.5zM1163 574q13 -27 15 -49.5 t-4.5 -40.5t-26.5 -38.5t-42.5 -37t-61.5 -41.5q-115 -73 -315 -94l73 -72l267 -267q30 -31 30 -74t-30 -73l-12 -13q-31 -30 -74 -30t-74 30q-67 68 -267 268l-267 -268q-31 -30 -74 -30t-73 30l-12 13q-31 30 -31 73t31 74l267 267l72 72q-203 21 -317 94 q-39 25 -61.5 41.5t-42.5 37t-26.5 38.5t-4.5 40.5t15 49.5q10 20 28 35t42 22t56 -2t65 -35q5 -4 15 -11t43 -24.5t69 -30.5t92 -24t113 -11q91 0 174 25.5t120 50.5l38 25q33 26 65 35t56 2t42 -22t28 -35z" />
+<glyph unicode="&#xf264;" d="M927 956q0 -66 -46.5 -112.5t-112.5 -46.5t-112.5 46.5t-46.5 112.5t46.5 112.5t112.5 46.5t112.5 -46.5t46.5 -112.5zM1141 593q-10 20 -28 32t-47.5 9.5t-60.5 -27.5q-10 -8 -29 -20t-81 -32t-127 -20t-124 18t-86 36l-27 18q-31 25 -60.5 27.5t-47.5 -9.5t-28 -32 q-22 -45 -2 -74.5t87 -73.5q83 -53 226 -67l-51 -52q-142 -142 -191 -190q-22 -22 -22 -52.5t22 -52.5l9 -9q22 -22 52.5 -22t52.5 22l191 191q114 -115 191 -191q22 -22 52.5 -22t52.5 22l9 9q22 22 22 52.5t-22 52.5l-191 190l-52 52q141 14 225 67q67 44 87 73.5t-2 74.5 zM1092 956q0 134 -95 229t-229 95t-229 -95t-95 -229t95 -229t229 -95t229 95t95 229zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf265;" horiz-adv-x="1720" d="M1565 1408q65 0 110 -45.5t45 -110.5v-519q0 -176 -68 -336t-182.5 -275t-274 -182.5t-334.5 -67.5q-176 0 -335.5 67.5t-274.5 182.5t-183 275t-68 336v519q0 64 46 110t110 46h1409zM861 344q47 0 82 33l404 388q37 35 37 85q0 49 -34.5 83.5t-83.5 34.5q-47 0 -82 -33 l-323 -310l-323 310q-35 33 -81 33q-49 0 -83.5 -34.5t-34.5 -83.5q0 -51 36 -85l405 -388q33 -33 81 -33z" />
+<glyph unicode="&#xf266;" horiz-adv-x="2304" d="M1494 -103l-295 695q-25 -49 -158.5 -305.5t-198.5 -389.5q-1 -1 -27.5 -0.5t-26.5 1.5q-82 193 -255.5 587t-259.5 596q-21 50 -66.5 107.5t-103.5 100.5t-102 43q0 5 -0.5 24t-0.5 27h583v-50q-39 -2 -79.5 -16t-66.5 -43t-10 -64q26 -59 216.5 -499t235.5 -540 q31 61 140 266.5t131 247.5q-19 39 -126 281t-136 295q-38 69 -201 71v50l513 -1v-47q-60 -2 -93.5 -25t-12.5 -69q33 -70 87 -189.5t86 -187.5q110 214 173 363q24 55 -10 79.5t-129 26.5q1 7 1 25v24q64 0 170.5 0.5t180 1t92.5 0.5v-49q-62 -2 -119 -33t-90 -81 l-213 -442q13 -33 127.5 -290t121.5 -274l441 1017q-14 38 -49.5 62.5t-65 31.5t-55.5 8v50l460 -4l1 -2l-1 -44q-139 -4 -201 -145q-526 -1216 -559 -1291h-49z" />
+<glyph unicode="&#xf267;" horiz-adv-x="1792" d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 t191 -286t71 -348z" />
+<glyph unicode="&#xf268;" horiz-adv-x="1792" d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
+<glyph unicode="&#xf269;" horiz-adv-x="1792" d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
+<glyph unicode="&#xf26a;" horiz-adv-x="1792" d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339 q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z " />
+<glyph unicode="&#xf26b;" horiz-adv-x="1792" d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606 q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
+<glyph unicode="&#xf26c;" horiz-adv-x="2048" d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
+<glyph unicode="&#xf26d;" horiz-adv-x="1792" d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 q-68 175 -180 287z" />
+<glyph unicode="&#xf26e;" d="M1401 -11l-6 -6q-113 -114 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6 q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13 q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 32 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249 q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 32.5 -6t30.5 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183 q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46 t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
+<glyph unicode="&#xf270;" horiz-adv-x="1792" d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
+<glyph unicode="&#xf271;" horiz-adv-x="1792" d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
+<glyph unicode="&#xf272;" horiz-adv-x="1792" d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf273;" horiz-adv-x="1792" d="M1111 151l-46 -46q-9 -9 -22 -9t-23 9l-188 189l-188 -189q-10 -9 -23 -9t-22 9l-46 46q-9 9 -9 22t9 23l189 188l-189 188q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l188 -188l188 188q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23l-188 -188l188 -188q9 -10 9 -23t-9 -22z M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf274;" horiz-adv-x="1792" d="M1303 572l-512 -512q-10 -9 -23 -9t-23 9l-288 288q-9 10 -9 23t9 22l46 46q9 9 22 9t23 -9l220 -220l444 444q10 9 23 9t22 -9l46 -46q9 -9 9 -22t-9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23 t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
+<glyph unicode="&#xf275;" horiz-adv-x="1792" d="M448 1536q26 0 45 -19t19 -45v-891l536 429q17 14 40 14q26 0 45 -19t19 -45v-379l536 429q17 14 40 14q26 0 45 -19t19 -45v-1152q0 -26 -19 -45t-45 -19h-1664q-26 0 -45 19t-19 45v1664q0 26 19 45t45 19h384z" />
+<glyph unicode="&#xf276;" horiz-adv-x="1024" d="M512 448q66 0 128 15v-655q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v655q61 -15 128 -15zM512 1536q212 0 362 -150t150 -362t-150 -362t-362 -150t-362 150t-150 362t150 362t362 150zM512 1312q14 0 23 9t9 23t-9 23t-23 9q-146 0 -249 -103t-103 -249 q0 -14 9 -23t23 -9t23 9t9 23q0 119 84.5 203.5t203.5 84.5z" />
+<glyph unicode="&#xf277;" horiz-adv-x="1792" d="M1745 1239q10 -10 10 -23t-10 -23l-141 -141q-28 -28 -68 -28h-1344q-26 0 -45 19t-19 45v256q0 26 19 45t45 19h576v64q0 26 19 45t45 19h128q26 0 45 -19t19 -45v-64h512q40 0 68 -28zM768 320h256v-512q0 -26 -19 -45t-45 -19h-128q-26 0 -45 19t-19 45v512zM1600 768 q26 0 45 -19t19 -45v-256q0 -26 -19 -45t-45 -19h-1344q-40 0 -68 28l-141 141q-10 10 -10 23t10 23l141 141q28 28 68 28h512v192h256v-192h576z" />
+<glyph unicode="&#xf278;" horiz-adv-x="2048" d="M2020 1525q28 -20 28 -53v-1408q0 -20 -11 -36t-29 -23l-640 -256q-24 -11 -48 0l-616 246l-616 -246q-10 -5 -24 -5q-19 0 -36 11q-28 20 -28 53v1408q0 20 11 36t29 23l640 256q24 11 48 0l616 -246l616 246q32 13 60 -6zM736 1390v-1270l576 -230v1270zM128 1173 v-1270l544 217v1270zM1920 107v1270l-544 -217v-1270z" />
+<glyph unicode="&#xf279;" horiz-adv-x="1792" d="M512 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472q0 20 17 28l480 256q7 4 15 4zM1760 1536q13 0 22.5 -9.5t9.5 -22.5v-1472q0 -20 -17 -28l-480 -256q-7 -4 -15 -4q-13 0 -22.5 9.5t-9.5 22.5v1472 q0 20 17 28l480 256q7 4 15 4zM640 1536q8 0 14 -3l512 -256q18 -10 18 -29v-1472q0 -13 -9.5 -22.5t-22.5 -9.5q-8 0 -14 3l-512 256q-18 10 -18 29v1472q0 13 9.5 22.5t22.5 9.5z" />
+<glyph unicode="&#xf27a;" horiz-adv-x="1792" d="M640 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1024 640q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1408 640q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-110 0 -211 18q-173 -173 -435 -229q-52 -10 -86 -13q-12 -1 -22 6t-13 18q-4 15 20 37q5 5 23.5 21.5t25.5 23.5t23.5 25.5t24 31.5t20.5 37 t20 48t14.5 57.5t12.5 72.5q-146 90 -229.5 216.5t-83.5 269.5q0 174 120 321.5t326 233t450 85.5t450 -85.5t326 -233t120 -321.5z" />
+<glyph unicode="&#xf27b;" horiz-adv-x="1792" d="M640 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1024 640q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 -53 -37.5 -90.5t-90.5 -37.5 t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM896 1152q-204 0 -381.5 -69.5t-282 -187.5t-104.5 -255q0 -112 71.5 -213.5t201.5 -175.5l87 -50l-27 -96q-24 -91 -70 -172q152 63 275 171l43 38l57 -6q69 -8 130 -8q204 0 381.5 69.5t282 187.5 t104.5 255t-104.5 255t-282 187.5t-381.5 69.5zM1792 640q0 -174 -120 -321.5t-326 -233t-450 -85.5q-70 0 -145 8q-198 -175 -460 -242q-49 -14 -114 -22h-5q-15 0 -27 10.5t-16 27.5v1q-3 4 -0.5 12t2 10t4.5 9.5l6 9t7 8.5t8 9q7 8 31 34.5t34.5 38t31 39.5t32.5 51 t27 59t26 76q-157 89 -247.5 220t-90.5 281q0 130 71 248.5t191 204.5t286 136.5t348 50.5t348 -50.5t286 -136.5t191 -204.5t71 -248.5z" />
+<glyph unicode="&#xf27c;" horiz-adv-x="1024" d="M512 345l512 295v-591l-512 -296v592zM0 640v-591l512 296zM512 1527v-591l-512 -296v591zM512 936l512 295v-591z" />
+<glyph unicode="&#xf27d;" horiz-adv-x="1792" d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
+<glyph unicode="&#xf27e;" d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
+<glyph unicode="&#xf280;" d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
+<glyph unicode="&#xf281;" horiz-adv-x="1792" d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5 l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44 t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106 q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
+<glyph unicode="&#xf282;" horiz-adv-x="1792" d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53 q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
+<glyph unicode="&#xf283;" horiz-adv-x="2304" d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
+<glyph unicode="&#xf284;" horiz-adv-x="1792" d="M1549 857q55 0 85.5 -28.5t30.5 -83.5t-34 -82t-91 -27h-136v-177h-25v398h170zM1710 267l-4 -11l-5 -10q-113 -230 -330.5 -366t-474.5 -136q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q244 0 454.5 -124t329.5 -338l2 -4l8 -16 q-30 -15 -136.5 -68.5t-163.5 -84.5q-6 -3 -479 -268q384 -183 799 -366zM896 -234q250 0 462.5 132.5t322.5 357.5l-287 129q-72 -140 -206 -222t-292 -82q-151 0 -280 75t-204 204t-75 280t75 280t204 204t280 75t280 -73.5t204 -204.5l280 143q-116 208 -321 329 t-443 121q-119 0 -232.5 -31.5t-209 -87.5t-176.5 -137t-137 -176.5t-87.5 -209t-31.5 -232.5t31.5 -232.5t87.5 -209t137 -176.5t176.5 -137t209 -87.5t232.5 -31.5z" />
+<glyph unicode="&#xf285;" horiz-adv-x="1792" d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
+<glyph unicode="&#xf286;" horiz-adv-x="1792" d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96 q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5 q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96 q16 0 16 -16z" />
+<glyph unicode="&#xf287;" horiz-adv-x="2304" d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96 q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5 t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
+<glyph unicode="&#xf288;" horiz-adv-x="1792" d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348 t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf289;" horiz-adv-x="2304" d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22 q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5 q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13 q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
+<glyph unicode="&#xf28a;" d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83 t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20 q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5 t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
+<glyph unicode="&#xf28b;" d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103 t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf28c;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
+<glyph unicode="&#xf28d;" d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf28e;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
+<glyph unicode="&#xf290;" horiz-adv-x="1792" d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf291;" horiz-adv-x="2048" d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5 t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416 q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441 h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
+<glyph unicode="&#xf292;" horiz-adv-x="1792" d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12 q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311 q15 0 25 -12q9 -12 6 -28z" />
+<glyph unicode="&#xf293;" d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5 t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
+<glyph unicode="&#xf294;" horiz-adv-x="1024" d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
+<glyph unicode="&#xf295;" d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5 t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
+<glyph unicode="&#xf296;" horiz-adv-x="1792" d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
+<glyph unicode="&#xf297;" horiz-adv-x="1792" d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111 q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
+<glyph unicode="&#xf298;" d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14 t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
+<glyph unicode="&#xf299;" horiz-adv-x="1792" d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57 q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285 q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
+<glyph unicode="&#xf29a;" horiz-adv-x="1792" d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42 q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298 t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
+<glyph unicode="&#xf29b;" d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300 l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
+<glyph unicode="&#xf29c;" d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5 t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5 t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5 t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf29d;" horiz-adv-x="1408" d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457 q-67 -192 -92 -234q-16 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521 q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661 q3 -1 7 1t7 4l3 2q11 9 11 17z" />
+<glyph unicode="&#xf29e;" horiz-adv-x="2304" d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10 t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5 t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5 h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96 t9.5 -70.5z" />
+<glyph unicode="&#xf2a0;" horiz-adv-x="1408" d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5 q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127 l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272 t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249 q-18 -19 -45 -19z" />
+<glyph unicode="&#xf2a1;" horiz-adv-x="2176" d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352 q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864 q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136 t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56 t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136 t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
+<glyph unicode="&#xf2a2;" horiz-adv-x="1792" d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72 t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45 t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4 q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
+<glyph unicode="&#xf2a3;" horiz-adv-x="2304" d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55 q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5 q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101 q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35 q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5 q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
+<glyph unicode="&#xf2a4;" horiz-adv-x="1792" d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19 t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74 t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233 l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
+<glyph unicode="&#xf2a5;" d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2 q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10 q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf2a6;" horiz-adv-x="1535" d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5 l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5 q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9 q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
+<glyph unicode="&#xf2a7;" horiz-adv-x="1664" d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37 t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38 l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147l-4 -4t-5 -4q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148q-34 23 -76 23 q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26l-12 224 q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
+<glyph unicode="&#xf2a8;" horiz-adv-x="1792" d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5 q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841 q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5 q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
+<glyph unicode="&#xf2a9;" horiz-adv-x="1280" d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5 q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
+<glyph unicode="&#xf2aa;" d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5 q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 43 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
+<glyph unicode="&#xf2ab;" d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114 q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5 t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
+<glyph unicode="&#xf2ac;" horiz-adv-x="1664" d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35 q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5 t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
+<glyph unicode="&#xf2ad;" d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115 q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15 t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
+<glyph unicode="&#xf2ae;" horiz-adv-x="2304" d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7 q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158 q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
+<glyph unicode="&#xf2b0;" d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104 q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108 l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
+<glyph unicode="&#xf2b1;" horiz-adv-x="1664" d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5 t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
+<glyph unicode="&#xf2b2;" horiz-adv-x="1792" d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5 t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114 q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50 q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5 t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46 q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5 q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177 t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
+<glyph unicode="&#xf2b3;" d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110 h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
+<glyph unicode="&#xf2b4;" d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5 q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
+<glyph unicode="&#xf2b5;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2b6;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2b7;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2b8;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2b9;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2ba;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2bb;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2bc;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2bd;" horiz-adv-x="1792" />
+<glyph unicode="&#xf2be;" horiz-adv-x="1792" />
+<glyph unicode="&#xf500;" horiz-adv-x="1792" />
+</font>
+</defs></svg> 
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.ttf b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.ttf
new file mode 100644
index 0000000..f221e50
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.ttf
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff
new file mode 100644
index 0000000..6e7483c
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff2 b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff2
new file mode 100644
index 0000000..7eb74fd
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/font-awesome/fonts/fontawesome-webfont.woff2
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/jquery-1.12.3.min.js b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/jquery-1.12.3.min.js
new file mode 100644
index 0000000..dad4f0a
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/jquery-1.12.3.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.3 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.3",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(b,c,e){var f=!0,g="width"===c?b.offsetWidth:b.offsetHeight,h=Ra(b),i=l.boxSizing&&"border-box"===n.css(b,"boxSizing",!1,h);if(d.msFullscreenElement&&a.top!==a&&b.getClientRects().length&&(g=Math.round(100*b.getBoundingClientRect()[c])),0>=g||null==g){if(g=Sa(b,c,h),(0>g||null==g)&&(g=b.style[c]),Oa.test(g))return g;f=i&&(l.boxSizingReliable()||g===b.style[c]),g=parseFloat(g)||0}return g+eb(b,c,e||(i?"border":"content"),f,h)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){
+return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0;
+})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/jquery-match-height/jquery.matchHeight-min.js b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/jquery-match-height/jquery.matchHeight-min.js
new file mode 100755
index 0000000..f954780
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/assets/plugins/jquery-match-height/jquery.matchHeight-min.js
@@ -0,0 +1,10 @@
+/**
+* jquery.matchHeight-min.js v0.5.2
+* http://brm.io/jquery-match-height/
+* License: MIT
+*/
+(function(d){var g=-1,e=-1,n=function(a){var b=null,c=[];d(a).each(function(){var a=d(this),k=a.offset().top-h(a.css("margin-top")),l=0<c.length?c[c.length-1]:null;null===l?c.push(a):1>=Math.floor(Math.abs(b-k))?c[c.length-1]=l.add(a):c.push(a);b=k});return c},h=function(a){return parseFloat(a)||0},b=d.fn.matchHeight=function(a){if("remove"===a){var f=this;this.css("height","");d.each(b._groups,function(a,b){b.elements=b.elements.not(f)});return this}if(1>=this.length)return this;a="undefined"!==
+typeof a?a:!0;b._groups.push({elements:this,byRow:a});b._apply(this,a);return this};b._groups=[];b._throttle=80;b._maintainScroll=!1;b._beforeUpdate=null;b._afterUpdate=null;b._apply=function(a,f){var c=d(a),e=[c],k=d(window).scrollTop(),l=d("html").outerHeight(!0),g=c.parents().filter(":hidden");g.css("display","block");f&&(c.each(function(){var a=d(this),b="inline-block"===a.css("display")?"inline-block":"block";a.data("style-cache",a.attr("style"));a.css({display:b,"padding-top":"0","padding-bottom":"0",
+"margin-top":"0","margin-bottom":"0","border-top-width":"0","border-bottom-width":"0",height:"100px"})}),e=n(c),c.each(function(){var a=d(this);a.attr("style",a.data("style-cache")||"").css("height","")}));d.each(e,function(a,b){var c=d(b),e=0;f&&1>=c.length||(c.each(function(){var a=d(this),b="inline-block"===a.css("display")?"inline-block":"block";a.css({display:b,height:""});a.outerHeight(!1)>e&&(e=a.outerHeight(!1));a.css("display","")}),c.each(function(){var a=d(this),b=0;"border-box"!==a.css("box-sizing")&&
+(b+=h(a.css("border-top-width"))+h(a.css("border-bottom-width")),b+=h(a.css("padding-top"))+h(a.css("padding-bottom")));a.css("height",e-b)}))});g.css("display","");b._maintainScroll&&d(window).scrollTop(k/l*d("html").outerHeight(!0));return this};b._applyDataApi=function(){var a={};d("[data-match-height], [data-mh]").each(function(){var b=d(this),c=b.attr("data-match-height")||b.attr("data-mh");a[c]=c in a?a[c].add(b):b});d.each(a,function(){this.matchHeight(!0)})};var m=function(a){b._beforeUpdate&&
+b._beforeUpdate(a,b._groups);d.each(b._groups,function(){b._apply(this.elements,this.byRow)});b._afterUpdate&&b._afterUpdate(a,b._groups)};b._update=function(a,f){if(f&&"resize"===f.type){var c=d(window).width();if(c===g)return;g=c}a?-1===e&&(e=setTimeout(function(){m(f);e=-1},b._throttle)):m(f)};d(b._applyDataApi);d(window).bind("load",function(a){b._update(!1,a)});d(window).bind("resize orientationchange",function(a){b._update(!0,a)})})(jQuery);
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/favicon.ico b/trunk/meecrowave-doc/src/main/jbake/assets/favicon.ico
new file mode 100644
index 0000000..1e7aaf5
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/favicon.ico
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/assets/favicon.png b/trunk/meecrowave-doc/src/main/jbake/assets/favicon.png
new file mode 100755
index 0000000..0ab5f3d
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/assets/favicon.png
Binary files differ
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/community.adoc b/trunk/meecrowave-doc/src/main/jbake/content/community.adoc
new file mode 100644
index 0000000..0575ef5
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/community.adoc
@@ -0,0 +1,30 @@
+= Community
+:jbake-date: 2016-10-27
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-green
+:icons: font
+
+For now please use OpenWebBeans mailing-lists, JIRA and IRC channel.
+
+See http://openwebbeans.apache.org/community.html[OpenWebBeans Community] page for more details.
+
+== Source code
+
+Source code can be found at http://svn.apache.org/repos/asf/openwebbeans/meecrowave/trunk/
+
+[source]
+----
+svn co http://svn.apache.org/repos/asf/openwebbeans/meecrowave/trunk/ meecrowave
+----
+
+=== Build it
+
+To build the project just run maven:
+
+[source]
+----
+mvn clean install
+----
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/companion-projects.adoc b/trunk/meecrowave-doc/src/main/jbake/content/companion-projects.adoc
new file mode 100644
index 0000000..62ae887
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/companion-projects.adoc
@@ -0,0 +1,28 @@
+= Companion projects
+:jbake-date: 2016-11-05
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-pink
+:icons: font
+
+== Apache DeltaSpike
+
+Apache DeltaSpike will cover several useful areas:
+
+- Configuration
+- Exception handling
+- Advanced CDI utilities like partial bean binding (you define a bean behavior from a CDI handler implementation)
+- Quartz integration
+- Data/JPA integration (it is different than the Meecrowave one but depending your need can be useful)
+- And much more
+
+See http://deltaspike.apache.org/ for more information.
+
+== Apache Sirona
+
+Sirona aims to provide some monitoring capabilities (metrics on the runtime).
+By default its servlet integration makes it smooth to integrate with Meecrowave.
+
+See http://sirona.apache.org/ for more information.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/components.adoc b/trunk/meecrowave-doc/src/main/jbake/content/components.adoc
new file mode 100755
index 0000000..372c3c5
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/components.adoc
@@ -0,0 +1,69 @@
+= Components
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-orange
+:icons: font
+
+== Meecrowave Core
+
+Core component is the backbone of Meecrowave. It is based on Tomcat embedded for
+Servlet container, CXF for JAX-RS, OpenWebBeans for CDI and Log4j2 for the logging.
+
+link:{context_rootpath}/meecrowave-core/configuration.html[Read about Meecrowave configuration]
+
+link:{context_rootpath}/meecrowave-core/cli.html[Read about Meecrowave command line]
+
+== Meecrowave JPA
+
+Meecrowave JPA provides a thin layer on top of JPA to make it easier to use JPA
+without requiring to use a full container like JavaEE or Spring. It is just a
+CDI extension.
+
+link:{context_rootpath}/meecrowave-jpa/index.html[Read More]
+
+== Meecrowave Maven
+
+Meecrowave provides a Maven plugin to run meecrowave with your preferred build tool.
+
+link:{context_rootpath}/meecrowave-maven/index.html[Read More]
+
+== Meecrowave Gradle
+
+Meecrowave provides a Gradle plugin to run meecrowave with your preferred build tool.
+
+link:{context_rootpath}/meecrowave-gradle/index.html[Read More]
+
+== Meecrowave and the Testing
+
+Meecrowave provides two main testing integration: a JUnit one and an Arquillian Container.
+
+link:{context_rootpath}/testing/index.html[Read More]
+
+== Meecrowave and Monitoring
+
+Meecrowave provides few integration for the monitoring:
+
+link:{context_rootpath}/meecrowave-jolokia/index.html[Jolokia (JMX)]
+
+== Meecrowave and JTA
+
+This is an experimental integration of geronimo-transaction and meecrowave.
+
+link:{context_rootpath}/meecrowave-jta/index.html[JTA module]
+
+== Meecrowave and OAuth2
+
+This is an experimental module integrating CXF OAuth2 server in Meecrowave
+through an embeddable dependency or a directly executable har.
+
+link:{context_rootpath}/meecrowave-oauth2/index.html[OAuth2 module]
+
+== Going further
+
+Meecrowave scope is not the full scope of microservices (whatever it means) or at least enterprise needs
+cause several Apache projects cover part of them in a very good way.
+
+See link:companion-projects.html[Companion Projects] for more information.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/download.adoc b/trunk/meecrowave-doc/src/main/jbake/content/download.adoc
new file mode 100755
index 0000000..651c055
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/download.adoc
@@ -0,0 +1,33 @@
+= Downloads
+:jbake-date: 2017-07-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavecolor: body-blue
+:icons: font
+
+License under Apache License v2 (ALv2).
+
+IMPORTANT: java 9 support is still experimental until jigsaw/JPMS stabilizes, you need at least to add `jaxb` dependency.
+
+[.table.table-bordered,options="header"]
+|===
+|Name|Version|Date|Size|Type|Links
+|Meecrowave Source Release|1.1.0|Fri, 07 Jul 2017 22:27:32 GMT|1 MB 357 kB|zip| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.1.0/meecrowave-1.1.0-source-release.zip[icon:download[] zip] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.1.0/meecrowave-1.1.0-source-release.zip.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.1.0/meecrowave-1.1.0-source-release.zip.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.1.0/meecrowave-1.1.0-source-release.zip.asc[icon:download[] asc]
+|Meecrowave Core runner|1.1.0|Fri, 07 Jul 2017 22:28:34 GMT|9 MB 286 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0-runner.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0-runner.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0-runner.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0-runner.jar.asc[icon:download[] asc]
+|Meecrowave Core|1.1.0|Fri, 07 Jul 2017 22:28:22 GMT|174 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.1.0/meecrowave-core-1.1.0.jar.asc[icon:download[] asc]
+|Meecrowave Source Release|1.0.0|Fri, 07 Jul 2017 22:27:32 GMT|1 MB 357 kB|zip| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.0.0/meecrowave-1.0.0-source-release.zip[icon:download[] zip] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.0.0/meecrowave-1.0.0-source-release.zip.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.0.0/meecrowave-1.0.0-source-release.zip.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/1.0.0/meecrowave-1.0.0-source-release.zip.asc[icon:download[] asc]
+|Meecrowave Core runner|1.0.0|Fri, 07 Jul 2017 22:28:34 GMT|9 MB 286 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0-runner.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0-runner.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0-runner.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0-runner.jar.asc[icon:download[] asc]
+|Meecrowave Core|1.0.0|Fri, 07 Jul 2017 22:28:22 GMT|174 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/1.0.0/meecrowave-core-1.0.0.jar.asc[icon:download[] asc]
+|Meecrowave Source Release|0.3.1|Fri, 28 Apr 2017 15:34:47 GMT|1 MB 331 kB|zip| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.1/meecrowave-0.3.1-source-release.zip[icon:download[] zip] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.1/meecrowave-0.3.1-source-release.zip.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.1/meecrowave-0.3.1-source-release.zip.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.1/meecrowave-0.3.1-source-release.zip.asc[icon:download[] asc]
+|Meecrowave Core runner|0.3.1|Fri, 28 Apr 2017 15:35:22 GMT|9 MB 224 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1-runner.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1-runner.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1-runner.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1-runner.jar.asc[icon:download[] asc]
+|Meecrowave Core|0.3.1|Fri, 28 Apr 2017 15:35:13 GMT|158 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.1/meecrowave-core-0.3.1.jar.asc[icon:download[] asc]
+|Meecrowave Source Release|0.3.0|Sun, 19 Feb 2017 15:56:04 GMT|1 MB 304 kB|zip| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.0/meecrowave-0.3.0-source-release.zip[icon:download[] zip] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.0/meecrowave-0.3.0-source-release.zip.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.0/meecrowave-0.3.0-source-release.zip.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.3.0/meecrowave-0.3.0-source-release.zip.asc[icon:download[] asc]
+|Meecrowave Core runner|0.3.0|Sun, 19 Feb 2017 15:56:35 GMT|9 MB 123 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0-runner.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0-runner.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0-runner.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0-runner.jar.asc[icon:download[] asc]
+|Meecrowave Core|0.3.0|Sun, 19 Feb 2017 15:56:26 GMT|156 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.3.0/meecrowave-core-0.3.0.jar.asc[icon:download[] asc]
+|Meecrowave Source Release|0.2.0|Mon, 02 Jan 2017 15:11:14 GMT|1 MB 229 kB|zip| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.2.0/meecrowave-0.2.0-source-release.zip[icon:download[] zip] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.2.0/meecrowave-0.2.0-source-release.zip.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.2.0/meecrowave-0.2.0-source-release.zip.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave/0.2.0/meecrowave-0.2.0-source-release.zip.asc[icon:download[] asc]
+|Meecrowave Core runner|0.2.0|Mon, 02 Jan 2017 15:12:12 GMT|9 MB 9 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0-runner.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0-runner.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0-runner.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0-runner.jar.asc[icon:download[] asc]
+|Meecrowave Core|0.2.0|Mon, 02 Jan 2017 15:12:02 GMT|145 kB|jar| http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0.jar[icon:download[] jar] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0.jar.sha1[icon:download[] sha1] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0.jar.md5[icon:download[] md5] http://repo.maven.apache.org/maven2/org/apache/meecrowave/meecrowave-core/0.2.0/meecrowave-core-0.2.0.jar.asc[icon:download[] asc]
+|===
+
+
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-core/cli.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-core/cli.adoc
new file mode 100755
index 0000000..aac1ff9
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-core/cli.adoc
@@ -0,0 +1,27 @@
+= Meecrowave Command Line Interface
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-blue
+:icons: font
+
+
+Meecrowave provides a CLI (Command Line Interface) called `org.apache.meecrowave.runner.Cli`.
+
+It can be used to deploy the java classpath or a war. Here are the main options:
+
+include::../../../../../target/generated-doc/CliConfiguration.adoc[]
+
+Note that `help` command is supported as well.
+
+== Extending the CLI
+
+You can add your own CLI options implementing `org.apache.meecrowave.runner.Cli$Options`
+(just a marker interface, no logic to code) and use `@CliOption` to define fields
+as coming from the CLI arguments. To register your option bean just add it in `META-INF/services/org.apache.meecrowave.runner.Cli$Options`.
+
+TIP: `Meecrowave.Builder` provides a `getExtension(type)` which can be used to get this
+kind of extension. This is common and works in all modes (arquillian, JUnit, embedded etc...)
+replacing the arguments by properties on `Meecrowave.Builder` instance.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-core/configuration.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-core/configuration.adoc
new file mode 100755
index 0000000..696a4b2
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-core/configuration.adoc
@@ -0,0 +1,164 @@
+= Meecrowave Configuration
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-blue
+:icons: font
+
+Meecrowave configuration is centralized in `org.apache.meecrowave.Meecrowave$Builder` class.
+
+Here are the main properties:
+
+include::../../../../../target/generated-doc/Configuration.adoc[]
+
+NOTE: the class also provides some helper methods for programamtic use case like `randomHttpPort()`
+to automatically set an available port to `httpPort`.
+
+You can also write a `Consumer<Builder>` to configure programmatically the `Builder`
+and make it active using `addCustomizer(Consumer<Builder>)`.
+
+Example:
+
+[source,java]
+----
+new Meecrowave(new Builder() {{
+        randomHttpPort();
+        setTomcatScanning(false);
+        setTomcatAutoSetup(false);
+        setRealm(new JAASRealm());
+        user("admin", "secret");
+     }})
+    .bake()
+    .await();
+----
+
+== CDI SE API
+
+CDI 2.0 introduces a "SE API" for CDI. It looks like:
+
+[source,java]
+----
+try (final SeContainer container = SeContainerInitializer.newInstance()
+        .disableDiscovery()
+        .addBeanClasses(Configured.class)
+        .initialize()) {
+    // your main
+}
+----
+
+Meecrowave inherits from OpenWebBeans SE API implementation and therefore this SE API will work out of the box.
+
+It is implemented as a `bake()` and you can still access the `Builder` configuration or even `Meecrowave` itself if needed:
+
+[source,java]
+----
+try (final SeContainer container = SeContainerInitializer.newInstance()
+        .disableDiscovery()
+        .addBeanClasses(Configured.class)
+        .initialize()) {
+
+    // use the configuration to access extensions, custom config or even server port
+    Meecrowave.Builder config = container.select(Meecrowave.Builder.class).get();
+    int port = config.getHttpPort();
+
+    // default wait implementation relying on tomcat one
+    container.select(Meecrowave.class).get().await(); // wait for the program to be killed (tomcat.await() equivalent)
+
+}
+----
+
+All the configuration of meecrowave is still available using properties:
+
+[source,java]
+----
+try (final SeContainer container = SeContainerInitializer.newInstance()
+     .addProperty("nameOfTheProperty", instanceInTheRightType)
+     .initialize()) {
+    container.select(Meecrowave.class).get().await();
+}
+----
+
+The type should match the type expected by the `Builder` instance. Note you can also just pass directly a `Builder` instance as value
+(the property name is not important) if you want something preconfigured:
+
+[source,java]
+----
+try (final SeContainer container = SeContainerInitializer.newInstance()
+     .addProperty("meecrowaveConfiguration", new Meecrowave.Builder().randomPort())
+     .initialize()) {
+    container.select(Meecrowave.class).get().await();
+}
+----
+
+== Automatic configuration
+
+The `org.apache.meecrowave.Meecrowave$Builder` class also provides `loadFromProperties(Properties)`
+and `loadFrom(String)`. The last one uses the parameter to locate a propertiers file (file path or at classpath)
+and delegate the processing to the first one.
+
+`loadFromProperties(Propertiers)` loads the configuraton from the properties. The matching is alsmot
+1-1 with previous table excepted for these entries:
+
+- if `httpPort` is `-1` then `randomHttpPort` is called
+- `properties.x=y` will set the property (`properties` entry) `x` with the value `y`
+- `users.x=y` will create the user `x` with the password `y`
+- `roles.x=y` will create the role `x` with the users `y` (comma separated if multiple users)
+- `cxf.servlet.params.x=y` will force the CXF servlet init parameter `x` to be `y`
+- `connector.x=y` will pass the property `x` to be `y` on the connector
+- `connector.attributes.x=y` will use the property `x` with value `y` to create the connector (set a property on the instance of ̀`org.apache.catalina.connector.Connector`)
+- `realm=y` will create an instance of `y` (qualified name of the class) as `realm`
+- `realm.x=y` will set `x` property to `y` - needs previous property to be set
+- `login=` will create a custom `org.apache.meecrowave.Meecrowave$LoginConfigBuilder`
+- `login.x=y` will customize previous instance with `x` property
+- `securityConstraint=` will create a custom `org.apache.meecrowave.Meecrowave$SecurityConstaintBuilder`
+- `securityConstraint.x=y` will customize previous instance with `x` property
+- `configurationCustomizer=y` will create an instance of `y` to customize the configuration
+- `configurationCustomizer.x=y` will set `x` to `y` for the customizer
+
+TIP: out of the box, any `Builder` instance will read `meecrowave.properties`. `meecrowave.properties` uses CLI
+names (without the leading `--`). See link:{context_rootpath}/meecrowave-core/cli.html[CLI] page for the list.
+
+== Logging
+
+Meecrowave relies by default on Log4j2 (see http://logging.apache.org/log4j/2.x/). By default it uses an internal
+configuration which is overriden by standard log4j mecanism.
+
+== Passwords/Secrets
+
+For the configuration requiring to be ciphered you can implement `org.apache.meecrowave.service.ValueTransformer`:
+
+[source]
+----
+public class MyTransformer implements ValueTransformer {
+    @Override
+    public String name() {
+        return "mine";
+    }
+
+    @Override
+    public String apply(final String encodedPassword) {
+        return ....;
+    }
+}
+----
+
+NOTE: this code being executed before the container starts you can't use CDI there.
+
+To register your implementation just put the fully qualified name of your transformer in `META-INF/services/org.apache.meecrowave.service.ValueTransformer`.
+
+Then to use it set the value to `decode:mine:encodedvalue`. General pattern is: `decode:<transformer name>:<value before decryption>`.
+
+Note that by default the same ciphering algorithm than in TomEE is available (Static3DES).
+
+This syntax is usable on the command line and in `meecrowave.properties`.
+
+== Programmatic customization
+
+`org.apache.meecrowave.Meecrowave$ConfigurationCustomizer` can be used to customize the configuration
+programmatically before startup. It will take the `Builder` as parameter and you can change it at that moment.
+
+`org.apache.meecrowave.Meecrowave$InstanceCustomizer` can be used to customize the configuration
+programmatically before startup. It will take the `Tomcat` as parameter and you can change it at that moment. This
+is very useful to automatically add valves and things like that.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-gradle/index.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-gradle/index.adoc
new file mode 100755
index 0000000..206faa9
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-gradle/index.adoc
@@ -0,0 +1,34 @@
+= Meecrowave Gradle
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-purple
+:icons: font
+
+[source,groovy]
+----
+buildscript {
+    repositories {
+        mavenCentral()
+    }
+    dependencies {
+        classpath "org.apache.meecrowave:meecrowave-gradle-plugin:${meecrowave.version}"
+    }
+}
+
+group 'com.app'
+version '1.0-SNAPSHOT'
+
+apply plugin: 'java'
+apply plugin: 'org.apache.meecrowave.meecrowave'
+
+meecrowave {
+    httpPort = 9090
+    // most of the meecrowave core configuration
+}
+
+----
+
+More coming soon, for now use gradle IDE integration or configuration documentation please.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jolokia/index.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jolokia/index.adoc
new file mode 100644
index 0000000..5bb908c
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jolokia/index.adoc
@@ -0,0 +1,107 @@
+= Meecrowave Jolokia
+:jbake-date: 2016-12-04
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-red
+:icons: font
+
+Coordinates:
+
+[source,xml]
+----
+<dependency>
+  <groupId>org.apache.meecrowave</groupId>
+  <artifactId>meecrowave-jolokia</artifactId>
+  <version>${meecrowave.version}</version>
+</dependency>
+----
+
+== Jolokia only
+
+If Hawt.io is not setup (not there or inactive) the module will set up jolokia alone.
+
+It will deploy the jolokia servlet on `/jolokia/*` or the property `jolokia.web.mapping` set
+on the `Meecrowave.Builder`.
+
+IMPORTANT: don't forget to secure this endpoint cause it let you access all the JMX MBeans. See
+Meecrowave core configuration for more details.
+
+More on https://jolokia.org/reference/html/
+
+== Hawt.io
+
+By default hawt.io will be deployed and activated on `/hawtio/` endpoint.
+
+To activate it you need to add these dependencies:
+
+[source,xml]
+----
+<dependency>
+  <groupId>io.hawt</groupId>
+  <artifactId>hawtio-springboot</artifactId>
+  <version>1.4.67</version>
+  <optional>true</optional>
+  <exclusions>
+    <exclusion>
+      <groupId>org.springframework.boot</groupId>
+      <artifactId>spring-boot-starter-web</artifactId>
+    </exclusion>
+  </exclusions>
+</dependency>
+<dependency>
+  <groupId>org.apache.logging.log4j</groupId>
+  <artifactId>log4j-slf4j-impl</artifactId>
+  <version>${log4j2.version}</version>
+  <optional>true</optional>
+</dependency>
+----
+
+NOTE: we don't need spring boot but we reuse hawt.io spring boot module which packages web resources in a jar.
+
+By default it will setup the security to use the Servlet security which means you can use meecrowave options:
+
+[source]
+----
+./meecrowave-runner --users=admin=admin --roles=admin=admin
+----
+
+And log with admin/admin user.
+
+== Running HawtIO war
+
+To run http://hawt.io, the easiest is to setup jaas and run the hawt.io war:
+
+[source]
+----
+java -Djava.security.auth.login.config=login.config \
+    -jar meecrowave-runner.jar \
+    -webapp hawtio-default-offline-1.4.67.war
+----
+
+This assumes you created a `login.config`:
+
+[source]
+----
+karaf {
+  org.apache.catalina.realm.JAASMemoryLoginModule required
+	pathname="/path/to/tomcat-users.xml";
+};
+----
+
+NOTE: the JAAS login module is named `karaf` because it is the default of hawt.io (check `io.hawt.web.AuthenticationFilter.init()`).
+
+And if you use - as in previous snippet - tomcat-users.xml you need to create an admin (role) user:
+
+[source,xml]
+----
+<tomcat-users>
+  <user username="admin" password="admin" role="hawtio" roles="admin" />
+</tomcat-users>
+----
+
+NOTE: don't try to use `io.hawt.web.tomcat.TomcatUserDatabaseLoginContext` of hawt.io which does the same as `JAASMemoryLoginModule`
+excepted it doesn't handle absolute paths which enforce you to use a `catalina.base`.
+
+Using hawt.io war you don't need to run jolokia servlet by yourself, it is already done.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jpa/index.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jpa/index.adoc
new file mode 100755
index 0000000..77acb0f
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jpa/index.adoc
@@ -0,0 +1,110 @@
+= Meecrowave JPA
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-green
+:icons: font
+
+
+The overall idea behind this module is to propose a CDI integration of JPA
+allowing to programmatically control its persistence units.
+
+Concretely you will create a persistence unit from a `PersistenceUnitBuilder`
+allowing you to fully configure your unit from CDI context including the datasource:
+
+[source,java]
+----
+@ApplicationScoped
+public class JpaConfig {
+    @Produces
+    public PersistenceUnitInfoBuilder unit(final DataSource ds) {
+        return new PersistenceUnitInfoBuilder()
+                .setUnitName("test")
+                .setDataSource(ds)
+                .setExcludeUnlistedClasses(true)
+                .addManagedClazz(User.class)
+                .addProperty("openjpa.RuntimeUnenhancedClasses", "supported")
+                .addProperty("openjpa.jdbc.SynchronizeMappings", "buildSchema");
+    }
+}
+----
+
+TIP: if your application uses a single persistence unit this is optional and
+a default one will be created if a single DataSource bean is available as Bean<?>.
+
+The datasource can be produces as you wish using your own configuration mecanism:
+
+[source,java]
+----
+@ApplicationScoped
+public class JpaConfig {
+    @Produces // dbcp2 datasource for instance
+    @ApplicationScoped
+    public DataSource dataSource() {
+        final BasicDataSource source = new BasicDataSource();
+        source.setDriver(new Driver());
+        source.setUrl("jdbc:h2:mem:jpaextensiontest");
+        return source;
+    }
+}
+----
+
+NOTE: it is recommanded to ensure the `DataSource` is normal-scoped to not get surprises in term of behavior.
+
+Finally you can inject your entity manager using `@Unit`. Ensure to
+decorate with `@Jpa` a class/method before using the entity manager to activate
+the jpa CDI context:
+
+[source,java]
+----
+@ApplicationScoped
+@Jpa(transactional = false)
+public class JPADao {
+    @Inject
+    @Unit(name = "test")
+    private EntityManager em;
+
+    @Jpa // with a resource local transaction
+    public User save(final User user) {
+        em.persist(user);
+        return user;
+    }
+
+    // inherit form class, no tx
+    public User find(final long id) {
+        return em.find(User.class, id);
+    }
+}
+----
+
+IMPORTANT: this integration is 100% based on `RESOURCE_LOCAL` units for now.
+
+Not that if a bean get injected an `EntityManager` it gets automatically `@Jpa(transactional=true)`
+so previous bean is equivalent to:
+
+[source,java]
+----
+@ApplicationScoped
+public class JPADao {
+    @Inject
+    @Unit(name = "test")
+    private EntityManager em;
+
+    public User save(final User user) {
+        em.persist(user);
+        return user;
+    }
+
+    @Jpa(transactional = false)
+    public User find(final long id) {
+        return em.find(User.class, id);
+    }
+}
+----
+
+== Integration with Bean Validation
+
+The extension will try to find a `ValidatorFactory` in CDI context and will provide ir to the JPA provider
+if the `ValidationMode` is not `NONE` and a `Bean<ValidatorFactory>` exists.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jta/index.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jta/index.adoc
new file mode 100755
index 0000000..64e33bb
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-jta/index.adoc
@@ -0,0 +1,21 @@
+= Meecrowave JTA
+:jbake-date: 2016-12-22
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-green
+:icons: font
+
+Coordinates:
+
+[source,xml]
+----
+<dependency>
+  <groupId>org.apache.meecrowave</groupId>
+  <artifactId>meecrowave-jta</artifactId>
+  <version>${meecrowave.version}</version>
+</dependency>
+----
+
+This allows to use `@Transactional` and `@TransactionScoped` features of JTA 1.2.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-maven/index.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-maven/index.adoc
new file mode 100755
index 0000000..a5cf810
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-maven/index.adoc
@@ -0,0 +1,140 @@
+= Meecrowave Maven
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-blue
+:icons: font
+
+Coordinates:
+
+[source,xml]
+----
+<plugin>
+  <groupId>org.apache.meecrowave</groupId>
+  <artifactId>meecrowave-maven-plugin</artifactId>
+  <version>${meecrowave.version}</version>
+</plugin>
+----
+
+TIP: most of the configuration is inherited from meecrowave-core.
+
+Here are the available options (see core configuration for the details):
+
+include::../../../../../target/generated-doc/MavenConfiguration.adoc[]
+
+== Bundling
+
+[source]
+----
+mvn meecrowave:bundle
+----
+
+This maven goal will create a zip/tar.gz (configurable) ready to launch your application.
+
+The layout if the following one:
+
+[source]
+----
+.
+├── bin
+│   └── meecrowave.sh
+├── conf
+│   ├── log4j2.xml
+│   └── meecrowave.properties
+├── lib
+│   └── *.jar
+├── logs
+│   └── meecrowave.logls l
+└── temp
+----
+
+conf folder supports out of the box these files (but you can add your own if needed):
+
+- log4j2.xml
+- server.xml
+- meecrowave.properties
+
+You can acess the root folder of the distribution reading the system property `meecrowave.base`.
+
+`meecrowave.properties` supports all configuration options of the cli (just remove the `--`): http://openwebbeans.apache.org/meecrowave/meecrowave-core/cli.html.
+
+Note: you can also split like Tomcat MEECROWAVE_BASE and MEECROWAVE_HOME if you want to extract meecrowave stack in a separate folder (from the application) to be able to update
+it independently.
+
+== Shading
+
+Plain Maven shade plugin enables you to build fatjar with Maven.
+
+Points to take care are:
+
+1. merge CXF resources
+2. merge Log4j2 resources
+3. merge OpenWebBeans resources
+4. merge SPI files (META-INF/services)
+5. ensure signatures are still valid in the aggregated jar
+
+[source,xml]
+----
+<plugin>
+  <groupId>org.apache.maven.plugins</groupId>
+  <artifactId>maven-shade-plugin</artifactId>
+  <version>2.4.3</version>
+  <executions>
+    <execution>
+      <id>bundle</id>
+      <phase>package</phase>
+      <goals>
+        <goal>shade</goal>
+      </goals>
+      <configuration>
+        <shadedClassifierName>fat</shadedClassifierName>
+        <shadedArtifactAttached>true</shadedArtifactAttached>
+        <dependencyReducedPomLocation>${project.build.directory}/reduced-pom-bundle.xml</dependencyReducedPomLocation>
+        <transformers>
+          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+            <mainClass>org.apache.meecrowave.runner.Cli</mainClass>
+          </transformer>
+          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+            <resource>META-INF/cxf/bus-extensions.txt</resource>
+          </transformer>
+          <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+            <resource>log4j2.component.properties</resource>
+          </transformer>
+          <transformer
+              implementation="com.github.edwgiz.mavenShadePlugin.log4j2CacheTransformer.PluginsCacheFileTransformer"/>
+          <transformer implementation="org.apache.openwebbeans.maven.shade.OpenWebBeansPropertiesTransformer"/>
+          <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
+        </transformers>
+        <filters>
+          <filter>
+            <artifact>*:*</artifact>
+            <excludes>
+              <exclude>META-INF/*.SF</exclude>
+              <exclude>META-INF/*.DSA</exclude>
+              <exclude>META-INF/*.RSA</exclude>
+              <exclude>META-INF/LICENSE.txt</exclude>
+              <exclude>META-INF/LICENSE</exclude>
+              <exclude>META-INF/NOTICE.txt</exclude>
+              <exclude>META-INF/NOTICE</exclude>
+            </excludes>
+          </filter>
+        </filters>
+      </configuration>
+    </execution>
+  </executions>
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.openwebbeans</groupId>
+      <artifactId>openwebbeans-maven</artifactId>
+      <version>1.7.0</version>
+    </dependency>
+    <dependency>
+      <groupId>com.github.edwgiz</groupId>
+      <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId>
+      <version>2.1</version>
+    </dependency>
+  </dependencies>
+</plugin>
+----
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-oauth2/index.adoc b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-oauth2/index.adoc
new file mode 100755
index 0000000..645f631
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/meecrowave-oauth2/index.adoc
@@ -0,0 +1,86 @@
+= Meecrowave OAuth2
+:jbake-date: 2017-01-08
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-green
+:icons: font
+
+Starting with version 0.3.0.
+
+Coordinates:
+
+[source,xml]
+----
+<dependency>
+  <groupId>org.apache.meecrowave</groupId>
+  <artifactId>meecrowave-oauth2</artifactId>
+  <version>${meecrowave.version}</version>
+</dependency>
+----
+
+A small OAuth2 server based on CXF implementation.
+
+See http://cxf.apache.org/docs/jax-rs-oauth2.html for more details.
+
+Here is the current configuration (mainly based on CXF one):
+
+include::../../../../../target/generated-doc/OAuth2Configuration.adoc[]
+
+These options are available through the CLI or through properties as usually with Meecrowave configuration.
+
+Note that meecrowave also provides a bundle which is an executable jar to run an OAuth2 server.
+
+Here is a sample usage of that bundle:
+
+[source,bash]
+----
+java -jar meecrowave-oauth2-0.3.1-bundle.jar --users test=test --roles test=test
+----
+
+Then just test your token endpoint:
+
+[source,bash]
+----
+curl -XPOST http://localhost:8080/oauth2/token -d username=test -d password=test -d grant_type=password
+----
+
+And you should get something like:
+
+[source,javascript]
+----
+{
+  "access_token":"5e2f211d4b4ccaa36a11d0876597f01e",
+  "token_type":"Bearer",
+  "expires_in":3600,
+  "scope":"refreshToken",
+  "refresh_token":"7ae5dc2e25925e5514b7e2e632cfa6a"
+}
+----
+
+IMPORTANT: these example use inline users but you should configure a realm for a real usage.
+
+
+NOTE: this module is interesting if you plan to base your application development
+on Meecrowave because it shows how to use CLI configuration and wire it in your application
+but also how to use a 3rd party library (CXF there) and build a fatjar.
+
+== Authorization code case
+
+Authorization code flow is a bit more complicated but services (endpoints) can be activated (see configuration - `--oauth2-authorization-code-support`).
+
+You will need to configure CXF to point to the keystore/key to crypt/sign the token in session.
+It is properties based. All CXF properties (`rs.security.*`) are supported but prefixed with `oauth2.cxf.` to avoid
+to mix it with another configuration starting with `rs.*`.
+
+For instance you can use:
+
+[source,properties]
+----
+oauth2.cxf.rs.security.keystore.type = jks
+oauth2.cxf.rs.security.keystore.file = /opt/keystores/oauth2.jks
+oauth2.cxf.rs.security.keystore.password = password
+oauth2.cxf.rs.security.keystore.alias = alice
+oauth2.cxf.rs.security.key.password = pwd
+----
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/start.adoc b/trunk/meecrowave-doc/src/main/jbake/content/start.adoc
new file mode 100755
index 0000000..1b355ee
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/start.adoc
@@ -0,0 +1,94 @@
+= Quick start
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavecolor: body-green
+:icons: font
+
+== Your first application
+
+Meecrowave relies on JAX-RS and CDI so to start you just need to write a JAX-RS endpoint:
+
+[source,java]
+----
+@Path("kitchen")
+@ApplicationScoped
+public class HelloKitchen {
+    @GET
+    public String getMenu() {
+        return "good things";
+    }
+}
+----
+
+Then booting Meecrowave is as easy as launching:
+
+[source,java]
+----
+try (final Meecrowave meecrowave = new Meecrowave().bake()) {
+    new Scanner(System.in).nextLine();
+}
+----
+
+You should get some output containing:
+
+[source]
+----
+[19:54:55.397][INFO][main][.meecrowave.cxf.CxfCdiAutoSetup] REST Application: / -> org.apache.cxf.cdi.DefaultApplication
+[19:54:55.399][INFO][main][.meecrowave.cxf.CxfCdiAutoSetup]      Service URI: /kitchen  -> org.app.HelloKitchen
+[19:54:55.401][INFO][main][.meecrowave.cxf.CxfCdiAutoSetup]               GET /kitchen/ ->      String getMenu()
+----
+
+And you can check it works doing:
+
+[source]
+----
+curl http://localhost:8080/kitchen
+----
+
+== You're in a hurry? Use groovy!
+
+IMPORTANT: this feature is supported starting from version 0.3.0 only.
+
+Create a file called `hello.groovy`:
+
+[source,java]
+----
+@Grab('org.apache.meecrowave:meecrowave-core:0.3.0')
+
+import org.apache.meecrowave.Meecrowave
+
+import javax.ws.rs.GET
+import javax.ws.rs.Path
+import javax.enterprise.context.ApplicationScoped
+
+@Path("hello")
+@ApplicationScoped
+class Hello {
+    @GET
+    hi() {
+        "hi"
+    }
+}
+
+new Meecrowave().bake().await()
+----
+
+then
+
+[source,bash]
+----
+groovy hello.groovy
+----
+
+Finally you can test it:
+
+[source,bash]
+----
+curl http://localhost:8080/hello
+----
+
+== Sample
+
+https://github.com/apache/meecrowave/tree/trunk/sample module is a ready to use hello world using meecrowave.
diff --git a/trunk/meecrowave-doc/src/main/jbake/content/testing/index.adoc b/trunk/meecrowave-doc/src/main/jbake/content/testing/index.adoc
new file mode 100644
index 0000000..66396ac
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/content/testing/index.adoc
@@ -0,0 +1,127 @@
+= Meecrowave Testing
+:jbake-date: 2016-10-24
+:jbake-type: page
+:jbake-status: published
+:jbake-meecrowavepdf:
+:jbake-meecrowavetitleicon: icon icon_puzzle_alt
+:jbake-meecrowavecolor: body-blue
+:icons: font
+
+== JUnit
+
+Coordinates:
+
+[source,xml]
+----
+<dependency>
+  <groupId>org.apache.meecrowave</groupId>
+  <artifactId>meecrowave-junit</artifactId>
+  <version>${meecrowave.version}</version>
+</dependency>
+----
+
+=== Rules and Runners
+
+Meecrowave provides two flavors of JUnit integration: standalone or runners/rules. The standalone one will
+ensure there is a single container for the whole JVM. It also fits standalone environments where you want to control the lifecycle.
+The other one will follow the JUnit lifecycle (per class or test rule).
+
+Here how to use the standalone flavor:
+
+[source,java]
+----
+@RunWith(MonoMeecrowave.Runner.class)
+public class MonoMeecrowaveRuleTest {
+    /* or
+    @ClassRule
+    public static final MonoMeecrowave.Rule RULE = new MonoMeecrowave.Rule();
+    */
+
+    @MonoMeecrowave.Runner.ConfigurationInject
+    private Meecrowave.Builder config;
+
+    @Test
+    public void test() throws IOException {
+        // use "http://localhost:" + config.getHttpPort()
+    }
+}
+----
+
+When using the standalone, `@MonoMeecrowave.Runner.ConfigurationInject` allows to still
+access the configuration and random HTTP port.
+
+For the configuration, the standalone runner will use a global configuration shared by all tests. To load it
+it will use a standard `ServiceLoader` on type `org.apache.meecrowave.Meecrowave$ConfigurationCustomizer`.
+
+And here is the one bound to the JUnit lifecycle
+
+[source,java]
+----
+public class MeecrowaveRuleTest {
+    @ClassRule // started once for the class, @Rule would be per method
+    public static final MeecrowaveRule RULE = new MeecrowaveRule();
+
+    @Test
+    public void test() throws IOException {
+        // use "http://localhost:" + RULE.getConfiguration().getHttpPort()
+    }
+}
+----
+
+As usual with JUnit rules, you can decide whereas the Meecrowave instance is bound to the entire test class
+or a method by using @ClassRule or @Rule.
+
+=== JUnit 5
+
+JUnit 5 integrates a new `Extension` system. It is not yet very well supported by IDEs but you can already use it with
+Gradle and Maven (see http://junit.org/junit5/docs/current/user-guide/#running-tests).
+
+The usage has two annotations: `@MeecrowaveConfig` which remaps most of the configuration of Meecrowave and `@MonoMeecrowaveConfig`
+which is close to `MonoMeecrowave.Runner` in term of usage.
+
+[source,java]
+----
+@MeecrowaveConfig /*(some config)*/
+public class MeecrowaveConfigTest {
+    @ConfigurationInject
+    private Meecrowave.Builder config;
+
+    @Test
+    public void run() throws MalformedURLException {
+        final String base = "http://localhost:" + config.getHttpPort();
+        // asserts
+    }
+}
+----
+
+Or
+
+[source,java]
+----
+@MonoMeecrowaveConfig
+public class MeecrowaveConfigTest {
+    // ...
+}
+----
+
+== Arquillian Container
+
+Container dependency:
+
+[source,xml]
+----
+<dependency>
+  <groupId>org.apache.meecrowave</groupId>
+  <artifactId>meecrowave-arquillian</artifactId>
+  <version>${meecrowave.version}</version>
+</dependency>
+----
+
+For the configuration check link:{context_rootpath}/meecrowave-core/configuration.html[Core configuration].
+
+Here is a sample:
+
+[source,xml]
+----
+include::../../../../../target/generated-doc/ArquillianConfiguration.adoc[]
+----
diff --git a/trunk/meecrowave-doc/src/main/jbake/jbake.properties b/trunk/meecrowave-doc/src/main/jbake/jbake.properties
new file mode 100755
index 0000000..82d11a3
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/jbake.properties
@@ -0,0 +1,30 @@
+#Licensed to the Apache Software Foundation (ASF) under one
+#or more contributor license agreements.  See the NOTICE file
+#distributed with this work for additional information
+#regarding copyright ownership.  The ASF licenses this file
+#to you under the Apache License, Version 2.0 (the
+#"License"); you may not use this file except in compliance
+#with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing,
+#software distributed under the License is distributed on an
+#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#KIND, either express or implied.  See the License for the
+#specific language governing permissions and limitations
+#under the License.
+content.rootpath = /meecrowave
+content_rootpath = /meecrowave
+
+default.status=published
+
+render.encoding=UTF-8
+render.tags = true
+render.archive = false
+render.feed = false
+render.sitemap = false
+
+template.folder = templates
+template.index.file = index.gsp
+template.page.file = page.gsp
diff --git a/trunk/meecrowave-doc/src/main/jbake/templates/footer.gsp b/trunk/meecrowave-doc/src/main/jbake/templates/footer.gsp
new file mode 100755
index 0000000..b711182
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/templates/footer.gsp
@@ -0,0 +1,27 @@
+</div><!--//page-wrapper-->
+
+    <footer class="footer text-center">
+        <div class="container">
+          <div class="row">
+            <p >Copyright &copy; 2016
+                <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.
+            </p>
+          </div>
+        </div>
+
+        <div class="container"><!-- don't remove it otherwise theme is no more creative common -->
+            <small class="copyright">Designed with <i class="fa fa-heart"></i> by <a href="http://themes.3rdwavemedia.com/" target="_blank">Xiaoying Riley</a> for developers</small>
+        </div><!--//container-->
+    </footer><!--//footer-->
+
+
+    <!-- Main Javascript -->
+    <script type="text/javascript" src="/meecrowave/assets/plugins/jquery-1.12.3.min.js"></script>
+    <script type="text/javascript" src="/meecrowave/assets/plugins/bootstrap/js/bootstrap.min.js"></script>
+    <script type="text/javascript" src="/meecrowave/assets/plugins/jquery-match-height/jquery.matchHeight-min.js"></script>
+    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/highlight.min.js"></script>
+    <script type="text/javascript" src="/meecrowave/assets/js/main.js?version=1"></script>
+
+</body>
+</html>
+
diff --git a/trunk/meecrowave-doc/src/main/jbake/templates/header.gsp b/trunk/meecrowave-doc/src/main/jbake/templates/header.gsp
new file mode 100755
index 0000000..12fa65b
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/templates/header.gsp
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<!--[if IE 8]> <html lang="en" class="ie8"> <![endif]-->
+<!--[if IE 9]> <html lang="en" class="ie9"> <![endif]-->
+<!--[if !IE]><!--> <html lang="en"> <!--<![endif]-->
+<head>
+    <title>Meecrowave :: the customizable server</title>
+    <!-- Meta -->
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <meta name="description" content="">
+    <meta name="author" content="">
+    <link rel="shortcut icon" href="/meecrowave/favicon.ico">
+    <link href='http://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800' rel='stylesheet' type='text/css'>
+    <!-- Global CSS -->
+    <link rel="stylesheet" href="/meecrowave/assets/plugins/bootstrap/css/bootstrap.min.css">
+    <!-- Plugins CSS -->
+    <link rel="stylesheet" href="/meecrowave/assets/plugins/font-awesome/css/font-awesome.min.css">
+    <link rel="stylesheet" href="/meecrowave/assets/plugins/elegant_font/css/style.css?version=1">
+    <!-- highlighting -->
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.9.0/styles/idea.min.css">
+
+    <!-- Theme CSS -->
+    <link id="theme-style" rel="stylesheet" href="/meecrowave/assets/css/styles.css">
+    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
+    <!--[if lt IE 9]>
+      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
+      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+    <![endif]-->
+</head>
+
+<body class="${content.getOrDefault('meecrowavecolor', 'landing-page')}">
+    <div class="page-wrapper">
+    <!-- TODO: google analytics -->
\ No newline at end of file
diff --git a/trunk/meecrowave-doc/src/main/jbake/templates/index.gsp b/trunk/meecrowave-doc/src/main/jbake/templates/index.gsp
new file mode 100755
index 0000000..240c508
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/templates/index.gsp
@@ -0,0 +1,70 @@
+<%include "header.gsp"%>
+  <!-- ******Header****** -->
+          <header class="header text-center">
+              <div class="container">
+                  <div class="branding">
+                      <h1 class="logo">
+                          <span aria-hidden="true" class="icon_documents_alt icon"></span>
+                          <a href="/meecrowave/index.html">
+                            <span class="text-highlight">Meecro</span><span class="text-bold">wave</span>
+                          </a>
+                      </h1>
+                  </div><!--//branding-->
+                  <div class="tagline">
+                      <p>A light JAX-RS+CDI+JSON server!</p>
+                  </div><!--//tagline-->
+              </div><!--//container-->
+          </header><!--//header-->
+
+          <section class="cards-section text-center">
+              <div class="container">
+                  <h2 class="title">Cause power doesn't mean complicated!</h2>
+                  <div class="intro">
+                      <p>Welcome to Meecrowave website, if you are fed up to need to adapt to a server instead of letting the server adapting to you you are on the right place!</p>
+                  </div><!--//intro-->
+                  <div id="cards-wrapper" class="cards-wrapper row">
+                      <div class="item item-green col-md-4 col-sm-6 col-xs-6">
+                          <div class="item-inner">
+                              <div class="icon-holder">
+                                  <i class="icon fa fa-paper-plane"></i>
+                              </div><!--//icon-holder-->
+                              <h3 class="title">Quick Start</h3>
+                              <p class="intro">Deploy a JSON webservice in 5 mn!</p>
+                              <a class="link" href="/meecrowave/start.html"><span></span></a>
+                          </div><!--//item-inner-->
+                      </div><!--//item-->
+                      <div class="item item-pink item-2 col-md-4 col-sm-6 col-xs-6">
+                          <div class="item-inner">
+                              <div class="icon-holder">
+                                  <span aria-hidden="true" class="icon icon_puzzle_alt"></span>
+                              </div><!--//icon-holder-->
+                              <h3 class="title">Components</h3>
+                              <p class="intro">Meecrowave extensions making development and production smoother.</p>
+                              <a class="link" href="/meecrowave/components.html"><span></span></a>
+                          </div><!--//item-inner-->
+                      </div><!--//item-->
+                      <div class="item item-blue col-md-4 col-sm-6 col-xs-6">
+                          <div class="item-inner">
+                              <div class="icon-holder">
+                                  <span aria-hidden="true" class="icon icon_gift"></span>
+                              </div><!--//icon-holder-->
+                              <h3 class="title">Downloads and License</h3>
+                              <p class="intro">Ready to get started? Grab meecrowave and run your services!</p>
+                              <a class="link" href="/meecrowave/download.html"><span></span></a>
+                          </div><!--//item-inner-->
+                      </div><!--//item-->
+                        <div class="item item-primary item-2 col-md-offset-4 col-md-4 col-sm-offset-2 col-xs-offset-2 col-sm-6 col-xs-6">
+                            <div class="item-inner">
+                                <div class="icon-holder">
+                                    <span aria-hidden="true" class="icon icon_puzzle_alt"></span>
+                                </div><!--//icon-holder-->
+                                <h3 class="title">Community</h3>
+                                <p class="intro">OpenWebBeans community is proud to host Meecrowave project.</p>
+                                <a class="link" href="/meecrowave/community.html"><span></span></a>
+                            </div><!--//item-inner-->
+                        </div><!--//item-->
+                  </div><!--//cards-->
+
+              </div><!--//container-->
+          </section><!--//cards-section-->
+<%include "footer.gsp"%>
diff --git a/trunk/meecrowave-doc/src/main/jbake/templates/page.gsp b/trunk/meecrowave-doc/src/main/jbake/templates/page.gsp
new file mode 100755
index 0000000..e1688e1
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/jbake/templates/page.gsp
@@ -0,0 +1,58 @@
+<%include "header.gsp"%>
+<header class="header text-center">
+  <div class="container">
+      <div class="branding">
+          <h1 class="doc-title">
+              <span aria-hidden="true" class="${content.getOrDefault('meecrowavetitleicon', 'icon_documents_alt')} icon"></span>
+              <a href="/meecrowave/index.html">
+                Meecrowave
+              </a>
+          </h1>
+      </div>
+  </div><!--//container-->
+</header><!--//header-->
+<div class="doc-wrapper">
+    <div class="container">
+        <div id="doc-header" class="doc-header text-center">
+            <h1 class="doc-title"><span aria-hidden="true" class="icon icon_lifesaver"></span> ${content.title}</h1>
+        </div><!--//doc-header-->
+
+<div class="doc-body">
+    <div class="doc-content">
+        <div class="content-inner">
+
+<%if (content.body) {%>
+
+<%if (content.containsKey('meecrowavepdf')) {%>
+<div class='btn-toolbar pull-right' style="z-index: 2000;">
+  <div class='btn-group'>
+      <a class="btn" href="/meecrowave/${content.uri.replace('html', 'pdf')}"><i class="fa fa-file-pdf-o"></i> Download as PDF</a>
+  </div>
+</div>
+<% } %>
+
+
+            <section class="doc-section">
+                ${content.body}
+            </section><!--//doc-section-->
+
+<% } %>
+
+
+        </div><!--//content-inner-->
+    </div><!--//doc-content-->
+
+    <div class="doc-sidebar">
+        <nav id="doc-nav">
+            <ul id="doc-menu" class="nav doc-menu hidden-xs affix-top" data-spy="affix">
+                <li><a href="/meecrowave/index.html">Home</a></li>
+                <li><a href="/meecrowave/start.html">Quick Start</a></li>
+                <li><a href="/meecrowave/components.html">Components</a></li>
+                <li><a href="/meecrowave/download.html">Download</a></li>
+                <li><a href="/meecrowave/community.html">Community</a></li>
+            </ul><!--//doc-menu-->
+        </nav>
+    </div>
+</div>
+
+<%include "footer.gsp"%>
diff --git a/trunk/meecrowave-doc/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-doc/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..b25ffb8
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,320 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+----
+
+MIT License
+
+The MIT License (MIT)
+Further resources on The MIT License (MIT)
+The MIT License (MIT)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+----
+
+jQuery license
+
+JS Foundation
+Intellectual Property Policy
+The JS Foundation supports numerous individual projects (each, a “Project” and together, the
+“Projects”). Contributions to individual projects are made pursuant to the license applicable to
+each such Project (with respect to each Project, the “Applicable License”). The technical
+governing body of each Project is free to choose, as its Applicable License with respect to
+contributions of code, the Apache License, Version 2.0 (available at
+http://www.apache.org/licenses/LICENSE-2.0).
+If an alternative inbound or outbound license is required for compliance with the license for a
+leveraged open source project or is otherwise required to achieve the JS Foundation’s, or an
+individual Project’s, objectives, the Board of Directors of the JS Foundation (the “Board”) may
+approve the use of an alternative license for inbound or outbound contributions on an exception
+basis. Please email legal@js.foundation to obtain exception approval.
+The JS Foundation and its Projects seek to integrate and contribute back to other open source
+projects within the scope of driving widespread adoption and continued development of key
+JavaScript solutions and related technologies. Based on this design goal for the JS Foundation,
+the development community will:
+• conform to all license requirements of the open source projects leveraged within the
+project; and
+• operate to maximize opportunities for compatibility with other projects that might be
+leveraged in the project.
+Except as may be approved by the Board:
+• All new code contributions to any Project shall be made under the Applicable License
+accompanied by either a JS Foundation CLA Signature available at
+https://js.foundation/CLA or a Developers Certificate of Origin (DCO, available at
+http://developercertificate.org/).
+• All outbound code will be made available under the Applicable License.
+• All documentation (including without limitation code that is intended as sample code)
+will be contributed to the Project and made available under the Applicable License or, if
+approved by the Project, Creative Commons Attribution 4.0 International License or
+under CC0.
+Furthermore, on notice to the Projects, the Board may adopt and/or modify contribution policies
+for the contribution of code to any Project.
+The technical governing body of each Project may provide for additional requirements with
+respect to contributions.
+Except for (a) each member’s commitment to be bound by this Policy with respect to its or its
+employees’ authorized contributions to any Project and (b) any applicable contributor license
+agreement, if any, no license is granted by the member to its intellectual property, and none shall
+be implied by general membership in the JS Foundation.
+
+----
+
+Creative Commons Attribution 3.0 License
+
+REATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE.
+License
+
+THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
+
+BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
+
+1. Definitions
+
+"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
+"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
+"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
+"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
+"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
+"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
+"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
+"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
+"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
+2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
+
+3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
+
+to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
+to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
+to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
+to Distribute and Publicly Perform Adaptations.
+For the avoidance of doubt:
+
+Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
+Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and,
+Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License.
+The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved.
+
+4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
+
+You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(b), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(b), as requested.
+If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4 (b) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
+Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
+5. Representations, Warranties and Disclaimer
+
+UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
+
+6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+7. Termination
+
+This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
+Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
+8. Miscellaneous
+
+Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
+Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
+If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
+No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
+This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
+The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
diff --git a/trunk/meecrowave-doc/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-doc/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..0670e92
--- /dev/null
+++ b/trunk/meecrowave-doc/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,53 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+----
+
+This product bundles Pretty Doc theme:
+
+ Template Name: PrettyDocs - Responsive Website Template for documentations
+ Version: 1.0
+ Author: Xiaoying Riley
+ License: Creative Commons Attribution 3.0 License - https://creativecommons.org/licenses/by/3.0/
+ Twitter: @3rdwave_themes
+ Website: http://themes.3rdwavemedia.com/
+
+----
+
+This product bundles Twitter Bootstrap:
+
+ Bootstrap v3.3.6 (http://getbootstrap.com)
+ Copyright 2011-2015 Twitter, Inc.
+ Licensed under the MIT license
+
+----
+
+This product bundles Elegant font:
+
+ https://www.elegantthemes.com/blog/resources/elegant-icon-font
+ Licensed under the MIT license
+
+----
+
+This product bundles font awesome:
+
+ Font Awesome 4.6.3 by @davegandy - http://fontawesome.io - @fontawesome
+ License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
+
+----
+
+This product bundles jQuery match height:
+
+ jquery.matchHeight-min.js v0.5.2
+ http://brm.io/jquery-match-height/
+ License: MIT
+
+----
+
+This product bundles jQuery:
+
+jQuery v1.12.3 | (c) jQuery Foundation | jquery.org/license
+
diff --git a/trunk/meecrowave-gradle-plugin/pom.xml b/trunk/meecrowave-gradle-plugin/pom.xml
new file mode 100644
index 0000000..f7d0798
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/pom.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-gradle-plugin</artifactId>
+  <name>Meecrowave :: Gradle</name>
+
+  <properties>
+    <gradle.version>3.1</gradle.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.gradle</groupId>
+      <artifactId>gradle-core</artifactId>
+      <version>${gradle.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.groovy</groupId>
+      <artifactId>groovy-all</artifactId>
+      <version>2.4.3</version>
+      <scope>provided</scope>
+    </dependency>
+    <!-- you surely don't want to do that, check the code ;) -->
+  </dependencies>
+
+  <repositories>
+    <repository>
+      <id>gradle-libs-releases-local</id>
+      <url>http://repo.gradle.org/gradle/libs-releases-local/</url>
+    </repository>
+  </repositories>
+</project>
diff --git a/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowaveExtension.java b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowaveExtension.java
new file mode 100644
index 0000000..b64296a
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowaveExtension.java
@@ -0,0 +1,658 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.gradle;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Map;
+
+public class MeecrowaveExtension {
+    private boolean skipMavenCentral;
+    private String context = "";
+    private File webapp;
+
+    private int watcherBouncing;
+    private int httpPort = 8080;
+    private int httpsPort = 8443;
+    private int stopPort = -1;
+    private String host = "localhost";
+    private String dir;
+    private File serverXml;
+    private boolean keepServerXmlAsThis;
+    private Map<String, String> properties;
+    private boolean quickSession;
+    private boolean skipHttp;
+    private boolean ssl;
+    private String keystoreFile;
+    private String keystorePass;
+    private String keystoreType;
+    private String clientAuth;
+    private String keyAlias;
+    private String sslProtocol;
+    private String webXml;
+    private String loginConfig;
+    private Collection<String> securityConstraints = new LinkedList<>();
+    private Map<String, String> users;
+    private Map<String, String> roles;
+    private Map<String, String> cxfServletParams;
+    private boolean http2;
+    private boolean tomcatScanning = true;
+    private boolean tomcatAutoSetup = true;
+    private String tempDir;
+    private boolean webResourceCached = true;
+    private String conf;
+    private boolean deleteBaseOnStartup = true;
+    private String jaxrsMapping;
+    private boolean cdiConversation;
+    private boolean skip;
+    private boolean jaxrsProviderSetup = true;
+    private boolean loggingGlobalSetup = true;
+    private boolean useShutdownHook = true;
+    private String tomcatFilter;
+    private boolean useTomcatDefaults = true;
+    private boolean jaxrsLogProviders = false;
+    private boolean tomcatWrapLoader = false;
+    private String jaxrsDefaultProviders;
+    private String sharedLibraries;
+    private boolean useLog4j2JulLogManager = true;
+    private String jsonpBufferStrategy = "QUEUE";
+    private int jsonpMaxStringLen = 10 * 1024 * 1024;
+    private int jsonpMaxReadBufferLen = 64 * 1024;
+    private int jsonpMaxWriteBufferLen = 64 * 1024;
+    private boolean jsonpSupportsComment = false;
+    private boolean jsonpPrettify = false;
+    private String jsonbEncoding = "UTF-8";
+    private boolean jsonbNulls = false;
+    private boolean jsonbIJson = false;
+    private boolean jsonbPrettify = false;
+    private String jsonbBinaryStrategy;
+    private String jsonbNamingStrategy;
+    private String jsonbOrderStrategy;
+    private String scanningIncludes;
+    private String scanningExcludes;
+    private String scanningPackageIncludes;
+    private String scanningPackageExcludes;
+    private boolean tomcatNoJmx = true;
+    private boolean injectServletContainerInitializer = true;
+    private String tomcatAccessLogPattern;
+    private boolean jaxrsAutoActivateBeanValidation = true;
+    private String meecrowaveProperties = "meecrowave.properties";
+    private boolean jaxwsSupportIfAvailable = true;
+
+    public boolean isJaxwsSupportIfAvailable() {
+        return jaxwsSupportIfAvailable;
+    }
+
+    public void setJaxwsSupportIfAvailable(final boolean jaxwsSupportIfAvailable) {
+        this.jaxwsSupportIfAvailable = jaxwsSupportIfAvailable;
+    }
+
+    public String getMeecrowaveProperties() {
+        return meecrowaveProperties;
+    }
+
+    public void setMeecrowaveProperties(final String meecrowaveProperties) {
+        this.meecrowaveProperties = meecrowaveProperties;
+    }
+
+    public String getJsonpBufferStrategy() {
+        return jsonpBufferStrategy;
+    }
+
+    public void setJsonpBufferStrategy(final String jsonpBufferStrategy) {
+        this.jsonpBufferStrategy = jsonpBufferStrategy;
+    }
+
+    public int getJsonpMaxStringLen() {
+        return jsonpMaxStringLen;
+    }
+
+    public void setJsonpMaxStringLen(final int jsonpMaxStringLen) {
+        this.jsonpMaxStringLen = jsonpMaxStringLen;
+    }
+
+    public int getJsonpMaxReadBufferLen() {
+        return jsonpMaxReadBufferLen;
+    }
+
+    public void setJsonpMaxReadBufferLen(final int jsonpMaxReadBufferLen) {
+        this.jsonpMaxReadBufferLen = jsonpMaxReadBufferLen;
+    }
+
+    public int getJsonpMaxWriteBufferLen() {
+        return jsonpMaxWriteBufferLen;
+    }
+
+    public void setJsonpMaxWriteBufferLen(final int jsonpMaxWriteBufferLen) {
+        this.jsonpMaxWriteBufferLen = jsonpMaxWriteBufferLen;
+    }
+
+    public boolean isJsonpSupportsComment() {
+        return jsonpSupportsComment;
+    }
+
+    public void setJsonpSupportsComment(final boolean jsonpSupportsComment) {
+        this.jsonpSupportsComment = jsonpSupportsComment;
+    }
+
+    public boolean isJsonpPrettify() {
+        return jsonpPrettify;
+    }
+
+    public void setJsonpPrettify(final boolean jsonpPrettify) {
+        this.jsonpPrettify = jsonpPrettify;
+    }
+
+    public String getJsonbEncoding() {
+        return jsonbEncoding;
+    }
+
+    public void setJsonbEncoding(final String jsonbEncoding) {
+        this.jsonbEncoding = jsonbEncoding;
+    }
+
+    public boolean isJsonbNulls() {
+        return jsonbNulls;
+    }
+
+    public void setJsonbNulls(final boolean jsonbNulls) {
+        this.jsonbNulls = jsonbNulls;
+    }
+
+    public boolean isJsonbIJson() {
+        return jsonbIJson;
+    }
+
+    public void setJsonbIJson(final boolean jsonbIJson) {
+        this.jsonbIJson = jsonbIJson;
+    }
+
+    public boolean isJsonbPrettify() {
+        return jsonbPrettify;
+    }
+
+    public void setJsonbPrettify(final boolean jsonbPrettify) {
+        this.jsonbPrettify = jsonbPrettify;
+    }
+
+    public String getJsonbBinaryStrategy() {
+        return jsonbBinaryStrategy;
+    }
+
+    public void setJsonbBinaryStrategy(final String jsonbBinaryStrategy) {
+        this.jsonbBinaryStrategy = jsonbBinaryStrategy;
+    }
+
+    public String getJsonbNamingStrategy() {
+        return jsonbNamingStrategy;
+    }
+
+    public void setJsonbNamingStrategy(final String jsonbNamingStrategy) {
+        this.jsonbNamingStrategy = jsonbNamingStrategy;
+    }
+
+    public String getJsonbOrderStrategy() {
+        return jsonbOrderStrategy;
+    }
+
+    public void setJsonbOrderStrategy(final String jsonbOrderStrategy) {
+        this.jsonbOrderStrategy = jsonbOrderStrategy;
+    }
+
+    public boolean isUseLog4j2JulLogManager() {
+        return useLog4j2JulLogManager;
+    }
+
+    public void setUseLog4j2JulLogManager(final boolean useLog4j2JulLogManager) {
+        this.useLog4j2JulLogManager = useLog4j2JulLogManager;
+    }
+
+    public String getSharedLibraries() {
+        return sharedLibraries;
+    }
+
+    public void setSharedLibraries(final String sharedLibraries) {
+        this.sharedLibraries = sharedLibraries;
+    }
+
+    public String getJaxrsDefaultProviders() {
+        return jaxrsDefaultProviders;
+    }
+
+    public void setJaxrsDefaultProviders(final String jaxrsDefaultProviders) {
+        this.jaxrsDefaultProviders = jaxrsDefaultProviders;
+    }
+
+    public boolean isTomcatWrapLoader() {
+        return tomcatWrapLoader;
+    }
+
+    public void setTomcatWrapLoader(final boolean tomcatWrapLoader) {
+        this.tomcatWrapLoader = tomcatWrapLoader;
+    }
+
+    public boolean isJaxrsLogProviders() {
+        return jaxrsLogProviders;
+    }
+
+    public void setJaxrsLogProviders(final boolean jaxrsLogProviders) {
+        this.jaxrsLogProviders = jaxrsLogProviders;
+    }
+
+    public boolean isUseTomcatDefaults() {
+        return useTomcatDefaults;
+    }
+
+    public void setUseTomcatDefaults(final boolean useTomcatDefaults) {
+        this.useTomcatDefaults = useTomcatDefaults;
+    }
+
+    public String getTomcatFilter() {
+        return tomcatFilter;
+    }
+
+    public void setTomcatFilter(final String tomcatFilter) {
+        this.tomcatFilter = tomcatFilter;
+    }
+
+    public boolean isUseShutdownHook() {
+        return useShutdownHook;
+    }
+
+    public void setUseShutdownHook(final boolean useShutdownHook) {
+        this.useShutdownHook = useShutdownHook;
+    }
+
+    public Map<String, String> getCxfServletParams() {
+        return cxfServletParams;
+    }
+
+    public void setCxfServletParams(final Map<String, String> cxfServletParams) {
+        this.cxfServletParams = cxfServletParams;
+    }
+
+    public boolean isTomcatScanning() {
+        return tomcatScanning;
+    }
+
+    public void setTomcatScanning(final boolean tomcatScanning) {
+        this.tomcatScanning = tomcatScanning;
+    }
+
+    public boolean isLoggingGlobalSetup() {
+        return loggingGlobalSetup;
+    }
+
+    public void setLoggingGlobalSetup(final boolean loggingGlobalSetup) {
+        this.loggingGlobalSetup = loggingGlobalSetup;
+    }
+
+    public boolean isJaxrsProviderSetup() {
+        return jaxrsProviderSetup;
+    }
+
+    public void setJaxrsProviderSetup(final boolean jaxrsProviderSetup) {
+        this.jaxrsProviderSetup = jaxrsProviderSetup;
+    }
+
+    public String getContext() {
+        return context;
+    }
+
+    public void setContext(final String context) {
+        this.context = context;
+    }
+
+    public File getWebapp() {
+        return webapp;
+    }
+
+    public void setWebapp(final File webapp) {
+        this.webapp = webapp;
+    }
+
+    public boolean isSkipMavenCentral() {
+        return skipMavenCentral;
+    }
+
+    public void setSkipMavenCentral(final boolean skipMavenCentral) {
+        this.skipMavenCentral = skipMavenCentral;
+    }
+
+    public int getHttpPort() {
+        return httpPort;
+    }
+
+    public void setHttpPort(final int httpPort) {
+        this.httpPort = httpPort;
+    }
+
+    public int getHttpsPort() {
+        return httpsPort;
+    }
+
+    public void setHttpsPort(final int httpsPort) {
+        this.httpsPort = httpsPort;
+    }
+
+    public int getStopPort() {
+        return stopPort;
+    }
+
+    public void setStopPort(final int stopPort) {
+        this.stopPort = stopPort;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(final String host) {
+        this.host = host;
+    }
+
+    public String getDir() {
+        return dir;
+    }
+
+    public void setDir(final String dir) {
+        this.dir = dir;
+    }
+
+    public File getServerXml() {
+        return serverXml;
+    }
+
+    public void setServerXml(final File serverXml) {
+        this.serverXml = serverXml;
+    }
+
+    public boolean isKeepServerXmlAsThis() {
+        return keepServerXmlAsThis;
+    }
+
+    public void setKeepServerXmlAsThis(final boolean keepServerXmlAsThis) {
+        this.keepServerXmlAsThis = keepServerXmlAsThis;
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(final Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+    public boolean isQuickSession() {
+        return quickSession;
+    }
+
+    public void setQuickSession(final boolean quickSession) {
+        this.quickSession = quickSession;
+    }
+
+    public boolean isSkipHttp() {
+        return skipHttp;
+    }
+
+    public void setSkipHttp(final boolean skipHttp) {
+        this.skipHttp = skipHttp;
+    }
+
+    public boolean isSsl() {
+        return ssl;
+    }
+
+    public void setSsl(final boolean ssl) {
+        this.ssl = ssl;
+    }
+
+    public String getKeystoreFile() {
+        return keystoreFile;
+    }
+
+    public void setKeystoreFile(final String keystoreFile) {
+        this.keystoreFile = keystoreFile;
+    }
+
+    public String getKeystorePass() {
+        return keystorePass;
+    }
+
+    public void setKeystorePass(final String keystorePass) {
+        this.keystorePass = keystorePass;
+    }
+
+    public String getKeystoreType() {
+        return keystoreType;
+    }
+
+    public void setKeystoreType(final String keystoreType) {
+        this.keystoreType = keystoreType;
+    }
+
+    public String getClientAuth() {
+        return clientAuth;
+    }
+
+    public void setClientAuth(final String clientAuth) {
+        this.clientAuth = clientAuth;
+    }
+
+    public String getKeyAlias() {
+        return keyAlias;
+    }
+
+    public void setKeyAlias(final String keyAlias) {
+        this.keyAlias = keyAlias;
+    }
+
+    public String getSslProtocol() {
+        return sslProtocol;
+    }
+
+    public void setSslProtocol(final String sslProtocol) {
+        this.sslProtocol = sslProtocol;
+    }
+
+    public String getWebXml() {
+        return webXml;
+    }
+
+    public void setWebXml(final String webXml) {
+        this.webXml = webXml;
+    }
+
+    public String getLoginConfig() {
+        return loginConfig;
+    }
+
+    public void setLoginConfig(final String loginConfig) {
+        this.loginConfig = loginConfig;
+    }
+
+    public Collection<String> getSecurityConstraints() {
+        return securityConstraints;
+    }
+
+    public void setSecurityConstraints(final Collection<String> securityConstraints) {
+        this.securityConstraints = securityConstraints;
+    }
+
+    public Map<String, String> getUsers() {
+        return users;
+    }
+
+    public void setUsers(final Map<String, String> users) {
+        this.users = users;
+    }
+
+    public Map<String, String> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(final Map<String, String> roles) {
+        this.roles = roles;
+    }
+
+    public boolean isHttp2() {
+        return http2;
+    }
+
+    public void setHttp2(final boolean http2) {
+        this.http2 = http2;
+    }
+
+    public String getTempDir() {
+        return tempDir;
+    }
+
+    public void setTempDir(final String tempDir) {
+        this.tempDir = tempDir;
+    }
+
+    public boolean isWebResourceCached() {
+        return webResourceCached;
+    }
+
+    public void setWebResourceCached(final boolean webResourceCached) {
+        this.webResourceCached = webResourceCached;
+    }
+
+    public String getConf() {
+        return conf;
+    }
+
+    public void setConf(final String conf) {
+        this.conf = conf;
+    }
+
+    public boolean isDeleteBaseOnStartup() {
+        return deleteBaseOnStartup;
+    }
+
+    public void setDeleteBaseOnStartup(final boolean deleteBaseOnStartup) {
+        this.deleteBaseOnStartup = deleteBaseOnStartup;
+    }
+
+    public String getJaxrsMapping() {
+        return jaxrsMapping;
+    }
+
+    public void setJaxrsMapping(final String jaxrsMapping) {
+        this.jaxrsMapping = jaxrsMapping;
+    }
+
+    public boolean isCdiConversation() {
+        return cdiConversation;
+    }
+
+    public void setCdiConversation(final boolean cdiConversation) {
+        this.cdiConversation = cdiConversation;
+    }
+
+    public boolean isSkip() {
+        return skip;
+    }
+
+    public void setSkip(final boolean skip) {
+        this.skip = skip;
+    }
+
+    public boolean isTomcatAutoSetup() {
+        return tomcatAutoSetup;
+    }
+
+    public void setTomcatAutoSetup(final boolean tomcatAutoSetup) {
+        this.tomcatAutoSetup = tomcatAutoSetup;
+    }
+
+    public String getScanningIncludes() {
+        return scanningIncludes;
+    }
+
+    public void setScanningIncludes(final String scanningIncludes) {
+        this.scanningIncludes = scanningIncludes;
+    }
+
+    public String getScanningExcludes() {
+        return scanningExcludes;
+    }
+
+    public void setScanningExcludes(final String scanningExcludes) {
+        this.scanningExcludes = scanningExcludes;
+    }
+
+    public String getScanningPackageIncludes() {
+        return scanningPackageIncludes;
+    }
+
+    public void setScanningPackageIncludes(final String scanningPackageIncludes) {
+        this.scanningPackageIncludes = scanningPackageIncludes;
+    }
+
+    public String getScanningPackageExcludes() {
+        return scanningPackageExcludes;
+    }
+
+    public void setScanningPackageExcludes(String scanningPackageExcludes) {
+        this.scanningPackageExcludes = scanningPackageExcludes;
+    }
+
+    public boolean isTomcatNoJmx() {
+        return tomcatNoJmx;
+    }
+
+    public void setTomcatNoJmx(final boolean tomcatNoJmx) {
+        this.tomcatNoJmx = tomcatNoJmx;
+    }
+
+    public boolean isInjectServletContainerInitializer() {
+        return injectServletContainerInitializer;
+    }
+
+    public void setInjectServletContainerInitializer(final boolean injectServletContainerInitializer) {
+        this.injectServletContainerInitializer = injectServletContainerInitializer;
+    }
+
+    public String getTomcatAccessLogPattern() {
+        return tomcatAccessLogPattern;
+    }
+
+    public void setTomcatAccessLogPattern(final String tomcatAccessLogPattern) {
+        this.tomcatAccessLogPattern = tomcatAccessLogPattern;
+    }
+
+    public boolean isJaxrsAutoActivateBeanValidation() {
+        return jaxrsAutoActivateBeanValidation;
+    }
+
+    public void setJaxrsAutoActivateBeanValidation(final boolean jaxrsAutoActivateBeanValidation) {
+        this.jaxrsAutoActivateBeanValidation = jaxrsAutoActivateBeanValidation;
+    }
+
+    public int getWatcherBouncing() {
+        return watcherBouncing;
+    }
+
+    public void setWatcherBouncing(final int watcherBouncing) {
+        this.watcherBouncing = watcherBouncing;
+    }
+}
diff --git a/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowavePlugin.java b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowavePlugin.java
new file mode 100644
index 0000000..a791bf7
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowavePlugin.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.gradle;
+
+import org.gradle.api.Plugin;
+import org.gradle.api.Project;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.artifacts.DependencySet;
+import org.gradle.api.artifacts.dsl.DependencyHandler;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Properties;
+
+public class MeecrowavePlugin implements Plugin<Project> {
+    public static final String NAME = "meecrowave";
+
+    @Override
+    public void apply(final Project project) {
+        project.getExtensions().create(NAME, MeecrowaveExtension.class);
+
+        project.afterEvaluate(actionProject -> {
+            final MeecrowaveExtension extension = MeecrowaveExtension.class.cast(actionProject.getExtensions().findByName(NAME));
+            if (extension != null && extension.isSkipMavenCentral()) {
+                return;
+            }
+            actionProject.getRepositories().mavenCentral();
+        });
+
+        final Configuration configuration = project.getConfigurations().maybeCreate(NAME);
+        configuration.getIncoming().beforeResolve(resolvableDependencies -> {
+            String version;
+            try {
+                final String resource = "META-INF/maven/org.apache.meecrowave/meecrowave-gradle-plugin/pom.properties";
+                try (final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource)) {
+                    final Properties p = new Properties();
+                    p.load(is);
+                    version = p.getProperty("version");
+                }
+            } catch (final IOException e) {
+                throw new IllegalStateException(e);
+            }
+
+            final DependencyHandler dependencyHandler = project.getDependencies();
+            final DependencySet dependencies = configuration.getDependencies();
+            dependencies.add(dependencyHandler.create("org.apache.meecrowave:meecrowave-core:" + version));
+        });
+
+        project.task(new HashMap<String, Object>() {{
+            put("type", MeecrowaveTask.class);
+            put("group", "Embedded Application Server");
+            put("description", "Starts a meecrowave!");
+        }}, NAME);
+    }
+}
diff --git a/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowaveTask.java b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowaveTask.java
new file mode 100644
index 0000000..dd45c93
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/MeecrowaveTask.java
@@ -0,0 +1,1175 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.gradle;
+
+import org.apache.meecrowave.gradle.classloader.FilterGradleClassLoader;
+import org.gradle.api.DefaultTask;
+import org.gradle.api.GradleException;
+import org.gradle.api.Project;
+import org.gradle.api.artifacts.Configuration;
+import org.gradle.api.tasks.Input;
+import org.gradle.api.tasks.Optional;
+import org.gradle.api.tasks.TaskAction;
+
+import java.io.File;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Scanner;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Stream;
+
+import static java.util.Arrays.asList;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toList;
+
+// Note we can nest inputs objects, if you think it is better (jsonb, jsonp, jaxrs etc..) send a mail on the list ;)
+public class MeecrowaveTask extends DefaultTask {
+    private Configuration classpath;
+
+    @Input
+    @Optional
+    private int watcherBouncing;
+
+    @Input
+    @Optional
+    private int httpPort = 8080;
+
+    @Input
+    @Optional
+    private int httpsPort = 8443;
+
+    @Input
+    @Optional
+    private int stopPort = -1;
+
+    @Input
+    @Optional
+    private String host = "localhost";
+
+    @Input
+    @Optional
+    private String dir;
+
+    @Input
+    @Optional
+    private String sharedLibraries;
+
+    @Input
+    @Optional
+    private File serverXml;
+
+    @Input
+    @Optional
+    private boolean keepServerXmlAsThis;
+
+    @Input
+    @Optional
+    private boolean tomcatWrapLoader = false;
+
+    @Input
+    @Optional
+    private Map<String, String> properties;
+
+    @Input
+    @Optional
+    private boolean quickSession = true;
+
+    @Input
+    @Optional
+    private boolean jaxrsLogProviders = false;
+
+    @Input
+    @Optional
+    private boolean useTomcatDefaults = true;
+
+    @Input
+    @Optional
+    private boolean skipHttp;
+
+    @Input
+    @Optional
+    private boolean tomcatNoJmx = true;
+
+    @Input
+    @Optional
+    private boolean injectServletContainerInitializer = true;
+
+    @Input
+    @Optional
+    private boolean ssl;
+
+    @Input
+    @Optional
+    private String keystoreFile;
+
+    @Input
+    @Optional
+    private String keystorePass;
+
+    @Input
+    @Optional
+    private String keystoreType;
+
+    @Input
+    @Optional
+    private String clientAuth;
+
+    @Input
+    @Optional
+    private String keyAlias;
+
+    @Input
+    @Optional
+    private String sslProtocol;
+
+    @Input
+    @Optional
+    private String webXml;
+
+    @Input
+    @Optional
+    private String tomcatFilter;
+
+    @Input
+    @Optional
+    private String loginConfig;
+
+    @Input
+    @Optional
+    private Collection<String> securityConstraints = new LinkedList<>();
+
+    @Input
+    @Optional
+    private Map<String, String> users;
+
+    @Input
+    @Optional
+    private Map<String, String> roles;
+
+    @Input
+    @Optional
+    private Map<String, String> cxfServletParams;
+
+    @Input
+    @Optional
+    private boolean http2;
+
+    @Input
+    @Optional
+    private String tempDir;
+
+    @Input
+    @Optional
+    private boolean webResourceCached;
+
+    @Input
+    @Optional
+    private boolean useLog4j2JulLogManager = System.getProperty("java.util.logging.manager") == null;
+
+    @Input
+    @Optional
+    private String conf;
+
+    @Input
+    @Optional
+    private boolean deleteBaseOnStartup = true;
+
+    @Input
+    @Optional
+    private String jaxrsMapping = "/*";
+
+    @Input
+    @Optional
+    private boolean jaxrsProviderSetup = true;
+
+    @Input
+    @Optional
+    private String jaxrsDefaultProviders;
+
+    @Input
+    @Optional
+    private boolean loggingGlobalSetup = true;
+
+    @Input
+    @Optional
+    private boolean cdiConversation;
+
+    @Input
+    @Optional
+    private boolean skip;
+
+    @Input
+    @Optional
+    private boolean tomcatScanning = true;
+
+    @Input
+    @Optional
+    private boolean tomcatAutoSetup = true;
+
+    @Input
+    @Optional
+    private boolean useShutdownHook = true;
+
+    @Input
+    @Optional
+    private List<File> modules;
+
+    @Input
+    @Optional
+    private Collection<String> applicationScopes = new HashSet<>(asList("compile", "runtime"));
+
+    @Input
+    @Optional
+    private Collection<String> classloaderFilteredPackages;
+
+    @Input
+    @Optional
+    private String context = "";
+
+    @Input
+    @Optional
+    private File webapp;
+
+    @Input
+    @Optional
+    private String jsonpBufferStrategy = "QUEUE";
+
+    @Input
+    @Optional
+    private int jsonpMaxStringLen = 10 * 1024 * 1024;
+
+    @Input
+    @Optional
+    private int jsonpMaxReadBufferLen = 64 * 1024;
+
+    @Input
+    @Optional
+    private int jsonpMaxWriteBufferLen = 64 * 1024;
+
+    @Input
+    @Optional
+    private boolean jsonpSupportsComment = false;
+
+    @Input
+    @Optional
+    private boolean jsonpPrettify = false;
+
+    @Input
+    @Optional
+    private String jsonbEncoding = "UTF-8";
+
+    @Input
+    @Optional
+    private boolean jsonbNulls = false;
+
+    @Input
+    @Optional
+    private boolean jsonbIJson = false;
+
+    @Input
+    @Optional
+    private boolean jsonbPrettify = false;
+
+    @Input
+    @Optional
+    private String jsonbBinaryStrategy;
+
+    @Input
+    @Optional
+    private String jsonbNamingStrategy;
+
+    @Input
+    @Optional
+    private String jsonbOrderStrategy;
+
+    @Input
+    @Optional
+    private String scanningIncludes;
+
+    @Input
+    @Optional
+    private String scanningExcludes;
+
+    @Input
+    @Optional
+    private String scanningPackageIncludes;
+
+    @Input
+    @Optional
+    private String scanningPackageExcludes;
+
+    @Input
+    @Optional
+    private String tomcatAccessLogPattern;
+
+    @Input
+    @Optional
+    private boolean jaxrsAutoActivateBeanValidation = true;
+
+    @Input
+    @Optional
+    private String meecrowaveProperties = "meecrowave.properties";
+
+    @Input
+    @Optional
+    private boolean jaxwsSupportIfAvailable = true;
+
+    @TaskAction
+    public void bake() {
+        fixConfig();
+
+        final Thread thread = Thread.currentThread();
+        final ClassLoader tccl = thread.getContextClassLoader();
+        thread.setContextClassLoader(createLoader(tccl));
+        try {
+            doRun();
+        } finally {
+            thread.setContextClassLoader(tccl);
+        }
+    }
+
+    private void doRun() {
+        final Thread thread = Thread.currentThread();
+        final ClassLoader loader = thread.getContextClassLoader();
+
+        final AtomicBoolean running = new AtomicBoolean(false);
+        Thread hook = null;
+        AutoCloseable container;
+        try {
+            final Class<?> containerClass = loader.loadClass("org.apache.meecrowave.Meecrowave");
+            final Class<?> configClass = loader.loadClass("org.apache.meecrowave.Meecrowave$Builder");
+
+            final Object config = getConfig(configClass);
+
+            running.set(true);
+            container = AutoCloseable.class.cast(containerClass.getConstructor(configClass).newInstance(config));
+
+            final AutoCloseable finalContainer = container;
+            hook = new Thread() {
+                @Override
+                public void run() {
+                    if (running.compareAndSet(true, false)) {
+                        final Thread thread = Thread.currentThread();
+                        final ClassLoader old = thread.getContextClassLoader();
+                        thread.setContextClassLoader(loader);
+                        try {
+                            finalContainer.close();
+                        } catch (final NoClassDefFoundError noClassDefFoundError) {
+                            // debug cause it is too late to shutdown properly so don't pollute logs
+                            getLogger().debug("can't stop Meecrowave", noClassDefFoundError);
+                        } catch (final Exception e) {
+                            getLogger().error("can't stop Meecrowave", e);
+                        } finally {
+                            thread.setContextClassLoader(old);
+                        }
+                    }
+                }
+            };
+            hook.setName("Meecrowave-Embedded-ShutdownHook");
+            Runtime.getRuntime().addShutdownHook(hook);
+
+            containerClass.getMethod("start").invoke(container);
+            final String fixedContext = ofNullable(context).orElse("");
+            if (webapp == null) {
+                containerClass.getMethod("deployClasspath", String.class).invoke(container, fixedContext);
+            } else {
+                containerClass.getMethod("deployWebapp", String.class, File.class).invoke(container, fixedContext, webapp);
+            }
+
+            getLogger().info("Meecrowave started on " + configClass.getMethod("getHost").invoke(config) + ":" + configClass.getMethod("getHttpPort").invoke(config));
+        } catch (final Exception e) {
+            ofNullable(hook).ifPresent(h -> {
+                try {
+                    h.run();
+                } finally {
+                    Runtime.getRuntime().removeShutdownHook(h);
+                }
+            });
+            throw new GradleException(e.getMessage(), e);
+        }
+
+        try {
+            String line;
+            final Scanner scanner = new Scanner(System.in);
+            while ((line = scanner.nextLine()) != null) {
+                final String cmd = line.trim().toLowerCase(Locale.ENGLISH);
+                switch (cmd) {
+                    case "exit":
+                    case "quit":
+                        running.set(false);
+                        try {
+                            hook.run();
+                        } finally {
+                            Runtime.getRuntime().removeShutdownHook(hook);
+                        }
+                        return;
+                    default:
+                        getLogger().warn("Unknown: '" + cmd + "', use 'exit' or 'quit'");
+                }
+            }
+        } catch (final Exception e) {
+            Thread.interrupted();
+        } finally {
+            thread.setContextClassLoader(loader);
+        }
+    }
+
+    private Object getConfig(final Class<?> configClass) throws Exception {
+        final Object config = configClass.newInstance();
+        for (final Field field : MeecrowaveTask.class.getDeclaredFields()) {
+            try {
+                final Field configField = configClass.getDeclaredField(field.getName());
+                if (!configField.getType().equals(field.getType())) {
+                    getLogger().debug("Skipping " + field.getName() + " since type doesnt match");
+                    continue;
+                }
+                if (!field.isAccessible()) {
+                    field.setAccessible(true);
+                }
+
+                final Object value = field.get(this);
+                if (value != null) {
+                    if (!configField.isAccessible()) {
+                        configField.setAccessible(true);
+                    }
+                    configField.set(config, value);
+                    getLogger().debug("using " + field.getName() + " = " + value);
+                }
+            } catch (final NoSuchFieldException nsfe) {
+                // ignored
+            } catch (final Exception e) {
+                getLogger().warn("can't initialize attribute " + field.getName(), e);
+            }
+        }
+
+        if (securityConstraints != null) {
+            configClass.getMethod("setSecurityConstraints", Collection.class).invoke(config, securityConstraints.stream()
+                    .map(item -> {
+                        try {
+                            final Class<?> recipeType = configClass.getClassLoader().loadClass("org.apache.xbean.recipe.ObjectRecipe");
+                            final Class<?> builderType = configClass.getClassLoader().loadClass("org.apache.meecrowave.Meecrowave$SecurityConstaintBuilder");
+                            final Object recipe = recipeType.getConstructor(Class.class).newInstance(builderType);
+                            Stream.of(item.split(";"))
+                                    .map(v -> v.split("="))
+                                    .forEach(v -> {
+                                        try {
+                                            recipe.getClass().getMethod("setProperty", String.class, String.class).invoke(recipe, v[0], v[1]);
+                                        } catch (final NoSuchMethodException | IllegalAccessException e) {
+                                            throw new IllegalStateException(e);
+                                        } catch (final InvocationTargetException e) {
+                                            throw new IllegalStateException(e.getCause());
+                                        }
+                                    });
+                            return recipe.getClass().getMethod("create", ClassLoader.class).invoke(recipe, configClass.getClassLoader());
+                        } catch (final Exception cnfe) {
+                            throw new IllegalArgumentException(item);
+                        }
+                    }).collect(toList()));
+        }
+        ofNullable(loginConfig).ifPresent(lc -> {
+            try {
+                final Class<?> recipeType = configClass.getClassLoader().loadClass("org.apache.xbean.recipe.ObjectRecipe");
+                final Class<?> builderType = configClass.getClassLoader().loadClass("org.apache.meecrowave.Meecrowave$LoginConfigBuilder");
+                final Object recipe = recipeType.getConstructor(Class.class).newInstance(builderType);
+                Stream.of(loginConfig.split(";"))
+                        .map(v -> v.split("="))
+                        .forEach(v -> {
+                            try {
+                                recipe.getClass().getMethod("setProperty", String.class, String.class).invoke(recipe, v[0], v[1]);
+                            } catch (final NoSuchMethodException | IllegalAccessException e) {
+                                throw new IllegalStateException(e);
+                            } catch (final InvocationTargetException e) {
+                                throw new IllegalStateException(e.getCause());
+                            }
+                        });
+                configClass.getMethod("setLoginConfig", Collection.class)
+                        .invoke(config, recipe.getClass().getMethod("create", ClassLoader.class).invoke(recipe, configClass.getClassLoader()));
+            } catch (final Exception cnfe) {
+                throw new IllegalArgumentException(loginConfig);
+            }
+        });
+
+        return config;
+    }
+
+    private ClassLoader createLoader(final ClassLoader parent) {
+        final Collection<URL> urls = new LinkedHashSet<>(64);
+
+        addFiles(modules, urls);
+
+        for (final Configuration cc : getProject().getConfigurations()) {
+            if (applicationScopes.contains(cc.getName())) {
+                addFiles(cc.getFiles(), urls);
+            }
+        }
+
+        addFiles(classpath.getFiles(), urls);
+
+        // use JVM loader to avoid the noise of gradle and its plugins
+        return new URLClassLoader(urls.toArray(new URL[urls.size()]), new FilterGradleClassLoader(parent, classloaderFilteredPackages));
+    }
+
+    private void addFiles(final Collection<File> files, final Collection<URL> urls) {
+        if (files == null || files.isEmpty()) {
+            return;
+        }
+        for (final File f : files) {
+            final String name = f.getName();
+            if (name.startsWith("slf4j-api") || name.startsWith("slf4j-jdk14")) {
+                continue; // use gradle
+            }
+            try {
+                urls.add(f.toURI().toURL());
+            } catch (final MalformedURLException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }
+    }
+
+    private void fixConfig() {
+        final Project project = getProject();
+
+        // defaults
+        if (classpath == null) {
+            classpath = project.getConfigurations().getByName(MeecrowavePlugin.NAME);
+        }
+
+        if (dir == null) {
+            dir = new File(project.getBuildDir(), "meecrowave/run").getAbsolutePath();
+        }
+
+        // extension override
+        final MeecrowaveExtension extension = MeecrowaveExtension.class.cast(project.getExtensions().findByName(MeecrowavePlugin.NAME));
+        if (extension != null) {
+            for (final Field f : MeecrowaveTask.class.getDeclaredFields()) {
+                if (f.isAnnotationPresent(Input.class)) {
+                    try {
+                        final Field extField = MeecrowaveExtension.class.getDeclaredField(f.getName());
+                        if (!extField.isAccessible()) {
+                            extField.setAccessible(true);
+                        }
+                        final Object val = extField.get(extension);
+                        if (val != null) {
+                            if (!f.isAccessible()) {
+                                f.setAccessible(true);
+                            }
+                            f.set(this, val);
+                        }
+                    } catch (final IllegalAccessException | NoSuchFieldException e) {
+                        getLogger().debug("No field " + f.getName() + " in " + extension, e);
+                    }
+                }
+            }
+        }
+    }
+
+    public Configuration getClasspath() {
+        return classpath;
+    }
+
+    public void setClasspath(final Configuration classpath) {
+        this.classpath = classpath;
+    }
+
+    public int getHttpPort() {
+        return httpPort;
+    }
+
+    public void setHttpPort(final int httpPort) {
+        this.httpPort = httpPort;
+    }
+
+    public int getHttpsPort() {
+        return httpsPort;
+    }
+
+    public void setHttpsPort(final int httpsPort) {
+        this.httpsPort = httpsPort;
+    }
+
+    public int getStopPort() {
+        return stopPort;
+    }
+
+    public void setStopPort(final int stopPort) {
+        this.stopPort = stopPort;
+    }
+
+    public String getHost() {
+        return host;
+    }
+
+    public void setHost(final String host) {
+        this.host = host;
+    }
+
+    public String getDir() {
+        return dir;
+    }
+
+    public void setDir(final String dir) {
+        this.dir = dir;
+    }
+
+    public File getServerXml() {
+        return serverXml;
+    }
+
+    public void setServerXml(final File serverXml) {
+        this.serverXml = serverXml;
+    }
+
+    public boolean isKeepServerXmlAsThis() {
+        return keepServerXmlAsThis;
+    }
+
+    public void setKeepServerXmlAsThis(final boolean keepServerXmlAsThis) {
+        this.keepServerXmlAsThis = keepServerXmlAsThis;
+    }
+
+    public Map<String, String> getProperties() {
+        return properties;
+    }
+
+    public void setProperties(final Map<String, String> properties) {
+        this.properties = properties;
+    }
+
+    public boolean isQuickSession() {
+        return quickSession;
+    }
+
+    public void setQuickSession(final boolean quickSession) {
+        this.quickSession = quickSession;
+    }
+
+    public boolean isSkipHttp() {
+        return skipHttp;
+    }
+
+    public void setSkipHttp(final boolean skipHttp) {
+        this.skipHttp = skipHttp;
+    }
+
+    public boolean isSsl() {
+        return ssl;
+    }
+
+    public void setSsl(final boolean ssl) {
+        this.ssl = ssl;
+    }
+
+    public String getKeystoreFile() {
+        return keystoreFile;
+    }
+
+    public void setKeystoreFile(final String keystoreFile) {
+        this.keystoreFile = keystoreFile;
+    }
+
+    public String getKeystorePass() {
+        return keystorePass;
+    }
+
+    public void setKeystorePass(final String keystorePass) {
+        this.keystorePass = keystorePass;
+    }
+
+    public String getKeystoreType() {
+        return keystoreType;
+    }
+
+    public void setKeystoreType(final String keystoreType) {
+        this.keystoreType = keystoreType;
+    }
+
+    public String getClientAuth() {
+        return clientAuth;
+    }
+
+    public void setClientAuth(final String clientAuth) {
+        this.clientAuth = clientAuth;
+    }
+
+    public String getKeyAlias() {
+        return keyAlias;
+    }
+
+    public void setKeyAlias(final String keyAlias) {
+        this.keyAlias = keyAlias;
+    }
+
+    public String getSslProtocol() {
+        return sslProtocol;
+    }
+
+    public void setSslProtocol(final String sslProtocol) {
+        this.sslProtocol = sslProtocol;
+    }
+
+    public String getWebXml() {
+        return webXml;
+    }
+
+    public void setWebXml(final String webXml) {
+        this.webXml = webXml;
+    }
+
+    public String getLoginConfig() {
+        return loginConfig;
+    }
+
+    public void setLoginConfig(final String loginConfig) {
+        this.loginConfig = loginConfig;
+    }
+
+    public Collection<String> getSecurityConstraints() {
+        return securityConstraints;
+    }
+
+    public void setSecurityConstraints(final Collection<String> securityConstraints) {
+        this.securityConstraints = securityConstraints;
+    }
+
+    public Map<String, String> getUsers() {
+        return users;
+    }
+
+    public void setUsers(final Map<String, String> users) {
+        this.users = users;
+    }
+
+    public Map<String, String> getRoles() {
+        return roles;
+    }
+
+    public void setRoles(final Map<String, String> roles) {
+        this.roles = roles;
+    }
+
+    public Map<String, String> getCxfServletParams() {
+        return cxfServletParams;
+    }
+
+    public void setCxfServletParams(final Map<String, String> cxfServletParams) {
+        this.cxfServletParams = cxfServletParams;
+    }
+
+    public boolean isHttp2() {
+        return http2;
+    }
+
+    public void setHttp2(final boolean http2) {
+        this.http2 = http2;
+    }
+
+    public String getTempDir() {
+        return tempDir;
+    }
+
+    public void setTempDir(final String tempDir) {
+        this.tempDir = tempDir;
+    }
+
+    public boolean isWebResourceCached() {
+        return webResourceCached;
+    }
+
+    public void setWebResourceCached(final boolean webResourceCached) {
+        this.webResourceCached = webResourceCached;
+    }
+
+    public String getConf() {
+        return conf;
+    }
+
+    public void setConf(final String conf) {
+        this.conf = conf;
+    }
+
+    public boolean isDeleteBaseOnStartup() {
+        return deleteBaseOnStartup;
+    }
+
+    public void setDeleteBaseOnStartup(final boolean deleteBaseOnStartup) {
+        this.deleteBaseOnStartup = deleteBaseOnStartup;
+    }
+
+    public String getJaxrsMapping() {
+        return jaxrsMapping;
+    }
+
+    public void setJaxrsMapping(final String jaxrsMapping) {
+        this.jaxrsMapping = jaxrsMapping;
+    }
+
+    public boolean isJaxrsProviderSetup() {
+        return jaxrsProviderSetup;
+    }
+
+    public void setJaxrsProviderSetup(final boolean jaxrsProviderSetup) {
+        this.jaxrsProviderSetup = jaxrsProviderSetup;
+    }
+
+    public boolean isLoggingGlobalSetup() {
+        return loggingGlobalSetup;
+    }
+
+    public void setLoggingGlobalSetup(final boolean loggingGlobalSetup) {
+        this.loggingGlobalSetup = loggingGlobalSetup;
+    }
+
+    public boolean isCdiConversation() {
+        return cdiConversation;
+    }
+
+    public void setCdiConversation(final boolean cdiConversation) {
+        this.cdiConversation = cdiConversation;
+    }
+
+    public boolean isSkip() {
+        return skip;
+    }
+
+    public void setSkip(final boolean skip) {
+        this.skip = skip;
+    }
+
+    public boolean isTomcatScanning() {
+        return tomcatScanning;
+    }
+
+    public void setTomcatScanning(final boolean tomcatScanning) {
+        this.tomcatScanning = tomcatScanning;
+    }
+
+    public List<File> getModules() {
+        return modules;
+    }
+
+    public void setModules(final List<File> modules) {
+        this.modules = modules;
+    }
+
+    public Collection<String> getApplicationScopes() {
+        return applicationScopes;
+    }
+
+    public void setApplicationScopes(final Collection<String> applicationScopes) {
+        this.applicationScopes = applicationScopes;
+    }
+
+    public Collection<String> getClassloaderFilteredPackages() {
+        return classloaderFilteredPackages;
+    }
+
+    public void setClassloaderFilteredPackages(final Collection<String> classloaderFilteredPackages) {
+        this.classloaderFilteredPackages = classloaderFilteredPackages;
+    }
+
+    public String getContext() {
+        return context;
+    }
+
+    public void setContext(final String context) {
+        this.context = context;
+    }
+
+    public File getWebapp() {
+        return webapp;
+    }
+
+    public void setWebapp(final File webapp) {
+        this.webapp = webapp;
+    }
+
+    public boolean isTomcatAutoSetup() {
+        return tomcatAutoSetup;
+    }
+
+    public void setTomcatAutoSetup(final boolean tomcatAutoSetup) {
+        this.tomcatAutoSetup = tomcatAutoSetup;
+    }
+
+    public boolean isUseShutdownHook() {
+        return useShutdownHook;
+    }
+
+    public void setUseShutdownHook(final boolean useShutdownHook) {
+        this.useShutdownHook = useShutdownHook;
+    }
+
+    public String getTomcatFilter() {
+        return tomcatFilter;
+    }
+
+    public void setTomcatFilter(final String tomcatFilter) {
+        this.tomcatFilter = tomcatFilter;
+    }
+
+    public boolean isUseTomcatDefaults() {
+        return useTomcatDefaults;
+    }
+
+    public void setUseTomcatDefaults(final boolean useTomcatDefaults) {
+        this.useTomcatDefaults = useTomcatDefaults;
+    }
+
+    public boolean isJaxrsLogProviders() {
+        return jaxrsLogProviders;
+    }
+
+    public void setJaxrsLogProviders(final boolean jaxrsLogProviders) {
+        this.jaxrsLogProviders = jaxrsLogProviders;
+    }
+
+    public boolean isTomcatWrapLoader() {
+        return tomcatWrapLoader;
+    }
+
+    public void setTomcatWrapLoader(final boolean tomcatWrapLoader) {
+        this.tomcatWrapLoader = tomcatWrapLoader;
+    }
+
+    public String getJaxrsDefaultProviders() {
+        return jaxrsDefaultProviders;
+    }
+
+    public void setJaxrsDefaultProviders(final String jaxrsDefaultProviders) {
+        this.jaxrsDefaultProviders = jaxrsDefaultProviders;
+    }
+
+    public String getSharedLibraries() {
+        return sharedLibraries;
+    }
+
+    public void setSharedLibraries(final String sharedLibraries) {
+        this.sharedLibraries = sharedLibraries;
+    }
+
+    public boolean isUseLog4j2JulLogManager() {
+        return useLog4j2JulLogManager;
+    }
+
+    public void setUseLog4j2JulLogManager(final boolean useLog4j2JulLogManager) {
+        this.useLog4j2JulLogManager = useLog4j2JulLogManager;
+    }
+
+    public String getScanningIncludes() {
+        return scanningIncludes;
+    }
+
+    public void setScanningIncludes(final String scanningIncludes) {
+        this.scanningIncludes = scanningIncludes;
+    }
+
+    public String getScanningExcludes() {
+        return scanningExcludes;
+    }
+
+    public void setScanningExcludes(final String scanningExcludes) {
+        this.scanningExcludes = scanningExcludes;
+    }
+
+    public String getJsonpBufferStrategy() {
+        return jsonpBufferStrategy;
+    }
+
+    public void setJsonpBufferStrategy(final String jsonpBufferStrategy) {
+        this.jsonpBufferStrategy = jsonpBufferStrategy;
+    }
+
+    public int getJsonpMaxStringLen() {
+        return jsonpMaxStringLen;
+    }
+
+    public void setJsonpMaxStringLen(final int jsonpMaxStringLen) {
+        this.jsonpMaxStringLen = jsonpMaxStringLen;
+    }
+
+    public int getJsonpMaxReadBufferLen() {
+        return jsonpMaxReadBufferLen;
+    }
+
+    public void setJsonpMaxReadBufferLen(final int jsonpMaxReadBufferLen) {
+        this.jsonpMaxReadBufferLen = jsonpMaxReadBufferLen;
+    }
+
+    public int getJsonpMaxWriteBufferLen() {
+        return jsonpMaxWriteBufferLen;
+    }
+
+    public void setJsonpMaxWriteBufferLen(final int jsonpMaxWriteBufferLen) {
+        this.jsonpMaxWriteBufferLen = jsonpMaxWriteBufferLen;
+    }
+
+    public boolean isJsonpSupportsComment() {
+        return jsonpSupportsComment;
+    }
+
+    public void setJsonpSupportsComment(final boolean jsonpSupportsComment) {
+        this.jsonpSupportsComment = jsonpSupportsComment;
+    }
+
+    public boolean isJsonpPrettify() {
+        return jsonpPrettify;
+    }
+
+    public void setJsonpPrettify(final boolean jsonpPrettify) {
+        this.jsonpPrettify = jsonpPrettify;
+    }
+
+    public String getJsonbEncoding() {
+        return jsonbEncoding;
+    }
+
+    public void setJsonbEncoding(final String jsonbEncoding) {
+        this.jsonbEncoding = jsonbEncoding;
+    }
+
+    public boolean isJsonbNulls() {
+        return jsonbNulls;
+    }
+
+    public void setJsonbNulls(final boolean jsonbNulls) {
+        this.jsonbNulls = jsonbNulls;
+    }
+
+    public boolean isJsonbIJson() {
+        return jsonbIJson;
+    }
+
+    public void setJsonbIJson(final boolean jsonbIJson) {
+        this.jsonbIJson = jsonbIJson;
+    }
+
+    public boolean isJsonbPrettify() {
+        return jsonbPrettify;
+    }
+
+    public void setJsonbPrettify(final boolean jsonbPrettify) {
+        this.jsonbPrettify = jsonbPrettify;
+    }
+
+    public String getJsonbBinaryStrategy() {
+        return jsonbBinaryStrategy;
+    }
+
+    public void setJsonbBinaryStrategy(final String jsonbBinaryStrategy) {
+        this.jsonbBinaryStrategy = jsonbBinaryStrategy;
+    }
+
+    public String getJsonbNamingStrategy() {
+        return jsonbNamingStrategy;
+    }
+
+    public void setJsonbNamingStrategy(final String jsonbNamingStrategy) {
+        this.jsonbNamingStrategy = jsonbNamingStrategy;
+    }
+
+    public String getJsonbOrderStrategy() {
+        return jsonbOrderStrategy;
+    }
+
+    public void setJsonbOrderStrategy(final String jsonbOrderStrategy) {
+        this.jsonbOrderStrategy = jsonbOrderStrategy;
+    }
+
+    public String getScanningPackageIncludes() {
+        return scanningPackageIncludes;
+    }
+
+    public void setScanningPackageIncludes(final String scanningPackageIncludes) {
+        this.scanningPackageIncludes = scanningPackageIncludes;
+    }
+
+    public String getScanningPackageExcludes() {
+        return scanningPackageExcludes;
+    }
+
+    public void setScanningPackageExcludes(final String scanningPackageExcludes) {
+        this.scanningPackageExcludes = scanningPackageExcludes;
+    }
+
+    public boolean isTomcatNoJmx() {
+        return tomcatNoJmx;
+    }
+
+    public void setTomcatNoJmx(final boolean tomcatNoJmx) {
+        this.tomcatNoJmx = tomcatNoJmx;
+    }
+
+    public boolean isInjectServletContainerInitializer() {
+        return injectServletContainerInitializer;
+    }
+
+    public void setInjectServletContainerInitializer(final boolean injectServletContainerInitializer) {
+        this.injectServletContainerInitializer = injectServletContainerInitializer;
+    }
+
+    public String getTomcatAccessLogPattern() {
+        return tomcatAccessLogPattern;
+    }
+
+    public void setTomcatAccessLogPattern(final String tomcatAccessLogPattern) {
+        this.tomcatAccessLogPattern = tomcatAccessLogPattern;
+    }
+
+    public boolean isJaxrsAutoActivateBeanValidation() {
+        return jaxrsAutoActivateBeanValidation;
+    }
+
+    public void setJaxrsAutoActivateBeanValidation(final boolean jaxrsAutoActivateBeanValidation) {
+        this.jaxrsAutoActivateBeanValidation = jaxrsAutoActivateBeanValidation;
+    }
+
+    public String getMeecrowaveProperties() {
+        return meecrowaveProperties;
+    }
+
+    public void setMeecrowaveProperties(final String meecrowaveProperties) {
+        this.meecrowaveProperties = meecrowaveProperties;
+    }
+
+    public int getWatcherBouncing() {
+        return watcherBouncing;
+    }
+
+    public void setWatcherBouncing(final int watcherBouncing) {
+        this.watcherBouncing = watcherBouncing;
+    }
+
+    public boolean isJaxwsSupportIfAvailable() {
+        return jaxwsSupportIfAvailable;
+    }
+
+    public void setJaxwsSupportIfAvailable(final boolean jaxwsSupportIfAvailable) {
+        this.jaxwsSupportIfAvailable = jaxwsSupportIfAvailable;
+    }
+}
diff --git a/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/classloader/FilterGradleClassLoader.java b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/classloader/FilterGradleClassLoader.java
new file mode 100644
index 0000000..28c1d72
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/src/main/java/org/apache/meecrowave/gradle/classloader/FilterGradleClassLoader.java
@@ -0,0 +1,142 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *   Unless required by applicable law or agreed to in writing, software
+ *   distributed under the License is distributed on an "AS IS" BASIS,
+ *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *   See the License for the specific language governing permissions and
+ *   limitations under the License.
+ */
+package org.apache.meecrowave.gradle.classloader;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Enumeration;
+
+import static java.util.Collections.emptyEnumeration;
+
+public class FilterGradleClassLoader extends ClassLoader {
+    private final ClassLoader delegate;
+    private final Collection<String> filtered;
+
+    public FilterGradleClassLoader(final ClassLoader gradle, final Collection<String> filtered) {
+        super(gradle.getParent());
+        this.delegate = gradle;
+        this.filtered = filtered;
+    }
+
+    @Override
+    public Class<?> loadClass(final String name) throws ClassNotFoundException {
+        checkClass(name);
+        return delegate.loadClass(name);
+    }
+
+    @Override
+    public Class<?> loadClass(final String name, final boolean resolve) throws ClassNotFoundException {
+        return loadClass(name);
+    }
+
+    @Override
+    public URL getResource(final String name) {
+        if (!checkResource(name)) {
+            return null;
+        }
+        return delegate.getResource(name);
+    }
+
+    @Override
+    public Enumeration<URL> getResources(final String name) throws IOException {
+        final Enumeration<URL> resources = delegate.getResources(name);
+        if (!checkResource(name)) {
+            return emptyEnumeration();
+        }
+        return resources;
+    }
+
+    @Override
+    public InputStream getResourceAsStream(final String name) {
+        if (!checkResource(name)) {
+            return null;
+        }
+        return delegate.getResourceAsStream(name);
+    }
+
+    private void checkClass(final String name) throws ClassNotFoundException { // let slf4j+gradle go to reuse it
+        if (name != null && (
+                name.startsWith("aQute") ||
+                        name.startsWith("bsh") ||
+                        name.startsWith("com.amazon") ||
+                        name.startsWith("com.beust") ||
+                        name.startsWith("com.esot") ||
+                        name.startsWith("com.google") ||
+                        name.startsWith("com.jackson") ||
+                        name.startsWith("com.jcraft") ||
+                        name.startsWith("com.tonixsystems") ||
+                        name.startsWith("javax.el") ||
+                        name.startsWith("javax.inject") ||
+                        name.startsWith("javax.servlet") ||
+                        name.startsWith("jcifs.") ||
+                        name.startsWith("junit.") ||
+                        name.startsWith("groovy") ||
+                        name.startsWith("mozilla.") ||
+                        name.startsWith("net.jcip.") ||
+                        name.startsWith("net.ruby") ||
+                        name.startsWith("org.apache.") ||
+                        name.startsWith("org.bouncycastle.") ||
+                        name.startsWith("org.codehaus.") ||
+                        name.startsWith("org.cyber") ||
+                        name.startsWith("org.dom4j.") ||
+                        name.startsWith("org.eclipse.") ||
+                        name.startsWith("org.fusesource.") ||
+                        name.startsWith("org.hamcrest.") ||
+                        name.startsWith("org.jaxen.") ||
+                        name.startsWith("org.mortbay.") ||
+                        name.startsWith("org.mozilla.") ||
+                        name.startsWith("org.objectweb.") ||
+                        name.startsWith("org.objenesis.") ||
+                        name.startsWith("org.osgi.") ||
+                        name.startsWith("org.simpleframework.") ||
+                        name.startsWith("org.sonar.") ||
+                        name.startsWith("org.sonatype.") ||
+                        name.startsWith("org.testng.") ||
+                        name.startsWith("org.yaml.") ||
+                        isForbiddenGradleClass(name) ||
+                        isFiltered(name)
+        )) {
+            throw new ClassNotFoundException();
+        }
+    }
+
+    private boolean isFiltered(final String name) {
+        if (filtered == null || name == null) {
+            return false;
+        }
+        for (final String pck : filtered) {
+            if (name.startsWith(pck)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isForbiddenGradleClass(final String name) { // we need logging classes but we don't want to scan gradle
+        return name.startsWith("org.gradle.initialization") || name.startsWith("org.gradle.launcher")
+                || name.startsWith("org.gradle.execution") || name.startsWith("org.gradle.internal")
+                || name.startsWith("org.gradle.tooling") || name.startsWith("org.gradle.api.internal.tasks")
+                || name.startsWith("org.gradle.util") || name.startsWith("org.gradle.wrapper");
+    }
+
+    private boolean checkResource(final String name) {
+        return name != null && !name.startsWith("META-INF/services/com.fasterxml");
+    }
+}
+
diff --git a/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..442fa94
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,5 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.apache.microwave.microwave.properties b/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.apache.microwave.microwave.properties
new file mode 100644
index 0000000..8dedab1
--- /dev/null
+++ b/trunk/meecrowave-gradle-plugin/src/main/resources/META-INF/gradle-plugins/org.apache.microwave.microwave.properties
@@ -0,0 +1,17 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+implementation-class=org.apache.meecrowave.gradle.MeecrowavePlugin
diff --git a/trunk/meecrowave-jolokia/pom.xml b/trunk/meecrowave-jolokia/pom.xml
new file mode 100644
index 0000000..96c0dec
--- /dev/null
+++ b/trunk/meecrowave-jolokia/pom.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-jolokia</artifactId>
+  <name>Meecrowave :: Jolokia</name>
+
+  <properties>
+    <jolokia.version>2.0.0-M3</jolokia.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.tomcat</groupId>
+      <artifactId>tomcat-servlet-api</artifactId>
+      <version>${tomcat.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <!-- <jolokia.version>2.0.0-M3</jolokia.version>
+    <dependency>
+      <groupId>org.jolokia</groupId>
+      <artifactId>jolokia-server-core</artifactId>
+      <version>${jolokia.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jolokia</groupId>
+      <artifactId>jolokia-service-serializer</artifactId>
+      <version>${jolokia.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.jolokia</groupId>
+      <artifactId>jolokia-service-jmx</artifactId>
+      <version>${jolokia.version}</version>
+    </dependency>
+    -->
+
+    <dependency> <!-- spring boot module has web resources embedded, reusing that part -->
+      <groupId>io.hawt</groupId>
+      <artifactId>hawtio-springboot</artifactId>
+      <version>1.4.68</version>
+      <optional>true</optional>
+      <exclusions>
+        <exclusion>
+          <groupId>org.springframework.boot</groupId>
+          <artifactId>spring-boot-starter-web</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <version>${log4j2.version}</version>
+      <optional>true</optional>
+    </dependency>
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+      <version>${commons-cli.version}</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-junit</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+      <version>2.5</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/trunk/meecrowave-jolokia/src/main/java/org/apache/meecrowave/jolokia/HawtioInitializer.java b/trunk/meecrowave-jolokia/src/main/java/org/apache/meecrowave/jolokia/HawtioInitializer.java
new file mode 100644
index 0000000..862f676
--- /dev/null
+++ b/trunk/meecrowave-jolokia/src/main/java/org/apache/meecrowave/jolokia/HawtioInitializer.java
@@ -0,0 +1,339 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jolokia;
+
+import io.hawt.HawtioContextListener;
+import io.hawt.web.AuthenticationFilter;
+import io.hawt.web.CORSFilter;
+import io.hawt.web.CacheHeadersFilter;
+import io.hawt.web.ContextFormatterServlet;
+import io.hawt.web.ExportContextServlet;
+import io.hawt.web.GitServlet;
+import io.hawt.web.JavaDocServlet;
+import io.hawt.web.JolokiaConfiguredAgentServlet;
+import io.hawt.web.LoginServlet;
+import io.hawt.web.LogoutServlet;
+import io.hawt.web.PluginServlet;
+import io.hawt.web.ProxyServlet;
+import io.hawt.web.RedirectFilter;
+import io.hawt.web.SessionExpiryFilter;
+import io.hawt.web.UploadServlet;
+import io.hawt.web.UserServlet;
+import io.hawt.web.XFrameOptionsFilter;
+import io.hawt.web.keycloak.KeycloakServlet;
+import org.apache.catalina.Globals;
+import org.apache.catalina.WebResourceRoot;
+import org.apache.catalina.realm.GenericPrincipal;
+import org.apache.catalina.webresources.JarResourceSet;
+import org.apache.commons.fileupload.servlet.FileCleanerCleanup;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.runner.Cli;
+import org.apache.meecrowave.runner.cli.CliOption;
+
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.security.auth.Subject;
+import javax.security.auth.callback.Callback;
+import javax.security.auth.callback.CallbackHandler;
+import javax.security.auth.callback.NameCallback;
+import javax.security.auth.callback.PasswordCallback;
+import javax.security.auth.callback.UnsupportedCallbackException;
+import javax.security.auth.login.AppConfigurationEntry;
+import javax.security.auth.login.Configuration;
+import javax.security.auth.login.LoginException;
+import javax.security.auth.spi.LoginModule;
+import javax.servlet.DispatcherType;
+import javax.servlet.FilterRegistration;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.security.Principal;
+import java.security.Security;
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import static java.util.Optional.ofNullable;
+
+public class HawtioInitializer implements ServletContainerInitializer {
+    @Override
+    public void onStartup(final Set<Class<?>> set, final ServletContext servletContext) throws ServletException {
+        try {
+            servletContext.getClassLoader().loadClass("io.hawt.web.UserServlet");
+        } catch (final ClassNotFoundException e) {
+            servletContext.log("Hawt.io not available, skipping");
+            return;
+        }
+        Delegate.doSetup(servletContext);
+    }
+
+    private static class Delegate {
+        private Delegate() {
+            // no-op
+        }
+
+        private static void doSetup(final ServletContext servletContext) {
+            final Meecrowave.Builder config = Meecrowave.Builder.class.cast(servletContext.getAttribute("meecrowave.configuration"));
+            final HawtioConfiguration configuration = config.getExtension(HawtioConfiguration.class);
+            final JolokiaInitializer.JolokiaConfiguration jolokia = config.getExtension(JolokiaInitializer.JolokiaConfiguration.class);
+            if (!configuration.isActive()) {
+                return;
+            }
+
+            doSetupJaas(configuration, servletContext);
+
+            final String mapping = ofNullable(configuration.getMapping()).orElse("/hawtio/");
+
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-user", UserServlet.class);
+                servlet.addMapping(mapping + "user/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-proxy", ProxyServlet.class);
+                servlet.addMapping(mapping + "proxy/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-file-upload", UploadServlet.class);
+                servlet.addMapping(mapping + "file-upload/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-login", LoginServlet.class);
+                servlet.addMapping(mapping + "auth/login/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-logout", LogoutServlet.class);
+                servlet.addMapping(mapping + "auth/logout/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-keycloak", KeycloakServlet.class);
+                servlet.addMapping(mapping + "keycloak/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-exportContext", ExportContextServlet.class);
+                servlet.addMapping(mapping + "exportContext/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-javadoc", JavaDocServlet.class);
+                servlet.addMapping(mapping + "javadoc/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-plugin", PluginServlet.class);
+                servlet.addMapping(mapping + "plugin/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-contextFormatter", ContextFormatterServlet.class);
+                servlet.addMapping(mapping + "contextFormatter/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-git", GitServlet.class);
+                servlet.addMapping(mapping + "git/*");
+            }
+            {
+                final ServletRegistration.Dynamic servlet = servletContext.addServlet("hawtio-jolokia", JolokiaConfiguredAgentServlet.class);
+                servlet.setInitParameter("mbeanQualifier", "qualifier=hawtio");
+                servlet.setInitParameter("includeStackTrace", "false");
+                servlet.setInitParameter("restrictorClass", "io.hawt.web.RBACRestrictor");
+                servlet.addMapping(mapping + "jolokia/*");
+            }
+            {
+                final WebResourceRoot root = WebResourceRoot.class.cast(servletContext.getAttribute(Globals.RESOURCES_ATTR));
+                final String url = servletContext.getClassLoader().getResource("static/hawtio").toExternalForm();
+                final int sep = url.lastIndexOf("!/");
+                String jar = url;
+                if (jar.startsWith("jar:")) {
+                    jar = url.substring("jar:".length(), sep);
+                }
+                if (jar.startsWith("file:")) {
+                    jar = jar.substring("file:".length());
+                }
+                root.addPostResources(new JarResourceSet(root, mapping, jar, "/static/hawtio/"));
+            }
+
+            servletContext.addListener(HawtioContextListener.class);
+            servletContext.addListener(FileCleanerCleanup.class);
+
+            {
+                final FilterRegistration.Dynamic filter = servletContext.addFilter("hawtio-redirect", RedirectFilter.class);
+                filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, mapping + "*");
+            }
+            {
+                final FilterRegistration.Dynamic filter = servletContext.addFilter("hawtio-cacheheaders", CacheHeadersFilter.class);
+                filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, mapping + "*");
+            }
+            {
+                final FilterRegistration.Dynamic filter = servletContext.addFilter("hawtio-cors", CORSFilter.class);
+                filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, mapping + "*");
+            }
+            {
+                final FilterRegistration.Dynamic filter = servletContext.addFilter("hawtio-xframe", XFrameOptionsFilter.class);
+                filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, mapping + "*");
+            }
+            {
+                final FilterRegistration.Dynamic filter = servletContext.addFilter("hawtio-sessionexpiry", SessionExpiryFilter.class);
+                filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false, mapping + "*");
+            }
+            {
+                final FilterRegistration.Dynamic filter = servletContext.addFilter("hawtio-authentication", AuthenticationFilter.class);
+                filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), false,
+                        mapping + "auth/*", mapping + "upload/*", mapping + "javadoc/*", mapping + "jolokia/*",
+                        ofNullable(jolokia.getMapping()).orElse("/jolokia/*"));
+            }
+
+            servletContext.log("Installed Hawt.io on " + mapping);
+        }
+
+        private static void doSetupJaas(final HawtioConfiguration configuration, final ServletContext servletContext) {
+            if (!configuration.isJaas()) {
+                return;
+            }
+            final String key = "login.configuration.provider";
+            final String val = Security.getProperty(key);
+            Security.setProperty(key, EmbeddedConfiguration.class.getName());
+            servletContext.addListener(new ServletContextListener() {
+                @Override
+                public void contextDestroyed(final ServletContextEvent sce) {
+                    Security.setProperty(key, val == null ? "sun.security.provider.ConfigFile" : val);
+                }
+            });
+        }
+    }
+
+    public static class EmbeddedConfiguration extends Configuration {
+        private final AppConfigurationEntry[] entries = new AppConfigurationEntry[]{
+                new AppConfigurationEntry(EmbeddedLoginModule.class.getName(), AppConfigurationEntry.LoginModuleControlFlag.REQUIRED, new HashMap<>())
+        };
+
+        @Override
+        public AppConfigurationEntry[] getAppConfigurationEntry(final String name) {
+            return "karaf".equals(name) ? entries : null;
+        }
+    }
+
+    public static class EmbeddedLoginModule implements LoginModule {
+        private Subject subject;
+        private CallbackHandler callbackHandler;
+
+        private Principal principal;
+
+        @Override
+        public void initialize(final Subject subject, final CallbackHandler callbackHandler,
+                               final Map<String, ?> sharedState, final Map<String, ?> options) {
+            this.subject = subject;
+            this.callbackHandler = callbackHandler;
+        }
+
+        @Override
+        public boolean login() throws LoginException {
+            final Callback[] callbacks = new Callback[2];
+            callbacks[0] = new NameCallback("Username: ");
+            callbacks[1] = new PasswordCallback("Password: ", false);
+            try {
+                callbackHandler.handle(callbacks);
+            } catch (IOException | UnsupportedCallbackException e) {
+                throw new LoginException(e.toString());
+            }
+
+            final BeanManager beanManager = CDI.current().getBeanManager();
+            final HttpServletRequest request =
+                    HttpServletRequest.class.cast(
+                            beanManager.getReference(
+                                    beanManager.resolve(beanManager.getBeans(HttpServletRequest.class)),
+                                    HttpServletRequest.class,
+                                    beanManager.createCreationalContext(null)));
+
+            try {
+                request.login(NameCallback.class.cast(callbacks[0]).getName(), new String(PasswordCallback.class.cast(callbacks[1]).getPassword()));
+            } catch (final ServletException e) {
+                throw new LoginException(e.getMessage());
+            }
+
+            principal = request.getUserPrincipal();
+
+            return principal != null;
+        }
+
+        @Override
+        public boolean commit() throws LoginException {
+            if (!subject.getPrincipals().contains(principal)) {
+                subject.getPrincipals().add(principal);
+                if (GenericPrincipal.class.isInstance(principal)) {
+                    final String roles[] = GenericPrincipal.class.cast(principal).getRoles();
+                    for (final String role : roles) {
+                        subject.getPrincipals().add(new GenericPrincipal(role, null, null));
+                    }
+
+                }
+            }
+            return true;
+        }
+
+        @Override
+        public boolean abort() throws LoginException {
+            principal = null;
+            return true;
+        }
+
+        @Override
+        public boolean logout() throws LoginException {
+            subject.getPrincipals().remove(principal);
+            return true;
+        }
+    }
+
+    public static class HawtioConfiguration implements Cli.Options {
+        @CliOption(name = "hawtio-mapping", description = "Hawt.io base endpoint")
+        private String mapping;
+
+        @CliOption(name = "hawtio-active", description = "Should Hawt.io be deployed if present")
+        private boolean active = true;
+
+        @CliOption(name = "hawtio-meecrowave-jaas", description = "Should meecrowave setup jaas")
+        private boolean jaas = true;
+
+        public boolean isJaas() {
+            return jaas;
+        }
+
+        public void setJaas(final boolean jaas) {
+            this.jaas = jaas;
+        }
+
+        public boolean isActive() {
+            return active;
+        }
+
+        public void setActive(final boolean active) {
+            this.active = active;
+        }
+
+        public String getMapping() {
+            return mapping;
+        }
+
+        public void setMapping(final String mapping) {
+            this.mapping = mapping;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jolokia/src/main/java/org/apache/meecrowave/jolokia/JolokiaInitializer.java b/trunk/meecrowave-jolokia/src/main/java/org/apache/meecrowave/jolokia/JolokiaInitializer.java
new file mode 100644
index 0000000..ae12e44
--- /dev/null
+++ b/trunk/meecrowave-jolokia/src/main/java/org/apache/meecrowave/jolokia/JolokiaInitializer.java
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jolokia;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.runner.Cli;
+import org.apache.meecrowave.runner.cli.CliOption;
+import org.jolokia.http.AgentServlet;
+
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import java.util.Set;
+
+import static java.util.Optional.ofNullable;
+
+public class JolokiaInitializer implements ServletContainerInitializer {
+    @Override
+    public void onStartup(final Set<Class<?>> set, final ServletContext servletContext) throws ServletException {
+        final Meecrowave.Builder config = Meecrowave.Builder.class.cast(servletContext.getAttribute("meecrowave.configuration"));
+        final JolokiaConfiguration configuration = config.getExtension(JolokiaConfiguration.class);
+        if (!configuration.isActive()) {
+            return;
+        }
+        try { // if hawtio is setup skip it
+            servletContext.getClassLoader().loadClass("io.hawt.web.UserServlet");
+            if (config.getExtension(HawtioInitializer.HawtioConfiguration.class).isActive()) {
+                return;
+            }
+        } catch (final ClassNotFoundException e) {
+            // that's what we want
+        }
+
+        final ServletRegistration.Dynamic jolokia = servletContext.addServlet("jolokia", AgentServlet.class);
+        jolokia.setLoadOnStartup(1);
+        final String mapping = ofNullable(configuration.getMapping()).orElse("/jolokia/*");
+        jolokia.addMapping(mapping);
+        servletContext.log("Installed Jolokia on " + mapping);
+    }
+
+    public static class JolokiaConfiguration implements Cli.Options {
+        @CliOption(name = "jolokia-mapping", description = "Jolokia endpoint")
+        private String mapping;
+
+        @CliOption(name = "jolokia-active", description = "Should Jolokia be deployed (only if hawt.io is not)")
+        private boolean active = true;
+
+        public boolean isActive() {
+            return active;
+        }
+
+        public void setActive(final boolean active) {
+            this.active = active;
+        }
+
+        public String getMapping() {
+            return mapping;
+        }
+
+        public void setMapping(final String mapping) {
+            this.mapping = mapping;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jolokia/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer b/trunk/meecrowave-jolokia/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer
new file mode 100644
index 0000000..fb09a91
--- /dev/null
+++ b/trunk/meecrowave-jolokia/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer
@@ -0,0 +1,2 @@
+org.apache.meecrowave.jolokia.JolokiaInitializer
+org.apache.meecrowave.jolokia.HawtioInitializer
diff --git a/trunk/meecrowave-jolokia/src/main/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options b/trunk/meecrowave-jolokia/src/main/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options
new file mode 100644
index 0000000..4ff54c5
--- /dev/null
+++ b/trunk/meecrowave-jolokia/src/main/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options
@@ -0,0 +1,2 @@
+org.apache.meecrowave.jolokia.HawtioInitializer$HawtioConfiguration
+org.apache.meecrowave.jolokia.JolokiaInitializer$JolokiaConfiguration
\ No newline at end of file
diff --git a/trunk/meecrowave-jolokia/src/test/java/org/apache/meecrowave/jolokia/HawtioTest.java b/trunk/meecrowave-jolokia/src/test/java/org/apache/meecrowave/jolokia/HawtioTest.java
new file mode 100644
index 0000000..9b003a2
--- /dev/null
+++ b/trunk/meecrowave-jolokia/src/test/java/org/apache/meecrowave/jolokia/HawtioTest.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jolokia;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.meecrowave.junit.MeecrowaveRule;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.Assert.assertTrue;
+
+public class HawtioTest {
+    @ClassRule
+    public static final MeecrowaveRule RULE = new MeecrowaveRule();
+
+    @Test
+    public void run() throws IOException {
+        final String actual = IOUtils.toString(
+                new URL("http://localhost:" + RULE.getConfiguration().getHttpPort() + "/hawtio/"),
+                StandardCharsets.UTF_8);
+        assertTrue(actual, actual.contains("<title>hawtio</title>"));
+    }
+}
diff --git a/trunk/meecrowave-jolokia/src/test/java/org/apache/meecrowave/jolokia/JolokiaInitializerTest.java b/trunk/meecrowave-jolokia/src/test/java/org/apache/meecrowave/jolokia/JolokiaInitializerTest.java
new file mode 100644
index 0000000..ea0e4bf
--- /dev/null
+++ b/trunk/meecrowave-jolokia/src/test/java/org/apache/meecrowave/jolokia/JolokiaInitializerTest.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jolokia;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit.MeecrowaveRule;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.Assert.assertTrue;
+
+public class JolokiaInitializerTest {
+    @ClassRule
+    public static final MeecrowaveRule RULE = new MeecrowaveRule(new Meecrowave.Builder() {{
+        randomHttpPort();
+        this.setExtension(HawtioInitializer.HawtioConfiguration.class, new HawtioInitializer.HawtioConfiguration() {{
+            setActive(false);
+        }});
+    }}, "");
+
+    @Test
+    public void run() throws IOException {
+        final String actual = IOUtils.toString(
+                new URL("http://localhost:" + RULE.getConfiguration().getHttpPort() + "/jolokia/read/java.lang:type=Memory/HeapMemoryUsage"),
+                StandardCharsets.UTF_8);
+        assertTrue(actual, actual.contains("\"status\":200"));
+        assertTrue(actual, actual.contains("\"mbean\":\"java.lang:type=Memory\""));
+    }
+}
diff --git a/trunk/meecrowave-jpa/pom.xml b/trunk/meecrowave-jpa/pom.xml
new file mode 100644
index 0000000..4099364
--- /dev/null
+++ b/trunk/meecrowave-jpa/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-jpa</artifactId>
+  <name>Meecrowave :: JPA</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jpa_2.1_spec</artifactId>
+      <version>${jpa-spec.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.openjpa</groupId>
+      <artifactId>openjpa</artifactId>
+      <version>${openjpa.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-junit</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <version>${h2.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-dbcp2</artifactId>
+      <version>${dbcp2.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
\ No newline at end of file
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/EntityManagerScoped.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/EntityManagerScoped.java
new file mode 100644
index 0000000..2843fb8
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/EntityManagerScoped.java
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.api;
+
+import javax.enterprise.context.NormalScope;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@NormalScope
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface EntityManagerScoped {
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Jpa.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Jpa.java
new file mode 100644
index 0000000..2077bf3
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Jpa.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.api;
+
+import javax.interceptor.InterceptorBinding;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@InterceptorBinding
+@Target({METHOD, TYPE})
+@Retention(RUNTIME)
+public @interface Jpa {
+    boolean transactional() default true;
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/PersistenceUnitInfoBuilder.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/PersistenceUnitInfoBuilder.java
new file mode 100644
index 0000000..b3a197a
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/PersistenceUnitInfoBuilder.java
@@ -0,0 +1,304 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.api;
+
+import javax.enterprise.inject.Vetoed;
+import javax.persistence.SharedCacheMode;
+import javax.persistence.ValidationMode;
+import javax.persistence.spi.ClassTransformer;
+import javax.persistence.spi.PersistenceProvider;
+import javax.persistence.spi.PersistenceUnitInfo;
+import javax.persistence.spi.PersistenceUnitTransactionType;
+import javax.sql.DataSource;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+import java.util.ServiceLoader;
+
+import static java.util.Collections.emptyList;
+import static java.util.Objects.requireNonNull;
+import static java.util.stream.Collectors.toList;
+import static javax.persistence.spi.PersistenceUnitTransactionType.RESOURCE_LOCAL;
+
+@Vetoed
+public class PersistenceUnitInfoBuilder {
+    private String unitName;
+    private String providerClass;
+    private DataSource dataSource;
+    private DataSource jtaDataSource;
+    private List<String> mappingFiles = emptyList();
+    private List<URL> jarFiles = emptyList();
+    private URL rootUrl;
+    private List<String> managedClasses = new ArrayList<>();
+    private boolean excludeUnlistedClasses;
+    private SharedCacheMode sharedCacheMode = SharedCacheMode.UNSPECIFIED;
+    private ValidationMode validationMode = ValidationMode.AUTO;
+    private Properties properties = new Properties();
+    private String version = "2.0";
+    private ClassLoader loader = Thread.currentThread().getContextClassLoader();
+    private PersistenceUnitTransactionType transactionType = RESOURCE_LOCAL;
+
+    public PersistenceUnitTransactionType getTransactionType() {
+        return transactionType;
+    }
+
+    public PersistenceUnitInfoBuilder setTransactionType(final PersistenceUnitTransactionType transactionType) {
+        this.transactionType = transactionType;
+        return this;
+    }
+
+    public String getUnitName() {
+        return unitName;
+    }
+
+    public PersistenceUnitInfoBuilder setUnitName(final String unitName) {
+        this.unitName = unitName;
+        return this;
+    }
+
+    public String getProviderClass() {
+        return providerClass;
+    }
+
+    public PersistenceUnitInfoBuilder setProviderClass(final String providerClass) {
+        this.providerClass = providerClass;
+        return this;
+    }
+
+    public DataSource getJtaDataSource() {
+        return jtaDataSource;
+    }
+
+    public PersistenceUnitInfoBuilder setJtaDataSource(final DataSource jtaDataSource) {
+        this.jtaDataSource = jtaDataSource;
+        return this;
+    }
+
+    public DataSource getDataSource() {
+        return dataSource;
+    }
+
+    public PersistenceUnitInfoBuilder setDataSource(final DataSource dataSource) {
+        this.dataSource = dataSource;
+        return this;
+    }
+
+    public List<String> getMappingFiles() {
+        return mappingFiles;
+    }
+
+    public PersistenceUnitInfoBuilder setMappingFiles(final List<String> mappingFiles) {
+        this.mappingFiles = mappingFiles;
+        return this;
+    }
+
+    public List<URL> getJarFiles() {
+        return jarFiles;
+    }
+
+    public PersistenceUnitInfoBuilder setJarFiles(final List<URL> jarFiles) {
+        this.jarFiles = jarFiles;
+        return this;
+    }
+
+    public URL getRootUrl() {
+        return rootUrl;
+    }
+
+    public PersistenceUnitInfoBuilder setRootUrl(final URL rootUrl) {
+        this.rootUrl = rootUrl;
+        return this;
+    }
+
+    public List<String> getManagedClasses() {
+        return managedClasses;
+    }
+
+    public PersistenceUnitInfoBuilder addManagedClazz(final Class<?> clazz) {
+        managedClasses.add(clazz.getName());
+        return this;
+    }
+
+    public PersistenceUnitInfoBuilder setManagedClassNames(final List<String> managedClasses) {
+        this.managedClasses = managedClasses;
+        return this;
+    }
+
+    public PersistenceUnitInfoBuilder setManagedClasses(final List<Class<?>> managedClasses) {
+        this.managedClasses = managedClasses.stream().map(Class::getName).collect(toList());
+        return this;
+    }
+
+    public boolean isExcludeUnlistedClasses() {
+        return excludeUnlistedClasses;
+    }
+
+    public PersistenceUnitInfoBuilder setExcludeUnlistedClasses(final boolean excludeUnlistedClasses) {
+        this.excludeUnlistedClasses = excludeUnlistedClasses;
+        return this;
+    }
+
+    public SharedCacheMode getSharedCacheMode() {
+        return sharedCacheMode;
+    }
+
+    public PersistenceUnitInfoBuilder setSharedCacheMode(final SharedCacheMode sharedCacheMode) {
+        this.sharedCacheMode = sharedCacheMode;
+        return this;
+    }
+
+    public ValidationMode getValidationMode() {
+        return validationMode;
+    }
+
+    public PersistenceUnitInfoBuilder setValidationMode(final ValidationMode validationMode) {
+        this.validationMode = validationMode;
+        return this;
+    }
+
+    public Properties getProperties() {
+        return properties;
+    }
+
+    public PersistenceUnitInfoBuilder addProperty(final String key, final String value) {
+        if (properties == null) {
+            properties = new Properties();
+        }
+        properties.setProperty(key, value);
+        return this;
+    }
+
+    public PersistenceUnitInfoBuilder setProperties(final Properties properties) {
+        this.properties = properties;
+        return this;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public PersistenceUnitInfoBuilder setVersion(final String version) {
+        this.version = version;
+        return this;
+    }
+
+    public ClassLoader getLoader() {
+        return loader;
+    }
+
+    public PersistenceUnitInfoBuilder setLoader(final ClassLoader loader) {
+        this.loader = loader;
+        return this;
+    }
+
+    public PersistenceUnitInfo toInfo() {
+        if (providerClass == null) {
+            providerClass = ServiceLoader.load(PersistenceProvider.class).iterator().next().getClass().getName();
+        }
+        requireNonNull(dataSource, "datasource not provided");
+        return new PersistenceUnitInfo() {
+            @Override
+            public String getPersistenceUnitName() {
+                return unitName;
+            }
+
+            @Override
+            public String getPersistenceProviderClassName() {
+                return providerClass;
+            }
+
+            @Override
+            public PersistenceUnitTransactionType getTransactionType() {
+                return transactionType;
+            }
+
+            @Override
+            public DataSource getJtaDataSource() {
+                return jtaDataSource;
+            }
+
+            @Override
+            public DataSource getNonJtaDataSource() {
+                return dataSource;
+            }
+
+            @Override
+            public List<String> getMappingFileNames() {
+                return mappingFiles;
+            }
+
+            @Override
+            public List<URL> getJarFileUrls() {
+                return jarFiles;
+            }
+
+            @Override
+            public URL getPersistenceUnitRootUrl() {
+                return rootUrl;
+            }
+
+            @Override
+            public List<String> getManagedClassNames() {
+                return managedClasses;
+            }
+
+            @Override
+            public boolean excludeUnlistedClasses() {
+                return excludeUnlistedClasses;
+            }
+
+            @Override
+            public SharedCacheMode getSharedCacheMode() {
+                return sharedCacheMode;
+            }
+
+            @Override
+            public ValidationMode getValidationMode() {
+                return validationMode;
+            }
+
+            @Override
+            public Properties getProperties() {
+                return properties;
+            }
+
+            @Override
+            public String getPersistenceXMLSchemaVersion() {
+                return version;
+            }
+
+            @Override
+            public ClassLoader getClassLoader() {
+                return loader;
+            }
+
+            @Override
+            public void addTransformer(final ClassTransformer transformer) {
+                // no-op: not supported
+            }
+
+            @Override
+            public ClassLoader getNewTempClassLoader() {
+                return new URLClassLoader(new URL[0], Thread.currentThread().getContextClassLoader());
+            }
+        };
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Unit.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Unit.java
new file mode 100644
index 0000000..31aa853
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/api/Unit.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.api;
+
+import javax.inject.Qualifier;
+import javax.persistence.SynchronizationType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Qualifier
+@Target({FIELD, METHOD, PARAMETER})
+@Retention(RUNTIME)
+public @interface Unit {
+    String name();
+    SynchronizationType synchronization() default SynchronizationType.SYNCHRONIZED;
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AnyLiteral.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AnyLiteral.java
new file mode 100644
index 0000000..87b6166
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AnyLiteral.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.util.AnnotationLiteral;
+import java.lang.annotation.Annotation;
+
+public class AnyLiteral extends AnnotationLiteral<Any> implements Any {
+    public static final AnyLiteral INSTANCE = new AnyLiteral();
+
+    private static final String TOSTRING = "@javax.enterprise.inject.Any()";
+    private static final long serialVersionUID = -8922048102786275371L;
+
+    @Override
+    public Class<? extends Annotation> annotationType() {
+        return Any.class;
+    }
+
+    @Override
+    public boolean equals(final Object other) {
+        return Any.class.isInstance(other)
+                || (AnnotationLiteral.class.isInstance(other) && AnnotationLiteral.class.cast(other).annotationType() == annotationType());
+    }
+
+    @Override
+    public int hashCode() {
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        return TOSTRING;
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AutoJpaAnnotationType.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AutoJpaAnnotationType.java
new file mode 100644
index 0000000..cd876e2
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/AutoJpaAnnotationType.java
@@ -0,0 +1,88 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.jpa.api.Jpa;
+
+import javax.enterprise.inject.spi.AnnotatedConstructor;
+import javax.enterprise.inject.spi.AnnotatedField;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.HashSet;
+import java.util.Set;
+
+import static java.util.Optional.ofNullable;
+
+class AutoJpaAnnotationType<T> implements AnnotatedType<T> {
+    private final AnnotatedType<T> delegate;
+    private final Set<Annotation> annotations = new HashSet<>();
+
+    AutoJpaAnnotationType(final AnnotatedType<T> delegate) {
+        this.delegate = delegate;
+        this.annotations.addAll(delegate.getAnnotations());
+        this.annotations.add(JpaLiteral.DEFAULT);
+    }
+
+    @Override
+    public Class<T> getJavaClass() {
+        return delegate.getJavaClass();
+    }
+
+    @Override
+    public Set<AnnotatedConstructor<T>> getConstructors() {
+        return delegate.getConstructors();
+    }
+
+    @Override
+    public Set<AnnotatedMethod<? super T>> getMethods() {
+        return delegate.getMethods();
+    }
+
+    @Override
+    public Set<AnnotatedField<? super T>> getFields() {
+        return delegate.getFields();
+    }
+
+    @Override
+    public Type getBaseType() {
+        return delegate.getBaseType();
+    }
+
+    @Override
+    public Set<Type> getTypeClosure() {
+        return delegate.getTypeClosure();
+    }
+
+    @Override
+    public <T extends Annotation> T getAnnotation(final Class<T> annotationType) {
+        return ofNullable(delegate.getAnnotation(annotationType)).orElseGet(() -> annotationType == Jpa.class ? (T) JpaLiteral.DEFAULT : null);
+    }
+
+    @Override
+    public Set<Annotation> getAnnotations() {
+        return annotations;
+    }
+
+    @Override
+    public boolean isAnnotationPresent(final Class<? extends Annotation> annotationType) {
+        return delegate.isAnnotationPresent(annotationType) || annotationType == Jpa.class;
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerBean.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerBean.java
new file mode 100644
index 0000000..bd0e6c9
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerBean.java
@@ -0,0 +1,148 @@
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.jpa.api.EntityManagerScoped;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.Vetoed;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.PassivationCapable;
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.SynchronizationType;
+import javax.persistence.ValidationMode;
+import javax.persistence.spi.PersistenceProvider;
+import javax.persistence.spi.PersistenceUnitInfo;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.function.Supplier;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptySet;
+import static java.util.Collections.singletonList;
+import static java.util.Optional.ofNullable;
+
+@Vetoed
+public class EntityManagerBean implements Bean<EntityManager>, PassivationCapable {
+    private final Set<Type> types = new HashSet<>(singletonList(EntityManager.class));
+    private final Set<Annotation> qualifiers = new HashSet<>();
+    private final EntityManagerContext entityManagerContext;
+    private final SynchronizationType synchronization;
+    private final String id;
+    private Supplier<EntityManager> instanceFactory;
+
+    EntityManagerBean(final EntityManagerContext context, final String name, final SynchronizationType synchronization) {
+        this.entityManagerContext = context;
+        this.qualifiers.addAll(asList(new UnitLiteral(name, synchronization), AnyLiteral.INSTANCE));
+        this.id = "meecrowave::jpa::entitymanager::" + name + "/" + synchronization.name();
+        this.synchronization = synchronization;
+    }
+
+    void init(final PersistenceUnitInfo info, final BeanManager bm) {
+        final PersistenceProvider provider;
+        try {
+            provider = PersistenceProvider.class.cast(
+                    Thread.currentThread().getContextClassLoader().loadClass(info.getPersistenceProviderClassName()).newInstance());
+        } catch (final InstantiationException | IllegalAccessException | ClassNotFoundException e) {
+            throw new IllegalArgumentException("Bad provider: " + info.getPersistenceProviderClassName());
+        }
+        final EntityManagerFactory factory = provider.createContainerEntityManagerFactory(info, new HashMap() {{
+            put("javax.persistence.bean.manager", bm);
+            if (ValidationMode.NONE != info.getValidationMode()) {
+                ofNullable(findValidatorFactory(bm)).ifPresent(factory -> put("javax.persistence.validation.factory", factory));
+            }
+        }});
+        instanceFactory = synchronization == SynchronizationType.SYNCHRONIZED ? factory::createEntityManager : () -> factory.createEntityManager(synchronization);
+    }
+
+    private Object findValidatorFactory(final BeanManager bm) {
+        try {
+            final Class<?> type = Thread.currentThread().getContextClassLoader().loadClass("javax.validation.ValidatorFactory");
+            final Bean<?> bean = bm.resolve(bm.getBeans(type));
+            if (bean == null || !bm.isNormalScope(bean.getScope())) {
+                return null;
+            }
+            return bm.getReference(bean, type, bm.createCreationalContext(null));
+        } catch (final NoClassDefFoundError | ClassNotFoundException e) {
+            return null;
+        }
+    }
+
+    @Override
+    public EntityManager create(final CreationalContext<EntityManager> context) {
+        final EntityManager entityManager = instanceFactory.get();
+        if (entityManagerContext.isTransactional()) {
+            entityManager.getTransaction().begin();
+        }
+        return entityManager;
+    }
+
+    @Override
+    public void destroy(final EntityManager instance, final CreationalContext<EntityManager> context) {
+        try {
+            if (entityManagerContext.isTransactional()) {
+                if (entityManagerContext.hasFailed()) {
+                    instance.getTransaction().rollback();
+                } else {
+                    instance.getTransaction().commit();
+                }
+            }
+        } finally {
+            instance.close();
+        }
+    }
+
+    @Override
+    public Set<InjectionPoint> getInjectionPoints() {
+        return emptySet();
+    }
+
+    @Override
+    public Class<?> getBeanClass() {
+        return EntityManager.class;
+    }
+
+    @Override
+    public boolean isNullable() {
+        return false;
+    }
+
+    @Override
+    public Set<Type> getTypes() {
+        return types;
+    }
+
+    @Override
+    public Set<Annotation> getQualifiers() {
+        return qualifiers;
+    }
+
+    @Override
+    public Class<? extends Annotation> getScope() {
+        return EntityManagerScoped.class;
+    }
+
+    @Override
+    public String getName() {
+        return null;
+    }
+
+    @Override
+    public Set<Class<? extends Annotation>> getStereotypes() {
+        return emptySet();
+    }
+
+    @Override
+    public boolean isAlternative() {
+        return false;
+    }
+
+    @Override
+    public String getId() {
+        return id;
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerContext.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerContext.java
new file mode 100644
index 0000000..1c64374
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/EntityManagerContext.java
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.jpa.api.EntityManagerScoped;
+
+import javax.enterprise.context.spi.AlterableContext;
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
+import java.io.Serializable;
+import java.lang.annotation.Annotation;
+import java.util.HashMap;
+import java.util.Map;
+
+import static java.util.Optional.ofNullable;
+
+public class EntityManagerContext implements AlterableContext {
+    private final ThreadLocal<ThreadContext> context = new ThreadLocal<>();
+
+    public boolean enter(final boolean transactional) {
+        if (context.get() != null) {
+            return false;
+        }
+        final ThreadContext value = new ThreadContext();
+        value.transactional = transactional;
+        context.set(value);
+        return true;
+    }
+
+    public void failed() {
+        context.get().failed = true;
+    }
+
+    public void exit(final boolean created) {
+        if (created) {
+            context.get().exit();
+            context.remove();
+        }
+    }
+
+    @Override
+    public Class<? extends Annotation> getScope() {
+        return EntityManagerScoped.class;
+    }
+
+    @Override
+    public void destroy(final Contextual<?> contextual) {
+        context.get().destroy(contextual);
+    }
+
+    @Override
+    public <T> T get(final Contextual<T> component, final CreationalContext<T> creationalContext) {
+        return context.get().get(component, creationalContext);
+    }
+
+    @Override
+    public <T> T get(final Contextual<T> component) {
+        return context.get().get(component);
+    }
+
+    @Override
+    public boolean isActive() {
+        final boolean active = context.get() != null;
+        if (!active) {
+            context.remove();
+        }
+        return active;
+    }
+
+    public boolean hasFailed() {
+        return context.get().failed;
+    }
+
+    public boolean isTransactional() {
+        return context.get().transactional;
+    }
+
+    private static class ThreadContext implements AlterableContext {
+        private final Map<Contextual<?>, BeanInstanceBag<?>> components = new HashMap<>();
+        private boolean failed;
+        private boolean transactional;
+
+        @Override
+        public Class<? extends Annotation> getScope() {
+            return EntityManagerScoped.class;
+        }
+
+        @Override
+        public <T> T get(final Contextual<T> component, final CreationalContext<T> creationalContext) {
+            BeanInstanceBag<T> bag = (BeanInstanceBag<T>) components.get(component);
+            if (bag == null) {
+                bag = new BeanInstanceBag<>(creationalContext);
+                components.put(component, bag);
+            }
+            if (bag.beanInstance == null) {
+                bag.beanInstance = component.create(creationalContext);
+            }
+            return bag.beanInstance;
+        }
+
+        @Override
+        public <T> T get(final Contextual<T> component) {
+            final BeanInstanceBag<?> bag = components.get(component);
+            return bag == null ? null : (T) bag.beanInstance;
+        }
+
+        @Override
+        public void destroy(final Contextual<?> contextual) {
+            final BeanInstanceBag remove = components.remove(contextual);
+            ofNullable(remove).ifPresent(b -> doDestroy(contextual, b));
+        }
+
+        private <T> void doDestroy(final Contextual<T> contextual, final BeanInstanceBag<T> bag) {
+            contextual.destroy(bag.beanInstance, bag.beanCreationalContext);
+            bag.beanCreationalContext.release();
+        }
+
+        @Override
+        public boolean isActive() {
+            return true;
+        }
+
+        private void exit() {
+            components.forEach((k, bag) -> doDestroy(k, BeanInstanceBag.class.cast(bag)));
+        }
+    }
+
+    private static class BeanInstanceBag<T> implements Serializable {
+        private final CreationalContext<T> beanCreationalContext;
+        private T beanInstance;
+
+        private BeanInstanceBag(final CreationalContext<T> beanCreationalContext) {
+            this.beanCreationalContext = beanCreationalContext;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaExtension.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaExtension.java
new file mode 100644
index 0000000..2a2d161
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaExtension.java
@@ -0,0 +1,205 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.jpa.api.Jpa;
+import org.apache.meecrowave.jpa.api.PersistenceUnitInfoBuilder;
+import org.apache.meecrowave.jpa.api.Unit;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.ProcessAnnotatedType;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.enterprise.inject.spi.WithAnnotations;
+import javax.persistence.Embeddable;
+import javax.persistence.Entity;
+import javax.persistence.MappedSuperclass;
+import javax.persistence.SynchronizationType;
+import javax.persistence.spi.PersistenceUnitInfo;
+import javax.servlet.ServletContext;
+import javax.sql.DataSource;
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static java.util.Optional.ofNullable;
+import static java.util.function.Function.identity;
+import static java.util.stream.Collectors.toMap;
+
+/**
+ * This extension is responsible to create entitymanagers, entitymanagerfactories
+ * and link it to CDI named units.
+ * <p>
+ * Note: we don't reuse @DataSourceDefinition which is all but defined (pooling, datasource configs are a mess).
+ */
+public class JpaExtension implements Extension {
+    private final EntityManagerContext entityManagerContext = new EntityManagerContext();
+    private final List<String> jpaClasses = new ArrayList<>();
+    private final Map<UnitKey, EntityManagerBean> entityManagerBeans = new HashMap<>();
+    private final Collection<Bean<?>> unitBuilders = new ArrayList<>(2);
+
+    void addInternals(@Observes final BeforeBeanDiscovery bbd, final BeanManager bm) {
+        Stream.of(JpaTransactionInterceptor.class, JpaNoTransactionInterceptor.class)
+                .forEach(interceptor -> bbd.addAnnotatedType(bm.createAnnotatedType(interceptor)));
+    }
+
+    <T> void addJpaToEmConsumers(@Observes @WithAnnotations(Unit.class) final ProcessAnnotatedType<T> pat) {
+        if (pat.getAnnotatedType().isAnnotationPresent(Jpa.class)) {
+            return;
+        }
+        pat.setAnnotatedType(new AutoJpaAnnotationType<T>(pat.getAnnotatedType()));
+    }
+
+    void collectEntityManagerInjections(@Observes final ProcessBean<?> bean) {
+        final Map<UnitKey, EntityManagerBean> beans = bean.getBean().getInjectionPoints().stream()
+                .filter(i -> i.getAnnotated().isAnnotationPresent(Unit.class))
+                .map(i -> i.getAnnotated().getAnnotation(Unit.class))
+                .collect(toMap(u -> new UnitKey(u.name(), u.synchronization()), unit -> new EntityManagerBean(entityManagerContext, unit.name(), unit.synchronization())));
+        entityManagerBeans.putAll(beans);
+    }
+
+    void collectEntityManagers(@Observes final ProcessBean<?> bean) {
+        if (bean.getBean().getTypes().contains(PersistenceUnitInfoBuilder.class)) {
+            unitBuilders.add(bean.getBean());
+        }
+    }
+
+    void collectEntities(@Observes @WithAnnotations({Entity.class, MappedSuperclass.class, Embeddable.class}) final ProcessAnnotatedType<?> jpa) {
+        jpaClasses.add(jpa.getAnnotatedType().getJavaClass().getName());
+    }
+
+    void addBeans(@Observes final AfterBeanDiscovery afb, final BeanManager bm) {
+        afb.addContext(entityManagerContext);
+        entityManagerBeans.forEach((n, b) -> afb.addBean(b));
+    }
+
+    void initBeans(@Observes final AfterDeploymentValidation adv, final BeanManager bm) {
+        if (entityManagerBeans.isEmpty()) {
+            return;
+        }
+
+        // only not portable part is this config read, could be optional
+        final ServletContext sc = ServletContext.class.cast(bm.getReference(bm.resolve(bm.getBeans(ServletContext.class)), ServletContext.class, bm.createCreationalContext(null)));
+        final Meecrowave.Builder config = Meecrowave.Builder.class.cast(sc.getAttribute("meecrowave.configuration"));
+        final Map<String, String> props = new HashMap<>();
+        if (config != null) {
+            ofNullable(config.getProperties()).ifPresent(p -> p.stringPropertyNames().stream()
+                    .filter(k -> k.startsWith("jpa.property."))
+                    .forEach(k -> props.put(k.substring("jpa.property.".length()), p.getProperty(k))));
+        }
+
+        final Map<String, PersistenceUnitInfo> infoIndex = unitBuilders.stream()
+                .map(bean -> {
+                    final CreationalContext<?> cc = bm.createCreationalContext(null);
+                    try {
+                        final Bean<?> resolvedBean = bm.resolve(bm.getBeans(
+                                PersistenceUnitInfoBuilder.class,
+                                bean.getQualifiers().toArray(new Annotation[bean.getQualifiers().size()])));
+                        final PersistenceUnitInfoBuilder builder = PersistenceUnitInfoBuilder.class.cast(
+                                bm.getReference(resolvedBean, PersistenceUnitInfoBuilder.class, cc));
+                        if (builder.getManagedClasses().isEmpty()) {
+                            builder.setManagedClassNames(jpaClasses).setExcludeUnlistedClasses(true);
+                        }
+                        props.forEach(builder::addProperty);
+                        return builder.toInfo();
+                    } finally {
+                        cc.release();
+                    }
+                }).collect(toMap(PersistenceUnitInfo::getPersistenceUnitName, identity()));
+
+        entityManagerBeans.forEach((k, e) -> {
+            PersistenceUnitInfo info = infoIndex.get(k.unitName);
+            if (info == null) {
+                info = tryCreateDefaultPersistenceUnit(k.unitName, bm, props);
+            }
+            if (info == null) { // not valid
+                adv.addDeploymentProblem(new IllegalArgumentException("Didn't find any PersistenceUnitInfoBuilder for " + k));
+            } else {
+                e.init(info, bm);
+            }
+        });
+    }
+
+    private PersistenceUnitInfo tryCreateDefaultPersistenceUnit(final String unitName, final BeanManager bm, final Map<String, String> props) {
+        final Set<Bean<?>> beans = bm.getBeans(DataSource.class);
+        final Bean<?> bean = bm.resolve(beans);
+        if (bean == null || !bm.isNormalScope(bean.getScope())) {
+            return null;
+        }
+
+        final DataSource ds = DataSource.class.cast(bm.getReference(bean, DataSource.class, bm.createCreationalContext(null)));
+
+        final PersistenceUnitInfoBuilder builder = new PersistenceUnitInfoBuilder()
+                .setManagedClassNames(jpaClasses)
+                .setExcludeUnlistedClasses(true)
+                .setUnitName(unitName)
+                .setDataSource(ds);
+
+        props.forEach(builder::addProperty);
+
+        return builder.toInfo();
+    }
+
+    EntityManagerContext getEntityManagerContext() {
+        return entityManagerContext;
+    }
+
+    private static class UnitKey {
+        private final String unitName;
+        private final SynchronizationType synchronizationType;
+        private final int hash;
+
+        private UnitKey(final String unitName, final SynchronizationType synchronizationType) {
+            this.unitName = unitName;
+            this.synchronizationType = synchronizationType;
+            this.hash = 31 * unitName.hashCode() + synchronizationType.hashCode();
+        }
+
+        @Override
+        public boolean equals(final Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+
+            final UnitKey unitKey = UnitKey.class.cast(o);
+            return unitName.equals(unitKey.unitName) && synchronizationType == unitKey.synchronizationType;
+
+        }
+
+        @Override
+        public int hashCode() {
+            return hash;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaInterceptorBase.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaInterceptorBase.java
new file mode 100644
index 0000000..c09bbda
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaInterceptorBase.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import javax.inject.Inject;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.InvocationContext;
+import java.io.Serializable;
+
+public abstract class JpaInterceptorBase implements Serializable {
+    @Inject
+    private JpaExtension extension;
+
+    @AroundInvoke
+    public Object inTransaction(final InvocationContext context) throws Exception {
+        final EntityManagerContext entityManagerContext = extension.getEntityManagerContext();
+        final boolean owner = entityManagerContext.enter(isTransactional());
+        try {
+            return context.proceed();
+        } catch (final Exception e) {
+            entityManagerContext.failed();
+            throw e;
+        } finally {
+            entityManagerContext.exit(owner);
+        }
+    }
+
+    protected abstract boolean isTransactional();
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaLiteral.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaLiteral.java
new file mode 100644
index 0000000..5271f2c
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaLiteral.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.jpa.api.Jpa;
+
+import javax.enterprise.util.AnnotationLiteral;
+import java.lang.annotation.Annotation;
+
+class JpaLiteral extends AnnotationLiteral<Jpa> implements Jpa {
+    public static final Annotation DEFAULT = new JpaLiteral(true);
+
+    private final boolean transactional;
+    private final int hash;
+
+    JpaLiteral(final boolean transactional) {
+        this.transactional = transactional;
+        this.hash = hashCode();
+    }
+
+    @Override
+    public Class<? extends Annotation> annotationType() {
+        return Jpa.class;
+    }
+
+    @Override
+    public boolean transactional() {
+        return transactional;
+    }
+
+    @Override
+    public boolean equals(final Object other) {
+        return Jpa.class.isInstance(other) && Jpa.class.cast(other).transactional() == transactional;
+    }
+
+    @Override
+    public int hashCode() {
+        return hash;
+    }
+
+    @Override
+    public String toString() {
+        return "@Jpa(transactional)" + transactional + ")";
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaNoTransactionInterceptor.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaNoTransactionInterceptor.java
new file mode 100644
index 0000000..fa0f1a1
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaNoTransactionInterceptor.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.jpa.api.Jpa;
+
+import javax.annotation.Priority;
+import javax.interceptor.Interceptor;
+
+@Jpa(transactional = false)
+@Interceptor
+@Priority(Interceptor.Priority.LIBRARY_BEFORE)
+public class JpaNoTransactionInterceptor extends JpaInterceptorBase {
+    @Override
+    protected boolean isTransactional() {
+        return false;
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaTransactionInterceptor.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaTransactionInterceptor.java
new file mode 100644
index 0000000..8631255
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/JpaTransactionInterceptor.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.jpa.api.Jpa;
+
+import javax.annotation.Priority;
+import javax.interceptor.Interceptor;
+
+@Jpa
+@Interceptor
+@Priority(Interceptor.Priority.LIBRARY_BEFORE)
+public class JpaTransactionInterceptor extends JpaInterceptorBase {
+    @Override
+    protected boolean isTransactional() {
+        return true;
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/UnitLiteral.java b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/UnitLiteral.java
new file mode 100644
index 0000000..ba6708c
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/java/org/apache/meecrowave/jpa/internal/UnitLiteral.java
@@ -0,0 +1,49 @@
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.jpa.api.Unit;
+
+import javax.enterprise.util.AnnotationLiteral;
+import javax.persistence.SynchronizationType;
+
+class UnitLiteral extends AnnotationLiteral<Unit> implements Unit {
+    private final String name;
+    private final SynchronizationType synchronization;
+
+    UnitLiteral(final String name, final SynchronizationType synchronization) {
+        this.name = name;
+        this.synchronization = synchronization;
+    }
+
+    @Override
+    public String name() {
+        return name;
+    }
+
+    @Override
+    public SynchronizationType synchronization() {
+        return synchronization;
+    }
+
+    @Override
+    public boolean equals(final Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        final UnitLiteral that = UnitLiteral.class.cast(o);
+        return name.equals(that.name) && synchronization.equals(that.synchronization);
+
+    }
+
+    @Override
+    public int hashCode() {
+        return name.hashCode() + 31 * synchronization.hashCode();
+    }
+
+    @Override
+    public String toString() {
+        return "@Unit(name=" + name + ",synchronization=" + synchronization.name() + ")";
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-jpa/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/trunk/meecrowave-jpa/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-jpa/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..442fa94
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,5 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/meecrowave-jpa/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/trunk/meecrowave-jpa/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
new file mode 100644
index 0000000..ae0116b
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
@@ -0,0 +1 @@
+org.apache.meecrowave.jpa.internal.JpaExtension
diff --git a/trunk/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/JpaExtensionTest.java b/trunk/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/JpaExtensionTest.java
new file mode 100644
index 0000000..e98d75b
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/test/java/org/apache/meecrowave/jpa/internal/JpaExtensionTest.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jpa.internal;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit.MeecrowaveRule;
+import org.app.JPADao;
+import org.junit.Assume;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+import org.junit.runners.model.Statement;
+
+import javax.inject.Inject;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.rules.RuleChain.outerRule;
+
+public class JpaExtensionTest {
+    @Rule
+    public final TestRule rule = outerRule((base, description) -> new Statement() {
+        @Override
+        public void evaluate() throws Throwable {
+            final String jVersion = System.getProperty("java.version");
+            Assume.assumeFalse(jVersion.startsWith("9-") || jVersion.startsWith("1.9")); // openjpa loops on java 9 bytecode
+            base.evaluate();
+        }
+    }).around(new MeecrowaveRule(
+            new Meecrowave.Builder().randomHttpPort()
+                    .property("jpa.property.openjpa.RuntimeUnenhancedClasses", "supported")
+                    .property("jpa.property.openjpa.jdbc.SynchronizeMappings", "buildSchema"),
+            "")
+            .inject(this));
+
+    @Inject
+    private JPADao service;
+
+    @Test
+    public void run() {
+        final JPADao.User u = new JPADao.User();
+        u.setName("test");
+        assertEquals("test", service.find(service.save(u).getId()).getName());
+    }
+}
diff --git a/trunk/meecrowave-jpa/src/test/java/org/app/JPADao.java b/trunk/meecrowave-jpa/src/test/java/org/app/JPADao.java
new file mode 100644
index 0000000..12a9af2
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/test/java/org/app/JPADao.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import org.apache.commons.dbcp2.BasicDataSource;
+import org.apache.meecrowave.jpa.api.Jpa;
+import org.apache.meecrowave.jpa.api.Unit;
+import org.h2.Driver;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+import javax.persistence.Entity;
+import javax.persistence.EntityManager;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.sql.DataSource;
+
+@ApplicationScoped
+public class JPADao {
+    @Inject
+    @Unit(name = "test")
+    private EntityManager em;
+
+    // tx by default
+    public User save(final User user) {
+        em.persist(user);
+        return user;
+    }
+
+    @Jpa(transactional = false) // no tx
+    public User find(final long id) {
+        return em.find(User.class, id);
+    }
+
+    @ApplicationScoped
+    public static class JpaConfig {
+        @Produces
+        @ApplicationScoped
+        public DataSource dataSource() {
+            final BasicDataSource source = new BasicDataSource();
+            source.setDriver(new Driver());
+            source.setUrl("jdbc:h2:mem:jpaextensiontest");
+            return source;
+        }
+    }
+
+    @Entity
+    @Dependent
+    public static class User {
+        @Id
+        @GeneratedValue
+        private long id;
+
+        private String name;
+
+        public long getId() {
+            return id;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(final String name) {
+            this.name = name;
+        }
+    }
+
+}
diff --git a/trunk/meecrowave-jpa/src/test/resources/META-INF/beans.xml b/trunk/meecrowave-jpa/src/test/resources/META-INF/beans.xml
new file mode 100644
index 0000000..2bb54d8
--- /dev/null
+++ b/trunk/meecrowave-jpa/src/test/resources/META-INF/beans.xml
@@ -0,0 +1,19 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<beans />
diff --git a/trunk/meecrowave-jta/pom.xml b/trunk/meecrowave-jta/pom.xml
new file mode 100644
index 0000000..3540cc7
--- /dev/null
+++ b/trunk/meecrowave-jta/pom.xml
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-jta</artifactId>
+  <name>Meecrowave :: JTA</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jta_1.2_spec</artifactId>
+      <version>1.0-alpha-1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.components</groupId>
+      <artifactId>geronimo-transaction</artifactId>
+      <version>3.1.4</version>
+    </dependency>
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-api</artifactId>
+      <version>1.7.22</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-slf4j-impl</artifactId>
+      <version>${log4j2.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-junit</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+</project>
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/AnyLiteral.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/AnyLiteral.java
new file mode 100644
index 0000000..3a248bb
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/AnyLiteral.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.enterprise.inject.Any;
+import javax.enterprise.util.AnnotationLiteral;
+import java.lang.annotation.Annotation;
+
+public class AnyLiteral extends AnnotationLiteral<Any> implements Any {
+    public static final AnyLiteral INSTANCE = new AnyLiteral();
+
+    private static final String TOSTRING = "@javax.enterprise.inject.Any()";
+    private static final long serialVersionUID = -8922048102786275371L;
+
+    @Override
+    public Class<? extends Annotation> annotationType() {
+        return Any.class;
+    }
+
+    @Override
+    public boolean equals(final Object other) {
+        return Any.class.isInstance(other)
+                || (AnnotationLiteral.class.isInstance(other) && AnnotationLiteral.class.cast(other).annotationType() == annotationType());
+    }
+
+    @Override
+    public int hashCode() {
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        return TOSTRING;
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/DefaultLiteral.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/DefaultLiteral.java
new file mode 100644
index 0000000..c588351
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/DefaultLiteral.java
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF Default
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.enterprise.inject.Default;
+import javax.enterprise.util.AnnotationLiteral;
+import java.lang.annotation.Annotation;
+
+public class DefaultLiteral extends AnnotationLiteral<Default> implements Default {
+    public static final DefaultLiteral INSTANCE = new DefaultLiteral();
+
+    private static final String TOSTRING = "@javax.enterprise.inject.Default()";
+    private static final long serialVersionUID = -8922048102786275371L;
+
+    @Override
+    public Class<? extends Annotation> annotationType() {
+        return Default.class;
+    }
+
+    @Override
+    public boolean equals(final Object other) {
+        return Default.class.isInstance(other)
+                || (AnnotationLiteral.class.isInstance(other) && AnnotationLiteral.class.cast(other).annotationType() == annotationType());
+    }
+
+    @Override
+    public int hashCode() {
+        return 0;
+    }
+
+    @Override
+    public String toString() {
+        return TOSTRING;
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java
new file mode 100755
index 0000000..84d0a77
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/InterceptorBase.java
@@ -0,0 +1,244 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.CDI;
+import javax.inject.Inject;
+import javax.interceptor.InvocationContext;
+import javax.transaction.RollbackException;
+import javax.transaction.Status;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionRolledbackException;
+import javax.transaction.Transactional;
+import javax.transaction.TransactionalException;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import static java.util.Arrays.asList;
+
+public abstract class InterceptorBase implements Serializable {
+    private static final IllegalStateException ILLEGAL_STATE_EXCEPTION = new IllegalStateException("Can't use UserTransaction from @Transaction call");
+    private static final ThreadLocal<RuntimeException> ERROR = new ThreadLocal<>();
+
+    private transient volatile ConcurrentMap<Method, Boolean> rollback = new ConcurrentHashMap<>();
+
+    @Inject
+    private JtaConfig config;
+
+    @Inject
+    protected TransactionManager transactionManager;
+
+    protected Object intercept(final InvocationContext ic) throws Exception {
+        final boolean forbidsUt = doesForbidUtUsage();
+        final RuntimeException oldEx;
+        final IllegalStateException illegalStateException;
+        if (forbidsUt) {
+            illegalStateException = ILLEGAL_STATE_EXCEPTION;
+            oldEx = error(illegalStateException);
+        } else {
+            illegalStateException = null;
+            oldEx = null;
+        }
+
+        State state = null;
+        try {
+            state = start();
+            final Object proceed = ic.proceed();
+            commit(state); // force commit there to ensure we can catch synchro exceptions
+            return proceed;
+        } catch (final Exception e) {
+            if (illegalStateException == e) {
+                throw e;
+            }
+
+            Exception error = unwrap(e);
+            if (error != null && (!config.isHandleExceptionOnlyForClient() || isNewTransaction(state))) {
+                final Method method = ic.getMethod();
+                if (rollback == null) {
+                    synchronized (this) {
+                        if (rollback == null) {
+                            rollback = new ConcurrentHashMap<>();
+                        }
+                    }
+                }
+                Boolean doRollback = rollback.get(method);
+                if (doRollback != null) {
+                    if (doRollback && isTransactionActive(state.current)) {
+                        setRollbackOnly();
+                    }
+                } else {
+                    // computed lazily but we could cache it later for sure if that's really a normal case
+                    final AnnotatedType<?> annotatedType = CDI.current().getBeanManager().createAnnotatedType(method.getDeclaringClass());
+                    Transactional tx = null;
+                    for (final AnnotatedMethod<?> m : annotatedType.getMethods()) {
+                        if (method.equals(m.getJavaMember())) {
+                            tx = m.getAnnotation(Transactional.class);
+                            break;
+                        }
+                    }
+                    if (tx == null) {
+                        tx = annotatedType.getAnnotation(Transactional.class);
+                    }
+                    if (tx != null) {
+                        doRollback = new ExceptionPriotiryRules(tx.rollbackOn(), tx.dontRollbackOn()).accept(error, method.getExceptionTypes());
+                        rollback.putIfAbsent(method, doRollback);
+                        if (doRollback && isTransactionActive(state.current)) {
+                            setRollbackOnly();
+                        }
+                    }
+                }
+            }
+            try {
+                commit(state);
+            } catch (final Exception ex) {
+                // no-op: swallow to keep the right exception
+                final Logger logger = Logger.getLogger(getClass().getName());
+                if (logger.isLoggable(Level.FINE)) {
+                    logger.fine("Swallowing: " + ex.getMessage());
+                }
+            }
+
+            throw new TransactionalException(e.getMessage(), error);
+        } finally {
+            if (forbidsUt) {
+                resetError(oldEx);
+            }
+        }
+    }
+
+    protected abstract boolean isNewTransaction(final State state);
+    protected abstract State start();
+    protected abstract void commit(final State state);
+
+    private void resetError(final RuntimeException oldEx) {
+        ERROR.set(oldEx);
+    }
+
+    protected void setRollbackOnly() throws SystemException {
+        transactionManager.setRollbackOnly();
+    }
+
+    public boolean isTransactionActive(final Transaction current) {
+        if (current == null) {
+            return false;
+        }
+
+        try {
+            final int status = current.getStatus();
+            return status == Status.STATUS_ACTIVE || status == Status.STATUS_MARKED_ROLLBACK;
+        } catch (final SystemException e) {
+            return false;
+        }
+    }
+
+
+    protected RuntimeException error(IllegalStateException illegalStateException) {
+        final RuntimeException p = ERROR.get();
+        ERROR.set(illegalStateException);
+        return p;
+    }
+
+    private Exception unwrap(final Exception e) {
+        Exception error = e;
+        while (error != null && (SystemException.class.isInstance(error) || TransactionRolledbackException.class.isInstance(error))) {
+            final Throwable cause = error.getCause();
+            if (cause == error) {
+                break;
+            }
+            error = Exception.class.isInstance(cause) ? Exception.class.cast(cause) : null;
+        }
+        if (RollbackException.class.isInstance(error) && Exception.class.isInstance(error.getCause())) {
+            error = Exception.class.cast(error.getCause());
+        }
+        return error;
+    }
+
+    protected boolean doesForbidUtUsage() {
+        return true;
+    }
+
+    private static final class ExceptionPriotiryRules {
+        private final Class<?>[] includes;
+        private final Class<?>[] excludes;
+
+        private ExceptionPriotiryRules(final Class<?>[] includes, final Class<?>[] excludes) {
+            this.includes = includes;
+            this.excludes = excludes;
+        }
+
+        private boolean accept(final Exception e, final Class<?>[] exceptionTypes) {
+            if (e == null) {
+                return false;
+            }
+
+            final int includeScore = contains(includes, e);
+            final int excludeScore = contains(excludes, e);
+
+            if (excludeScore < 0) {
+                return includeScore >= 0 || isNotChecked(e, exceptionTypes);
+            }
+            return includeScore - excludeScore >= 0;
+        }
+
+        private static int contains(final Class<?>[] list, final Exception e) {
+            int score = -1;
+            for (final Class<?> clazz : list) {
+                if (clazz.isInstance(e)) {
+                    final int thisScore = score(clazz, e.getClass());
+                    if (score < 0) {
+                        score = thisScore;
+                    } else {
+                        score = Math.min(thisScore, score);
+                    }
+                }
+            }
+            return score;
+        }
+
+        private static int score(final Class<?> config, final Class<?> ex) {
+            int score = 0;
+            Class<?> current = ex;
+            while (current != null && !current.equals(config)) {
+                score++;
+                current = current.getSuperclass();
+            }
+            return score;
+        }
+
+        private static boolean isNotChecked(final Exception e, final Class<?>[] exceptionTypes) {
+            return RuntimeException.class.isInstance(e) && (exceptionTypes.length == 0 || !asList(exceptionTypes).contains(e.getClass()));
+        }
+    }
+
+    protected static class State {
+        protected final Transaction old;
+        protected final Transaction current;
+
+        public State(final Transaction old, final Transaction current) {
+            this.old = old;
+            this.current = current;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java
new file mode 100644
index 0000000..4ed05c1
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaConfig.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import org.apache.meecrowave.runner.cli.CliOption;
+
+public class JtaConfig {
+    @CliOption(name = "jta-handle-exception-only-for-client", description = "should JTA exception only be managed by client")
+    boolean handleExceptionOnlyForClient;
+
+    public boolean isHandleExceptionOnlyForClient() {
+        return handleExceptionOnlyForClient;
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java
new file mode 100644
index 0000000..2b2e918
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/JtaExtension.java
@@ -0,0 +1,237 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import org.apache.geronimo.transaction.manager.GeronimoTransactionManager;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.event.Observes;
+import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.Extension;
+import javax.enterprise.inject.spi.InjectionPoint;
+import javax.enterprise.inject.spi.ProcessBean;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+import javax.transaction.xa.XAException;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Stream;
+
+import static java.util.Arrays.asList;
+
+public class JtaExtension implements Extension {
+    private TransactionContext context;
+    private boolean hasManager;
+    private boolean hasRegistry;
+    private final JtaConfig config = new JtaConfig();
+
+    void register(@Observes final BeforeBeanDiscovery beforeBeanDiscovery, final BeanManager beanManager) {
+        Stream.of(
+                MandatoryInterceptor.class, NeverInterceptor.class,
+                NotSupportedInterceptor.class, RequiredInterceptor.class,
+                RequiredNewInterceptor.class, SupportsInterceptor.class)
+                .forEach(c -> beforeBeanDiscovery.addAnnotatedType(beanManager.createAnnotatedType(c)));
+    }
+
+    void findJtaComponents(@Observes final ProcessBean<?> bean) {
+        if (!hasManager && bean.getBean().getTypes().contains(TransactionManager.class)) {
+            hasManager = true;
+        }
+        if (!hasRegistry && bean.getBean().getTypes().contains(TransactionSynchronizationRegistry.class)) {
+            hasRegistry = true;
+        }
+    }
+
+    void addContextAndBeans(@Observes final AfterBeanDiscovery afterBeanDiscovery, final BeanManager bm) {
+        context = new TransactionContext();
+        afterBeanDiscovery.addContext(context);
+
+        if (!hasManager && !hasRegistry) {
+            try {
+                final GeronimoTransactionManager mgr = new GeronimoTransactionManager();
+                afterBeanDiscovery.addBean(new JtaBean(mgr));
+            } catch (final XAException e) {
+                throw new IllegalStateException(e);
+            }
+            hasManager = true;
+            hasRegistry = true;
+        }
+
+        afterBeanDiscovery.addBean(new JtaConfigBean(config));
+    }
+
+    void init(@Observes final AfterDeploymentValidation afterDeploymentValidation, final BeanManager bm) {
+        if (!hasRegistry && hasManager) {
+            afterDeploymentValidation.addDeploymentProblem(new IllegalStateException("You should produce a TransactionManager and TransactionSynchronizationRegistry"));
+            return;
+        }
+        final TransactionManager manager = TransactionManager.class.cast(
+                bm.getReference(bm.resolve(bm.getBeans(TransactionManager.class)), TransactionManager.class, bm.createCreationalContext(null)));
+        final TransactionSynchronizationRegistry registry = TransactionSynchronizationRegistry.class.isInstance(manager) ?
+                TransactionSynchronizationRegistry.class.cast(manager) :
+                TransactionSynchronizationRegistry.class.cast(bm.getReference(bm.resolve(bm.getBeans(TransactionSynchronizationRegistry.class)),
+                        TransactionSynchronizationRegistry.class, bm.createCreationalContext(null)));
+        context.init(manager, registry);
+
+        try {
+            final Class<?> builder = Thread.currentThread().getContextClassLoader().loadClass("org.apache.meecrowave.Meecrowave$Builder");
+            final JtaConfig ext = JtaConfig.class.cast(builder.getMethod("getExtension", Class.class).invoke(
+                    bm.getReference(bm.resolve(bm.getBeans(builder)), builder, bm.createCreationalContext(null)), JtaConfig.class));
+            config.handleExceptionOnlyForClient = ext.handleExceptionOnlyForClient;
+        } catch (final Exception e) {
+            config.handleExceptionOnlyForClient = Boolean.getBoolean("meecrowave.jta.handleExceptionOnlyForClient");
+        }
+    }
+
+    private static class JtaBean implements Bean<TransactionManager> {
+        private final GeronimoTransactionManager manager;
+        private final Set<Type> types = new HashSet<>(asList(TransactionManager.class, TransactionSynchronizationRegistry.class, Object.class));
+        private final Set<Annotation> qualifiers = new HashSet<>(asList(DefaultLiteral.INSTANCE, AnyLiteral.INSTANCE));
+
+        private JtaBean(final GeronimoTransactionManager mgr) {
+            this.manager = mgr;
+        }
+
+        @Override
+        public Set<InjectionPoint> getInjectionPoints() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public Class<?> getBeanClass() {
+            return GeronimoTransactionManager.class;
+        }
+
+        @Override
+        public boolean isNullable() {
+            return false;
+        }
+
+        @Override
+        public TransactionManager create(final CreationalContext<TransactionManager> context) {
+            return manager;
+        }
+
+        @Override
+        public void destroy(final TransactionManager instance, final CreationalContext<TransactionManager> context) {
+            // no-op
+        }
+
+        @Override
+        public Set<Type> getTypes() {
+            return types;
+        }
+
+        @Override
+        public Set<Annotation> getQualifiers() {
+            return qualifiers;
+        }
+
+        @Override
+        public Class<? extends Annotation> getScope() {
+            return ApplicationScoped.class;
+        }
+
+        @Override
+        public String getName() {
+            return null;
+        }
+
+        @Override
+        public Set<Class<? extends Annotation>> getStereotypes() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public boolean isAlternative() {
+            return false;
+        }
+    }
+
+    private static class JtaConfigBean implements Bean<JtaConfig> {
+        private final JtaConfig config;
+        private final Set<Type> types = new HashSet<>(asList(JtaConfig.class, Object.class));
+        private final Set<Annotation> qualifiers = new HashSet<>(asList(DefaultLiteral.INSTANCE, AnyLiteral.INSTANCE));
+
+        private JtaConfigBean(final JtaConfig value) {
+            this.config = value;
+        }
+
+        @Override
+        public Set<InjectionPoint> getInjectionPoints() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public Class<?> getBeanClass() {
+            return JtaConfig.class;
+        }
+
+        @Override
+        public boolean isNullable() {
+            return false;
+        }
+
+        @Override
+        public JtaConfig create(final CreationalContext<JtaConfig> context) {
+            return config;
+        }
+
+        @Override
+        public void destroy(final JtaConfig instance, final CreationalContext<JtaConfig> context) {
+            // no-op
+        }
+
+        @Override
+        public Set<Type> getTypes() {
+            return types;
+        }
+
+        @Override
+        public Set<Annotation> getQualifiers() {
+            return qualifiers;
+        }
+
+        @Override
+        public Class<? extends Annotation> getScope() {
+            return ApplicationScoped.class;
+        }
+
+        @Override
+        public String getName() {
+            return null;
+        }
+
+        @Override
+        public Set<Class<? extends Annotation>> getStereotypes() {
+            return Collections.emptySet();
+        }
+
+        @Override
+        public boolean isAlternative() {
+            return false;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/MandatoryInterceptor.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/MandatoryInterceptor.java
new file mode 100755
index 0000000..5d3caeb
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/MandatoryInterceptor.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.annotation.Priority;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.Transactional;
+import javax.transaction.TransactionalException;
+
+@Interceptor
+@Transactional(Transactional.TxType.MANDATORY)
+@Priority(200)
+public class MandatoryInterceptor extends InterceptorBase {
+    @AroundInvoke
+    public Object intercept(final InvocationContext ic) throws Exception {
+        return super.intercept(ic);
+    }
+
+    @Override
+    protected boolean isNewTransaction(final State state) {
+        return false;
+    }
+
+    @Override
+    protected State start() {
+        try {
+            final Transaction transaction = transactionManager.getTransaction();
+            return new State(transaction, transaction);
+        } catch (final SystemException e) {
+            throw new TransactionalException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    protected void commit(final State state) {
+        // no-op
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NeverInterceptor.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NeverInterceptor.java
new file mode 100755
index 0000000..d0de0f2
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NeverInterceptor.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.annotation.Priority;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import javax.transaction.SystemException;
+import javax.transaction.Transactional;
+import javax.transaction.TransactionalException;
+
+@Interceptor
+@Transactional(Transactional.TxType.NEVER)
+@Priority(200)
+public class NeverInterceptor extends InterceptorBase {
+    private static final State STATE = new State(null, null);
+
+    @AroundInvoke
+    public Object intercept(final InvocationContext ic) throws Exception {
+        return super.intercept(ic);
+    }
+
+    @Override
+    protected boolean isNewTransaction(final State state) {
+        return false;
+    }
+
+    @Override
+    protected State start() {
+        try {
+            if (transactionManager.getTransaction() != null) {
+                throw new TransactionalException("@Transactional(NEVER) but a transaction is running", new IllegalStateException());
+            }
+            return STATE;
+        } catch (final SystemException e) {
+            throw new TransactionalException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    protected void commit(final State state) {
+        // no-op
+    }
+
+
+    @Override
+    protected boolean doesForbidUtUsage() {
+        return false;
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NotSupportedInterceptor.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NotSupportedInterceptor.java
new file mode 100755
index 0000000..9064497
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/NotSupportedInterceptor.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.annotation.Priority;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.Transactional;
+import javax.transaction.TransactionalException;
+
+@Interceptor
+@Transactional(Transactional.TxType.NOT_SUPPORTED)
+@Priority(200)
+public class NotSupportedInterceptor extends InterceptorBase {
+    @AroundInvoke
+    public Object intercept(final InvocationContext ic) throws Exception {
+        return super.intercept(ic);
+    }
+
+    @Override
+    protected boolean isNewTransaction(final State state) {
+        return false;
+    }
+
+    @Override
+    protected State start() {
+        try {
+            final Transaction tx = transactionManager.getTransaction();
+            return new State(tx, null);
+        } catch (final SystemException e) {
+            throw new TransactionalException(e.getMessage(), e);
+        }
+    }
+
+    @Override
+    protected void commit(final State state) {
+        if (state.old != null) {
+            try {
+                transactionManager.resume(state.old);
+            } catch (final InvalidTransactionException | SystemException e) {
+                throw new TransactionalException(e.getMessage(), e);
+            }
+        }
+    }
+
+    @Override
+    protected boolean doesForbidUtUsage() {
+        return false;
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredInterceptor.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredInterceptor.java
new file mode 100755
index 0000000..82bbc02
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredInterceptor.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.annotation.Priority;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.Transactional;
+import javax.transaction.TransactionalException;
+
+@Interceptor
+@Transactional(Transactional.TxType.REQUIRED)
+@Priority(200)
+public class RequiredInterceptor extends InterceptorBase {
+    @AroundInvoke
+    public Object intercept(final InvocationContext ic) throws Exception {
+        return super.intercept(ic);
+    }
+
+    @Override
+    protected boolean isNewTransaction(final State state) {
+        return state.old == null;
+    }
+
+    @Override
+    protected State start() {
+        try {
+            final Transaction transaction = transactionManager.getTransaction();
+            final Transaction current;
+            if (transaction == null) {
+                transactionManager.begin();
+                current = transactionManager.getTransaction();
+            } else {
+                current = transaction;
+            }
+            return new State(transaction, current);
+        } catch (final SystemException | NotSupportedException se) {
+            throw new TransactionalException(se.getMessage(), se);
+        }
+    }
+
+    @Override
+    protected void commit(final State state) {
+        if (state.old != state.current) {
+            try {
+                state.current.commit();
+            } catch (final HeuristicMixedException | HeuristicRollbackException | RollbackException | SystemException e) {
+                throw new TransactionalException(e.getMessage(), e);
+            }
+        }
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredNewInterceptor.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredNewInterceptor.java
new file mode 100755
index 0000000..d43e85b
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/RequiredNewInterceptor.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.annotation.Priority;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import javax.transaction.HeuristicMixedException;
+import javax.transaction.HeuristicRollbackException;
+import javax.transaction.InvalidTransactionException;
+import javax.transaction.NotSupportedException;
+import javax.transaction.RollbackException;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.Transactional;
+import javax.transaction.TransactionalException;
+
+@Interceptor
+@Transactional(Transactional.TxType.REQUIRES_NEW)
+@Priority(200)
+public class RequiredNewInterceptor extends InterceptorBase {
+    @AroundInvoke
+    public Object intercept(final InvocationContext ic) throws Exception {
+        return super.intercept(ic);
+    }
+
+    @Override
+    protected boolean isNewTransaction(final State state) {
+        return state.old == null;
+    }
+
+    @Override
+    protected State start() {
+        try {
+            final Transaction transaction = transactionManager.suspend();
+            transactionManager.begin();
+            return new State(transaction, transactionManager.getTransaction());
+        } catch (final SystemException | NotSupportedException se) {
+            throw new TransactionalException(se.getMessage(), se);
+        }
+    }
+
+    @Override
+    protected void commit(final State state) {
+        try {
+            if (state.old != state.current) {
+                try {
+                    state.current.commit();
+                } catch (final HeuristicMixedException | HeuristicRollbackException | RollbackException | SystemException e) {
+                    throw new TransactionalException(e.getMessage(), e);
+                }
+            }
+        } finally {
+            if (state.old != null) {
+                try {
+                    transactionManager.resume(state.old);
+                } catch (final InvalidTransactionException | SystemException e) {
+                    throw new TransactionalException(e.getMessage(), e);
+                }
+            }
+        }
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/SupportsInterceptor.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/SupportsInterceptor.java
new file mode 100755
index 0000000..d60cc19
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/SupportsInterceptor.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.annotation.Priority;
+import javax.interceptor.AroundInvoke;
+import javax.interceptor.Interceptor;
+import javax.interceptor.InvocationContext;
+import javax.transaction.SystemException;
+import javax.transaction.Transaction;
+import javax.transaction.Transactional;
+import javax.transaction.TransactionalException;
+
+@Interceptor
+@Transactional(Transactional.TxType.SUPPORTS)
+@Priority(200)
+public class SupportsInterceptor extends InterceptorBase {
+    @AroundInvoke
+    public Object intercept(final InvocationContext ic) throws Exception {
+        return super.intercept(ic);
+    }
+
+    @Override
+    protected boolean isNewTransaction(final State state) {
+        return false;
+    }
+
+    @Override
+    protected State start() {
+        final Transaction transaction;
+        try {
+            transaction = transactionManager.getTransaction();
+        } catch (final SystemException e) {
+            throw new TransactionalException(e.getMessage(), e);
+        }
+        return new State(transaction, transaction);
+    }
+
+    @Override
+    protected void commit(final State state) {
+        // no-op
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionContext.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionContext.java
new file mode 100755
index 0000000..70230e5
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionContext.java
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.enterprise.context.ContextNotActiveException;
+import javax.enterprise.context.spi.AlterableContext;
+import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
+import javax.transaction.Status;
+import javax.transaction.Synchronization;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionScoped;
+import javax.transaction.TransactionSynchronizationRegistry;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+
+public class TransactionContext implements AlterableContext, Synchronization {
+    private TransactionManager transactionManager;
+    private Map<Contextual<?>, BeanInstanceBag<?>> componentInstanceMap;
+
+    void init(final TransactionManager transactionManager, final TransactionSynchronizationRegistry transactionSynchronizationRegistry) {
+        this.transactionManager = transactionManager;
+        this.componentInstanceMap = Map.class.cast(Proxy.newProxyInstance(
+                Thread.currentThread().getContextClassLoader(), new Class<?>[]{Map.class},
+                new TransactionalMapHandler(this, transactionSynchronizationRegistry)));
+    }
+
+    @Override
+    public boolean isActive() {
+        try {
+            final int status = transactionManager.getTransaction().getStatus();
+            return status == Status.STATUS_ACTIVE || status == Status.STATUS_MARKED_ROLLBACK
+                    || status == Status.STATUS_PREPARED || status == Status.STATUS_PREPARING
+                    || status == Status.STATUS_COMMITTING || status == Status.STATUS_ROLLING_BACK
+                    || status == Status.STATUS_UNKNOWN;
+        } catch (final Throwable e) {
+            return false;
+        }
+    }
+
+    private void checkActive() {
+        if (!isActive()) {
+            throw new ContextNotActiveException("Context with scope annotation @" + getScope().getName() + " is not active");
+        }
+    }
+
+    private <T> BeanInstanceBag<T> createContextualBag(final Contextual<T> contextual, final CreationalContext<T> creationalContext) {
+        final BeanInstanceBag<T> bag = new BeanInstanceBag<>(creationalContext);
+        componentInstanceMap.put(contextual, bag);
+        return bag;
+    }
+
+    @Override
+    public <T> T get(final Contextual<T> component) {
+        checkActive();
+        final BeanInstanceBag bag = componentInstanceMap.get(component);
+        if (bag != null) {
+            return (T) bag.beanInstance;
+        }
+        return null;
+    }
+
+    @Override
+    public <T> T get(Contextual<T> contextual, CreationalContext<T> creationalContext) {
+        checkActive();
+
+        return getInstance(contextual, creationalContext);
+    }
+
+    private <T> T getInstance(final Contextual<T> contextual, final CreationalContext<T> creationalContext) {
+        T instance;
+        BeanInstanceBag<T> bag = (BeanInstanceBag<T>) componentInstanceMap.get(contextual);
+        if (bag == null) {
+            bag = createContextualBag(contextual, creationalContext);
+        }
+
+        instance = bag.beanInstance;
+        if (instance != null) {
+            return instance;
+        } else {
+            if (creationalContext == null) {
+                return null;
+            } else {
+                instance = bag.create(contextual);
+            }
+        }
+
+        return instance;
+    }
+
+    @Override
+    public void destroy(final Contextual<?> contextual) {
+        BeanInstanceBag<?> instance = componentInstanceMap.get(contextual);
+        if (instance == null) {
+            return;
+        }
+
+        CreationalContext<Object> cc = (CreationalContext<Object>) instance.beanCreationalContext;
+        final Object beanInstance = instance.beanInstance;
+        if (beanInstance != null) {
+            destroyInstance((Contextual<Object>) contextual, beanInstance, cc);
+        }
+    }
+
+    private <T> void destroyInstance(final Contextual<T> component, final T instance, final CreationalContext<T> creationalContext) {
+        //Destroy component
+        component.destroy(instance, creationalContext);
+        componentInstanceMap.remove(component);
+    }
+
+    @Override
+    public Class<? extends Annotation> getScope() {
+        return TransactionScoped.class;
+    }
+
+    @Override
+    public void beforeCompletion() {
+        new HashSet<>(componentInstanceMap.keySet()).forEach(this::destroy);
+    }
+
+    @Override
+    public void afterCompletion(final int status) {
+        // no-op
+    }
+
+    private static final class TransactionalMapHandler implements InvocationHandler {
+        private static final String KEY = "@Transactional#meecrowave.map";
+        private final TransactionSynchronizationRegistry registry;
+        private final TransactionContext context;
+
+        private TransactionalMapHandler(final TransactionContext transactionContext, final TransactionSynchronizationRegistry registry) {
+            this.context = transactionContext;
+            this.registry = registry;
+        }
+
+        @Override
+        public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable {
+            try {
+                return method.invoke(findMap(), args);
+            } catch (final InvocationTargetException ite) {
+                throw ite.getCause();
+            }
+        }
+
+        private Map<Contextual<?>, BeanInstanceBag<?>> findMap() {
+            final Object resource = registry.getResource(KEY);
+            if (resource == null) {
+                final Map<Contextual<?>, BeanInstanceBag<?>> map = new HashMap<>();
+                registry.putResource(KEY, map);
+                registry.registerInterposedSynchronization(context);
+                return map;
+            }
+            return Map.class.cast(resource);
+        }
+    }
+
+    private static final class BeanInstanceBag<T> {
+        private final CreationalContext<T> beanCreationalContext;
+        private T beanInstance;
+
+        public BeanInstanceBag(CreationalContext<T> beanCreationalContext) {
+            this.beanCreationalContext = beanCreationalContext;
+        }
+
+        public T create(Contextual<T> contextual) {
+            if (beanInstance == null) {
+                beanInstance = contextual.create(beanCreationalContext);
+            }
+            return beanInstance;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionExceptionMapper.java b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionExceptionMapper.java
new file mode 100644
index 0000000..1c7bb84
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/java/org/apache/meecrowave/jta/TransactionExceptionMapper.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import javax.transaction.TransactionalException;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+import javax.ws.rs.ext.Providers;
+
+@Provider
+public class TransactionExceptionMapper implements ExceptionMapper<TransactionalException> {
+    @Context
+    private Providers providers;
+
+    @Override
+    public Response toResponse(final TransactionalException ejbException) {
+        final Throwable cause = ejbException.getCause();
+        if (cause != null) {
+            final Class causeClass = cause.getClass();
+            final ExceptionMapper exceptionMapper = providers.getExceptionMapper(causeClass);
+            if (exceptionMapper == null) {
+                return defaultResponse(cause);
+            }
+            return exceptionMapper.toResponse(cause);
+        }
+        return defaultResponse(ejbException);
+    }
+
+    private Response defaultResponse(final Throwable cause) {
+        return Response.serverError().type(MediaType.TEXT_PLAIN_TYPE).entity(cause.getMessage()).build();
+    }
+}
diff --git a/trunk/meecrowave-jta/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/trunk/meecrowave-jta/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
new file mode 100644
index 0000000..d08bdaa
--- /dev/null
+++ b/trunk/meecrowave-jta/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
@@ -0,0 +1 @@
+org.apache.meecrowave.jta.JtaExtension
diff --git a/trunk/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/RequiredInterceptorTest.java b/trunk/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/RequiredInterceptorTest.java
new file mode 100644
index 0000000..a02fec3
--- /dev/null
+++ b/trunk/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/RequiredInterceptorTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit.MeecrowaveRule;
+import org.junit.Rule;
+import org.junit.Test;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.transaction.SystemException;
+import javax.transaction.TransactionManager;
+import javax.transaction.Transactional;
+import java.io.IOException;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+public class RequiredInterceptorTest {
+    @Rule
+    public final MeecrowaveRule rule = new MeecrowaveRule(
+            new Meecrowave.Builder().includePackages(RequiredInterceptorTest.class.getName()), "")
+            .inject(this);
+
+    @Inject
+    private Tx tx;
+
+    @Test
+    public void run() throws IOException {
+        tx.asserts();
+    }
+
+    @Transactional
+    @ApplicationScoped
+    public static class Tx {
+        @Inject
+        private TransactionManager manager;
+
+        public void asserts() {
+            try {
+                assertNotNull(manager.getTransaction());
+            } catch (final SystemException e) {
+                fail(e.getMessage());
+            }
+        }
+    }
+}
diff --git a/trunk/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/ScopeTest.java b/trunk/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/ScopeTest.java
new file mode 100644
index 0000000..456cfd1
--- /dev/null
+++ b/trunk/meecrowave-jta/src/test/java/org/apache/meecrowave/jta/ScopeTest.java
@@ -0,0 +1,68 @@
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.meecrowave.jta;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit.MeecrowaveRule;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+
+import javax.annotation.PreDestroy;
+import javax.inject.Inject;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionScoped;
+import java.io.Serializable;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+public class ScopeTest {
+    @Rule
+    public final MeecrowaveRule rule = new MeecrowaveRule(
+            new Meecrowave.Builder().includePackages(ScopeTest.class.getName()), "")
+            .inject(this);
+
+    @Inject
+    private Tx tx;
+
+    @Inject
+    private TransactionManager manager;
+
+    @Test
+    public void run() throws Exception {
+        manager.begin();
+        final AtomicBoolean ref = new AtomicBoolean();
+        tx.handle(ref);
+        Assert.assertFalse(ref.get());
+        manager.commit();
+        Assert.assertTrue(ref.get());
+    }
+
+    @TransactionScoped
+    public static class Tx implements Serializable {
+        private AtomicBoolean ref;
+
+        @PreDestroy
+        private void destroy() {
+            ref.set(true);
+        }
+
+        public void handle(final AtomicBoolean ref) {
+            this.ref = ref;
+        }
+    }
+}
diff --git a/trunk/meecrowave-jta/src/test/resources/META-INF/beans.xml b/trunk/meecrowave-jta/src/test/resources/META-INF/beans.xml
new file mode 100644
index 0000000..2bb54d8
--- /dev/null
+++ b/trunk/meecrowave-jta/src/test/resources/META-INF/beans.xml
@@ -0,0 +1,19 @@
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<beans />
diff --git a/trunk/meecrowave-junit/pom.xml b/trunk/meecrowave-junit/pom.xml
new file mode 100644
index 0000000..a7a47ce
--- /dev/null
+++ b/trunk/meecrowave-junit/pom.xml
@@ -0,0 +1,92 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-junit</artifactId>
+  <name>Meecrowave :: JUnit</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-api</artifactId>
+      <version>${junit5.version}</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+      <version>${junit5.version}</version>
+      <scope>test</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+  </dependencies>
+
+  <properties>
+    <junit5.version>5.0.1</junit5.version>
+  </properties>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <!-- cause of mono runner/rule -->
+          <reuseForks>false</reuseForks>
+        </configuration>
+        <dependencies>
+          <dependency>
+            <groupId>org.junit.platform</groupId>
+            <artifactId>junit-platform-surefire-provider</artifactId>
+            <version>1.0.1</version>
+          </dependency>
+          <dependency>
+            <groupId>org.junit.jupiter</groupId>
+            <artifactId>junit-jupiter-engine</artifactId>
+            <version>${junit5.version}</version>
+          </dependency>
+          <dependency>
+            <groupId>org.junit.vintage</groupId>
+            <artifactId>junit-vintage-engine</artifactId>
+            <version>4.12.1</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/internal/ClassLoaderLock.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/internal/ClassLoaderLock.java
new file mode 100644
index 0000000..418a43b
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/internal/ClassLoaderLock.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.internal;
+
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.config.WebBeansFinder;
+import org.apache.webbeans.corespi.DefaultSingletonService;
+import org.apache.webbeans.spi.SingletonService;
+
+public final class ClassLoaderLock {
+    public static final Lock LOCK = new ReentrantLock();
+
+    public static ClassLoader getUsableContainerLoader() {
+        ClassLoader currentCL = Thread.currentThread().getContextClassLoader();
+        if (currentCL == null) {
+            currentCL = ClassLoaderLock.class.getClassLoader();
+        }
+        if (Boolean.getBoolean("meecrowave.junit.classloaderlock.off")) { // safeguard for advanced cases
+            return currentCL;
+        }
+
+        final SingletonService<WebBeansContext> singletonService = WebBeansFinder.getSingletonService();
+        synchronized (singletonService) {
+            try {
+                if (singletonService instanceof DefaultSingletonService) {
+                    synchronized (singletonService) {
+                        ((DefaultSingletonService) singletonService).register(currentCL, null);
+                        // all fine, it seems we do not have an OWB container for this ClassLoader yet
+
+                        // let's reset it then ;
+                        singletonService.clear(currentCL);
+                    }
+                    return currentCL;
+                }
+            }
+            catch (IllegalArgumentException iae) {
+                // whoops there is already an OWB container registered for this very ClassLoader
+            }
+
+            return new ClassLoader(currentCL) {};
+        }
+    }
+
+    private ClassLoaderLock() {
+        // no-op
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/InjectRule.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/InjectRule.java
new file mode 100644
index 0000000..2829830
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/InjectRule.java
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.CDI;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.testing.Injector;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+public class InjectRule implements TestRule {
+    private final Object instance;
+
+    public InjectRule(final Object instance) {
+        this.instance = instance;
+    }
+
+    @Override
+    public Statement apply(final Statement base, final Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                CreationalContext<?> creationalContext = null;
+                try {
+                    creationalContext = Injector.inject(instance);
+                    Injector.injectConfig(CDI.current().select(Meecrowave.Builder.class).get(), instance);
+                    base.evaluate();
+                } finally {
+                    if (creationalContext != null) {
+                        creationalContext.release();
+                    }
+                }
+            }
+        };
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java
new file mode 100644
index 0000000..ba30e23
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRule.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit;
+
+import org.apache.catalina.Context;
+import org.apache.meecrowave.Meecrowave;
+
+import java.io.File;
+import java.util.function.Consumer;
+
+public class MeecrowaveRule extends MeecrowaveRuleBase<MeecrowaveRule> {
+    private final Meecrowave.Builder configuration;
+    private final String context;
+    private File docBase;
+    private Consumer<Context> customizer;
+
+    public MeecrowaveRule() {
+        this(new Meecrowave.Builder().randomHttpPort(), "");
+    }
+
+    public MeecrowaveRule(final Meecrowave.Builder configuration, final String context) {
+        this.configuration = configuration;
+        this.context = context;
+    }
+
+    public MeecrowaveRule setDocBase(File docBase) {
+        this.docBase = docBase;
+        return this;
+    }
+
+    public MeecrowaveRule setCustomizer(Consumer<Context> customizer) {
+        this.customizer = customizer;
+        return this;
+    }
+
+    @Override
+    public Meecrowave.Builder getConfiguration() {
+        return configuration;
+    }
+
+    @Override
+    protected AutoCloseable onStart() {
+        final Meecrowave meecrowave = new Meecrowave(configuration);
+        meecrowave.start();
+        meecrowave.deployClasspath(new Meecrowave.DeploymentMeta(context, docBase, customizer));
+        return meecrowave;
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java
new file mode 100644
index 0000000..b08f705
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MeecrowaveRuleBase.java
@@ -0,0 +1,119 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.internal.ClassLoaderLock;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.inject.spi.InjectionTarget;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+import static java.util.stream.Collectors.toList;
+
+public abstract class MeecrowaveRuleBase<T extends MeecrowaveRuleBase> implements TestRule {
+    private final Collection<Object> toInject = new ArrayList<>();
+    private final AtomicBoolean started = new AtomicBoolean(false);
+    private ClassLoader meecrowaveCL;
+
+    @Override
+    public Statement apply(final Statement base, final Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                final Thread thread = Thread.currentThread();
+                ClassLoader oldCL = thread.getContextClassLoader();
+                boolean unlocked = false;
+                doLockContext();
+                try {
+                    ClassLoader newCl = getClassLoader();
+                    if (newCl != null) {
+                        thread.setContextClassLoader(newCl);
+                    }
+                    try (final AutoCloseable closeable = onStart()) {
+                        doUnlockContext(unlocked);
+                        unlocked = true;
+
+                        started.set(true);
+                        final Collection<CreationalContext<?>> contexts = toInject.stream()
+                                                                                  .map(MeecrowaveRuleBase::doInject)
+                                                                                  .collect(toList());
+                        try {
+                            base.evaluate();
+                        } finally {
+                            contexts.forEach(CreationalContext::release);
+                            started.set(false);
+                        }
+                    } finally {
+                        thread.setContextClassLoader(oldCL);
+                    }
+                } finally {
+                    doUnlockContext(unlocked);
+                }
+            }
+        };
+    }
+
+    protected void doUnlockContext(final boolean unlocked) {
+        if (!unlocked) {
+            ClassLoaderLock.LOCK.unlock();
+        }
+    }
+
+    protected void doLockContext() {
+        ClassLoaderLock.LOCK.lock();
+    }
+
+    private static CreationalContext<Object> doInject(final Object instance) {
+        final BeanManager bm = CDI.current().getBeanManager();
+        final AnnotatedType<?> annotatedType = bm.createAnnotatedType(instance.getClass());
+        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final CreationalContext<Object> creationalContext = bm.createCreationalContext(null);
+        injectionTarget.inject(instance, creationalContext);
+        return creationalContext;
+    }
+
+    public <T> T inject(final Object instance) {
+        if (started.get()) {
+            doInject(instance); // TODO: store cc to release it
+        } else {
+            toInject.add(instance);
+        }
+        return (T) this;
+    }
+
+    public abstract Meecrowave.Builder getConfiguration();
+
+    protected abstract AutoCloseable onStart();
+
+    protected ClassLoader getClassLoader() {
+        if (meecrowaveCL == null) {
+            meecrowaveCL = ClassLoaderLock.getUsableContainerLoader();
+        }
+        return meecrowaveCL;
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MonoMeecrowave.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MonoMeecrowave.java
new file mode 100644
index 0000000..93f476f
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/MonoMeecrowave.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit;
+
+import java.util.List;
+
+import javax.enterprise.context.spi.CreationalContext;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.testing.Injector;
+import org.apache.meecrowave.testing.MonoBase;
+import org.junit.rules.MethodRule;
+import org.junit.runners.BlockJUnit4ClassRunner;
+import org.junit.runners.model.InitializationError;
+import org.junit.runners.model.Statement;
+
+/**
+ * A MeecrowaveRule starting a single container.
+ * Very awesome for forkCount=1, reuseForks=true
+ *
+ */
+
+public class MonoMeecrowave {
+    private static final MonoBase BASE = new MonoBase();
+
+    public static class Runner extends BlockJUnit4ClassRunner {
+        public Runner(final Class<?> klass) throws InitializationError {
+            super(klass);
+        }
+
+        @Override
+        protected List<MethodRule> rules(final Object test) {
+            final List<MethodRule> rules = super.rules(test);
+            rules.add((base, method, target) -> new Statement() {
+                @Override
+                public void evaluate() throws Throwable {
+                    final MonoBase.Instance instance = BASE.startIfNeeded();
+
+                    final Thread thread = Thread.currentThread();
+                    final ClassLoader originalLoader = thread.getContextClassLoader();
+                    thread.setContextClassLoader(instance.getStartupClassLoader());
+                    try {
+                        configInjection(test.getClass(), test);
+                        final CreationalContext<?> creationalContext = Injector.inject(test);
+                        try {
+                            base.evaluate();
+                        } finally {
+                            creationalContext.release();
+                        }
+                    } finally{
+                        thread.setContextClassLoader(originalLoader);
+                    }
+                }
+
+                private void configInjection(final Class<?> aClass, final Object test) {
+                    Injector.injectConfig(BASE.getConfiguration(), test);
+                    final Class<?> parent = aClass.getSuperclass();
+                    if (parent != null && parent != Object.class) {
+                        configInjection(parent, true);
+                    }
+                }
+            });
+            return rules;
+        }
+    }
+
+    public static class Rule extends MeecrowaveRuleBase<Rule> {
+        @Override
+        public Meecrowave.Builder getConfiguration() {
+            return BASE.getConfiguration();
+        }
+
+        @Override
+        protected AutoCloseable onStart() {
+            final MonoBase.Instance instance = BASE.startIfNeeded();
+            final Thread thread = Thread.currentThread();
+            final ClassLoader originalLoader = thread.getContextClassLoader();
+            thread.setContextClassLoader(instance.getStartupClassLoader());
+            return () -> thread.setContextClassLoader(originalLoader);
+        }
+
+        @Override
+        protected void doUnlockContext(final boolean unlocked) {
+            // no-op: done in the monobase
+        }
+
+        @Override
+        protected void doLockContext() {
+            // no-op: done in the monobase
+        }
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/ScopeRule.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/ScopeRule.java
new file mode 100644
index 0000000..d2802b3
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit/ScopeRule.java
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit;
+
+import static java.util.Arrays.asList;
+
+import java.lang.annotation.Annotation;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
+import org.junit.rules.TestRule;
+import org.junit.runner.Description;
+import org.junit.runners.model.Statement;
+
+public class ScopeRule implements TestRule {
+    private final List<Class<? extends Annotation>> scopes;
+
+    public ScopeRule(final Class<?>... scopes) {
+        this.scopes = new ArrayList(asList(scopes));
+    }
+
+    @Override
+    public Statement apply(final Statement base, final Description description) {
+        return new Statement() {
+            @Override
+            public void evaluate() throws Throwable {
+                final ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
+                try {
+                    scopes.forEach(s -> contextsService.startContext(s, null));
+                    base.evaluate();
+                } finally {
+                    Collections.reverse(scopes);
+                    scopes.forEach(s -> contextsService.endContext(s, null));
+                    Collections.reverse(scopes);
+                }
+            }
+        };
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java
new file mode 100644
index 0000000..3604e1a
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveConfig.java
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit5;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import java.lang.annotation.Annotation;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target(TYPE)
+@Retention(RUNTIME)
+@ExtendWith(MeecrowaveExtension.class)
+public @interface MeecrowaveConfig {
+    // deployment related config
+    String context() default "";
+
+    // container config (note: ensure to keep type and default matching, see MeecrowaveExtension impl)
+    int httpPort() default  -1;
+    int httpsPort() default -1;
+    int stopPort() default -1;
+    String host() default "localhost";
+    String dir() default "";
+    String serverXml() default "";
+    boolean keepServerXmlAsThis() default false;
+    boolean quickSession() default true;
+    boolean skipHttp() default false;
+    boolean ssl() default false;
+    String keystoreFile() default "";
+    String keystorePass() default "";
+    String keystoreType() default "JKS";
+    String clientAuth() default "";
+    String keyAlias() default "";
+    String sslProtocol() default "";
+    String webXml() default "";
+    boolean http2() default false;
+    String tempDir() default "";
+    boolean webResourceCached() default false;
+    String conf() default "";
+    boolean deleteBaseOnStartup() default true;
+    String jaxrsMapping() default "/*";
+    boolean cdiConversation() default false;
+    boolean jaxrsProviderSetup() default true;
+    String jaxrsDefaultProviders() default "";
+    boolean jaxrsLogProviders() default false;
+    String jsonpBufferStrategy() default "QUEUE";
+    int jsonpMaxStringLen() default 10 * 1024 * 1024;
+    int jsonpMaxReadBufferLen() default 64 * 1024;
+    int jsonpMaxWriteBufferLen() default 64 * 1024;
+    boolean jsonpSupportsComment() default false;
+    boolean jsonpPrettify() default false;
+    String jsonbEncoding() default "UTF-8";
+    boolean jsonbNulls() default false;
+    boolean jsonbIJson() default false;
+    boolean jsonbPrettify() default false;
+    String jsonbBinaryStrategy() default "";
+    String jsonbNamingStrategy() default "";
+    String jsonbOrderStrategy() default "";
+    boolean loggingGlobalSetup() default true;
+    boolean tomcatScanning() default true;
+    boolean tomcatAutoSetup() default true;
+    boolean useShutdownHook() default true;
+    String tomcatFilter() default "";
+    boolean useTomcatDefaults() default true;
+    boolean tomcatWrapLoader() default false;
+    String sharedLibraries() default "";
+    boolean useLog4j2JulLogManager() default false;
+
+    Class<? extends Annotation>[] scopes() default {};
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
new file mode 100644
index 0000000..8e5b2bb
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MeecrowaveExtension.java
@@ -0,0 +1,127 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit5;
+
+import static java.util.Arrays.asList;
+
+import java.io.File;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Stream;
+
+import javax.enterprise.context.spi.CreationalContext;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.testing.Injector;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.spi.ContextsService;
+import org.junit.jupiter.api.extension.AfterAllCallback;
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+
+public class MeecrowaveExtension implements BeforeAllCallback, AfterAllCallback, BeforeEachCallback, AfterEachCallback {
+    private static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(MeecrowaveExtension.class.getName());
+
+    @Override
+    public void beforeAll(final ExtensionContext context) throws Exception {
+        final Meecrowave.Builder builder = new Meecrowave.Builder();
+        final Optional<MeecrowaveConfig> meecrowaveConfig = context.getElement().map(e -> e.getAnnotation(MeecrowaveConfig.class));
+        final String ctx;
+        if (meecrowaveConfig.isPresent()) {
+            final MeecrowaveConfig config = meecrowaveConfig.get();
+            ctx = config.context();
+
+            for (final Method method : MeecrowaveConfig.class.getMethods()) {
+                if (MeecrowaveConfig.class != method.getDeclaringClass()) {
+                    continue;
+                }
+
+                try {
+                    final Object value = method.invoke(config);
+
+                    final Field configField = Meecrowave.Builder.class.getDeclaredField(method.getName());
+                    if (!configField.isAccessible()) {
+                        configField.setAccessible(true);
+                    }
+
+                    if (value != null && (!String.class.isInstance(value) || !value.toString().isEmpty())) {
+                        if (!configField.isAccessible()) {
+                            configField.setAccessible(true);
+                        }
+                        configField.set(builder, File.class == configField.getType() ? /*we use string instead */new File(value.toString()) : value);
+                    }
+                } catch (final NoSuchFieldException nsfe) {
+                    // ignored
+                } catch (final Exception e) {
+                    throw new IllegalStateException(e);
+                }
+            }
+
+            if (builder.getHttpPort() < 0) {
+                builder.randomHttpPort();
+            }
+        } else {
+            ctx = "";
+        }
+        final Meecrowave meecrowave = new Meecrowave(builder);
+        context.getStore(NAMESPACE).put(Meecrowave.class.getName(), meecrowave);
+        context.getStore(NAMESPACE).put(Meecrowave.Builder.class.getName(), builder);
+        meecrowave.bake(ctx);
+    }
+
+    @Override
+    public void afterAll(final ExtensionContext context) throws Exception {
+        Meecrowave.class.cast(context.getStore(NAMESPACE).get(Meecrowave.class.getName())).close();
+    }
+
+    @Override
+    public void beforeEach(final ExtensionContext context) throws Exception {
+        getScopes(context).ifPresent(scopes -> {
+           final ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
+           Stream.of(scopes).forEach(s -> contextsService.startContext(s, null));
+        });
+        context.getStore(NAMESPACE).put(CreationalContext.class.getName(), Injector.inject(context.getTestInstance().orElse(null)));
+        Injector.injectConfig(Meecrowave.Builder.class.cast(context.getStore(NAMESPACE).get(Meecrowave.Builder.class.getName())), context.getTestInstance().orElse(null));
+    }
+
+    @Override
+    public void afterEach(final ExtensionContext context) throws Exception {
+        CreationalContext.class.cast(context.getStore(NAMESPACE).get(CreationalContext.class.getName())).release();
+        getScopes(context).ifPresent(scopes -> {
+            final ContextsService contextsService = WebBeansContext.currentInstance().getContextsService();
+            final List<Class<? extends Annotation>> list = new ArrayList<>(asList(scopes));
+            Collections.reverse(list);
+            list.forEach(s -> contextsService.endContext(s, null));
+        });
+    }
+
+    private Optional<Class<? extends Annotation>[]> getScopes(final ExtensionContext context) {
+        return context.getElement()
+                      .map(e -> e.getAnnotation(MeecrowaveConfig.class))
+                      .map(MeecrowaveConfig::scopes)
+                      .filter(s -> s.length > 0);
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveConfig.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveConfig.java
new file mode 100644
index 0000000..4fe3bce
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveConfig.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit5;
+
+import org.junit.jupiter.api.extension.ExtendWith;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.TYPE;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target(TYPE)
+@Retention(RUNTIME)
+@ExtendWith(MonoMeecrowaveExtension.class)
+public @interface MonoMeecrowaveConfig {
+    // no config since it is shared
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
new file mode 100644
index 0000000..9fb376b
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/junit5/MonoMeecrowaveExtension.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit5;
+
+import javax.enterprise.context.spi.CreationalContext;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.testing.Injector;
+import org.apache.meecrowave.testing.MonoBase;
+import org.junit.jupiter.api.extension.AfterEachCallback;
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.BeforeEachCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+
+public class MonoMeecrowaveExtension implements BeforeAllCallback, BeforeEachCallback, AfterEachCallback {
+    private static final MonoBase BASE = new MonoBase();
+    private static final ExtensionContext.Namespace NAMESPACE = ExtensionContext.Namespace.create(MonoMeecrowaveExtension.class.getName());
+
+    @Override
+    public void beforeAll(final ExtensionContext context) throws Exception {
+        context.getStore(NAMESPACE).put(Meecrowave.Builder.class.getName(), BASE.startIfNeeded());
+    }
+
+    @Override
+    public void beforeEach(final ExtensionContext context) throws Exception {
+        context.getStore(NAMESPACE).put(CreationalContext.class.getName(), Injector.inject(context.getTestInstance().orElse(null)));
+        Injector.injectConfig(Meecrowave.Builder.class.cast(context.getStore(NAMESPACE).get(Meecrowave.Builder.class.getName())), context.getTestInstance().orElse(null));
+    }
+
+    @Override
+    public void afterEach(final ExtensionContext context) throws Exception {
+        CreationalContext.class.cast(context.getStore(NAMESPACE).get(CreationalContext.class.getName())).release();
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/ConfigurationInject.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/ConfigurationInject.java
new file mode 100644
index 0000000..20217c4
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/ConfigurationInject.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.testing;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+@Target(FIELD)
+@Retention(RUNTIME)
+public @interface ConfigurationInject {
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/Injector.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/Injector.java
new file mode 100644
index 0000000..55e0dd3
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/Injector.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.testing;
+
+import org.apache.meecrowave.Meecrowave;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.CDI;
+import javax.enterprise.inject.spi.InjectionTarget;
+import java.util.stream.Stream;
+
+public final class Injector {
+    private Injector() {
+        // no-op
+    }
+
+    public static CreationalContext<?> inject(final Object testInstance) {
+        if (testInstance == null) {
+            return null;
+        }
+        final BeanManager bm = CDI.current().getBeanManager();
+        final AnnotatedType<?> annotatedType = bm.createAnnotatedType(testInstance.getClass());
+        final InjectionTarget injectionTarget = bm.createInjectionTarget(annotatedType);
+        final CreationalContext<?> creationalContext = bm.createCreationalContext(null);
+        injectionTarget.inject(testInstance, creationalContext);
+        return creationalContext;
+    }
+
+    public static void injectConfig(final Meecrowave.Builder config, final Object test) {
+        if (test == null) {
+            return;
+        }
+        final Class<?> aClass = test.getClass();
+        Stream.of(aClass.getDeclaredFields())
+                .filter(f -> f.isAnnotationPresent(ConfigurationInject.class))
+                .forEach(f -> {
+                    if (!f.isAccessible()) {
+                        f.setAccessible(true);
+                    }
+                    try {
+                        f.set(test, config);
+                    } catch (final IllegalAccessException e) {
+                        throw new IllegalStateException(e);
+                    }
+                });
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
new file mode 100644
index 0000000..d88e3fa
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/java/org/apache/meecrowave/testing/MonoBase.java
@@ -0,0 +1,169 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.testing;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.internal.ClassLoaderLock;
+
+import java.io.File;
+import java.util.Comparator;
+import java.util.ServiceLoader;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.stream.StreamSupport;
+
+public class MonoBase {
+    private static final AtomicReference<Instance> CONTAINER = new AtomicReference<>();
+
+    public Meecrowave.Builder doBoot() {
+        final Meecrowave.Builder configuration = new Meecrowave.Builder().randomHttpPort().noShutdownHook(/*the rule does*/);
+        boolean unlocked = false;
+        ClassLoaderLock.LOCK.lock();
+        try {
+            final ClassLoader originalCL = Thread.currentThread().getContextClassLoader();
+            ClassLoaderLock.LOCK.lock();
+            final ClassLoader containerLoader = ClassLoaderLock.getUsableContainerLoader();
+
+            final Meecrowave meecrowave = new Meecrowave(configuration);
+            if (CONTAINER.compareAndSet(null, new Instance(meecrowave, configuration, containerLoader))) {
+                final Configuration runnerConfig = StreamSupport.stream(ServiceLoader.load(Configuration.class)
+                                                                                     .spliterator(), false)
+                                                                .sorted(Comparator.comparingInt(Configuration::order))
+                                                                .findFirst()
+                                                                .orElseGet(() -> new Configuration() {});
+
+                runnerConfig.beforeStarts();
+
+                final File war = runnerConfig.application();
+                final Thread thread = Thread.currentThread();
+                if (containerLoader != originalCL) {
+                    thread.setContextClassLoader(containerLoader);
+                }
+                try {
+                    if (war == null) {
+                        meecrowave.bake(runnerConfig.context());
+                    } else {
+                        meecrowave.deployWebapp(runnerConfig.context(), runnerConfig.application());
+                    }
+                } finally {
+                    if (containerLoader != originalCL) {
+                        thread.setContextClassLoader(originalCL);
+                    }
+                }
+                ClassLoaderLock.LOCK.unlock();
+                unlocked = true;
+
+                runnerConfig.afterStarts();
+
+                Runtime.getRuntime()
+                       .addShutdownHook(new Thread() {
+                           {
+                               setName("Meecrowave-mono-rule-stopping");
+                           }
+
+                           @Override
+                           public void run() {
+                               try {
+                                   runnerConfig.beforeStops();
+                               } finally {
+                                   try {
+                                       meecrowave.close();
+                                   } finally {
+                                       runnerConfig.afterStops();
+                                   }
+                               }
+                           }
+                       });
+            }
+        } finally {
+            if (!unlocked) {
+                ClassLoaderLock.LOCK.unlock();
+            }
+        }
+        return getConfiguration();
+    }
+
+    public Meecrowave.Builder getConfiguration() {
+        return CONTAINER.get().configuration;
+    }
+
+    public Instance startIfNeeded() {
+        if (CONTAINER.get() == null) { // yes synchro could be simpler but it does the job, feel free to rewrite it
+            synchronized (CONTAINER) {
+                if (CONTAINER.get() == null) {
+                    doBoot();
+                }
+            }
+        }
+        return CONTAINER.get();
+    }
+
+    public static final class Instance {
+        private final Meecrowave container;
+        private final Meecrowave.Builder configuration;
+        private final ClassLoader startupClassLoader;
+
+        private Instance(final Meecrowave container, final Meecrowave.Builder configuration, final ClassLoader startupClassLoader) {
+            this.container = container;
+            this.configuration = configuration;
+            this.startupClassLoader = startupClassLoader;
+        }
+
+        public Meecrowave getContainer() {
+            return container;
+        }
+
+        public Meecrowave.Builder getConfiguration() {
+            return configuration;
+        }
+
+        public ClassLoader getStartupClassLoader() {
+            return startupClassLoader;
+        }
+    }
+
+    public interface Configuration {
+        default int order() {
+            return 0;
+        }
+
+        default String context() {
+            return "";
+        }
+
+        default File application() {
+            return null;
+        }
+
+        default void beforeStarts() {
+            // no-op
+        }
+
+        default void afterStarts() {
+            // no-op
+        }
+
+        default void beforeStops() {
+            // no-op
+        }
+
+        default void afterStops() {
+            // no-op
+        }
+    }
+}
diff --git a/trunk/meecrowave-junit/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-junit/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/trunk/meecrowave-junit/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-junit/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..442fa94
--- /dev/null
+++ b/trunk/meecrowave-junit/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,5 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java b/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java
new file mode 100644
index 0000000..bb303c6
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MeecrowaveRuleTest.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit;
+
+import org.apache.meecrowave.io.IO;
+import org.app.MyAppClass;
+import org.junit.ClassRule;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.inject.Inject;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+
+public class MeecrowaveRuleTest {
+    @ClassRule
+    public static final MeecrowaveRule RULE = new MeecrowaveRule();
+
+    @Rule
+    public final TestRule injectRule = new InjectRule(this);
+
+    private @Inject MyAppClass myApp;
+
+    @Test
+    public void test() throws IOException {
+        assertEquals("simple", slurp(new URL("http://localhost:" + RULE.getConfiguration().getHttpPort() + "/api/test")));
+
+        assertNotNull(myApp);
+    }
+
+    private String slurp(final URL url) {
+        try (final InputStream is = url.openStream()) {
+            return IO.toString(is);
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+        return null;
+    }
+}
diff --git a/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MonoMeecrowaveRuleTest.java b/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MonoMeecrowaveRuleTest.java
new file mode 100644
index 0000000..d1bde3e
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit/MonoMeecrowaveRuleTest.java
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.junit.rules.RuleChain.outerRule;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.enterprise.context.RequestScoped;
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+
+import org.apache.meecrowave.io.IO;
+import org.app.MyAppClass;
+import org.app.MyReqClass;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.TestRule;
+
+public class MonoMeecrowaveRuleTest {
+    private final MonoMeecrowave.Rule meecrowave = new MonoMeecrowave.Rule().inject(this);
+
+    @Rule
+    public final TestRule scopeRule = outerRule(meecrowave)
+            .around(new ScopeRule(RequestScoped.class, SessionScoped.class));
+
+    @Rule
+    public final TestRule injectRule = new InjectRule(this);
+
+    private static int count = 0;
+
+    private @Inject MyAppClass appClass;
+    private @Inject MyReqClass reqClass;
+
+
+    @Test
+    public void test() throws IOException {
+        assertEquals("simple", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/api/test")));
+
+        testScopes();
+    }
+
+    @Test
+    public void anotherTest() throws IOException {
+        assertEquals("simple", slurp(new URL("http://localhost:" + meecrowave.getConfiguration().getHttpPort() + "/api/test")));
+
+        testScopes();
+    }
+
+    private void testScopes() {
+        count++;
+
+        if (count == 2) {
+            assertEquals("beenhere", appClass.getX());
+            assertEquals("init", reqClass.getX());
+        }
+        else {
+            reqClass.setX("beenhere");
+            appClass.setX("beenhere");
+        }
+    }
+
+
+    private String slurp(final URL url) {
+        try (final InputStream is = url.openStream()) {
+            return IO.toString(is);
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+        return null;
+    }
+
+}
diff --git a/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java b/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
new file mode 100644
index 0000000..c4d6986
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/apache/meecrowave/junit5/MeecrowaveConfigTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.junit5;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.io.IO;
+import org.apache.meecrowave.testing.ConfigurationInject;
+import org.junit.jupiter.api.Test;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+@MeecrowaveConfig
+public class MeecrowaveConfigTest {
+    @ConfigurationInject
+    private Meecrowave.Builder config;
+
+    @Test
+    public void run() throws MalformedURLException {
+        assertEquals("simple", slurp(new URL("http://localhost:" + config.getHttpPort() + "/api/test")));
+    }
+
+    private String slurp(final URL url) {
+        try (final InputStream is = url.openStream()) {
+            return IO.toString(is);
+        } catch (final IOException e) {
+            fail(e.getMessage());
+        }
+        return null;
+    }
+}
diff --git a/trunk/meecrowave-junit/src/test/java/org/app/Endpoint.java b/trunk/meecrowave-junit/src/test/java/org/app/Endpoint.java
new file mode 100644
index 0000000..67622ba
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/app/Endpoint.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("test")
+@ApplicationScoped
+public class Endpoint {
+    @Inject
+    private Injectable injectable;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String simple() {
+        return Boolean.parseBoolean(injectable.injected()) ? "simple" : "fail";
+    }
+
+    @GET
+    @Path("json")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Simple json() {
+        return new Simple("test");
+    }
+
+    public static class Simple {
+        private String name;
+
+        public Simple() {
+            // no-op
+        }
+
+        public Simple(final String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(final String name) {
+            this.name = name;
+        }
+    }
+}
diff --git a/trunk/meecrowave-junit/src/test/java/org/app/Injectable.java b/trunk/meecrowave-junit/src/test/java/org/app/Injectable.java
new file mode 100644
index 0000000..2b8cc7f
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/app/Injectable.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class Injectable {
+    public String injected() {
+        return "true";
+    }
+}
diff --git a/trunk/meecrowave-junit/src/test/java/org/app/MyAppClass.java b/trunk/meecrowave-junit/src/test/java/org/app/MyAppClass.java
new file mode 100644
index 0000000..e817188
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/app/MyAppClass.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.ApplicationScoped;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+@ApplicationScoped
+public class MyAppClass {
+    private String x = "init";
+
+    public String getX() {
+        return x;
+    }
+
+    public void setX(String x) {
+        this.x = x;
+    }
+}
diff --git a/trunk/meecrowave-junit/src/test/java/org/app/MyReqClass.java b/trunk/meecrowave-junit/src/test/java/org/app/MyReqClass.java
new file mode 100644
index 0000000..f229682
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/app/MyReqClass.java
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.RequestScoped;
+
+/**
+ * @author <a href="mailto:struberg@yahoo.de">Mark Struberg</a>
+ */
+@RequestScoped
+public class MyReqClass {
+    private String x = "init";
+
+    public String getX() {
+        return x;
+    }
+
+    public void setX(String x) {
+        this.x = x;
+    }
+}
diff --git a/trunk/meecrowave-junit/src/test/java/org/app/RsApp.java b/trunk/meecrowave-junit/src/test/java/org/app/RsApp.java
new file mode 100644
index 0000000..1463b98
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/java/org/app/RsApp.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@Dependent
+@ApplicationPath("api")
+public class RsApp extends Application {
+}
diff --git a/trunk/meecrowave-junit/src/test/resources/META-INF/beans.xml b/trunk/meecrowave-junit/src/test/resources/META-INF/beans.xml
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/trunk/meecrowave-junit/src/test/resources/META-INF/beans.xml
diff --git a/trunk/meecrowave-maven-plugin/pom.xml b/trunk/meecrowave-maven-plugin/pom.xml
new file mode 100644
index 0000000..8e45f45
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/pom.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <groupId>org.apache.meecrowave</groupId>
+    <artifactId>meecrowave</artifactId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-maven-plugin</artifactId>
+  <name>Meecrowave :: Maven</name>
+  <packaging>maven-plugin</packaging>
+
+  <properties>
+    <maven.version>3.3.9</maven.version>
+  </properties>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>${maven.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>javax.enterprise</groupId>
+          <artifactId>cdi-api</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-core</artifactId>
+      <version>${maven.version}</version>
+      <exclusions>
+        <exclusion>
+          <groupId>javax.inject</groupId>
+          <artifactId>javax.inject</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugin-tools</groupId>
+      <artifactId>maven-plugin-annotations</artifactId>
+      <version>3.3</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-compress</artifactId>
+      <version>1.11</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.maven.plugin-testing</groupId>
+      <artifactId>maven-plugin-testing-harness</artifactId>
+      <version>3.3.0</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-compat</artifactId>
+      <version>${maven.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.tomee</groupId>
+      <artifactId>ziplock</artifactId>
+      <version>7.0.3</version>
+      <scope>test</scope>
+      <exclusions>
+        <exclusion>
+          <groupId>org.apache.tomee</groupId>
+          <artifactId>javaee-api</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.apache.tomee</groupId>
+          <artifactId>openejb-jee</artifactId>
+        </exclusion>
+        <exclusion>
+          <groupId>org.jboss.shrinkwrap</groupId>
+          <artifactId>shrinkwrap-api</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <version>3.5</version>
+        <executions>
+          <execution>
+            <id>mojo-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+              <goal>helpmojo</goal>
+            </goals>
+          </execution>
+        </executions>
+        <configuration>
+          <goalPrefix>meecrowave</goalPrefix>
+          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+
+  <reporting>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <version>${maven.version}</version>
+      </plugin>
+    </plugins>
+  </reporting>
+</project>
diff --git a/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveBakeMojo.java b/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveBakeMojo.java
new file mode 100644
index 0000000..ecc21c4
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveBakeMojo.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.maven;
+
+import org.apache.maven.plugins.annotations.Mojo;
+
+import static org.apache.maven.plugins.annotations.ResolutionScope.RUNTIME_PLUS_SYSTEM;
+
+/**
+ * Just an alias for run Mojo.
+ */
+@Mojo(name = "bake", requiresDependencyResolution = RUNTIME_PLUS_SYSTEM)
+public class MeecrowaveBakeMojo extends MeecrowaveRunMojo {
+}
diff --git a/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveBundleMojo.java b/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveBundleMojo.java
new file mode 100644
index 0000000..5379f98
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveBundleMojo.java
@@ -0,0 +1,527 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.maven;
+
+import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
+import org.apache.commons.lang3.text.StrSubstitutor;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugins.annotations.Component;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.DefaultDependencyResolutionRequest;
+import org.apache.maven.project.DependencyResolutionException;
+import org.apache.maven.project.DependencyResolutionRequest;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.MavenProjectHelper;
+import org.apache.maven.project.ProjectDependenciesResolver;
+import org.eclipse.aether.RepositorySystem;
+import org.eclipse.aether.RepositorySystemSession;
+import org.eclipse.aether.artifact.DefaultArtifact;
+import org.eclipse.aether.graph.DependencyNode;
+import org.eclipse.aether.graph.DependencyVisitor;
+import org.eclipse.aether.impl.ArtifactResolver;
+import org.eclipse.aether.repository.LocalRepositoryManager;
+import org.eclipse.aether.repository.RemoteRepository;
+import org.eclipse.aether.resolution.ArtifactRequest;
+import org.eclipse.aether.resolution.ArtifactResolutionException;
+import org.eclipse.aether.resolution.ArtifactResult;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
+import java.util.stream.Stream;
+import java.util.zip.GZIPOutputStream;
+
+import static java.util.Locale.ENGLISH;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toList;
+import static org.apache.maven.plugins.annotations.ResolutionScope.RUNTIME_PLUS_SYSTEM;
+
+@Mojo(name = "bundle", requiresDependencyResolution = RUNTIME_PLUS_SYSTEM)
+public class MeecrowaveBundleMojo extends AbstractMojo {
+    private static final String DELETE_TEXT = "Just there to not loose the folder cause it is empty, you can safely delete.";
+
+    @Parameter(property = "meecrowave.main", defaultValue = "org.apache.meecrowave.runner.Cli")
+    private String main;
+
+    @Parameter(property = "meecrowave.scopes", defaultValue = "compile,runtime")
+    private Collection<String> scopes;
+
+    /**
+     * A directory with bin/ files like setenv.sh.
+     */
+    @Parameter(property = "meecrowave.bin", defaultValue = "src/main/meecrowave/bin")
+    private String bin;
+
+    /**
+     * A directory with configuration which should be put into the final bundle.
+     */
+    @Parameter(property = "meecrowave.conf", defaultValue = "src/main/meecrowave/conf")
+    private String conf;
+
+    @Parameter(property = "meecrowave.libs")
+    private Collection<String> libs;
+
+    @Parameter(property = "meecrowave.skip", defaultValue = "false")
+    private boolean skip;
+
+    @Parameter(property = "meecrowave.formats", defaultValue = "zip")
+    private Collection<String> formats;
+
+    @Parameter(property = "meecrowave.classifier")
+    private String classifier;
+
+    @Parameter(property = "meecrowave.attach", defaultValue = "true")
+    private boolean attach;
+
+    @Parameter(property = "meecrowave.no-root", defaultValue = "false")
+    private boolean skipArchiveRootFolder;
+
+    @Parameter(property = "meecrowave.keep-exploded-folder", defaultValue = "false")
+    private boolean keepExplodedFolder;
+
+    @Parameter(property = "meecrowave.root-name")
+    private String rootName;
+
+    @Parameter(defaultValue = "${project.build.directory}", readonly = true)
+    private File buildDirectory;
+
+    @Parameter(defaultValue = "${project.artifactId}", readonly = true)
+    private String artifactId;
+
+    @Parameter(defaultValue = "${project.build.directory}/${project.build.finalName}.${project.packaging}", readonly = true)
+    private File app;
+
+    @Parameter(defaultValue = "${project}", readonly = true)
+    private MavenProject project;
+
+    @Parameter(property = "meecrowave.enforce-commons_cli", defaultValue = "true")
+    private boolean enforceCommonsCli; // set to false if you use a packaged version of commons-cli not named commons-cli*.jar
+
+    @Parameter(property = "meecrowave.enforce-meecrowave", defaultValue = "true")
+    private boolean enforceMeecrowave; // set to false if you package meecrowave runner
+
+    @Component
+    private MavenProjectHelper projectHelper;
+
+    @Component
+    private ArtifactResolver resolver;
+
+    @Component
+    private RepositorySystem repositorySystem;
+
+    @Component
+    private ProjectDependenciesResolver dependenciesResolver;
+
+    @Parameter(defaultValue = "${repositorySystemSession}")
+    private RepositorySystemSession session;
+
+    @Parameter(defaultValue = "${project.remoteProjectRepositories}")
+    private List<RemoteRepository> remoteRepositories;
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if (skip) {
+            getLog().warn(getClass().getSimpleName() + " skipped");
+            return;
+        }
+
+        final File distroFolder = new File(buildDirectory, rootName == null ? artifactId + "-distribution" : rootName);
+        if (distroFolder.exists()) {
+            delete(distroFolder);
+        }
+
+        Stream.of("bin", "conf", "logs", "lib").forEach(i -> new File(distroFolder, i).mkdirs());
+
+        // TODO: add .bat support
+        try (final BufferedReader reader = new BufferedReader(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream("bin/meecrowave.sh")))) {
+            write(new File(distroFolder, "bin/meecrowave.sh"), StrSubstitutor.replace(reader.lines().collect(joining("\n")), new HashMap<String, String>() {{
+                put("main", main);
+            }}));
+        } catch (final IOException e) {
+            throw new MojoExecutionException(e.getMessage(), e);
+        }
+
+        copyProvidedFiles(distroFolder);
+
+        write(new File(distroFolder, "logs/you_can_safely_delete.txt"), DELETE_TEXT);
+        final Collection<String> includedArtifacts = project.getArtifacts().stream()
+                .filter(this::isIncluded)
+                .map(a -> {
+                    addLib(distroFolder, a.getFile());
+                    return a.getArtifactId();
+                }).collect(toList());
+        if (app.exists()) {
+            addLib(distroFolder, app);
+        }
+        if (enforceCommonsCli && !includedArtifacts.contains("commons-cli")) {
+            addLib(distroFolder, resolve("commons-cli", "commons-cli", "1.3.1", ""));
+        }
+        if (libs != null) {
+            libs.forEach(l -> {
+                final String[] c = l.split(":");
+                if (c.length != 3 && c.length != 4) {
+                    throw new IllegalArgumentException("libs syntax is groupId:artifactId:version[:classifier]");
+                }
+                addLib(distroFolder, resolve(c[0], c[1], c[2], c.length == 4 ? c[3] : ""));
+            });
+        }
+        if (enforceMeecrowave && !includedArtifacts.contains("meecrowave-core")) {
+            final DependencyResolutionRequest request = new DefaultDependencyResolutionRequest();
+            request.setMavenProject(new MavenProject() {{
+                getDependencies().add(new Dependency() {{
+                    setGroupId("org.apache.meecrowave");
+                    setArtifactId("meecrowave-core");
+                    setVersion(findVersion());
+                }});
+            }});
+            request.setRepositorySession(session);
+            try {
+                dependenciesResolver.resolve(request).getDependencyGraph().accept(new DependencyVisitor() {
+                    @Override
+                    public boolean visitEnter(final DependencyNode node) {
+                        return true;
+                    }
+
+                    @Override
+                    public boolean visitLeave(final DependencyNode node) {
+                        final org.eclipse.aether.artifact.Artifact artifact = node.getArtifact();
+                        if (artifact != null && !includedArtifacts.contains(artifact.getArtifactId())) {
+                            addLib(distroFolder, artifact.getFile());
+                        }
+                        return true;
+                    }
+                });
+            } catch (final DependencyResolutionException e) {
+                throw new MojoExecutionException(e.getMessage(), e);
+            }
+        }
+
+        final Path prefix = skipArchiveRootFolder ? distroFolder.toPath() : distroFolder.getParentFile().toPath();
+        for (final String format : formats) {
+            getLog().info(format + "-ing Custom Meecrowave Distribution");
+
+            final File output = new File(buildDirectory, artifactId + "-meecrowave-distribution." + format);
+
+            switch (format.toLowerCase(ENGLISH)) {
+                case "tar.gz":
+                    try (final TarArchiveOutputStream tarGz =
+                                 new TarArchiveOutputStream(new GZIPOutputStream(new FileOutputStream(output)))) {
+                        tarGz.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
+                        for (final String entry : distroFolder.list()) {
+                            tarGz(tarGz, new File(distroFolder, entry), prefix);
+                        }
+                    } catch (final IOException e) {
+                        throw new MojoExecutionException(e.getMessage(), e);
+                    }
+                    break;
+                case "zip":
+                    try (final ZipArchiveOutputStream zos =
+                                 new ZipArchiveOutputStream(new FileOutputStream(output))) {
+                        for (final String entry : distroFolder.list()) {
+                            zip(zos, new File(distroFolder, entry), prefix);
+                        }
+                    } catch (final IOException e) {
+                        throw new MojoExecutionException(e.getMessage(), e);
+                    }
+                    break;
+                default:
+                    throw new IllegalArgumentException(format + " is not supported");
+            }
+
+            attach(format, output);
+        }
+
+        if (!keepExplodedFolder) {
+            delete(distroFolder);
+        }
+    }
+
+
+    /**
+     * Copy over all files from src/meecrowave/*
+     * TODO!
+     * The following files get added with default content if not found there:
+     * <ul>
+     *     <li>conf/log4j2.xml</li>
+     *     <li>conf/meecrowave.properties</li>
+     * </ul>
+     * @param distroFolder
+     */
+    private void copyProvidedFiles(File distroFolder) throws MojoExecutionException
+    {
+        boolean customLog4jConfig = false;
+        boolean customMwProperties = false;
+        Log log = getLog();
+
+        File srcConf = new File(project.getBasedir(), conf);
+        if (srcConf.exists() && srcConf.isDirectory()) {
+            File targetConf = new File(distroFolder, "conf");
+            targetConf.mkdirs();
+
+            for (File file : srcConf.listFiles()) {
+                String fileName = file.getName();
+                if ("log4j2.xml".equals(fileName)) {
+                    customLog4jConfig = true;
+                }
+                if ("meecrowave.properties".equals(fileName)) {
+                    customMwProperties = true;
+                }
+
+                if (fileName.startsWith(".")) {
+                    // hidden file -> ignore
+                    continue;
+                }
+
+                try {
+                    if (log.isDebugEnabled()) {
+                        log.debug("Copying file from " + file + " to " + targetConf);
+                    }
+                    Files.copy(file.toPath(), new File(targetConf, fileName).toPath());
+                }
+                catch (IOException e) {
+                    throw new MojoExecutionException("Could not copy file " + file.getAbsolutePath(), e);
+                }
+            }
+        }
+        if (!customLog4jConfig)
+        {
+            writeLog4jConfig(distroFolder);
+        }
+
+        if (!customMwProperties)
+        {
+            writeMeecrowaveProperties(distroFolder);
+        }
+
+        final File srcBin = new File(project.getBasedir(), bin);
+        if (srcBin.exists() && srcBin.isDirectory()) {
+            final File targetRoot = new File(distroFolder, "bin");
+            targetRoot.mkdirs();
+            Stream.of(srcBin.listFiles())
+                  .filter(f -> !f.isDirectory()) // not nested for now
+                  .forEach(f -> {
+                      try {
+                          if (log.isDebugEnabled()) {
+                              log.debug("Copying file from " + f + " to " + targetRoot);
+                          }
+                          final File target = new File(targetRoot, f.getName());
+                          Files.copy(f.toPath(), target.toPath());
+                          if (target.getName().endsWith(".sh")) {
+                              target.setExecutable(true);
+                          }
+                      }
+                      catch (final IOException e) {
+                          throw new IllegalArgumentException("Could not copy file " + f.getAbsolutePath(), e);
+                      }
+                  });
+        }
+    }
+
+    private void writeMeecrowaveProperties(File distroFolder)
+    {
+        write(new File(distroFolder, "conf/meecrowave.properties"), "# This file contains the meecrowave default configuration\n" +
+                "# More on http://openwebbeans.apache.org/meecrowave/meecrowave-core/cli.html\n\n" +
+                "tomcat-access-log-pattern = %h %l %u %t \"%r\" %s %b \"%{Referer}i\" \"%{User-Agent}i\"");
+    }
+
+    private void writeLog4jConfig(File distroFolder)
+    {
+        write(new File(distroFolder, "conf/log4j2.xml"),
+            "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+                "<Configuration status=\"INFO\">\n" +
+                "  <Properties>\n" +
+                "    <Property name=\"name\">" + artifactId + "</Property>\n" +
+                "  </Properties>\n" +
+                "  <Appenders>\n" +
+                "    <Console name=\"Console\" target=\"SYSTEM_OUT\">\n" +
+                "      <PatternLayout pattern=\"[%d{HH:mm:ss.SSS}][%highlight{%-5level}][%15.15t][%30.30logger] %msg%n\"/>\n" +
+                "    </Console>\n" +
+                "    <RollingFile name=\"DailyLogFile\" fileName=\"${sys:meecrowave.base}/logs/meecrowave.log\"\n" +
+                "                 filePattern=\"${sys:meecrowave.base}/logs/${name}-%d{yyyy-MM-dd}-%i.log.gz\">\n" +
+                "      <PatternLayout pattern=\"[%d{HH:mm:ss.SSS}][%-5level][%15.15t][%30.30logger] %msg%n\"/>\n" +
+                "      <Policies>\n" +
+                "        <TimeBasedTriggeringPolicy />\n" +
+                "        <SizeBasedTriggeringPolicy size=\"50 MB\"/>\n" +
+                "      </Policies>\n" +
+                "    </RollingFile>\n" +
+                "  </Appenders>\n" +
+                "  <Loggers>\n" +
+                "    <Root level=\"INFO\">\n" +
+                "      <!--<AppenderRef ref=\"Console\"/>-->\n" +
+                "      <AppenderRef ref=\"DailyLogFile\"/>\n" +
+                "    </Root>\n" +
+                "  </Loggers>\n" +
+                "</Configuration>\n\n");
+    }
+
+    private void addLib(final File distroFolder, final File cc) {
+        try {
+            Files.copy(cc.toPath(), new File(distroFolder, "lib/" + cc.getName()).toPath(), StandardCopyOption.REPLACE_EXISTING);
+        } catch (final IOException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
+    }
+
+    private String findVersion() {
+        return new Properties() {{
+            try (final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("META-INF/maven/org.apache.meecrowave/meecrowave-core/pom.properties")) {
+                if (is != null) {
+                    load(is);
+                }
+            } catch (final IOException e) {
+                throw new IllegalStateException(e);
+            }
+        }}.getProperty("version", "0.3.2");
+    }
+
+    private File resolve(final String group, final String artifact, final String version, final String classifier) {
+        final DefaultArtifact art = new DefaultArtifact(group, artifact, classifier, "jar", version);
+        final ArtifactRequest artifactRequest = new ArtifactRequest().setArtifact(art).setRepositories(remoteRepositories);
+
+        final LocalRepositoryManager lrm = session.getLocalRepositoryManager();
+        art.setFile(new File(lrm.getRepository().getBasedir(), lrm.getPathForLocalArtifact(artifactRequest.getArtifact())));
+
+        try {
+            final ArtifactResult result = repositorySystem.resolveArtifact(session, artifactRequest);
+            if (result.isMissing()) {
+                throw new IllegalStateException("Can't find commons-cli, please add it to the pom.");
+            }
+            return result.getArtifact().getFile();
+        } catch (final ArtifactResolutionException e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
+    }
+
+
+    private boolean isIncluded(final Artifact a) {
+        return !((scopes == null && !(Artifact.SCOPE_COMPILE.equals(a.getScope()) || Artifact.SCOPE_RUNTIME.equals(a.getScope())))
+                || (scopes != null && !scopes.contains(a.getScope())));
+    }
+
+    private void write(final File file, final String content) {
+        try {
+            Files.write(file.toPath(), content.getBytes(StandardCharsets.UTF_8), StandardOpenOption.WRITE, StandardOpenOption.CREATE);
+        } catch (final IOException e) {
+            throw new IllegalStateException(e);
+        }
+    }
+
+    private void delete(final File distroFolder) { // not critical
+        final Path rootPath = distroFolder.toPath();
+        try {
+            Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
+                @Override
+                public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) throws IOException {
+                    Files.delete(file);
+                    return FileVisitResult.CONTINUE;
+                }
+
+                @Override
+                public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) throws IOException {
+                    Files.delete(dir);
+                    return FileVisitResult.CONTINUE;
+                }
+
+            });
+        } catch (final IOException e) {
+            getLog().warn(e);
+        }
+    }
+
+    private void attach(final String ext, final File output) {
+        if (attach) {
+            getLog().info("Attaching Custom Meecrowave Distribution (" + ext + ")");
+            if (classifier != null) {
+                projectHelper.attachArtifact(project, ext, classifier, output);
+            } else {
+                projectHelper.attachArtifact(project, ext, output);
+            }
+        }
+    }
+
+    private void zip(final ZipArchiveOutputStream zip, final File f, final Path prefix) throws IOException {
+        final String path = prefix.relativize(f.toPath()).toString().replace(File.separator, "/");
+        final ZipArchiveEntry archiveEntry = new ZipArchiveEntry(f, path);
+        if (isSh(path)) {
+            archiveEntry.setUnixMode(0755);
+        }
+        zip.putArchiveEntry(archiveEntry);
+        if (f.isDirectory()) {
+            zip.closeArchiveEntry();
+            final File[] files = f.listFiles();
+            if (files != null) {
+                for (final File child : files) {
+                    zip(zip, child, prefix);
+                }
+            }
+        } else {
+            Files.copy(f.toPath(), zip);
+            zip.closeArchiveEntry();
+        }
+    }
+
+    private void tarGz(final TarArchiveOutputStream tarGz, final File f, final Path prefix) throws IOException {
+        final String path = prefix.relativize(f.toPath()).toString().replace(File.separator, "/");
+        final TarArchiveEntry archiveEntry = new TarArchiveEntry(f, path);
+        if (isSh(path)) {
+            archiveEntry.setMode(0755);
+        }
+        tarGz.putArchiveEntry(archiveEntry);
+        if (f.isDirectory()) {
+            tarGz.closeArchiveEntry();
+            final File[] files = f.listFiles();
+            if (files != null) {
+                for (final File child : files) {
+                    tarGz(tarGz, child, prefix);
+                }
+            }
+        } else {
+            Files.copy(f.toPath(), tarGz);
+            tarGz.closeArchiveEntry();
+        }
+    }
+
+    private boolean isSh(final String path) {
+        return path.endsWith(".sh");
+    }
+}
diff --git a/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveRunMojo.java b/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveRunMojo.java
new file mode 100644
index 0000000..4df592c
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/main/java/org/apache/meecrowave/maven/MeecrowaveRunMojo.java
@@ -0,0 +1,412 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.maven;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.maven.artifact.Artifact;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+import org.apache.meecrowave.Meecrowave;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptEngineManager;
+import javax.script.ScriptException;
+import javax.script.SimpleBindings;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.lang.reflect.Field;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Scanner;
+
+import static java.util.Collections.singletonList;
+import static java.util.Collections.singletonMap;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toList;
+import static org.apache.maven.plugins.annotations.ResolutionScope.RUNTIME_PLUS_SYSTEM;
+
+@Mojo(name = "run", requiresDependencyResolution = RUNTIME_PLUS_SYSTEM)
+public class MeecrowaveRunMojo extends AbstractMojo {
+    @Parameter(property = "meecrowave.watcher-bounding", defaultValue = "0")
+    private int watcherBouncing;
+
+    @Parameter(property = "meecrowave.http", defaultValue = "8080")
+    private int httpPort;
+
+    @Parameter(property = "meecrowave.https", defaultValue = "8443")
+    private int httpsPort;
+
+    @Parameter(property = "meecrowave.stop", defaultValue = "8005")
+    private int stopPort;
+
+    @Parameter(property = "meecrowave.host", defaultValue = "localhost")
+    private String host;
+
+    @Parameter(property = "meecrowave.dir")
+    protected String dir;
+
+    @Parameter(property = "meecrowave.serverXml")
+    private File serverXml;
+
+    @Parameter(property = "meecrowave.keepServerXmlAsThis")
+    private boolean keepServerXmlAsThis;
+
+    @Parameter(property = "meecrowave.jaxrsLogProviders", defaultValue = "false")
+    private boolean jaxrsLogProviders;
+
+    @Parameter(property = "meecrowave.tomcatWrapLoader", defaultValue = "false")
+    private boolean tomcatWrapLoader;
+
+    @Parameter(property = "meecrowave.useTomcatDefaults", defaultValue = "true")
+    private boolean useTomcatDefaults;
+
+    @Parameter
+    private Map<String, String> properties;
+
+    @Parameter
+    private Map<String, String> cxfServletParams;
+
+    @Parameter(property = "meecrowave.tomcatNoJmx", defaultValue = "true")
+    private boolean tomcatNoJmx;
+
+    @Parameter(property = "meecrowave.quickSession", defaultValue = "true")
+    private boolean quickSession;
+
+    @Parameter(property = "meecrowave.tomcatScanning", defaultValue = "true")
+    private boolean tomcatScanning;
+
+    @Parameter(property = "meecrowave.tomcatAutoSetup", defaultValue = "true")
+    private boolean tomcatAutoSetup;
+
+    @Parameter(property = "meecrowave.skipHttp")
+    private boolean skipHttp;
+
+    @Parameter(property = "meecrowave.ssl")
+    private boolean ssl;
+
+    @Parameter(property = "meecrowave.keystoreFile")
+    private String keystoreFile;
+
+    @Parameter(property = "meecrowave.keystorePass")
+    private String keystorePass;
+
+    @Parameter(property = "meecrowave.keystoreType", defaultValue = "JKS")
+    private String keystoreType;
+
+    @Parameter(property = "meecrowave.clientAuth")
+    private String clientAuth;
+
+    @Parameter(property = "meecrowave.keyAlias")
+    private String keyAlias;
+
+    @Parameter(property = "meecrowave.sslProtocol")
+    private String sslProtocol;
+
+    @Parameter(property = "meecrowave.webXml")
+    private String webXml;
+
+    @Parameter(property = "meecrowave.tomcatAccessLogPattern")
+    private String tomcatAccessLogPattern;
+
+    @Parameter
+    private Meecrowave.LoginConfigBuilder loginConfig;
+
+    @Parameter
+    private Collection<Meecrowave.SecurityConstaintBuilder> securityConstraints = new LinkedList<>();
+
+    @Parameter
+    private Map<String, String> users;
+
+    @Parameter
+    private Map<String, String> roles;
+
+    @Parameter(property = "meecrowave.http2")
+    private boolean http2;
+
+    @Parameter(property = "meecrowave.tempDir")
+    private String tempDir;
+
+    @Parameter(property = "meecrowave.webResourceCached", defaultValue = "true")
+    private boolean webResourceCached;
+
+    @Parameter(property = "meecrowave.conf")
+    private String conf;
+
+    @Parameter(property = "meecrowave.deleteBaseOnStartup", defaultValue = "true")
+    private boolean deleteBaseOnStartup;
+
+    @Parameter(property = "meecrowave.jaxrsMapping", defaultValue = "/*")
+    private String jaxrsMapping;
+
+    @Parameter(property = "meecrowave.cdiConversation", defaultValue = "false")
+    private boolean cdiConversation;
+
+    @Parameter(property = "meecrowave.skip")
+    private boolean skip;
+
+    @Parameter(property = "meecrowave.jaxrs-beanvalidation", defaultValue = "true")
+    private boolean jaxrsAutoActivateBeanValidation;
+
+    @Parameter(property = "meecrowave.jaxrs-default-providers")
+    private String jaxrsDefaultProviders;
+
+    @Parameter(property = "meecrowave.jaxrs-provider-setup", defaultValue = "true")
+    private boolean jaxrsProviderSetup;
+
+    @Parameter(property = "meecrowave.logging-global-setup", defaultValue = "true")
+    private boolean loggingGlobalSetup;
+
+    @Parameter(property = "meecrowave.servlet-container-initializer-injections", defaultValue = "true")
+    private boolean injectServletContainerInitializer;
+
+    @Parameter(property = "meecrowave.shutdown-hook", defaultValue = "true")
+    private boolean useShutdownHook;
+
+    @Parameter
+    private List<String> jsCustomizers;
+
+    @Parameter
+    private List<String> applicationScopes;
+
+    @Parameter(defaultValue = "${project.build.outputDirectory}")
+    private List<File> modules;
+
+    @Parameter(defaultValue = "${project}", readonly = true, required = true)
+    private MavenProject project;
+
+    @Parameter(property = "meecrowave.tomcatFilter")
+    private String tomcatFilter;
+
+    @Parameter(property = "meecrowave.context", defaultValue = "")
+    private String context;
+
+    // we don't need to resolve from maven coordinates cause can be added to the plugin deps, just here to reproduce manual deployments
+    @Parameter(property = "meecrowave.shared-libraries")
+    private String sharedLibraries;
+
+    @Parameter(property = "meecrowave.log4j2-jul-bridge", defaultValue = "true")
+    private boolean useLog4j2JulLogManager;
+
+    @Parameter(property = "meecrowave.jsonp-buffer-strategy", defaultValue = "QUEUE")
+    private String jsonpBufferStrategy;
+
+    @Parameter(property = "meecrowave.jsonp-max-string-length", defaultValue = "10485760")
+    private int jsonpMaxStringLen;
+
+    @Parameter(property = "meecrowave.jsonp-max-read-buffer-size", defaultValue = "65536")
+    private int jsonpMaxReadBufferLen;
+
+    @Parameter(property = "meecrowave.jsonp-max-write-buffer-size", defaultValue = "65536")
+    private int jsonpMaxWriteBufferLen;
+
+    @Parameter(property = "meecrowave.jsonp-comments", defaultValue = "false")
+    private boolean jsonpSupportsComment;
+
+    @Parameter(property = "meecrowave.jsonp-prettify", defaultValue = "false")
+    private boolean jsonpPrettify;
+
+    @Parameter(property = "meecrowave.jsonb-encoding", defaultValue = "UTF-8")
+    private String jsonbEncoding;
+
+    @Parameter(property = "meecrowave.jsonb-nulls", defaultValue = "false")
+    private boolean jsonbNulls = false;
+
+    @Parameter(property = "meecrowave.jsonb-ijson", defaultValue = "false")
+    private boolean jsonbIJson;
+
+    @Parameter(property = "meecrowave.jsonb-prettify", defaultValue = "false")
+    private boolean jsonbPrettify;
+
+    @Parameter(property = "meecrowave.jsonb-binary-strategy")
+    private String jsonbBinaryStrategy;
+
+    @Parameter(property = "meecrowave.jsonb-naming-strategy")
+    private String jsonbNamingStrategy;
+
+    @Parameter(property = "meecrowave.jsonb-order-strategy")
+    private String jsonbOrderStrategy;
+
+    @Parameter(property = "meecrowave.scanning-exclude")
+    private String scanningIncludes;
+
+    @Parameter(property = "meecrowave.scanning-include")
+    private String scanningExcludes;
+
+    @Parameter(property = "meecrowave.scanning-package-include")
+    private String scanningPackageIncludes;
+
+    @Parameter(property = "meecrowave.scanning-package-exclude")
+    private String scanningPackageExcludes;
+
+    @Parameter(property = "meecrowave.force-log4j2-shutdown", defaultValue = "true")
+    private boolean forceLog4j2Shutdown;
+
+    @Parameter(property = "meecrowave.webapp", defaultValue = "${project.basedir}/src/main/webapp")
+    private File webapp;
+
+    @Parameter(property = "meecrowave.force-classpath-deployment", defaultValue = "true")
+    private boolean useClasspathDeployment;
+
+    @Parameter
+    private String jsContextCustomizer;
+
+    @Parameter(property = "meecrowave.meecrowave-properties", defaultValue = "meecrowave.properties")
+    private String meecrowaveProperties;
+
+    @Parameter(property = "meecrowave.jaxws-support", defaultValue = "true")
+    private boolean jaxwsSupportIfAvailable;
+
+    @Override
+    public void execute() throws MojoExecutionException, MojoFailureException {
+        if (skip) {
+            getLog().warn("Mojo skipped");
+            return;
+        }
+
+        final Thread thread = Thread.currentThread();
+        final ClassLoader loader = thread.getContextClassLoader();
+        final ClassLoader appLoader = createClassLoader(loader);
+        thread.setContextClassLoader(appLoader);
+        try {
+            final Meecrowave.Builder builder = getConfig();
+            try (final Meecrowave meecrowave = new Meecrowave(builder) {
+                @Override
+                protected void beforeStart() {
+                    scriptCustomization(jsCustomizers, "js", singletonMap("meecrowaveBase", base.getAbsolutePath()));
+                }
+            }) {
+                meecrowave.start();
+                final String fixedContext = ofNullable(context).orElse("");
+                final Meecrowave.DeploymentMeta deploymentMeta = new Meecrowave.DeploymentMeta(
+                        fixedContext,
+                        webapp != null && webapp.isDirectory() ? webapp : null,
+                        jsContextCustomizer == null ?
+                                null : ctx -> scriptCustomization(
+                                singletonList(jsContextCustomizer), "js", singletonMap("context", ctx)));
+                if (useClasspathDeployment) {
+                    meecrowave.deployClasspath(deploymentMeta);
+                } else {
+                    meecrowave.deployWebapp(deploymentMeta);
+                }
+                new Scanner(System.in).next();
+            }
+        } finally {
+            if (forceLog4j2Shutdown) {
+                LogManager.shutdown();
+            }
+            if (appLoader != loader) {
+                try {
+                    URLClassLoader.class.cast(appLoader).close();
+                } catch (final IOException e) {
+                    getLog().warn(e.getMessage(), e);
+                }
+            }
+            thread.setContextClassLoader(loader);
+        }
+    }
+
+    private void scriptCustomization(final List<String> customizers, final String ext, final Map<String, Object> customBindings) {
+        if (customizers == null || customizers.isEmpty()) {
+            return;
+        }
+        final ScriptEngine engine = new ScriptEngineManager().getEngineByExtension(ext);
+        if (engine == null) {
+            throw new IllegalStateException("No engine for " + ext + ". Maybe add the JSR223 implementation as plugin dependency.");
+        }
+        for (final String js : customizers) {
+            try {
+                final SimpleBindings bindings = new SimpleBindings();
+                bindings.put("project", project);
+                engine.eval(new StringReader(js), bindings);
+                bindings.putAll(customBindings);
+            } catch (final ScriptException e) {
+                throw new IllegalStateException(e.getMessage(), e);
+            }
+        }
+    }
+
+    private ClassLoader createClassLoader(final ClassLoader parent) {
+        final List<URL> urls = new ArrayList<>();
+        urls.addAll(project.getArtifacts().stream()
+                .filter(a -> !((applicationScopes == null && !(Artifact.SCOPE_COMPILE.equals(a.getScope()) || Artifact.SCOPE_RUNTIME.equals(a.getScope())))
+                        || (applicationScopes != null && !applicationScopes.contains(a.getScope()))))
+                .map(f -> {
+                    try {
+                        return f.getFile().toURI().toURL();
+                    } catch (final MalformedURLException e) {
+                        throw new IllegalArgumentException(e);
+                    }
+                })
+                .collect(toList()));
+        urls.addAll(ofNullable(modules).orElse(Collections.emptyList()).stream().map(f -> {
+            try {
+                return f.toURI().toURL();
+            } catch (final MalformedURLException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }).collect(toList()));
+        return urls.isEmpty() ? parent : new URLClassLoader(urls.toArray(new URL[urls.size()]), parent) {
+            @Override
+            public boolean equals(final Object obj) {
+                return super.equals(obj) || parent.equals(obj);
+            }
+        };
+    }
+
+    private Meecrowave.Builder getConfig() {
+        final Meecrowave.Builder config = new Meecrowave.Builder();
+        for (final Field field : MeecrowaveRunMojo.class.getDeclaredFields()) {
+            if ("properties".equals(field.getName())) {
+                continue;
+            }
+            try {
+                final Field configField = Meecrowave.Builder.class.getDeclaredField(field.getName());
+                field.setAccessible(true);
+                configField.setAccessible(true);
+
+                final Object value = field.get(this);
+                if (value != null) {
+                    configField.set(config, value);
+                    getLog().debug("using " + field.getName() + " = " + value);
+                }
+            } catch (final NoSuchFieldException nsfe) {
+                // ignored
+            } catch (final Exception e) {
+                getLog().warn("can't initialize attribute " + field.getName());
+            }
+        }
+        config.loadFrom(meecrowaveProperties);
+        if (properties != null) {
+            config.getProperties().putAll(properties);
+        }
+        return config;
+    }
+}
diff --git a/trunk/meecrowave-maven-plugin/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-maven-plugin/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/trunk/meecrowave-maven-plugin/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-maven-plugin/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..442fa94
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,5 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/trunk/meecrowave-maven-plugin/src/main/resources/bin/meecrowave.sh b/trunk/meecrowave-maven-plugin/src/main/resources/bin/meecrowave.sh
new file mode 100644
index 0000000..6205c3d
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/main/resources/bin/meecrowave.sh
@@ -0,0 +1,493 @@
+#!/bin/sh
+
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+#
+# This script is forked from Apache Tomcat
+#
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false
+darwin=false
+os400=false
+hpux=false
+case "`uname`" in
+CYGWIN*) cygwin=true;;
+Darwin*) darwin=true;;
+OS400*) os400=true;;
+HP-UX*) hpux=true;;
+esac
+
+# resolve links - $0 may be a softlink
+PRG="$0"
+
+while [ -h "$PRG" ]; do
+  ls=`ls -ld "$PRG"`
+  link=`expr "$ls" : '.*-> \(.*\)$'`
+  if expr "$link" : '/.*' > /dev/null; then
+    PRG="$link"
+  else
+    PRG=`dirname "$PRG"`/"$link"
+  fi
+done
+
+# Get standard environment variables
+PRGDIR=`dirname "$PRG"`
+
+# Only set MEECROWAVE_HOME if not already set
+[ -z "$MEECROWAVE_HOME" ] && MEECROWAVE_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`
+
+# Copy MEECROWAVE_BASE from MEECROWAVE_HOME if not already set
+[ -z "$MEECROWAVE_BASE" ] && MEECROWAVE_BASE="$MEECROWAVE_HOME"
+
+# Ensure that any user defined CLASSPATH variables are not used on startup,
+# but allow them to be specified in setenv.sh, in rare case when it is needed.
+CLASSPATH=
+
+if [ -r "$MEECROWAVE_BASE/bin/setenv.sh" ]; then
+  . "$MEECROWAVE_BASE/bin/setenv.sh"
+elif [ -r "$MEECROWAVE_HOME/bin/setenv.sh" ]; then
+  . "$MEECROWAVE_HOME/bin/setenv.sh"
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin; then
+  [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`
+  [ -n "$MEECROWAVE_HOME" ] && MEECROWAVE_HOME=`cygpath --unix "$MEECROWAVE_HOME"`
+  [ -n "$MEECROWAVE_BASE" ] && MEECROWAVE_BASE=`cygpath --unix "$MEECROWAVE_BASE"`
+  [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# Ensure that neither MEECROWAVE_HOME nor MEECROWAVE_BASE contains a colon
+# as this is used as the separator in the classpath and Java provides no
+# mechanism for escaping if the same character appears in the path.
+case $MEECROWAVE_HOME in
+  *:*) echo "Using MEECROWAVE_HOME:   $MEECROWAVE_HOME";
+       echo "Unable to start as MEECROWAVE_HOME contains a colon (:) character";
+       exit 1;
+esac
+case $MEECROWAVE_BASE in
+  *:*) echo "Using MEECROWAVE_BASE:   $MEECROWAVE_BASE";
+       echo "Unable to start as MEECROWAVE_BASE contains a colon (:) character";
+       exit 1;
+esac
+
+# For OS400
+if $os400; then
+  # Set job priority to standard for interactive (interactive - 6) by using
+  # the interactive priority - 6, the helper threads that respond to requests
+  # will be running at the same priority as interactive jobs.
+  COMMAND='chgjob job('$JOBNAME') runpty(6)'
+  system $COMMAND
+
+  # Enable multi threading
+  export QIBM_MULTI_THREADED=Y
+fi
+
+# Get standard Java environment variables
+# Make sure prerequisite environment variables are set
+if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then
+  if $darwin; then
+    # Bugzilla 54390
+    if [ -x '/usr/libexec/java_home' ] ; then
+      export JAVA_HOME=`/usr/libexec/java_home`
+    # Bugzilla 37284 (reviewed).
+    elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then
+      export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home"
+    fi
+  else
+    JAVA_PATH=`which java 2>/dev/null`
+    if [ "x$JAVA_PATH" != "x" ]; then
+      JAVA_PATH=`dirname $JAVA_PATH 2>/dev/null`
+      JRE_HOME=`dirname $JAVA_PATH 2>/dev/null`
+    fi
+    if [ "x$JRE_HOME" = "x" ]; then
+      # XXX: Should we try other locations?
+      if [ -x /usr/bin/java ]; then
+        JRE_HOME=/usr
+      fi
+    fi
+  fi
+  if [ -z "$JAVA_HOME" -a -z "$JRE_HOME" ]; then
+    echo "Neither the JAVA_HOME nor the JRE_HOME environment variable is defined"
+    echo "At least one of these environment variable is needed to run this program"
+    exit 1
+  fi
+fi
+if [ -z "$JAVA_HOME" -a "$1" = "debug" ]; then
+  echo "JAVA_HOME should point to a JDK in order to run in debug mode."
+  exit 1
+fi
+if [ -z "$JRE_HOME" ]; then
+  JRE_HOME="$JAVA_HOME"
+fi
+
+# If we're running under jdb, we need a full jdk.
+if [ "$1" = "debug" ] ; then
+  if [ "$os400" = "true" ]; then
+    if [ ! -x "$JAVA_HOME"/bin/java -o ! -x "$JAVA_HOME"/bin/javac ]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  else
+    if [ ! -x "$JAVA_HOME"/bin/java -o ! -x "$JAVA_HOME"/bin/jdb -o ! -x "$JAVA_HOME"/bin/javac ]; then
+      echo "The JAVA_HOME environment variable is not defined correctly"
+      echo "This environment variable is needed to run this program"
+      echo "NB: JAVA_HOME should point to a JDK not a JRE"
+      exit 1
+    fi
+  fi
+fi
+
+# Set standard commands for invoking Java, if not already set.
+if [ -z "$_RUNJAVA" ]; then
+  _RUNJAVA="$JRE_HOME"/bin/java
+fi
+if [ "$os400" != "true" ]; then
+  if [ -z "$_RUNJDB" ]; then
+    _RUNJDB="$JAVA_HOME"/bin/jdb
+  fi
+fi
+
+# Add on extra jar files to CLASSPATH
+if [ ! -z "$CLASSPATH" ] ; then
+  CLASSPATH="$CLASSPATH":
+fi
+if [ "$MEECROWAVE_HOME" != "$MEECROWAVE_BASE" ]; then
+  for i in "$MEECROWAVE_BASE/lib/"*.jar ; do
+    if [ -z "$CLASSPATH" ] ; then
+      CLASSPATH="$i"
+    else
+      CLASSPATH="$i:$CLASSPATH"
+    fi
+  done
+fi
+for i in "$MEECROWAVE_HOME/lib/"*.jar ; do
+  if [ -z "$CLASSPATH" ] ; then
+    CLASSPATH="$i"
+  else
+    CLASSPATH="$i:$CLASSPATH"
+  fi
+done
+
+if [ -z "$MEECROWAVE_OUT" ] ; then
+  MEECROWAVE_OUT="$MEECROWAVE_BASE"/logs/meecrowave.out
+fi
+
+if [ -z "$MEECROWAVE_TMPDIR" ] ; then
+  # Define the java.io.tmpdir to use for MEECROWAVE
+  MEECROWAVE_TMPDIR="$MEECROWAVE_BASE"/temp
+fi
+
+# Bugzilla 37848: When no TTY is available, don't output to console
+have_tty=0
+if [ "`tty`" != "not a tty" ]; then
+    have_tty=1
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`
+  JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`
+  MEECROWAVE_HOME=`cygpath --absolute --windows "$MEECROWAVE_HOME"`
+  MEECROWAVE_BASE=`cygpath --absolute --windows "$MEECROWAVE_BASE"`
+  MEECROWAVE_TMPDIR=`cygpath --absolute --windows "$MEECROWAVE_TMPDIR"`
+  CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`
+fi
+
+if [ -z "$JSSE_OPTS" ] ; then
+  JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"
+fi
+JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"
+
+# Register custom URL handlers
+# Do this here so custom URL handles (specifically 'war:...') can be used in the security policy
+JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.MEECROWAVE.webresources"
+
+# Set juli LogManager config file if it is present and an override has not been issued
+if [ -z "$LOGGING_CONFIG" ]; then
+  if [ -r "$MEECROWAVE_BASE"/conf/logging.properties ]; then
+    LOGGING_CONFIG="-Djava.util.logging.config.file=$MEECROWAVE_BASE/conf/logging.properties"
+  else
+    # Bugzilla 45585
+    LOGGING_CONFIG="-Dmeecrowave.script.nologgingconfig"
+  fi
+fi
+
+if [ -z "$LOGGING_MANAGER" ]; then
+  LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager"
+fi
+
+# Set UMASK unless it has been overridden
+if [ -z "$UMASK" ]; then
+    UMASK="0027"
+fi
+umask $UMASK
+
+# Uncomment the following line to make the umask available when using the
+# org.apache.MEECROWAVE.security.SecurityListener
+#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.MEECROWAVE.security.SecurityListener.UMASK=`umask`"
+
+if [ -z "$USE_NOHUP" ]; then
+    if $hpux; then
+        USE_NOHUP="true"
+    else
+        USE_NOHUP="false"
+    fi
+fi
+unset _NOHUP
+if [ "$USE_NOHUP" = "true" ]; then
+    _NOHUP=nohup
+fi
+
+if [ -z "$MEECROWAVE_PID" ]; then
+  MEECROWAVE_PID="$MEECROWAVE_BASE"/conf/meecrowave.pid
+fi
+# ----- Execute The Requested Command -----------------------------------------
+
+# Bugzilla 37848: only output this if we have a TTY
+if [ $have_tty -eq 1 ]; then
+  echo "Using MEECROWAVE_BASE:   $MEECROWAVE_BASE"
+  echo "Using MEECROWAVE_HOME:   $MEECROWAVE_HOME"
+  echo "Using MEECROWAVE_TMPDIR: $MEECROWAVE_TMPDIR"
+  echo "Using JRE_HOME:        $JRE_HOME"
+  echo "Using CLASSPATH:       $CLASSPATH"
+  if [ ! -z "$MEECROWAVE_PID" ]; then
+    echo "Using MEECROWAVE_PID:    $MEECROWAVE_PID"
+  fi
+fi
+
+if [ "$1" = "jpda" ] ; then
+  if [ -z "$JPDA_TRANSPORT" ]; then
+    JPDA_TRANSPORT="dt_socket"
+  fi
+  if [ -z "$JPDA_ADDRESS" ]; then
+    JPDA_ADDRESS="localhost:8000"
+  fi
+  if [ -z "$JPDA_SUSPEND" ]; then
+    JPDA_SUSPEND="n"
+  fi
+  if [ -z "$JPDA_OPTS" ]; then
+    JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"
+  fi
+  MEECROWAVE_OPTS="$JPDA_OPTS $MEECROWAVE_OPTS"
+  shift
+fi
+
+if [ -f "$MEECROWAVE_BASE"/conf/log4j2.xml ]; then
+  MEECROWAVE_OPTS="$MEECROWAVE_OPTS -Dlog4j.configurationFile="$MEECROWAVE_BASE"/conf/log4j2.xml"
+fi
+
+if [ -f "$MEECROWAVE_BASE"/conf/meecrowave.properties ]; then
+  MEECROWAVE_ARGS="$MEECROWAVE_ARGS --meecrowave-properties="$MEECROWAVE_BASE"/conf/meecrowave.properties"
+fi
+if [ -f "$MEECROWAVE_BASE"/conf/server.xml ]; then
+  MEECROWAVE_ARGS="$MEECROWAVE_ARGS --server-xml="$MEECROWAVE_BASE"/conf/server.xml"
+fi
+MEECROWAVE_ARGS="$MEECROWAVE_ARGS --tmp-dir="$MEECROWAVE_TMPDIR""
+
+if [ "$1" = "run" ]; then
+
+  shift
+  eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $MEECROWAVE_OPTS \
+    -classpath "\"$CLASSPATH\"" \
+    -Dmeecrowave.base="\"$MEECROWAVE_BASE\"" \
+    -Dmeecrowave.home="\"$MEECROWAVE_HOME\"" \
+    -Djava.io.tmpdir="\"$MEECROWAVE_TMPDIR\"" \
+    ${main} "$MEECROWAVE_ARGS" "$@"
+
+elif [ "$1" = "start" ] ; then
+
+  if [ ! -z "$MEECROWAVE_PID" ]; then
+    if [ -f "$MEECROWAVE_PID" ]; then
+      if [ -s "$MEECROWAVE_PID" ]; then
+        echo "Existing PID file found during start."
+        if [ -r "$MEECROWAVE_PID" ]; then
+          PID=`cat "$MEECROWAVE_PID"`
+          ps -p $PID >/dev/null 2>&1
+          if [ $? -eq 0 ] ; then
+            echo "Meecrowave appears to still be running with PID $PID. Start aborted."
+            echo "If the following process is not a Meecrowave process, remove the PID file and try again:"
+            ps -f -p $PID
+            exit 1
+          else
+            echo "Removing/clearing stale PID file."
+            rm -f "$MEECROWAVE_PID" >/dev/null 2>&1
+            if [ $? != 0 ]; then
+              if [ -w "$MEECROWAVE_PID" ]; then
+                cat /dev/null > "$MEECROWAVE_PID"
+              else
+                echo "Unable to remove or clear stale PID file. Start aborted."
+                exit 1
+              fi
+            fi
+          fi
+        else
+          echo "Unable to read PID file. Start aborted."
+          exit 1
+        fi
+      else
+        rm -f "$MEECROWAVE_PID" >/dev/null 2>&1
+        if [ $? != 0 ]; then
+          if [ ! -w "$MEECROWAVE_PID" ]; then
+            echo "Unable to remove or write to empty PID file. Start aborted."
+            exit 1
+          fi
+        fi
+      fi
+    fi
+  fi
+
+  shift
+  touch "$MEECROWAVE_OUT"
+  eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $MEECROWAVE_OPTS \
+    -classpath "\"$CLASSPATH\"" \
+    -Dmeecrowave.base="\"$MEECROWAVE_BASE\"" \
+    -Dmeecrowave.home="\"$MEECROWAVE_HOME\"" \
+    -Djava.io.tmpdir="\"$MEECROWAVE_TMPDIR\"" \
+    ${main} "$MEECROWAVE_ARGS" "$@" \
+    >> "$MEECROWAVE_OUT" 2>&1 "&"
+
+  if [ ! -z "$MEECROWAVE_PID" ]; then
+    echo $! > "$MEECROWAVE_PID"
+  fi
+
+  echo "Meecrowave started."
+
+elif [ "$1" = "stop" ] ; then
+
+  shift
+
+  SLEEP=15
+  if [ ! -z "$1" ]; then
+    echo $1 | grep "[^0-9]" >/dev/null 2>&1
+    if [ $? -gt 0 ]; then
+      SLEEP=$1
+      shift
+    fi
+  fi
+
+  FORCE=0
+  if [ "$1" = "-force" ]; then
+    shift
+    FORCE=1
+  fi
+
+  if [ ! -z "$MEECROWAVE_PID" ]; then
+    if [ -f "$MEECROWAVE_PID" ]; then
+      if [ -s "$MEECROWAVE_PID" ]; then
+        kill -15 `cat "$MEECROWAVE_PID"` >/dev/null 2>&1
+        if [ $? -gt 0 ]; then
+          echo "PID file found but no matching process was found. Stop aborted."
+          exit 1
+        fi
+      else
+        echo "PID file is empty and has been ignored."
+      fi
+    else
+      echo "\$MEECROWAVE_PID was set but the specified file does not exist. Is Meecrowave running? Stop aborted."
+      exit 1
+    fi
+  fi
+
+  if [ ! -z "$MEECROWAVE_PID" ]; then
+    if [ -f "$MEECROWAVE_PID" ]; then
+      while [ $SLEEP -ge 0 ]; do
+        kill -15 `cat "$MEECROWAVE_PID"` >/dev/null 2>&1
+        if [ $? -gt 0 ]; then
+          rm -f "$MEECROWAVE_PID" >/dev/null 2>&1
+          if [ $? != 0 ]; then
+            if [ -w "$MEECROWAVE_PID" ]; then
+              cat /dev/null > "$MEECROWAVE_PID"
+              # If Meecrowave has stopped don't try and force a stop with an empty PID file
+              FORCE=0
+            else
+              echo "The PID file could not be removed or cleared."
+            fi
+          fi
+          echo "Meecrowave stopped."
+          break
+        fi
+        if [ $SLEEP -gt 0 ]; then
+          sleep 1
+        fi
+        if [ $SLEEP -eq 0 ]; then
+          echo "Meecrowave did not stop in time."
+          if [ $FORCE -eq 0 ]; then
+            echo "PID file was not removed."
+          fi
+          echo "To aid diagnostics a thread dump has been written to standard out."
+          kill -3 `cat "$MEECROWAVE_PID"`
+        fi
+        SLEEP=`expr $SLEEP - 1 `
+      done
+    fi
+  fi
+
+  KILL_SLEEP_INTERVAL=15
+  if [ $FORCE -eq 1 ]; then
+    if [ -z "$MEECROWAVE_PID" ]; then
+      echo "Kill failed: \$MEECROWAVE_PID not set"
+    else
+      if [ -f "$MEECROWAVE_PID" ]; then
+        PID=`cat "$MEECROWAVE_PID"`
+        echo "Killing Meecrowave with the PID: $PID"
+        kill -0 $PID
+        while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do
+            kill -0 `cat "$MEECROWAVE_PID"` >/dev/null 2>&1
+            if [ $? -gt 0 ]; then
+                rm -f "$MEECROWAVE_PID" >/dev/null 2>&1
+                if [ $? != 0 ]; then
+                    if [ -w "$MEECROWAVE_PID" ]; then
+                        cat /dev/null > "$MEECROWAVE_PID"
+                    else
+                        echo "The PID file could not be removed."
+                    fi
+                fi
+                echo "The Meecrowave process has been killed."
+                break
+            fi
+            if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then
+                sleep 1
+            fi
+            KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 `
+        done
+        if [ $KILL_SLEEP_INTERVAL -lt 0 ]; then
+            echo "Meecrowave has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE."
+        fi
+      fi
+    fi
+  fi
+
+else
+
+  echo "Usage: MEECROWAVE.sh ( commands ... )"
+  echo "commands:"
+  echo "  jpda start        Start MEECROWAVE under JPDA debugger"
+  echo "  run               Start MEECROWAVE in the current window"
+  echo "  start             Start MEECROWAVE in a separate window"
+  echo "  stop              Stop MEECROWAVE, waiting up t/o 15 seconds for the process to end"
+  echo "  stop n            Stop MEECROWAVE, waiting up to n seconds for the process to end"
+  echo "  stop -force       Stop MEECROWAVE, wait up to 15 seconds and then use kill -KILL if still running"
+  echo "  stop n -force     Stop MEECROWAVE, wait up to n seconds and then use kill -KILL if still running"
+  echo "Note: Waiting for the process to end and use of the -force option require that \$MEECROWAVE_PID is defined"
+  exit 1
+
+fi
diff --git a/trunk/meecrowave-maven-plugin/src/test/java/org/apache/meecrowave/maven/MeecrowaveRunMojoTest.java b/trunk/meecrowave-maven-plugin/src/test/java/org/apache/meecrowave/maven/MeecrowaveRunMojoTest.java
new file mode 100644
index 0000000..defd0de
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/test/java/org/apache/meecrowave/maven/MeecrowaveRunMojoTest.java
@@ -0,0 +1,126 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.maven;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.testing.MojoRule;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.codehaus.plexus.util.xml.Xpp3Dom;
+import org.eclipse.aether.DefaultRepositorySystemSession;
+import org.eclipse.aether.internal.impl.SimpleLocalRepositoryManagerFactory;
+import org.eclipse.aether.repository.LocalRepository;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ServerSocket;
+import java.net.URL;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import static org.apache.ziplock.JarLocation.jarLocation;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+public class MeecrowaveRunMojoTest {
+    @Rule
+    public final MojoRule mojo = new MojoRule();
+
+    @Test
+    public void run() throws Exception {
+        final File moduleBase = jarLocation(MeecrowaveRunMojoTest.class).getParentFile().getParentFile();
+        final File basedir = new File(moduleBase, "src/test/resources/" + getClass().getSimpleName());
+        final File pom = new File(basedir, "pom.xml");
+        final MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+        request.setBaseDirectory(basedir);
+        final ProjectBuildingRequest configuration = request.getProjectBuildingRequest();
+        final DefaultRepositorySystemSession repositorySession = new DefaultRepositorySystemSession();
+        repositorySession.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory()
+                .newInstance(repositorySession, new LocalRepository(new File(moduleBase, "target/fake"), "")));
+        configuration.setRepositorySession(repositorySession);
+        final MavenProject project = mojo.lookup(ProjectBuilder.class).build(pom, configuration).getProject();
+        final MavenSession session = mojo.newMavenSession(project);
+        final int port;
+        try (final ServerSocket serverSocket = new ServerSocket(0)) {
+            port = serverSocket.getLocalPort();
+        }
+        final MojoExecution execution = mojo.newMojoExecution("run");
+        execution.getConfiguration().addChild(new Xpp3Dom("httpPort") {{
+            setValue(Integer.toString(port));
+        }});
+        final InputStream in = System.in;
+        final CountDownLatch latch = new CountDownLatch(1);
+        System.setIn(new InputStream() {
+            private int val = 2; // just to not return nothing
+
+            @Override
+            public int read() throws IOException {
+                try {
+                    latch.await();
+                } catch (final InterruptedException e) {
+                    Thread.interrupted();
+                    fail(e.getMessage());
+                }
+                return val--;
+            }
+        });
+        final Thread runner = new Thread() {
+            @Override
+            public void run() {
+                try {
+                    mojo.executeMojo(session, project, execution);
+                } catch (final Exception e) {
+                    fail(e.getMessage());
+                }
+            }
+        };
+        try {
+            runner.start();
+            for (int i = 0; i < 120; i++) {
+                try {
+                    assertEquals("simple", IOUtils.toString(new URL("http://localhost:" + port + "/api/test")));
+                    assertTrue(IOUtils.toString(new URL("http://localhost:" + port + "/api/test/model")).contains("first_name"));
+                    assertTrue(IOUtils.toString(new URL("http://localhost:" + port + "/api/test/model")).contains("last_name"));
+                    assertTrue(IOUtils.toString(new URL("http://localhost:" + port + "/api/test/model")).contains("firstname"));
+                    assertTrue(IOUtils.toString(new URL("http://localhost:" + port + "/api/test/model")).contains("null"));
+                    latch.countDown();
+                    break;
+                } catch (final Exception | AssertionError e) {
+                    Thread.sleep(500);
+                }
+            }
+        } finally {
+            runner.join(TimeUnit.MINUTES.toMillis(1));
+            System.setIn(in);
+            if (runner.isAlive()) {
+                runner.interrupt();
+                fail("Runner didn't terminate properly");
+            }
+        }
+    }
+}
diff --git a/trunk/meecrowave-maven-plugin/src/test/java/org/app/Endpoint.java b/trunk/meecrowave-maven-plugin/src/test/java/org/app/Endpoint.java
new file mode 100644
index 0000000..b3d65cd
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/test/java/org/app/Endpoint.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+
+@Path("test")
+@ApplicationScoped
+public class Endpoint {
+    @Inject
+    private Injectable injectable;
+
+    @GET
+    @Produces(MediaType.TEXT_PLAIN)
+    public String simple() {
+        return Boolean.parseBoolean(injectable.injected()) ? "simple" : "fail";
+    }
+    
+    @GET
+    @Path("/model")
+    @Produces(MediaType.APPLICATION_JSON)
+    public Model simpleJsonModel() {
+        Model model = new Model();
+        model.setFirstName("firstname");
+        return model;
+    }
+}
diff --git a/trunk/meecrowave-maven-plugin/src/test/java/org/app/Injectable.java b/trunk/meecrowave-maven-plugin/src/test/java/org/app/Injectable.java
new file mode 100644
index 0000000..2b8cc7f
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/test/java/org/app/Injectable.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class Injectable {
+    public String injected() {
+        return "true";
+    }
+}
diff --git a/trunk/meecrowave-maven-plugin/src/test/java/org/app/Model.java b/trunk/meecrowave-maven-plugin/src/test/java/org/app/Model.java
new file mode 100644
index 0000000..8010965
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/test/java/org/app/Model.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+public class Model {
+
+    private String firstName;
+    private String lastName;
+
+    public String getFirstName() {
+        return firstName;
+    }
+
+    public void setFirstName(String firstName) {
+        this.firstName = firstName;
+    }
+
+    public String getLastName() {
+        return lastName;
+    }
+
+    public void setLastName(String lastName) {
+        this.lastName = lastName;
+    }
+
+}
diff --git a/trunk/meecrowave-maven-plugin/src/test/java/org/app/RsApp.java b/trunk/meecrowave-maven-plugin/src/test/java/org/app/RsApp.java
new file mode 100644
index 0000000..1463b98
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/test/java/org/app/RsApp.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.app;
+
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@Dependent
+@ApplicationPath("api")
+public class RsApp extends Application {
+}
diff --git a/trunk/meecrowave-maven-plugin/src/test/resources/MeecrowaveRunMojoTest/pom.xml b/trunk/meecrowave-maven-plugin/src/test/resources/MeecrowaveRunMojoTest/pom.xml
new file mode 100644
index 0000000..654d9f7
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/test/resources/MeecrowaveRunMojoTest/pom.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="
+            http://maven.apache.org/POM/4.0.0
+            http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.meecrowave.test</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1-SNAPSHOT</version>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.meecrowave</groupId>
+        <artifactId>meecrowave-maven-plugin</artifactId>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/trunk/meecrowave-maven-plugin/src/test/resources/meecrowave.properties b/trunk/meecrowave-maven-plugin/src/test/resources/meecrowave.properties
new file mode 100644
index 0000000..78f5c43
--- /dev/null
+++ b/trunk/meecrowave-maven-plugin/src/test/resources/meecrowave.properties
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+jsonb-naming-strategy = LOWER_CASE_WITH_UNDERSCORES
+jsonb-nulls = true
diff --git a/trunk/meecrowave-oauth2/pom.xml b/trunk/meecrowave-oauth2/pom.xml
new file mode 100644
index 0000000..0ab9be6
--- /dev/null
+++ b/trunk/meecrowave-oauth2/pom.xml
@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>meecrowave-oauth2</artifactId>
+  <name>Meecrowave :: OAuth2</name>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cxf</groupId>
+      <artifactId>cxf-rt-rs-security-oauth2</artifactId>
+      <version>${cxf.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jcache_1.0_spec</artifactId>
+      <version>1.0-alpha-1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.geronimo.specs</groupId>
+      <artifactId>geronimo-jpa_2.0_spec</artifactId>
+      <version>1.1</version>
+    </dependency>
+
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+      <version>${commons-cli.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-dbcp2</artifactId>
+      <version>${dbcp2.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openjpa</groupId>
+      <artifactId>openjpa</artifactId>
+      <version>${openjpa.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.commons</groupId>
+      <artifactId>commons-jcs-jcache</artifactId>
+      <version>2.2</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-jcl</artifactId>
+      <version>${log4j2.version}</version>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>${junit.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-junit</artifactId>
+      <version>${project.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>com.h2database</groupId>
+      <artifactId>h2</artifactId>
+      <version>${h2.version}</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.bouncycastle</groupId>
+      <artifactId>bcprov-jdk15</artifactId>
+      <version>1.46</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.5.1</version>
+        <configuration>
+          <fork>true</fork>
+          <compilerArgs>-XDignore.symbol.file</compilerArgs>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-shade-plugin</artifactId>
+        <version>3.1.0</version>
+        <executions>
+          <execution>
+            <id>bundle</id>
+            <phase>package</phase>
+            <goals>
+              <goal>shade</goal>
+            </goals>
+            <configuration>
+              <shadedClassifierName>bundle</shadedClassifierName>
+              <shadedArtifactAttached>true</shadedArtifactAttached>
+              <dependencyReducedPomLocation>${project.build.directory}/reduced-pom-bundle.xml</dependencyReducedPomLocation>
+              <transformers>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                  <mainClass>org.apache.meecrowave.runner.Cli</mainClass>
+                </transformer>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                  <resource>META-INF/cxf/bus-extensions.txt</resource>
+                </transformer>
+                <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
+                  <resource>log4j2.component.properties</resource>
+                </transformer>
+                <transformer implementation="com.github.edwgiz.mavenShadePlugin.log4j2CacheTransformer.PluginsCacheFileTransformer" />
+                <transformer implementation="org.apache.openwebbeans.maven.shade.OpenWebBeansPropertiesTransformer" />
+                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
+              </transformers>
+              <filters>
+                <filter>
+                  <artifact>*:*</artifact>
+                  <excludes>
+                    <exclude>META-INF/*.SF</exclude>
+                    <exclude>META-INF/*.DSA</exclude>
+                    <exclude>META-INF/*.RSA</exclude>
+                    <exclude>META-INF/LICENSE.txt</exclude>
+                    <exclude>META-INF/NOTICE.txt</exclude>
+                  </excludes>
+                </filter>
+              </filters>
+            </configuration>
+          </execution>
+        </executions>
+        <dependencies>
+          <dependency>
+            <groupId>org.apache.openwebbeans</groupId>
+            <artifactId>openwebbeans-maven</artifactId>
+            <version>${openwebbeans.version}</version>
+          </dependency>
+          <dependency>
+            <groupId>com.github.edwgiz</groupId>
+            <artifactId>maven-shade-plugin.log4j2-cachefile-transformer</artifactId>
+            <version>2.1</version>
+          </dependency>
+        </dependencies>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/JCacheConfigurer.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/JCacheConfigurer.java
new file mode 100644
index 0000000..a985bf9
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/JCacheConfigurer.java
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.configuration;
+
+import org.apache.cxf.Bus;
+import org.apache.cxf.rs.security.oauth2.common.Client;
+import org.apache.cxf.rs.security.oauth2.common.ServerAccessToken;
+import org.apache.cxf.rs.security.oauth2.grants.code.JCacheCodeDataProvider;
+import org.apache.cxf.rs.security.oauth2.grants.code.ServerAuthorizationCodeGrant;
+import org.apache.cxf.rs.security.oauth2.provider.JCacheOAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.tokens.refresh.RefreshToken;
+
+import javax.annotation.PreDestroy;
+import javax.cache.CacheException;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.configuration.FactoryBuilder;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.integration.CacheLoader;
+import javax.cache.integration.CacheWriter;
+import javax.cache.spi.CachingProvider;
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+import javax.inject.Inject;
+import java.io.File;
+import java.net.URI;
+import java.util.Set;
+
+import static java.util.Optional.ofNullable;
+import static org.apache.cxf.jaxrs.utils.ResourceUtils.getClasspathResourceURL;
+
+@ApplicationScoped
+public class JCacheConfigurer {
+    @Inject
+    private Bus bus;
+
+    @Inject
+    private BeanManager bm;
+
+    private CachingProvider provider;
+    private CacheManager cacheManager;
+
+    public void doSetup(final OAuth2Options options) {
+        if (!options.getProvider().startsWith("jcache")) {
+            return;
+        }
+
+        provider = Caching.getCachingProvider();
+
+        final File file = new File(options.getJcacheConfigUri());
+        URI configFileURI = file.isFile() ? file.toURI() : null;
+        if (configFileURI == null) {
+            try {
+                configFileURI = getClasspathResourceURL(options.getJcacheConfigUri(), JCacheOAuthDataProvider.class, bus).toURI();
+            } catch (final Exception ex) {
+                configFileURI = provider.getDefaultURI();
+            }
+        }
+
+        cacheManager = provider.getCacheManager(configFileURI, Thread.currentThread().getContextClassLoader());
+        try {
+            cacheManager.createCache(
+                    JCacheOAuthDataProvider.CLIENT_CACHE_KEY,
+                    configure(new MutableConfiguration<String, Client>().setTypes(String.class, Client.class), options));
+            if (!options.isJcacheStoreJwtKeyOnly()/* && options.isUseJwtFormatForAccessTokens()*/) {
+                cacheManager.createCache(
+                        JCacheOAuthDataProvider.ACCESS_TOKEN_CACHE_KEY,
+                        configure(new MutableConfiguration<String, ServerAccessToken>().setTypes(String.class, ServerAccessToken.class), options));
+            } else {
+                cacheManager.createCache(
+                        JCacheOAuthDataProvider.ACCESS_TOKEN_CACHE_KEY,
+                        configure(new MutableConfiguration<String, String>().setTypes(String.class, String.class), options));
+            }
+            cacheManager.createCache(
+                    JCacheOAuthDataProvider.REFRESH_TOKEN_CACHE_KEY,
+                    configure(new MutableConfiguration<String, RefreshToken>().setTypes(String.class, RefreshToken.class), options));
+            if (options.isAuthorizationCodeSupport()) {
+                cacheManager.createCache(
+                        JCacheCodeDataProvider.CODE_GRANT_CACHE_KEY,
+                        configure(new MutableConfiguration<String, ServerAuthorizationCodeGrant>().setTypes(String.class, ServerAuthorizationCodeGrant.class), options));
+            }
+        } catch (final CacheException ce) {
+            // already created
+        }
+    }
+
+    private <T> MutableConfiguration<String, T> configure(final MutableConfiguration<String, T> configuration, final OAuth2Options opts) {
+        ofNullable(opts.getJcacheLoader())
+                .map(n -> lookup(CacheLoader.class, n))
+                .ifPresent(l -> configuration.setCacheLoaderFactory(new FactoryBuilder.SingletonFactory<CacheLoader<String, T>>(l)));
+        ofNullable(opts.getJcacheWriter())
+                .map(n -> lookup(CacheWriter.class, n))
+                .ifPresent(w -> configuration.setCacheWriterFactory(new FactoryBuilder.SingletonFactory<CacheWriter<String, T>>(w)));
+        return configuration
+                .setStoreByValue(opts.isJcacheStoreValue())
+                .setStatisticsEnabled(opts.isJcacheStatistics())
+                .setManagementEnabled(opts.isJcacheJmx());
+    }
+
+    private <U> U lookup(final Class<U> type, final String name) {
+        final Set<Bean<?>> nameSet = bm.getBeans(name);
+        Bean<?> bean = bm.resolve(nameSet);
+        if (bean == null) {
+            try {
+                final Class<?> beanType = Thread.currentThread().getContextClassLoader().loadClass(name.trim());
+                bean = bm.resolve(bm.getBeans(beanType));
+                if (bean == null) {
+                    return type.cast(beanType.newInstance());
+                }
+            } catch (final ClassNotFoundException | InstantiationException | IllegalAccessException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }
+        return type.cast(bm.getReference(bean, type, bm.createCreationalContext(null)));
+    }
+
+    @PreDestroy
+    private void destroy() {
+        cacheManager.close();
+        provider.close();
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/JPAAdapter.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/JPAAdapter.java
new file mode 100644
index 0000000..8a0e050
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/JPAAdapter.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.configuration;
+
+import org.apache.commons.dbcp2.BasicDataSource;
+import org.apache.cxf.rs.security.oauth2.common.Client;
+import org.apache.cxf.rs.security.oauth2.common.OAuthPermission;
+import org.apache.cxf.rs.security.oauth2.common.UserSubject;
+import org.apache.cxf.rs.security.oauth2.grants.code.ServerAuthorizationCodeGrant;
+import org.apache.cxf.rs.security.oauth2.tokens.bearer.BearerAccessToken;
+import org.apache.cxf.rs.security.oauth2.tokens.refresh.RefreshToken;
+
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.HashMap;
+import java.util.Properties;
+
+import static java.util.Optional.ofNullable;
+
+public class JPAAdapter {
+    // no persistence.xml
+    public static EntityManagerFactory createEntityManagerFactory(final OAuth2Options configuration) {
+        return Persistence.createEntityManagerFactory("oauth2", new HashMap() {{
+            put("openjpa.jdbc.SynchronizeMappings", "buildSchema(ForeignKeys=true)");
+            put("openjpa.MetaDataFactory", "jpa(Types=" +
+                    Client.class.getName() + ',' +
+                    OAuthPermission.class.getName() + ',' +
+                    UserSubject.class.getName() + ',' +
+                    ServerAuthorizationCodeGrant.class.getName() + ',' +
+                    BearerAccessToken.class.getName() + ',' +
+                    RefreshToken.class.getName() + ")");
+
+            // plain connection but not used cause of pooling
+            /*
+            put("openjpa.ConnectionDriverName", configuration.getJpaDriver());
+            put("openjpa.ConnectionURL", configuration.getJpaDriver());
+            put("openjpa.ConnectionUsername", configuration.getJpdaDatabaseUsername());
+            put("openjpa.ConnectionPassword", configuration.getJpdaDatabasePassword());
+            */
+            /* cool...but what about pooling?
+            put("javax.persistence.jdbc.driver", configuration.getJpaDriver());
+            put("javax.persistence.jdbc.url", configuration.getJpaDatabaseUrl());
+            put("javax.persistence.jdbc.user", configuration.getJpdaDatabaseUsername());
+            put("javax.persistence.jdbc.password", configuration.getJpdaDatabasePassword());
+            */
+            // pooling support
+            put("openjpa.ConnectionDriverName", BasicDataSource.class.getName());
+            put("openjpa.ConnectionProperties",
+                    "DriverClassName=" + configuration.getJpaDriver() + ',' +
+                            "Url=" + configuration.getJpaDatabaseUrl() + ',' +
+                            "Username=" + configuration.getJpdaDatabaseUsername() + ',' +
+                            "Password=" + configuration.getJpdaDatabasePassword() + ',' +
+                            "MaxActive=" + configuration.getJpaMaxActive() + ',' +
+                            "MaxWaitMillis=" + configuration.getJpaMaxWait() + ',' +
+                            "MaxIdle=" + configuration.getJpaMaxIdle() + ',' +
+                            "TestOnBorrow=" + configuration.isJpaTestOnBorrow() + ',' +
+                            "TestOnReturn=" + configuration.isJpaTestOnReturn() + ',' +
+                            "TestWhileIdle=" + (configuration.getJpaValidationQuery() != null && !configuration.getJpaValidationQuery().isEmpty()) + ',' +
+                            ofNullable(configuration.getJpaValidationQuery()).map(v -> "ValidationQuery=" + v + ',').orElse("") +
+                            ofNullable(configuration.getJpaValidationInterval()).map(v -> "MinEvictableIdleTimeMillis=" + v).orElse(""));
+
+            ofNullable(configuration.getJpaProperties())
+                    .map(p -> new Properties() {{
+                        try {
+                            load(new StringReader(p));
+                        } catch (final IOException e) {
+                            throw new IllegalArgumentException(e);
+                        }
+                    }})
+                    .ifPresent(this::putAll);
+        }});
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Configurer.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Configurer.java
new file mode 100644
index 0000000..e8f4f2b
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Configurer.java
@@ -0,0 +1,329 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.configuration;
+
+import org.apache.catalina.realm.GenericPrincipal;
+import org.apache.cxf.Bus;
+import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.interceptor.security.AuthenticationException;
+import org.apache.cxf.jaxrs.ext.MessageContext;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.PhaseInterceptorChain;
+import org.apache.cxf.rs.security.jose.jwe.JweEncryptionProvider;
+import org.apache.cxf.rs.security.jose.jwe.JweHeaders;
+import org.apache.cxf.rs.security.jose.jwe.JweUtils;
+import org.apache.cxf.rs.security.jose.jws.JwsSignatureProvider;
+import org.apache.cxf.rs.security.jose.jws.JwsUtils;
+import org.apache.cxf.rs.security.oauth2.common.OAuthRedirectionState;
+import org.apache.cxf.rs.security.oauth2.common.UserSubject;
+import org.apache.cxf.rs.security.oauth2.grants.AbstractGrantHandler;
+import org.apache.cxf.rs.security.oauth2.grants.clientcred.ClientCredentialsGrantHandler;
+import org.apache.cxf.rs.security.oauth2.grants.code.AuthorizationCodeGrantHandler;
+import org.apache.cxf.rs.security.oauth2.grants.code.DefaultEncryptingCodeDataProvider;
+import org.apache.cxf.rs.security.oauth2.grants.code.JPACodeDataProvider;
+import org.apache.cxf.rs.security.oauth2.grants.jwt.JwtBearerGrantHandler;
+import org.apache.cxf.rs.security.oauth2.grants.owner.JAASResourceOwnerLoginHandler;
+import org.apache.cxf.rs.security.oauth2.grants.owner.ResourceOwnerGrantHandler;
+import org.apache.cxf.rs.security.oauth2.grants.owner.ResourceOwnerLoginHandler;
+import org.apache.cxf.rs.security.oauth2.grants.refresh.RefreshTokenGrantHandler;
+import org.apache.cxf.rs.security.oauth2.provider.AbstractOAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.AccessTokenGrantHandler;
+import org.apache.cxf.rs.security.oauth2.provider.DefaultEHCacheOAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.DefaultEncryptingOAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.JCacheOAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.JPAOAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.JoseSessionTokenProvider;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthServiceException;
+import org.apache.cxf.rs.security.oauth2.services.AbstractTokenService;
+import org.apache.cxf.rs.security.oauth2.services.RedirectionBasedGrantService;
+import org.apache.cxf.rs.security.oauth2.utils.OAuthConstants;
+import org.apache.cxf.rs.security.oauth2.utils.OAuthUtils;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.oauth2.data.RefreshTokenEnabledProvider;
+import org.apache.meecrowave.oauth2.provider.JCacheCodeDataProvider;
+import org.apache.meecrowave.oauth2.resource.OAuth2TokenService;
+
+import javax.annotation.PostConstruct;
+import javax.crypto.spec.SecretKeySpec;
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Inject;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.MultivaluedMap;
+import java.io.IOException;
+import java.io.StringReader;
+import java.nio.charset.StandardCharsets;
+import java.security.Principal;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.function.Consumer;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.emptySet;
+import static java.util.Locale.ENGLISH;
+import static java.util.Optional.ofNullable;
+import static java.util.stream.Collectors.toMap;
+import static org.apache.cxf.rs.security.oauth2.common.AuthenticationMethod.PASSWORD;
+
+@ApplicationScoped
+public class OAuth2Configurer {
+    @Inject
+    private Meecrowave.Builder builder;
+
+    @Inject
+    private Bus bus;
+
+    @Inject
+    private HttpServletRequest request;
+
+    @Inject
+    private JCacheConfigurer jCacheConfigurer;
+
+    private Consumer<OAuth2TokenService> tokenServiceConsumer;
+    private Consumer<RedirectionBasedGrantService> redirectionBasedGrantServiceConsumer;
+    private Consumer<AbstractTokenService> abstractTokenServiceConsumer;
+    private OAuth2Options configuration;
+
+    @PostConstruct // TODO: still some missing configuration for jwt etc to add/wire from OAuth2Options
+    private void preCompute() {
+        configuration = builder.getExtension(OAuth2Options.class);
+
+        AbstractOAuthDataProvider provider;
+        switch (configuration.getProvider().toLowerCase(ENGLISH)) {
+            case "jpa": {
+                if (!configuration.isAuthorizationCodeSupport()) { // else use code impl
+                    final JPAOAuthDataProvider jpaProvider = new JPAOAuthDataProvider();
+                    jpaProvider.setEntityManagerFactory(JPAAdapter.createEntityManagerFactory(configuration));
+                    provider = jpaProvider;
+                    break;
+                }
+            }
+            case "jpa-code": {
+                final JPACodeDataProvider jpaProvider = new JPACodeDataProvider();
+                jpaProvider.setEntityManagerFactory(JPAAdapter.createEntityManagerFactory(configuration));
+                provider = jpaProvider;
+                break;
+            }
+            case "jcache":
+                if (!configuration.isAuthorizationCodeSupport()) { // else use code impl
+                    jCacheConfigurer.doSetup(configuration);
+                    try {
+                        provider = new JCacheOAuthDataProvider(configuration.getJcacheConfigUri(), bus, configuration.isJcacheStoreJwtKeyOnly());
+                    } catch (final Exception e) {
+                        throw new IllegalStateException(e);
+                    }
+                    break;
+                }
+            case "jcache-code":
+                jCacheConfigurer.doSetup(configuration);
+                try {
+                    provider = new JCacheCodeDataProvider(configuration, bus);
+                } catch (final Exception e) {
+                    throw new IllegalStateException(e);
+                }
+                break;
+            case "ehcache": // not sure it makes sense since we have jcache but this one is cheap to support
+                provider = new DefaultEHCacheOAuthDataProvider(configuration.getJcacheConfigUri(), bus);
+                break;
+            case "encrypted":
+                if (!configuration.isAuthorizationCodeSupport()) { // else use code impl
+                    provider = new DefaultEncryptingOAuthDataProvider(
+                            new SecretKeySpec(configuration.getEncryptedKey().getBytes(StandardCharsets.UTF_8), configuration.getEncryptedAlgo()));
+                    break;
+                }
+            case "encrypted-code":
+                provider = new DefaultEncryptingCodeDataProvider(
+                        new SecretKeySpec(configuration.getEncryptedKey().getBytes(StandardCharsets.UTF_8), configuration.getEncryptedAlgo()));
+                break;
+            default:
+                throw new IllegalArgumentException("Unsupported oauth2 provider: " + configuration.getProvider());
+        }
+
+        final RefreshTokenGrantHandler refreshTokenGrantHandler = new RefreshTokenGrantHandler();
+        refreshTokenGrantHandler.setDataProvider(provider);
+        refreshTokenGrantHandler.setUseAllClientScopes(configuration.isUseAllClientScopes());
+        refreshTokenGrantHandler.setPartialMatchScopeValidation(configuration.isPartialMatchScopeValidation());
+
+        final ResourceOwnerLoginHandler loginHandler = configuration.isJaas() ? new JAASResourceOwnerLoginHandler() : (client, name, password) -> {
+            try {
+                request.login(name, password);
+                try {
+                    final Principal pcp = request.getUserPrincipal();
+                    final List<String> roles = GenericPrincipal.class.isInstance(pcp) ?
+                            new ArrayList<>(asList(GenericPrincipal.class.cast(pcp).getRoles())) : Collections.<String>emptyList();
+                    final UserSubject userSubject = new UserSubject(name, roles);
+                    userSubject.setAuthenticationMethod(PASSWORD);
+                    return userSubject;
+                } finally {
+                    request.logout();
+                }
+            } catch (final ServletException e) {
+                throw new AuthenticationException(e.getMessage());
+            }
+        };
+
+        final List<AccessTokenGrantHandler> handlers = new ArrayList<>();
+        handlers.add(refreshTokenGrantHandler);
+        handlers.add(new ClientCredentialsGrantHandler());
+        handlers.add(new ResourceOwnerGrantHandler() {{
+            setLoginHandler(loginHandler);
+        }});
+        handlers.add(new AuthorizationCodeGrantHandler());
+        handlers.add(new JwtBearerGrantHandler());
+
+        provider.setUseJwtFormatForAccessTokens(configuration.isUseJwtFormatForAccessTokens());
+        provider.setAccessTokenLifetime(configuration.getAccessTokenLifetime());
+        provider.setRefreshTokenLifetime(configuration.getRefreshTokenLifetime());
+        provider.setRecycleRefreshTokens(configuration.isRecycleRefreshTokens());
+        provider.setSupportPreauthorizedTokens(configuration.isSupportPreauthorizedTokens());
+        ofNullable(configuration.getRequiredScopes()).map(s -> asList(s.split(","))).ifPresent(provider::setRequiredScopes);
+        ofNullable(configuration.getDefaultScopes()).map(s -> asList(s.split(","))).ifPresent(provider::setDefaultScopes);
+        ofNullable(configuration.getInvisibleToClientScopes()).map(s -> asList(s.split(","))).ifPresent(provider::setInvisibleToClientScopes);
+        ofNullable(configuration.getJwtAccessTokenClaimMap()).map(s -> new Properties() {{
+            try {
+                load(new StringReader(s));
+            } catch (IOException e) {
+                throw new IllegalArgumentException("Bad claim map configuration, use properties syntax");
+            }
+        }}).ifPresent(m -> provider.setJwtAccessTokenClaimMap(new HashMap<>(Map.class.cast(m))));
+
+        final OAuthDataProvider dataProvider;
+        if (configuration.isRefreshToken()) {
+            dataProvider = new RefreshTokenEnabledProvider(provider);
+            if (provider.getInvisibleToClientScopes() == null) {
+                provider.setInvisibleToClientScopes(new ArrayList<>());
+            }
+            provider.getInvisibleToClientScopes().add(OAuthConstants.REFRESH_TOKEN_SCOPE);
+        } else {
+            dataProvider = provider;
+        }
+
+        handlers.stream()
+                .filter(AbstractGrantHandler.class::isInstance)
+                .forEach(h -> {
+                    final AbstractGrantHandler handler = AbstractGrantHandler.class.cast(h);
+                    handler.setDataProvider(dataProvider);
+                    handler.setCanSupportPublicClients(configuration.isCanSupportPublicClients());
+                    handler.setPartialMatchScopeValidation(configuration.isPartialMatchScopeValidation());
+                });
+
+        abstractTokenServiceConsumer = s -> { // this is used @RequestScoped so ensure it is not slow for no reason
+            s.setCanSupportPublicClients(configuration.isCanSupportPublicClients());
+            s.setBlockUnsecureRequests(configuration.isBlockUnsecureRequests());
+            s.setWriteCustomErrors(configuration.isWriteCustomErrors());
+            s.setWriteOptionalParameters(configuration.isWriteOptionalParameters());
+            s.setDataProvider(dataProvider);
+        };
+        tokenServiceConsumer = s -> { // this is used @RequestScoped so ensure it is not slow for no reason
+            abstractTokenServiceConsumer.accept(s);
+            s.setGrantHandlers(handlers);
+        };
+
+        final List<String> noConsentScopes = ofNullable(configuration.getScopesRequiringNoConsent())
+                .map(s -> asList(s.split(",")))
+                .orElse(null);
+
+        // we prefix them oauth2.cxf. but otherwise it is the plain cxf config
+        final Map<String, String> contextualProperties = ofNullable(builder.getProperties()).map(Properties::stringPropertyNames).orElse(emptySet()).stream()
+                .filter(s -> s.startsWith("oauth2.cxf.rs.security."))
+                .collect(toMap(s -> s.substring("oauth2.cxf.".length()), s -> builder.getProperties().getProperty(s)));
+
+        final JoseSessionTokenProvider sessionAuthenticityTokenProvider = new JoseSessionTokenProvider() {
+            private int maxDefaultSessionInterval;
+            private boolean jweRequired;
+            private JweEncryptionProvider jweEncryptor;
+
+            @Override // workaround a NPE of 3.2.0 - https://issues.apache.org/jira/browse/CXF-7504
+            public String createSessionToken(final MessageContext mc, final MultivaluedMap<String, String> params,
+                                             final UserSubject subject, final OAuthRedirectionState secData) {
+                String stateString = convertStateToString(secData);
+                final JwsSignatureProvider jws = getInitializedSigProvider();
+                final JweEncryptionProvider jwe = jweEncryptor == null ?
+                        JweUtils.loadEncryptionProvider(new JweHeaders(), jweRequired) : jweEncryptor;
+                if (jws == null && jwe == null) {
+                    throw new OAuthServiceException("Session token can not be created");
+                }
+                if (jws != null) {
+                    stateString = JwsUtils.sign(jws, stateString, null);
+                }
+                if (jwe != null) {
+                    stateString = jwe.encrypt(StringUtils.toBytesUTF8(stateString), null);
+                }
+                return OAuthUtils.setSessionToken(mc, stateString, maxDefaultSessionInterval);
+            }
+
+            public void setJweEncryptor(final JweEncryptionProvider jweEncryptor) {
+                super.setJweEncryptor(jweEncryptor);
+                this.jweEncryptor = jweEncryptor;
+            }
+
+            @Override
+            public void setJweRequired(final boolean jweRequired) {
+                super.setJweRequired(jweRequired);
+                this.jweRequired = jweRequired;
+            }
+
+            @Override
+            public void setMaxDefaultSessionInterval(final int maxDefaultSessionInterval) {
+                super.setMaxDefaultSessionInterval(maxDefaultSessionInterval);
+                this.maxDefaultSessionInterval = maxDefaultSessionInterval;
+            }
+        };
+        sessionAuthenticityTokenProvider.setMaxDefaultSessionInterval(configuration.getMaxDefaultSessionInterval());
+        // TODO: other configs
+
+        redirectionBasedGrantServiceConsumer = s -> {
+            s.setDataProvider(dataProvider);
+            s.setBlockUnsecureRequests(configuration.isBlockUnsecureRequests());
+            s.setWriteOptionalParameters(configuration.isWriteOptionalParameters());
+            s.setUseAllClientScopes(configuration.isUseAllClientScopes());
+            s.setPartialMatchScopeValidation(configuration.isPartialMatchScopeValidation());
+            s.setUseRegisteredRedirectUriIfPossible(configuration.isUseRegisteredRedirectUriIfPossible());
+            s.setMaxDefaultSessionInterval(configuration.getMaxDefaultSessionInterval());
+            s.setMatchRedirectUriWithApplicationUri(configuration.isMatchRedirectUriWithApplicationUri());
+            s.setScopesRequiringNoConsent(noConsentScopes);
+            s.setSessionAuthenticityTokenProvider(sessionAuthenticityTokenProvider);
+
+            // TODO: make it even more contextual, client based?
+            final Message currentMessage = PhaseInterceptorChain.getCurrentMessage();
+            contextualProperties.forEach(currentMessage::put);
+        };
+    }
+
+    public void accept(final AbstractTokenService service) {
+        abstractTokenServiceConsumer.accept(service);
+    }
+
+    public void accept(final OAuth2TokenService service) {
+        tokenServiceConsumer.accept(service);
+    }
+
+    public void accept(final RedirectionBasedGrantService service) {
+        redirectionBasedGrantServiceConsumer.accept(service);
+    }
+
+    public OAuth2Options getConfiguration() {
+        return configuration;
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Options.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Options.java
new file mode 100644
index 0000000..dcff2a8
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/configuration/OAuth2Options.java
@@ -0,0 +1,539 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.configuration;
+
+import org.apache.meecrowave.runner.Cli;
+import org.apache.meecrowave.runner.cli.CliOption;
+
+public class OAuth2Options implements Cli.Options {
+    @CliOption(name = "oauth2-refresh-token", description = "Is issuing of access token issuing a refreh token too")
+    private boolean refreshToken = true;
+
+    @CliOption(name = "oauth2-client-force", description = "Is a client mandatory or can a token be issued without any client")
+    private boolean forceClient;
+
+    @CliOption(name = "oauth2-support-public-client", description = "Are public clients supported")
+    private boolean canSupportPublicClients;
+
+    @CliOption(name = "oauth2-use-all-client-scopes", description = "Are all client scopes used for refresh tokens")
+    private boolean useAllClientScopes;
+
+    @CliOption(name = "oauth2-write-custom-errors", description = "Should custom errors be written")
+    private boolean writeCustomErrors;
+
+    @CliOption(name = "oauth2-block-unsecure-requests", description = "Should unsecured requests be blocked")
+    private boolean blockUnsecureRequests;
+
+    @CliOption(name = "oauth2-write-optional-parameters", description = "Should optional parameters be written")
+    private boolean writeOptionalParameters = true;
+
+    @CliOption(name = "oauth2-partial-match-scope-validation", description = "Is partial match for scope validation activated")
+    private boolean partialMatchScopeValidation;
+
+    @CliOption(name = "oauth2-use-jaas", description = "Should jaas be used - alternative (default) is to delegate to meecrowave/tomcat realms")
+    private boolean jaas;
+
+    @CliOption(name = "oauth2-access-token-lifetime", description = "How long an access token is valid, default to 3600s")
+    private int accessTokenLifetime = 3600;
+
+    @CliOption(name = "oauth2-refresh-token-lifetime", description = "How long a refresh token is valid, default to eternity (0)")
+    private long refreshTokenLifetime;
+
+    @CliOption(name = "oauth2-refresh-token-recycling", description = "Should refresh token be recycled")
+    private boolean recycleRefreshTokens = true;
+
+    @CliOption(name = "oauth2-default-scopes", description = "Comma separated list of default scopes")
+    private String defaultScopes;
+
+    @CliOption(name = "oauth2-required-scopes", description = "Comma separated list of required scopes")
+    private String requiredScopes;
+
+    @CliOption(name = "oauth2-invisible-scopes", description = "Comma separated list of invisible to client scopes")
+    private String invisibleToClientScopes;
+
+    @CliOption(name = "oauth2-support-pre-authorized-tokens", description = "Are pre-authorized token supported")
+    private boolean supportPreauthorizedTokens;
+
+    @CliOption(name = "oauth2-use-jwt-format-for-access-token", description = "Should access token be jwt?")
+    private boolean useJwtFormatForAccessTokens;
+
+    @CliOption(name = "oauth2-jwt-access-token-claim-map", description = "The jwt claims configuration")
+    private String jwtAccessTokenClaimMap;
+
+    @CliOption(name = "oauth2-provider", description = "Which provider type to use: jcache[-code], jpa[-code], encrypted[-code]")
+    private String provider = "jcache";
+
+    @CliOption(name = "oauth2-jcache-config", description = "JCache configuration uri for the cache manager (jcache or provider)")
+    private String jcacheConfigUri = "default-oauth2.jcs";
+
+    @CliOption(name = "oauth2-jcache-store-value", description = "Should JCache store value or not")
+    private boolean jcacheStoreValue = true;
+
+    @CliOption(name = "oauth2-jcache-statistics", description = "Should JCache statistics be enabled")
+    private boolean jcacheStatistics = false;
+
+    @CliOption(name = "oauth2-jcache-jmx", description = "Should JCache JMX MBeans be enabled")
+    private boolean jcacheJmx = false;
+
+    @CliOption(name = "oauth2-jcache-loader", description = "The loader bean or class name")
+    private String jcacheLoader;
+
+    @CliOption(name = "oauth2-jcache-writer", description = "The writer bean or class name")
+    private String jcacheWriter;
+
+    @CliOption(name = "oauth2-jcache-store-jwt-token-key-only", description = "Should JCache store jwt token key only (jcache provider)")
+    private boolean jcacheStoreJwtKeyOnly;
+
+    @CliOption(name = "oauth2-jpa-database-url", description = "JPA database url for jpa provider")
+    private String jpaDatabaseUrl = "jdbc:h2:mem:oauth2";
+
+    @CliOption(name = "oauth2-jpa-database-username", description = "JPA database username for jpa provider")
+    private String jpdaDatabaseUsername = "sa";
+
+    @CliOption(name = "oauth2-jpa-database-password", description = "JPA database password for jpa provider")
+    private String jpdaDatabasePassword = "";
+
+    @CliOption(name = "oauth2-jpa-database-driver", description = "JPA database driver for jpa provider")
+    private String jpaDriver = "org.h2.Driver";
+
+    @CliOption(name = "oauth2-jpa-properties", description = "JPA persistence unit properties for jpa provider")
+    private String jpaProperties;
+
+    @CliOption(name = "oauth2-jpa-max-active", description = "JPA max active connections for jpa provider")
+    private int jpaMaxActive = 30;
+
+    @CliOption(name = "oauth2-jpa-max-idle", description = "JPA max idle connections for jpa provider")
+    private int jpaMaxIdle = 10;
+
+    @CliOption(name = "oauth2-jpa-max-wait", description = "JPA max wait for connections for jpa provider")
+    private int jpaMaxWait = 30000;
+
+    @CliOption(name = "oauth2-jpa-validation-query", description = "validation query for jpa provider")
+    private String jpaValidationQuery;
+
+    @CliOption(name = "oauth2-jpa-validation-interval", description = "validation interval for jpa provider")
+    private int jpaValidationInterval = 5 * 1000 * 60;
+
+    @CliOption(name = "oauth2-jpa-test-on-borrow", description = "should connections be tested on borrow for jpa provider")
+    private boolean jpaTestOnBorrow;
+
+    @CliOption(name = "oauth2-jpa-test-on-return", description = "should connections be tested on return for jpa provider")
+    private boolean jpaTestOnReturn;
+
+    @CliOption(name = "oauth2-encrypted-key", description = "The key for encrypted provider")
+    private String encryptedKey;
+
+    @CliOption(name = "oauth2-encrypted-algorithm", description = "The algorithm for the key for the encrypted provider")
+    private String encryptedAlgo;
+
+    @CliOption(name = "oauth2-token-support", description = "Are token flows supported")
+    private boolean tokenSupport = true;
+
+    @CliOption(name = "oauth2-authorization-code-support", description = "Is authorization code flow supported")
+    private boolean authorizationCodeSupport;
+
+    @CliOption(name = "oauth2-redirection-use-registered-redirect-uri-if-possible", description = "For authorization code flow, should the registered uri be used")
+    private boolean useRegisteredRedirectUriIfPossible = true;
+
+    /*
+    private SessionAuthenticityTokenProvider sessionAuthenticityTokenProvider;
+    private SubjectCreator subjectCreator;
+    private ResourceOwnerNameProvider resourceOwnerNameProvider;
+    private AuthorizationRequestFilter authorizationFilter;
+    */
+
+    @CliOption(name = "oauth2-redirection-max-default-session-interval", description = "For authorization code flow, how long a session can be")
+    private int maxDefaultSessionInterval;
+
+    @CliOption(
+            name = "oauth2-redirection-match-redirect-uri-with-application-uri",
+            description = "For authorization code flow, should redirect uri be matched with application one")
+    private boolean matchRedirectUriWithApplicationUri;
+
+    @CliOption(name = "oauth2-redirection-scopes-requiring-no-consent", description = "For authorization code flow, the scopes using no consent")
+    private String scopesRequiringNoConsent;
+
+    public String getEncryptedAlgo() {
+        return encryptedAlgo;
+    }
+
+    public void setEncryptedAlgo(final String encryptedAlgo) {
+        this.encryptedAlgo = encryptedAlgo;
+    }
+
+    public String getEncryptedKey() {
+        return encryptedKey;
+    }
+
+    public void setEncryptedKey(final String encryptedKey) {
+        this.encryptedKey = encryptedKey;
+    }
+
+    public int getJpaMaxActive() {
+        return jpaMaxActive;
+    }
+
+    public void setJpaMaxActive(final int jpaMaxActive) {
+        this.jpaMaxActive = jpaMaxActive;
+    }
+
+    public int getJpaMaxIdle() {
+        return jpaMaxIdle;
+    }
+
+    public void setJpaMaxIdle(final int jpaMaxIdle) {
+        this.jpaMaxIdle = jpaMaxIdle;
+    }
+
+    public int getJpaMaxWait() {
+        return jpaMaxWait;
+    }
+
+    public void setJpaMaxWait(final int jpaMaxWait) {
+        this.jpaMaxWait = jpaMaxWait;
+    }
+
+    public String getJpaValidationQuery() {
+        return jpaValidationQuery;
+    }
+
+    public void setJpaValidationQuery(final String jpaValidationQuery) {
+        this.jpaValidationQuery = jpaValidationQuery;
+    }
+
+    public int getJpaValidationInterval() {
+        return jpaValidationInterval;
+    }
+
+    public void setJpaValidationInterval(final int jpaValidationInterval) {
+        this.jpaValidationInterval = jpaValidationInterval;
+    }
+
+    public boolean isJpaTestOnBorrow() {
+        return jpaTestOnBorrow;
+    }
+
+    public void setJpaTestOnBorrow(final boolean jpaTestOnBorrow) {
+        this.jpaTestOnBorrow = jpaTestOnBorrow;
+    }
+
+    public boolean isJpaTestOnReturn() {
+        return jpaTestOnReturn;
+    }
+
+    public void setJpaTestOnReturn(final boolean jpaTestOnReturn) {
+        this.jpaTestOnReturn = jpaTestOnReturn;
+    }
+
+    public String getJpaProperties() {
+        return jpaProperties;
+    }
+
+    public void setJpaProperties(final String jpaProperties) {
+        this.jpaProperties = jpaProperties;
+    }
+
+    public String getJpaDatabaseUrl() {
+        return jpaDatabaseUrl;
+    }
+
+    public void setJpaDatabaseUrl(final String jpaDatabaseUrl) {
+        this.jpaDatabaseUrl = jpaDatabaseUrl;
+    }
+
+    public String getJpdaDatabaseUsername() {
+        return jpdaDatabaseUsername;
+    }
+
+    public void setJpdaDatabaseUsername(final String jpdaDatabaseUsername) {
+        this.jpdaDatabaseUsername = jpdaDatabaseUsername;
+    }
+
+    public String getJpdaDatabasePassword() {
+        return jpdaDatabasePassword;
+    }
+
+    public void setJpdaDatabasePassword(final String jpdaDatabasePassword) {
+        this.jpdaDatabasePassword = jpdaDatabasePassword;
+    }
+
+    public String getJpaDriver() {
+        return jpaDriver;
+    }
+
+    public void setJpaDriver(final String jpaDriver) {
+        this.jpaDriver = jpaDriver;
+    }
+
+    public String getJcacheConfigUri() {
+        return jcacheConfigUri;
+    }
+
+    public void setJcacheConfigUri(final String jcacheConfigUri) {
+        this.jcacheConfigUri = jcacheConfigUri;
+    }
+
+    public boolean isJcacheStoreJwtKeyOnly() {
+        return jcacheStoreJwtKeyOnly;
+    }
+
+    public void setJcacheStoreJwtKeyOnly(final boolean jcacheStoreJwtKeyOnly) {
+        this.jcacheStoreJwtKeyOnly = jcacheStoreJwtKeyOnly;
+    }
+
+    public String getProvider() {
+        return provider;
+    }
+
+    public void setProvider(final String provider) {
+        this.provider = provider;
+    }
+
+    public boolean isWriteCustomErrors() {
+        return writeCustomErrors;
+    }
+
+    public void setWriteCustomErrors(final boolean writeCustomErrors) {
+        this.writeCustomErrors = writeCustomErrors;
+    }
+
+    public boolean isBlockUnsecureRequests() {
+        return blockUnsecureRequests;
+    }
+
+    public void setBlockUnsecureRequests(final boolean blockUnsecureRequests) {
+        this.blockUnsecureRequests = blockUnsecureRequests;
+    }
+
+    public boolean isWriteOptionalParameters() {
+        return writeOptionalParameters;
+    }
+
+    public void setWriteOptionalParameters(final boolean writeOptionalParameters) {
+        this.writeOptionalParameters = writeOptionalParameters;
+    }
+
+    public boolean isCanSupportPublicClients() {
+        return canSupportPublicClients;
+    }
+
+    public void setCanSupportPublicClients(final boolean canSupportPublicClients) {
+        this.canSupportPublicClients = canSupportPublicClients;
+    }
+
+    public boolean isForceClient() {
+        return forceClient;
+    }
+
+    public void setForceClient(final boolean forceClient) {
+        this.forceClient = forceClient;
+    }
+
+    public boolean isPartialMatchScopeValidation() {
+        return partialMatchScopeValidation;
+    }
+
+    public void setPartialMatchScopeValidation(final boolean partialMatchScopeValidation) {
+        this.partialMatchScopeValidation = partialMatchScopeValidation;
+    }
+
+    public boolean isJaas() {
+        return jaas;
+    }
+
+    public void setJaas(final boolean jaas) {
+        this.jaas = jaas;
+    }
+
+    public boolean isRefreshToken() {
+        return refreshToken;
+    }
+
+    public void setRefreshToken(final boolean refreshToken) {
+        this.refreshToken = refreshToken;
+    }
+
+    public int getAccessTokenLifetime() {
+        return accessTokenLifetime;
+    }
+
+    public void setAccessTokenLifetime(final int accessTokenLifetime) {
+        this.accessTokenLifetime = accessTokenLifetime;
+    }
+
+    public long getRefreshTokenLifetime() {
+        return refreshTokenLifetime;
+    }
+
+    public void setRefreshTokenLifetime(final long refreshTokenLifetime) {
+        this.refreshTokenLifetime = refreshTokenLifetime;
+    }
+
+    public boolean isRecycleRefreshTokens() {
+        return recycleRefreshTokens;
+    }
+
+    public void setRecycleRefreshTokens(final boolean recycleRefreshTokens) {
+        this.recycleRefreshTokens = recycleRefreshTokens;
+    }
+
+    public String getDefaultScopes() {
+        return defaultScopes;
+    }
+
+    public void setDefaultScopes(final String defaultScopes) {
+        this.defaultScopes = defaultScopes;
+    }
+
+    public String getRequiredScopes() {
+        return requiredScopes;
+    }
+
+    public void setRequiredScopes(final String requiredScopes) {
+        this.requiredScopes = requiredScopes;
+    }
+
+    public String getInvisibleToClientScopes() {
+        return invisibleToClientScopes;
+    }
+
+    public void setInvisibleToClientScopes(final String invisibleToClientScopes) {
+        this.invisibleToClientScopes = invisibleToClientScopes;
+    }
+
+    public boolean isSupportPreauthorizedTokens() {
+        return supportPreauthorizedTokens;
+    }
+
+    public void setSupportPreauthorizedTokens(final boolean supportPreauthorizedTokens) {
+        this.supportPreauthorizedTokens = supportPreauthorizedTokens;
+    }
+
+    public boolean isUseJwtFormatForAccessTokens() {
+        return useJwtFormatForAccessTokens;
+    }
+
+    public void setUseJwtFormatForAccessTokens(final boolean useJwtFormatForAccessTokens) {
+        this.useJwtFormatForAccessTokens = useJwtFormatForAccessTokens;
+    }
+
+    public String getJwtAccessTokenClaimMap() {
+        return jwtAccessTokenClaimMap;
+    }
+
+    public void setJwtAccessTokenClaimMap(final String jwtAccessTokenClaimMap) {
+        this.jwtAccessTokenClaimMap = jwtAccessTokenClaimMap;
+    }
+
+    public boolean isUseAllClientScopes() {
+        return useAllClientScopes;
+    }
+
+    public void setUseAllClientScopes(final boolean useAllClientScopes) {
+        this.useAllClientScopes = useAllClientScopes;
+    }
+
+    public boolean isAuthorizationCodeSupport() {
+        return authorizationCodeSupport;
+    }
+
+    public void setAuthorizationCodeSupport(final boolean authorizationCodeSupport) {
+        this.authorizationCodeSupport = authorizationCodeSupport;
+    }
+
+    public boolean isUseRegisteredRedirectUriIfPossible() {
+        return useRegisteredRedirectUriIfPossible;
+    }
+
+    public void setUseRegisteredRedirectUriIfPossible(final boolean useRegisteredRedirectUriIfPossible) {
+        this.useRegisteredRedirectUriIfPossible = useRegisteredRedirectUriIfPossible;
+    }
+
+    public int getMaxDefaultSessionInterval() {
+        return maxDefaultSessionInterval;
+    }
+
+    public void setMaxDefaultSessionInterval(final int maxDefaultSessionInterval) {
+        this.maxDefaultSessionInterval = maxDefaultSessionInterval;
+    }
+
+    public boolean isMatchRedirectUriWithApplicationUri() {
+        return matchRedirectUriWithApplicationUri;
+    }
+
+    public void setMatchRedirectUriWithApplicationUri(final boolean matchRedirectUriWithApplicationUri) {
+        this.matchRedirectUriWithApplicationUri = matchRedirectUriWithApplicationUri;
+    }
+
+    public String getScopesRequiringNoConsent() {
+        return scopesRequiringNoConsent;
+    }
+
+    public void setScopesRequiringNoConsent(final String scopesRequiringNoConsent) {
+        this.scopesRequiringNoConsent = scopesRequiringNoConsent;
+    }
+
+    public boolean isTokenSupport() {
+        return tokenSupport;
+    }
+
+    public void setTokenSupport(final boolean tokenSupport) {
+        this.tokenSupport = tokenSupport;
+    }
+
+    public boolean isJcacheStoreValue() {
+        return jcacheStoreValue;
+    }
+
+    public void setJcacheStoreValue(final boolean jcacheStoreValue) {
+        this.jcacheStoreValue = jcacheStoreValue;
+    }
+
+    public String getJcacheLoader() {
+        return jcacheLoader;
+    }
+
+    public void setJcacheLoader(final String jcacheLoader) {
+        this.jcacheLoader = jcacheLoader;
+    }
+
+    public String getJcacheWriter() {
+        return jcacheWriter;
+    }
+
+    public void setJcacheWriter(final String jcacheWriter) {
+        this.jcacheWriter = jcacheWriter;
+    }
+
+    public boolean isJcacheStatistics() {
+        return jcacheStatistics;
+    }
+
+    public void setJcacheStatistics(final boolean jcacheStatistics) {
+        this.jcacheStatistics = jcacheStatistics;
+    }
+
+    public boolean isJcacheJmx() {
+        return jcacheJmx;
+    }
+
+    public void setJcacheJmx(final boolean jcacheJmx) {
+        this.jcacheJmx = jcacheJmx;
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/data/RefreshTokenEnabledProvider.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/data/RefreshTokenEnabledProvider.java
new file mode 100644
index 0000000..da12351
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/data/RefreshTokenEnabledProvider.java
@@ -0,0 +1,132 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.data;
+
+import org.apache.cxf.rs.security.oauth2.common.AccessTokenRegistration;
+import org.apache.cxf.rs.security.oauth2.common.Client;
+import org.apache.cxf.rs.security.oauth2.common.OAuthPermission;
+import org.apache.cxf.rs.security.oauth2.common.ServerAccessToken;
+import org.apache.cxf.rs.security.oauth2.common.UserSubject;
+import org.apache.cxf.rs.security.oauth2.grants.code.AuthorizationCodeDataProvider;
+import org.apache.cxf.rs.security.oauth2.grants.code.AuthorizationCodeRegistration;
+import org.apache.cxf.rs.security.oauth2.grants.code.ServerAuthorizationCodeGrant;
+import org.apache.cxf.rs.security.oauth2.provider.AbstractOAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthDataProvider;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthServiceException;
+import org.apache.cxf.rs.security.oauth2.tokens.refresh.RefreshToken;
+import org.apache.cxf.rs.security.oauth2.utils.OAuthConstants;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class RefreshTokenEnabledProvider implements OAuthDataProvider, AuthorizationCodeDataProvider {
+    private final OAuthDataProvider delegate;
+
+    public RefreshTokenEnabledProvider(final OAuthDataProvider delegate) {
+        this.delegate = delegate;
+        if (AbstractOAuthDataProvider.class.isInstance(delegate)) {
+            final AbstractOAuthDataProvider provider = AbstractOAuthDataProvider.class.cast(delegate);
+            final Map<String, OAuthPermission> permissionMap = new HashMap<>(provider.getPermissionMap());
+            permissionMap.putIfAbsent(OAuthConstants.REFRESH_TOKEN_SCOPE, new OAuthPermission(OAuthConstants.REFRESH_TOKEN_SCOPE, "allow to refresh a token"));
+            provider.setPermissionMap(permissionMap);
+        }
+    }
+
+    @Override
+    public Client getClient(final String clientId) throws OAuthServiceException {
+        return delegate.getClient(clientId);
+    }
+
+    @Override
+    public ServerAccessToken createAccessToken(final AccessTokenRegistration accessToken) throws OAuthServiceException {
+        if (!accessToken.getRequestedScope().contains(OAuthConstants.REFRESH_TOKEN_SCOPE)) {
+            accessToken.setRequestedScope(new ArrayList<>(accessToken.getRequestedScope()));
+            accessToken.getRequestedScope().add(OAuthConstants.REFRESH_TOKEN_SCOPE);
+        }
+        if (!accessToken.getApprovedScope().contains(OAuthConstants.REFRESH_TOKEN_SCOPE)) {
+            accessToken.setApprovedScope(new ArrayList<>(accessToken.getApprovedScope()));
+            accessToken.getApprovedScope().add(OAuthConstants.REFRESH_TOKEN_SCOPE);
+        }
+        return delegate.createAccessToken(accessToken);
+    }
+
+    @Override
+    public ServerAccessToken getAccessToken(final String accessToken) throws OAuthServiceException {
+        return delegate.getAccessToken(accessToken);
+    }
+
+    @Override
+    public ServerAccessToken getPreauthorizedToken(final Client client, final List<String> requestedScopes, final UserSubject subject, final String grantType)
+            throws OAuthServiceException {
+        return delegate.getPreauthorizedToken(client, requestedScopes, subject, grantType);
+    }
+
+    @Override
+    public ServerAccessToken refreshAccessToken(final Client client, final String refreshToken, final List<String> requestedScopes) throws OAuthServiceException {
+        return delegate.refreshAccessToken(client, refreshToken, requestedScopes);
+    }
+
+    @Override
+    public List<ServerAccessToken> getAccessTokens(final Client client, final UserSubject subject) throws OAuthServiceException {
+        return delegate.getAccessTokens(client, subject);
+    }
+
+    @Override
+    public List<RefreshToken> getRefreshTokens(final Client client, final UserSubject subject) throws OAuthServiceException {
+        return delegate.getRefreshTokens(client, subject);
+    }
+
+    @Override
+    public void revokeToken(final Client client, final String tokenId, final String tokenTypeHint) throws OAuthServiceException {
+        delegate.revokeToken(client, tokenId, tokenTypeHint);
+    }
+
+    @Override
+    public List<OAuthPermission> convertScopeToPermissions(final Client client, final List<String> requestedScopes) {
+        return delegate.convertScopeToPermissions(client, requestedScopes);
+    }
+
+    public OAuthDataProvider getDelegate() {
+        return delegate;
+    }
+
+    private AuthorizationCodeDataProvider getCodeDelegate() {
+        if (!AuthorizationCodeDataProvider.class.isInstance(delegate)) {
+            throw new UnsupportedOperationException("Not a AuthorizationCodeDataProvider");
+        }
+        return AuthorizationCodeDataProvider.class.cast(delegate);
+    }
+
+    @Override
+    public ServerAuthorizationCodeGrant createCodeGrant(final AuthorizationCodeRegistration reg) throws OAuthServiceException {
+        return getCodeDelegate().createCodeGrant(reg);
+    }
+
+    @Override
+    public ServerAuthorizationCodeGrant removeCodeGrant(final String code) throws OAuthServiceException {
+        return getCodeDelegate().removeCodeGrant(code);
+    }
+
+    @Override
+    public List<ServerAuthorizationCodeGrant> getCodeGrants(final Client c, final UserSubject subject) throws OAuthServiceException {
+        return getCodeDelegate().getCodeGrants(c, subject);
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/provider/JCacheCodeDataProvider.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/provider/JCacheCodeDataProvider.java
new file mode 100644
index 0000000..58bda46
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/provider/JCacheCodeDataProvider.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.provider;
+
+import org.apache.cxf.Bus;
+import org.apache.meecrowave.oauth2.configuration.OAuth2Options;
+
+import javax.enterprise.inject.Vetoed;
+
+@Vetoed
+public class JCacheCodeDataProvider extends org.apache.cxf.rs.security.oauth2.grants.code.JCacheCodeDataProvider {
+    public JCacheCodeDataProvider(final OAuth2Options configuration, final Bus bus) throws Exception {
+        super(configuration.getJcacheConfigUri(), bus);
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2Application.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2Application.java
new file mode 100644
index 0000000..c08414d
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2Application.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.resource;
+
+import org.apache.cxf.rs.security.oauth2.common.Client;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthJSONProvider;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.oauth2.configuration.OAuth2Options;
+
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+import java.util.HashSet;
+import java.util.Set;
+
+import static java.util.Arrays.asList;
+import static java.util.Collections.singletonList;
+
+@Dependent
+@ApplicationPath("oauth2")
+public class OAuth2Application extends Application {
+    @Inject
+    private Meecrowave.Builder builder;
+
+    private Set<Class<?>> classes;
+
+    @Override
+    public Set<Class<?>> getClasses() {
+        return classes != null ? classes : (classes = doGetClasses());
+    }
+
+    private Set<Class<?>> doGetClasses() {
+        final Set<Class<?>> classes = new HashSet<>(singletonList(OAuthJSONProvider.class));
+        if (builder.getExtension(OAuth2Options.class).isAuthorizationCodeSupport()) {
+            classes.add(OAuth2AuthorizationCodeGrantService.class);
+        }
+        if (builder.getExtension(OAuth2Options.class).isTokenSupport()) {
+            classes.addAll(asList(OAuth2TokenService.class, OAuth2RevokeTokenService.class));
+        }
+        return classes;
+    }
+
+    interface Defaults {
+        Client DEFAULT_CLIENT = new Client("__default", "", true);
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2AuthorizationCodeGrantService.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2AuthorizationCodeGrantService.java
new file mode 100644
index 0000000..fa2f662
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2AuthorizationCodeGrantService.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.resource;
+
+import org.apache.cxf.rs.security.oauth2.services.AuthorizationCodeGrantService;
+import org.apache.meecrowave.oauth2.configuration.OAuth2Configurer;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.ws.rs.Path;
+
+@RequestScoped
+@Path("authorize")
+public class OAuth2AuthorizationCodeGrantService extends AuthorizationCodeGrantService {
+    @Inject
+    private OAuth2Configurer configurer;
+
+    @PostConstruct
+    private void init() {
+        configurer.accept(this);
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2RevokeTokenService.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2RevokeTokenService.java
new file mode 100644
index 0000000..dd4d673
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2RevokeTokenService.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.resource;
+
+import org.apache.cxf.rs.security.oauth2.common.Client;
+import org.apache.cxf.rs.security.oauth2.services.TokenRevocationService;
+import org.apache.meecrowave.oauth2.configuration.OAuth2Configurer;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
+import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+
+@Path("revoke")
+@RequestScoped
+public class OAuth2RevokeTokenService extends TokenRevocationService implements OAuth2Application.Defaults {
+    @Inject
+    private OAuth2Configurer configurer;
+
+    @PostConstruct
+    private void init() {
+        configurer.accept(this);
+    }
+
+    @POST
+    @Override
+    @Consumes(APPLICATION_FORM_URLENCODED)
+    @Produces(APPLICATION_JSON)
+    public Response handleTokenRevocation(final MultivaluedMap<String, String> params) {
+        return super.handleTokenRevocation(params);
+    }
+
+    @Override // don't fail without a client
+    protected Client getClientFromBasicAuthScheme(final MultivaluedMap<String, String> params) {
+        final List<String> authorization = getMessageContext().getHttpHeaders().getRequestHeader("Authorization");
+        if (authorization == null || authorization.isEmpty()) {
+            if (!configurer.getConfiguration().isForceClient()) {
+                return DEFAULT_CLIENT;
+            }
+        }
+        return super.getClientFromBasicAuthScheme(params);
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2TokenService.java b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2TokenService.java
new file mode 100644
index 0000000..114fdc5
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/java/org/apache/meecrowave/oauth2/resource/OAuth2TokenService.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2.resource;
+
+import org.apache.cxf.rs.security.oauth2.common.Client;
+import org.apache.cxf.rs.security.oauth2.services.AccessTokenService;
+import org.apache.meecrowave.oauth2.configuration.OAuth2Configurer;
+
+import javax.annotation.PostConstruct;
+import javax.enterprise.context.RequestScoped;
+import javax.inject.Inject;
+import javax.ws.rs.Consumes;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MultivaluedMap;
+import javax.ws.rs.core.Response;
+import java.util.List;
+
+import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED;
+import static javax.ws.rs.core.MediaType.APPLICATION_JSON;
+
+@Path("token")
+@RequestScoped
+public class OAuth2TokenService extends AccessTokenService implements OAuth2Application.Defaults {
+    @Inject
+    private OAuth2Configurer configurer;
+
+    @PostConstruct
+    private void init() {
+        configurer.accept(this);
+    }
+
+    @POST
+    @Consumes(APPLICATION_FORM_URLENCODED)
+    @Produces(APPLICATION_JSON)
+    public Response handleTokenRequest(final MultivaluedMap<String, String> params) {
+        return super.handleTokenRequest(params);
+    }
+
+    @Override // don't fail without a client
+    protected Client getClientFromBasicAuthScheme(final MultivaluedMap<String, String> params) {
+        final List<String> authorization = getMessageContext().getHttpHeaders().getRequestHeader("Authorization");
+        if (authorization == null || authorization.isEmpty()) {
+            if (!configurer.getConfiguration().isForceClient()) {
+                return DEFAULT_CLIENT;
+            }
+        }
+        return super.getClientFromBasicAuthScheme(params);
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/main/resources/META-INF/LICENSE b/trunk/meecrowave-oauth2/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..c1c02af
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,519 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+======================================
+  LICENSES FOR INCLUDED DEPENDENCIES
+======================================
+
+All the source code for the OpenJPA project is released under the
+license above. Additionally, the OpenJPA binary distribution
+includes a number of third-party files that are required in
+order to the software to function. Unless noted below, these jars
+and resource files are also released under the ASF license above.
+
+The exceptions are as follows:
+
+=============================
+serp-1.13.1.jar - BSD License
+=============================
+
+Copyright (c) 2002, A. Abram White
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+* Neither the name of 'serp' nor the names of its contributors may
+  be used to endorse or promote products derived from this software without
+  specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+===========================
+openjpa-persistence -
+  orm-xsd.rsrc - CDDL 1.0 - included in the openjpa jar, taken from:
+    http://java.sun.com/xml/ns/persistence/orm_1_0.xsd)
+  orm_2_0-xsd.rsrc - CDDL 1.0 - included in the openjpa jar, taken from:
+    http://java.sun.com/xml/ns/persistence/orm_2_0.xsd)
+  persistence-xsd.rsrc - CDDL 1.0 - included in the openjpa jar, taken from:
+    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd)
+  persistence_2_0-xsd.rsrc - CDDL 1.0 - included in the openjpa jar, taken from:
+    http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd).
+===========================
+
+COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0
+
+1. Definitions.
+
+   1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications.
+
+   1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor.
+
+   1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof.
+
+   1.4. Executable. means the Covered Software in any form other than Source Code.
+
+   1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License.
+
+   1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License.
+
+   1.7. License. means this document.
+
+   1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein.
+
+   1.9. Modifications. means the Source Code and Executable form of any of the following:
+
+        A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications;
+
+        B. Any new file that contains any part of the Original Software or previous Modification; or
+
+        C. Any new file that is contributed or otherwise made available under the terms of this License.
+
+   1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License.
+
+   1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor.
+
+   1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code.
+
+   1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity.
+
+2. License Grants.
+
+      2.1. The Initial Developer Grant.
+
+      Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+         (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and
+
+         (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof).
+
+        (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License.
+
+        (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices.
+
+    2.2. Contributor Grant.
+
+    Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license:
+
+        (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and
+
+        (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination).
+
+        (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party.
+
+        (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor.
+
+3. Distribution Obligations.
+
+      3.1. Availability of Source Code.
+      Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange.
+
+      3.2. Modifications.
+      The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License.
+
+      3.3. Required Notices.
+      You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer.
+
+      3.4. Application of Additional Terms.
+      You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer.
+
+      3.5. Distribution of Executable Versions.
+      You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer.
+
+      3.6. Larger Works.
+      You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software.
+
+4. Versions of the License.
+
+      4.1. New Versions.
+      Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License.
+
+      4.2. Effect of New Versions.
+      You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward.
+
+      4.3. Modified Versions.
+      When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License.
+
+5. DISCLAIMER OF WARRANTY.
+
+   COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+6. TERMINATION.
+
+      6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive.
+
+      6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant.
+
+      6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination.
+
+7. LIMITATION OF LIABILITY.
+
+   UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+8. U.S. GOVERNMENT END USERS.
+
+   The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. ? 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License.
+
+9. MISCELLANEOUS.
+
+   This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software.
+
+10. RESPONSIBILITY FOR CLAIMS.
+
+   As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability.
+
+   NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)
+
+   The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.
+
+
+The GNU General Public License (GPL) Version 2, June 1991
+
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+   a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+   b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+   c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+   a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+   b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+   c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+   One line to give the program's name and a brief idea of what it does.
+
+   Copyright (C)
+
+   This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+   Gnomovision version 69, Copyright (C) year name of author
+   Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+   Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+   signature of Ty Coon, 1 April 1989
+   Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License.
+
+
+"CLASSPATH" EXCEPTION TO THE GPL VERSION 2
+
+Certain source files distributed by Sun Microsystems, Inc. are subject to the following clarification and special exception to the GPL Version 2, but only where Sun has expressly included in the particular source file's header the words
+
+"Sun designates this particular file as subject to the "Classpath" exception as provided by Sun in the License file that accompanied this code."
+
+Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination.
+
+As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.? An independent module is a module which is not derived from or based on this library.? If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so.? If you do not wish to do so, delete this exception statement from your version.
diff --git a/trunk/meecrowave-oauth2/src/main/resources/META-INF/NOTICE b/trunk/meecrowave-oauth2/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..96b1cb0
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,19 @@
+Apache Meecrowave
+Copyright 2016-2017 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+---
+
+OpenJPA includes software developed by the SERP project
+Copyright (c) 2002-2006, A. Abram White. All rights reserved.
+
+---
+
+OpenJPA includes the persistence and orm schemas from the JPA specifications.
+Copyright 2005-2009 Sun Microsystems, Inc. All rights reserved.
+
+---
+
+OpenJPA includes software written by Miroslav Nachev
diff --git a/trunk/meecrowave-oauth2/src/main/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options b/trunk/meecrowave-oauth2/src/main/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options
new file mode 100644
index 0000000..97e0607
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/resources/META-INF/services/org.apache.meecrowave.runner.Cli$Options
@@ -0,0 +1 @@
+org.apache.meecrowave.oauth2.configuration.OAuth2Options
diff --git a/trunk/meecrowave-oauth2/src/main/resources/default-oauth2.jcs b/trunk/meecrowave-oauth2/src/main/resources/default-oauth2.jcs
new file mode 100644
index 0000000..1faff17
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/main/resources/default-oauth2.jcs
@@ -0,0 +1,30 @@
+#Licensed to the Apache Software Foundation (ASF) under one
+#or more contributor license agreements.  See the NOTICE file
+#distributed with this work for additional information
+#regarding copyright ownership.  The ASF licenses this file
+#to you under the Apache License, Version 2.0 (the
+#"License"); you may not use this file except in compliance
+#with the License.  You may obtain a copy of the License at
+#
+#  http://www.apache.org/licenses/LICENSE-2.0
+#
+#Unless required by applicable law or agreed to in writing,
+#software distributed under the License is distributed on an
+#"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#KIND, either express or implied.  See the License for the
+#specific language governing permissions and limitations
+#under the License.
+jcs.default=
+jcs.default.cacheattributes=org.apache.commons.jcs.engine.CompositeCacheAttributes
+jcs.default.cacheattributes.MaxObjects=200001
+jcs.default.cacheattributes.MemoryCacheName=org.apache.commons.jcs.engine.memory.lru.LRUMemoryCache
+jcs.default.cacheattributes.UseMemoryShrinker=true
+jcs.default.cacheattributes.MaxMemoryIdleTimeSeconds=3600
+jcs.default.cacheattributes.ShrinkerIntervalSeconds=60
+jcs.default.elementattributes=org.apache.commons.jcs.engine.ElementAttributes
+jcs.default.elementattributes.IsEternal=false
+jcs.default.elementattributes.MaxLife=700
+jcs.default.elementattributes.IdleTime=1800
+jcs.default.elementattributes.IsSpool=true
+jcs.default.elementattributes.IsRemote=true
+jcs.default.elementattributes.IsLateral=true
diff --git a/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/Keystores.java b/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/Keystores.java
new file mode 100644
index 0000000..7e0c26d
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/Keystores.java
@@ -0,0 +1,108 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2;
+
+import org.apache.cxf.rt.security.crypto.CryptoUtils;
+import sun.security.tools.keytool.CertAndKeyGen;
+import sun.security.x509.BasicConstraintsExtension;
+import sun.security.x509.CertificateExtensions;
+import sun.security.x509.X500Name;
+import sun.security.x509.X509CertImpl;
+import sun.security.x509.X509CertInfo;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.security.KeyStore;
+import java.security.Principal;
+import java.security.PrivateKey;
+import java.security.cert.X509Certificate;
+
+public final class Keystores {
+    private Keystores() {
+        // no-op
+    }
+
+    public static void create(final File keystore) throws Exception {
+        CryptoUtils.installBouncyCastleProvider();
+
+        final KeyStore ks = KeyStore.getInstance("JKS");
+        ks.load(null, "password".toCharArray());
+
+        final CertAndKeyGen keyGen = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
+        keyGen.generate(2048);
+        PrivateKey rootPrivateKey = keyGen.getPrivateKey();
+
+        X509Certificate rootCertificate = keyGen.getSelfCertificate(new X500Name("cn=root"), (long) 365 * 24 * 60 * 60);
+
+        final CertAndKeyGen keyGen1 = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
+        keyGen1.generate(2048);
+        final PrivateKey middlePrivateKey = keyGen1.getPrivateKey();
+
+        X509Certificate middleCertificate = keyGen1.getSelfCertificate(new X500Name("CN=MIDDLE"), (long) 365 * 24 * 60 * 60);
+
+        //Generate leaf certificate
+        final CertAndKeyGen keyGen2 = new CertAndKeyGen("RSA", "SHA1WithRSA", null);
+        keyGen2.generate(2048);
+        final PrivateKey topPrivateKey = keyGen2.getPrivateKey();
+
+        X509Certificate topCertificate = keyGen2.getSelfCertificate(new X500Name("cn=root"), (long) 365 * 24 * 60 * 60);
+
+        rootCertificate = createSignedCertificate(rootCertificate, rootCertificate, rootPrivateKey);
+        middleCertificate = createSignedCertificate(middleCertificate, rootCertificate, rootPrivateKey);
+        topCertificate = createSignedCertificate(topCertificate, middleCertificate, middlePrivateKey);
+
+        final X509Certificate[] chain = new X509Certificate[]{topCertificate, middleCertificate, rootCertificate};
+
+        ks.setKeyEntry("alice", topPrivateKey, "pwd".toCharArray(), chain);
+
+
+        keystore.getParentFile().mkdirs();
+        try (final OutputStream os = new FileOutputStream(keystore)) {
+            ks.store(os, "password".toCharArray());
+        }
+    }
+
+    private static X509Certificate createSignedCertificate(final X509Certificate cetrificate, final X509Certificate issuerCertificate,
+                                                           final PrivateKey issuerPrivateKey) {
+        try {
+            Principal issuer = issuerCertificate.getSubjectDN();
+            String issuerSigAlg = issuerCertificate.getSigAlgName();
+
+            byte[] inCertBytes = cetrificate.getTBSCertificate();
+            X509CertInfo info = new X509CertInfo(inCertBytes);
+            info.set(X509CertInfo.ISSUER, (X500Name) issuer);
+
+            //No need to add the BasicContraint for leaf cert
+            if (!cetrificate.getSubjectDN().getName().equals("CN=TOP")) {
+                CertificateExtensions exts = new CertificateExtensions();
+                BasicConstraintsExtension bce = new BasicConstraintsExtension(true, -1);
+                exts.set(BasicConstraintsExtension.NAME, new BasicConstraintsExtension(false, bce.getExtensionValue()));
+                info.set(X509CertInfo.EXTENSIONS, exts);
+            }
+
+            final X509CertImpl outCert = new X509CertImpl(info);
+            outCert.sign(issuerPrivateKey, issuerSigAlg);
+
+            return outCert;
+        } catch (final Exception ex) {
+            throw new IllegalStateException(ex);
+        }
+    }
+}
diff --git a/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java b/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java
new file mode 100644
index 0000000..0f98133
--- /dev/null
+++ b/trunk/meecrowave-oauth2/src/test/java/org/apache/meecrowave/oauth2/OAuth2Test.java
@@ -0,0 +1,223 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.meecrowave.oauth2;
+
+import org.apache.cxf.common.classloader.ClassLoaderUtils;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.rs.security.jose.jwa.KeyAlgorithm;
+import org.apache.cxf.rs.security.jose.jwa.SignatureAlgorithm;
+import org.apache.cxf.rs.security.oauth2.common.ClientAccessToken;
+import org.apache.cxf.rs.security.oauth2.common.OAuthAuthorizationData;
+import org.apache.cxf.rs.security.oauth2.provider.OAuthJSONProvider;
+import org.apache.cxf.rs.security.oauth2.utils.OAuthConstants;
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit.MeecrowaveRule;
+import org.apache.meecrowave.oauth2.provider.JCacheCodeDataProvider;
+import org.junit.BeforeClass;
+import org.junit.ClassRule;
+import org.junit.Test;
+
+import javax.cache.Cache;
+import javax.cache.CacheManager;
+import javax.cache.Caching;
+import javax.cache.configuration.MutableConfiguration;
+import javax.cache.spi.CachingProvider;
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Form;
+import javax.ws.rs.core.Response;
+import java.io.File;
+import java.net.URISyntaxException;
+import java.nio.charset.StandardCharsets;
+
+import static java.util.Collections.singletonList;
+import static javax.ws.rs.client.Entity.entity;
+import static javax.ws.rs.core.MediaType.APPLICATION_FORM_URLENCODED_TYPE;
+import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
+import static javax.xml.bind.DatatypeConverter.printBase64Binary;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class OAuth2Test {
+    private static final File KEYSTORE = new File("target/OAuth2Test/keystore.jceks");
+
+    @ClassRule
+    public static final MeecrowaveRule MEECROWAVE = new MeecrowaveRule(
+            new Meecrowave.Builder().randomHttpPort()
+                    .user("test", "pwd").role("test", "admin")
+                    // auth code support is optional so activate it
+                    .property("oauth2-authorization-code-support", "true")
+                    // auth code jose setup to store the tokens
+                    .property("oauth2.cxf.rs.security.keystore.type", "jks")
+                    .property("oauth2.cxf.rs.security.keystore.file", KEYSTORE.getAbsolutePath())
+                    .property("oauth2.cxf.rs.security.keystore.password", "password")
+                    .property("oauth2.cxf.rs.security.keystore.alias", "alice")
+                    .property("oauth2.cxf.rs.security.key.password", "pwd")
+                    // auth code needs a logged pcp to work
+                    .loginConfig(new Meecrowave.LoginConfigBuilder().basic())
+                    .securityConstraints(new Meecrowave.SecurityConstaintBuilder()
+                            .authConstraint(true)
+                            .addAuthRole("**")
+                            .addCollection("secured", "/oauth2/authorize")
+                            .addCollection("secured", "/oauth2/authorize/decision")), "");
+
+    @BeforeClass
+    public static void createKeyStore() throws Exception {
+        Keystores.create(KEYSTORE);
+    }
+
+    @Test
+    public void getPasswordTokenNoClient() {
+        final Client client = ClientBuilder.newClient().register(new OAuthJSONProvider());
+        try {
+            final ClientAccessToken token = client.target("http://localhost:" + MEECROWAVE.getConfiguration().getHttpPort())
+                    .path("oauth2/token")
+                    .request(APPLICATION_JSON_TYPE)
+                    .post(entity(
+                            new Form()
+                                    .param("grant_type", "password")
+                                    .param("username", "test")
+                                    .param("password", "pwd"), APPLICATION_FORM_URLENCODED_TYPE), ClientAccessToken.class);
+            assertNotNull(token);
+            assertEquals("Bearer", token.getTokenType());
+            assertNotNull(token.getTokenKey());
+            assertEquals(3600, token.getExpiresIn());
+            assertNotEquals(0, token.getIssuedAt());
+            assertNotNull(token.getRefreshToken());
+        } finally {
+            client.close();
+        }
+    }
+
+    @Test
+    public void getRefreshTokenNoClient() {
+        final Client client = ClientBuilder.newClient().register(new OAuthJSONProvider());
+        try {
+            // password
+            final ClientAccessToken primary = client.target("http://localhost:" + MEECROWAVE.getConfiguration().getHttpPort())
+                    .path("oauth2/token")
+                    .request(APPLICATION_JSON_TYPE)
+                    .post(entity(
+                            new Form()
+                                    .param("grant_type", "password")
+                                    .param("username", "test")
+                                    .param("password", "pwd"), APPLICATION_FORM_URLENCODED_TYPE), ClientAccessToken.class);
+
+            // refresh
+            final ClientAccessToken token = client.target("http://localhost:" + MEECROWAVE.getConfiguration().getHttpPort())
+                    .path("oauth2/token")
+                    .request(APPLICATION_JSON_TYPE)
+                    .post(entity(
+                            new Form()
+                                    .param("grant_type", "refresh_token")
+                                    .param("refresh_token", primary.getRefreshToken()), APPLICATION_FORM_URLENCODED_TYPE), ClientAccessToken.class);
+            assertNotNull(token);
+            assertEquals("Bearer", token.getTokenType());
+            assertNotNull(token.getTokenKey());
+            assertEquals(3600, token.getExpiresIn());
+            assertNotEquals(0, token.getIssuedAt());
+            assertNotNull(token.getRefreshToken());
+        } finally {
+            client.close();
+        }
+    }
+
+    @Test
+    public void authorizationCode() throws URISyntaxException {
+        final int httpPort = MEECROWAVE.getConfiguration().getHttpPort();
+
+        createRedirectedClient(httpPort);
+
+        final Client client = ClientBuilder.newClient()
+                .property(Message.MAINTAIN_SESSION, true)
+                .register(new OAuthJSONProvider());
+        try {
+            final WebTarget target = client.target("http://localhost:" + httpPort);
+
+            final Response authorization = target
+                    .path("oauth2/authorize")
+                    .queryParam(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE_GRANT)
+                    .queryParam(OAuthConstants.RESPONSE_TYPE, OAuthConstants.CODE_RESPONSE_TYPE)
+                    .queryParam(OAuthConstants.CLIENT_ID, "c1")
+                    .queryParam(OAuthConstants.CLIENT_SECRET, "cpwd")
+                    .queryParam(OAuthConstants.REDIRECT_URI, "http://localhost:" + httpPort + "/redirected")
+                    .request(APPLICATION_JSON_TYPE)
+                    .header("authorization", "Basic " + printBase64Binary("test:pwd".getBytes(StandardCharsets.UTF_8)))
+                    .get();
+            final OAuthAuthorizationData data = authorization.readEntity(OAuthAuthorizationData.class);
+            assertNotNull(data.getAuthenticityToken());
+            assertEquals("c1", data.getClientId());
+            assertEquals("http://localhost:" + httpPort + "/oauth2/authorize/decision", data.getReplyTo());
+            assertEquals("code", data.getResponseType());
+            assertEquals("http://localhost:" + httpPort + "/redirected", data.getRedirectUri());
+
+            final Response decision = target
+                    .path("oauth2/authorize/decision")
+                    .queryParam(OAuthConstants.SESSION_AUTHENTICITY_TOKEN, data.getAuthenticityToken())
+                    .queryParam(OAuthConstants.AUTHORIZATION_DECISION_KEY, "allow")
+                    .request(APPLICATION_JSON_TYPE)
+                    .cookie(authorization.getCookies().get("JSESSIONID"))
+                    .header("authorization", "Basic " + printBase64Binary("test:pwd".getBytes(StandardCharsets.UTF_8)))
+                    .get();
+            assertEquals(Response.Status.SEE_OTHER.getStatusCode(), decision.getStatus());
+            assertTrue(decision.getLocation().toASCIIString(), decision.getLocation().toASCIIString().startsWith("http://localhost:" + httpPort + "/redirected?code="));
+
+            final ClientAccessToken token = target
+                    .path("oauth2/token")
+                    .request(APPLICATION_JSON_TYPE)
+                    .post(entity(
+                            new Form()
+                                    .param(OAuthConstants.GRANT_TYPE, OAuthConstants.AUTHORIZATION_CODE_GRANT)
+                                    .param(OAuthConstants.CODE_RESPONSE_TYPE, decision.getLocation().getRawQuery().substring("code=".length()))
+                                    .param(OAuthConstants.REDIRECT_URI, "http://localhost:" + httpPort + "/redirected")
+                                    .param(OAuthConstants.CLIENT_ID, "c1")
+                                    .param(OAuthConstants.CLIENT_SECRET, "cpwd"), APPLICATION_FORM_URLENCODED_TYPE), ClientAccessToken.class);
+            assertNotNull(token);
+            assertEquals("Bearer", token.getTokenType());
+            assertNotNull(token.getTokenKey());
+            assertEquals(3600, token.getExpiresIn());
+            assertNotEquals(0, token.getIssuedAt());
+            assertNotNull(token.getRefreshToken());
+        } finally {
+            client.close();
+        }
+    }
+
+    private void createRedirectedClient(final int httpPort) throws URISyntaxException {
+        final CachingProvider provider = Caching.getCachingProvider();
+        final CacheManager cacheManager = provider.getCacheManager(
+                ClassLoaderUtils.getResource("default-oauth2.jcs", OAuth2Test.class).toURI(),
+                Thread.currentThread().getContextClassLoader());
+        Cache<String, org.apache.cxf.rs.security.oauth2.common.Client> cache;
+        try {
+            cache = cacheManager
+                    .createCache(JCacheCodeDataProvider.CLIENT_CACHE_KEY, new MutableConfiguration<String, org.apache.cxf.rs.security.oauth2.common.Client>()
+                            .setTypes(String.class, org.apache.cxf.rs.security.oauth2.common.Client.class)
+                            .setStoreByValue(true));
+        } catch (final RuntimeException re) {
+            cache = cacheManager.getCache(JCacheCodeDataProvider.CLIENT_CACHE_KEY, String.class, org.apache.cxf.rs.security.oauth2.common.Client.class);
+        }
+        final org.apache.cxf.rs.security.oauth2.common.Client value = new org.apache.cxf.rs.security.oauth2.common.Client("c1", "cpwd", true);
+        value.setRedirectUris(singletonList("http://localhost:" + httpPort + "/redirected"));
+        cache.put("c1", value);
+    }
+}
diff --git a/trunk/pom.xml b/trunk/pom.xml
new file mode 100644
index 0000000..6231ef4
--- /dev/null
+++ b/trunk/pom.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <parent>
+    <groupId>org.apache</groupId>
+    <artifactId>apache</artifactId>
+    <version>18</version>
+  </parent>
+
+  <groupId>org.apache.meecrowave</groupId>
+  <artifactId>meecrowave</artifactId>
+  <version>1.2.0</version>
+  <packaging>pom</packaging>
+
+  <name>Meecrowave</name>
+  <description>A small Tomcat/OWB/CXF based server @ ASF</description>
+
+  <scm>
+    <connection>scm:svn:http://svn.apache.org/repos/asf/openwebbeans/meecrowave/tags/meecrowave-1.2.0</connection>
+    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/openwebbeans/meecrowave/tags/meecrowave-1.2.0</developerConnection>
+    <url>https://svn.apache.org/repos/asf/openwebbeans/meecrowave/tags/meecrowave-1.2.0</url>
+  </scm>
+
+  <issueManagement>
+    <system>jira</system>
+    <url>http://issues.apache.org/jira/browse/MEECROWAVE</url>
+  </issueManagement>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+    <junit.version>4.12</junit.version>
+    <tomcat.version>9.0.2</tomcat.version>
+    <openwebbeans.version>2.0.3</openwebbeans.version>
+    <cxf.version>3.2.1</cxf.version>
+    <johnzon.version>1.1.5</johnzon.version>
+    <log4j2.version>2.10.0</log4j2.version>
+    <deltaspike.version>1.8.0</deltaspike.version>
+    <jaxb.version>2.2.11</jaxb.version>
+    <openjpa.version>2.4.2</openjpa.version>
+    <jpa-spec.version>1.0-alpha-1</jpa-spec.version>
+    <h2.version>1.4.196</h2.version>
+    <dbcp2.version>2.1.1</dbcp2.version>
+    <commons-cli.version>1.4</commons-cli.version>
+    <xbean.version>4.6</xbean.version>
+  </properties>
+
+  <modules>
+    <module>meecrowave-core</module>
+    <module>meecrowave-maven-plugin</module>
+    <module>meecrowave-gradle-plugin</module>
+    <module>meecrowave-junit</module>
+    <module>meecrowave-arquillian</module>
+    <module>meecrowave-jpa</module>
+    <module>meecrowave-jolokia</module>
+    <module>meecrowave-doc</module>
+    <module>meecrowave-jta</module>
+    <module>integration-tests</module>
+    <module>meecrowave-oauth2</module>
+    <module>sample</module>
+  </modules>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <version>3.5.1</version>
+        <configuration>
+          <source>1.8</source>
+          <target>1.8</target>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <trimStackTrace>false</trimStackTrace>
+        </configuration>
+      </plugin>
+
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-release-plugin</artifactId>
+        <configuration>
+          <autoVersionSubmodules>true</autoVersionSubmodules>
+        </configuration>
+      </plugin>
+
+    </plugins>
+  </build>
+
+<!-- only needed when under development
+  <repositories>
+    <repository>
+      <id>asf-snapshot</id>
+      <url>https://repository.apache.org/content/repositories/snapshots/</url>
+      <releases>
+        <enabled>false</enabled>
+      </releases>
+      <snapshots>
+        <enabled>true</enabled>
+      </snapshots>
+    </repository>
+  </repositories>
+-->
+</project>
diff --git a/trunk/sample/README.adoc b/trunk/sample/README.adoc
new file mode 100644
index 0000000..597fb3d
--- /dev/null
+++ b/trunk/sample/README.adoc
@@ -0,0 +1,12 @@
+= Meecrowave Sample
+
+This project shows how to use meecrowave for simple applications.
+
+Here what it provides:
+
+0. A pom.xml with the dependencies for this sample and meecrowave-maven-plugin setup so you can launch `mvn package meecrowave-run`.
+1. A sample JAX-RS application: in src/main/java/com/superbiz/sample/jaxrs
+2. A test using JAX-RS client API and the meecrowave mono rule (useful when you run multiple tests) in src/test/java/com/superbiz/sample/jaxrs
+3. in src/main/java/com/superbiz/configuration/Defaults some enrichment of the meecrowave Cli options for the application.
+
+To use it launch meecrowave main (org.apache.meecrowave.runner.Cli) with option `--app-default-name foo`.
diff --git a/trunk/sample/pom.xml b/trunk/sample/pom.xml
new file mode 100644
index 0000000..69d0edc
--- /dev/null
+++ b/trunk/sample/pom.xml
@@ -0,0 +1,79 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>meecrowave</artifactId>
+    <groupId>org.apache.meecrowave</groupId>
+    <version>1.2.0</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>sample</artifactId>
+  <name>Meecrowave Sample</name>
+  <description>A project showing some of the meecrowave features.</description>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-core</artifactId>
+      <version>1.2.0</version>
+    </dependency>
+    <dependency>
+      <groupId>commons-cli</groupId>
+      <artifactId>commons-cli</artifactId>
+      <version>${commons-cli.version}</version>
+      <optional>true</optional>
+    </dependency>
+
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.12</version>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.meecrowave</groupId>
+      <artifactId>meecrowave-junit</artifactId>
+      <version>1.2.0</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.meecrowave</groupId>
+        <artifactId>meecrowave-maven-plugin</artifactId>
+        <version>1.2.0</version>
+      </plugin>
+    </plugins>
+  </build>
+
+  <distributionManagement>
+    <repository>
+      <id>localhost</id>
+      <url>file://${basedir}/target/repo/</url>
+    </repository>
+    <snapshotRepository>
+      <id>localhost</id>
+      <url>file://${basedir}/target/snapshot-repo/</url>
+    </snapshotRepository>
+  </distributionManagement>
+</project>
diff --git a/trunk/sample/src/main/java/com/superbiz/configuration/Defaults.java b/trunk/sample/src/main/java/com/superbiz/configuration/Defaults.java
new file mode 100644
index 0000000..2053c19
--- /dev/null
+++ b/trunk/sample/src/main/java/com/superbiz/configuration/Defaults.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.superbiz.configuration;
+
+import org.apache.meecrowave.runner.Cli;
+import org.apache.meecrowave.runner.cli.CliOption;
+
+public class Defaults implements Cli.Options {
+    @CliOption(name = "app-default-name", description = "The name used to say hello if not set")
+    private String name = "default value";
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/trunk/sample/src/main/java/com/superbiz/configuration/DefaultsProducer.java b/trunk/sample/src/main/java/com/superbiz/configuration/DefaultsProducer.java
new file mode 100644
index 0000000..6e40cf0
--- /dev/null
+++ b/trunk/sample/src/main/java/com/superbiz/configuration/DefaultsProducer.java
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.superbiz.configuration;
+
+import org.apache.meecrowave.Meecrowave;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.Produces;
+import javax.inject.Inject;
+
+@Dependent
+public class DefaultsProducer {
+    @Inject
+    private Meecrowave.Builder builder;
+
+    @Produces
+    @ApplicationScoped
+    public Defaults defaults() {
+        return builder.getExtension(Defaults.class);
+    }
+}
diff --git a/trunk/sample/src/main/java/com/superbiz/jaxrs/HelloApplication.java b/trunk/sample/src/main/java/com/superbiz/jaxrs/HelloApplication.java
new file mode 100644
index 0000000..813b6b9
--- /dev/null
+++ b/trunk/sample/src/main/java/com/superbiz/jaxrs/HelloApplication.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.superbiz.jaxrs;
+
+import javax.enterprise.context.Dependent;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.core.Application;
+
+@Dependent
+@ApplicationPath("api")
+public class HelloApplication extends Application {
+}
diff --git a/trunk/sample/src/main/java/com/superbiz/jaxrs/HelloEndpoint.java b/trunk/sample/src/main/java/com/superbiz/jaxrs/HelloEndpoint.java
new file mode 100644
index 0000000..3b5074e
--- /dev/null
+++ b/trunk/sample/src/main/java/com/superbiz/jaxrs/HelloEndpoint.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.superbiz.jaxrs;
+
+import com.superbiz.configuration.Defaults;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.enterprise.context.Dependent;
+import javax.inject.Inject;
+import javax.ws.rs.ApplicationPath;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.QueryParam;
+import javax.ws.rs.core.Application;
+import javax.ws.rs.core.MediaType;
+
+import static java.util.Optional.ofNullable;
+
+@Path("hello")
+@ApplicationScoped
+public class HelloEndpoint {
+    @Inject
+    private Defaults defaults;
+
+    @GET
+    @Produces(MediaType.APPLICATION_JSON)
+    public Hello sayHi(@QueryParam("name") final String name) {
+        return new Hello(ofNullable(name).orElse(defaults.getName()));
+    }
+
+    public static class Hello {
+        private String name;
+
+        public Hello() {
+            // no-op
+        }
+
+        private Hello(final String name) {
+            this.name = name;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(final String name) {
+            this.name = name;
+        }
+    }
+}
diff --git a/trunk/sample/src/test/java/com/superbiz/jaxrs/HelloEndpointTest.java b/trunk/sample/src/test/java/com/superbiz/jaxrs/HelloEndpointTest.java
new file mode 100644
index 0000000..b8c24ab
--- /dev/null
+++ b/trunk/sample/src/test/java/com/superbiz/jaxrs/HelloEndpointTest.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.superbiz.jaxrs;
+
+import org.apache.meecrowave.Meecrowave;
+import org.apache.meecrowave.junit.MonoMeecrowave;
+import org.apache.meecrowave.testing.ConfigurationInject;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+
+import static javax.ws.rs.core.MediaType.APPLICATION_JSON_TYPE;
+import static org.junit.Assert.assertEquals;
+
+@RunWith(MonoMeecrowave.Runner.class)
+public class HelloEndpointTest {
+    @ConfigurationInject
+    private Meecrowave.Builder configuration;
+
+    @Test
+    public void hello() {
+        final Client client = ClientBuilder.newClient();
+        try {
+            assertEquals("me", client.target("http://localhost:" + configuration.getHttpPort())
+                    .path("api/hello")
+                    .queryParam("name", "me")
+                    .request(APPLICATION_JSON_TYPE)
+                    .get(HelloEndpoint.Hello.class)
+                    .getName());
+        } finally {
+            client.close();
+        }
+    }
+}