summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Gradzki <mgradzki@cisco.com>2016-06-10 07:36:43 +0200
committerMaros Marsalek <mmarsale@cisco.com>2016-06-10 08:03:58 +0000
commit70e243d1c48f9554bd4e28e80f7ff766db6fe857 (patch)
tree6c2f91854470d0e61f267ee05ea3067b34e05629
parent973d8c2ecbb02cf6e4971060b6edec3617bce96f (diff)
HONEYCOMB-7: Remove VBD form HC
VBD is now subproject of ODL: https://git.opendaylight.org/gerrit/#/admin/projects/honeycomb/vbd Change-Id: I1bf01a01cca50fe5e3f4f82a53c6b15ec5c7091d Signed-off-by: Marek Gradzki <mgradzki@cisco.com>
-rw-r--r--pom.xml1
-rw-r--r--vbd/api/pom.xml76
-rw-r--r--vbd/api/src/main/java/io.fd.honeycomb.vbd.api/VxlanTunnelIdAllocator.java25
-rw-r--r--vbd/api/src/main/yang/odl-external-reference.yang41
-rw-r--r--vbd/api/src/main/yang/vbridge-topology.yang165
-rw-r--r--vbd/artifacts/pom.xml63
-rw-r--r--vbd/features/pom.xml140
-rw-r--r--vbd/features/src/main/features/features.xml55
-rw-r--r--vbd/gui/bundle/pom.xml92
-rw-r--r--vbd/gui/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml20
-rw-r--r--vbd/gui/module/pom.xml56
-rw-r--r--vbd/gui/module/src/main/resources/vpp/.gitignore2
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/css/next.css93
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/css/vpp.css258
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/data/locale-en_US.json3
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansExtraLight.otfbin53944 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansRegular.otfbin52108 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.eotbin44036 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.svg232
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.ttfbin43832 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.woffbin23556 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.eotbin44332 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.svg232
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.ttfbin44140 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.woffbin24084 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.eotbin26072 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.svg90
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.ttfbin25900 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.woffbin25976 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/images/bd1.svg1
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/images/bd2.svg8
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/images/interf.svg1
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/images/vpp.gifbin1944 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/js/lodash.min.js98
-rw-r--r--vbd/gui/module/src/main/resources/vpp/assets/js/next.js101
-rw-r--r--vbd/gui/module/src/main/resources/vpp/bower.json36
-rw-r--r--vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js18
-rw-r--r--vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js541
-rw-r--r--vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js17
-rw-r--r--vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js14
-rw-r--r--vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js253
-rw-r--r--vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js64
-rw-r--r--vbd/gui/module/src/main/resources/vpp/main.js30
-rwxr-xr-xvbd/gui/module/src/main/resources/vpp/node/nodebin20113697 -> 0 bytes
-rw-r--r--vbd/gui/module/src/main/resources/vpp/package.json18
-rw-r--r--vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js89
-rw-r--r--vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js74
-rw-r--r--vbd/gui/module/src/main/resources/vpp/services/bdm.service.js14
-rw-r--r--vbd/gui/module/src/main/resources/vpp/services/bdm.tunnel.service.js25
-rw-r--r--vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js106
-rw-r--r--vbd/gui/module/src/main/resources/vpp/services/inventory.service.js154
-rw-r--r--vbd/gui/module/src/main/resources/vpp/services/vpp.services.js48
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/bridge-domains.tpl.html56
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/config-interface-dialog.html38
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/config-vpp-dialog.html67
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/index.tpl.html15
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/inventory-detail.tpl.html99
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/inventory-table-interfaces-subgrid.tpl.html1
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/inventory-table.tpl.html41
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/inventory.tpl.html7
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/new-bd-dialog.html39
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/new-vpp-dialog.html69
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/root.tpl.html1
-rw-r--r--vbd/gui/module/src/main/resources/vpp/views/vpp-topo.html18
-rw-r--r--vbd/gui/module/src/main/resources/vpp/vpp.module.js114
-rw-r--r--vbd/gui/pom.xml29
-rw-r--r--vbd/impl/pom.xml103
-rw-r--r--vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java399
-rw-r--r--vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java189
-rw-r--r--vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VbdUtil.java44
-rw-r--r--vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java66
-rw-r--r--vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VppModifier.java255
-rw-r--r--vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java32
-rw-r--r--vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java13
-rw-r--r--vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java22
-rw-r--r--vbd/impl/src/main/resources/config/vbd.xml37
-rw-r--r--vbd/impl/src/main/yang/vbd-impl.yang35
-rw-r--r--vbd/impl/vbridge-workflow.txt104
-rw-r--r--vbd/karaf/pom.xml74
-rw-r--r--vbd/pom.xml65
80 files changed, 0 insertions, 5386 deletions
diff --git a/pom.xml b/pom.xml
index 90548778f..9b7d1b891 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,7 +33,6 @@
<modules>
<module>common</module>
<module>v3po</module>
- <module>vbd</module>
</modules>
<distributionManagement>
diff --git a/vbd/api/pom.xml b/vbd/api/pom.xml
deleted file mode 100644
index d3b448d05..000000000
--- a/vbd/api/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-<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>io.fd.honeycomb.common</groupId>
- <artifactId>api-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <relativePath>../../common/api-parent</relativePath>
- </parent>
-
- <groupId>io.fd.honeycomb.vbd</groupId>
- <modelVersion>4.0.0</modelVersion>
- <artifactId>vbd-api</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <packaging>bundle</packaging>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>mdsal-model-artifacts</artifactId>
- <version>0.8.2-Beryllium-SR2</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependency>
- <groupId>io.fd.honeycomb.v3po</groupId>
- <artifactId>v3po-artifacts</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <dependencies>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>iana-if-type-2014-05-08</artifactId>
- </dependency>
- <!--dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-yang-types-20130715</artifactId>
- </dependency-->
- <!--dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-interfaces</artifactId>
- </dependency-->
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-inet-types-2013-07-15</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>ietf-topology</artifactId>
- </dependency>
-
- <dependency>
- <groupId>io.fd.honeycomb.v3po</groupId>
- <artifactId>v3po-api</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/vbd/api/src/main/java/io.fd.honeycomb.vbd.api/VxlanTunnelIdAllocator.java b/vbd/api/src/main/java/io.fd.honeycomb.vbd.api/VxlanTunnelIdAllocator.java
deleted file mode 100644
index c458e5754..000000000
--- a/vbd/api/src/main/java/io.fd.honeycomb.vbd.api/VxlanTunnelIdAllocator.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- * <p>
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package io.fd.honeycomb.vbd.api;
-
-
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-
-
-public interface VxlanTunnelIdAllocator {
-
- /**
- * Allocate next available vxlan tunnel ID
- *
- * @param vpp specify contret vpp for which is next available vxlan id looked for
- * @return next available (in order) vxlan id.
- */
- Integer nextIdFor(final KeyedInstanceIdentifier<Node, NodeKey> vpp);
-}
diff --git a/vbd/api/src/main/yang/odl-external-reference.yang b/vbd/api/src/main/yang/odl-external-reference.yang
deleted file mode 100644
index e82bfe2b7..000000000
--- a/vbd/api/src/main/yang/odl-external-reference.yang
+++ /dev/null
@@ -1,41 +0,0 @@
-module odl-external-reference {
- // vi: set et smarttab sw=4 tabstop=4:
-
- yang-version 1;
- // FIXME: this mode should go to OpenDaylight/mdsal
- namespace "urn:opendaylight:params:xml:ns:yang:external:reference";
- prefix "extref";
-
- organization "Cisco Systems, Inc.";
-
- contact "Robert Varga <rovarga@cisco.com>";
-
- description
- "Model defining the base type for external references for use instead
- of an instance-identifier, which does not allow referencing entities
- unknown in the model (due to imports, etc.).
-
- Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
-
- This program and the accompanying materials are made available under the
- terms of the Eclipse Public License v1.0 which accompanies this distribution,
- and is available at http://www.eclipse.org/legal/epl-v10.html";
-
- revision "2016-01-29" {
- description "Initial model";
- }
-
- typedef external-reference {
- description "Reference to a YANG-modeled node which resides outside
- of this system. The format must use module names as namespace
- prefixes -- in a similar fashion RESTCONF does. The reference
- is evaluated from the root of the external system.
-
- This data type does not hold the coordinates of the external
- system, nor does it specify which data store on the external
- system should be used to satisfy the reference. This information
- should be described in the model which instantiates a leaf of
- this type.";
- type string;
- }
-}
diff --git a/vbd/api/src/main/yang/vbridge-topology.yang b/vbd/api/src/main/yang/vbridge-topology.yang
deleted file mode 100644
index 954982f24..000000000
--- a/vbd/api/src/main/yang/vbridge-topology.yang
+++ /dev/null
@@ -1,165 +0,0 @@
-module vbridge-topology {
- // vi: set et smarttab sw=4 tabstop=4:
-
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:vbridge:topology";
- prefix "vbridge";
-
- organization "Cisco Systems, Inc.";
-
- contact "Robert Varga <rovarga@cisco.com>";
-
- description
- "Base model describing a virtual bridge domain mapped expressed
- as a network topology. Implementations of this model are expected
- to map this topology onto an underlay transport/managent topology,
- such as a NETCONF topology talking to forwarding boxes
-
- Copyright (c) 2015 Cisco and/or its affiliates.
-
- 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.";
-
- revision "2016-01-29" {
- description "Initial cut";
- }
-
- import ietf-inet-types { prefix "inet"; }
- import network-topology { prefix nt; revision-date 2013-10-21; }
- import odl-external-reference { prefix extref; }
- import v3po { prefix "v3po"; }
- import yang-ext { prefix ext; revision-date "2013-07-09"; }
-
- identity tunnel-type {
- description "Type of tunneling technology";
- }
-
- typedef tunnel-type-ref {
- description "Reference to a tunneling technology";
- type identityref {
- base tunnel-type;
- }
- }
-
- identity tunnel-type-vxlan {
- // FIXME: should be in a vxlan-specific model
- description "VXLAN tunneling";
- base tunnel-type;
- }
-
- augment "/nt:network-topology/nt:topology/nt:topology-types" {
- ext:augment-identifier "topology-types-vbridge-augment";
- container vbridge-topology {
- presence "Indicates a virtual bridge domain topology";
- }
- }
-
- augment "/nt:network-topology/nt:topology" {
- ext:augment-identifier "topology-vbridge-augment";
- when "./nt:topology-types/vbridge-topology";
-
- // Pointer to the NETCONF topology which supports this bridge domain
- // FIXME: must "../../nt:underlay-topology";
-
- leaf tunnel-type {
- description "Tunnel technology to use for encapsulation";
- type tunnel-type-ref;
- }
-
- choice tunnel-parameters {
- container vxlan {
- // FIXME: should be in a vxlan-specific model
- when "../type = tunnel-type-vxlan";
- leaf vni {
- description "VNI to use for encap";
- type v3po:vxlan-vni;
- mandatory true;
- }
- }
- }
-
- uses v3po:bridge-domain-attributes;
- }
-
- augment "/nt:network-topology/nt:topology/nt:node" {
- ext:augment-identifier "node-vbridge-augment";
- when "../nt:topology-types/vbridge-topology";
-
-
- container bridge-member {
- presence "Indicates this node is part of the bridge domain";
-
- // Pointer to the NETCONF node which supports this bridge member
- must "../../nt:supporting-node";
-
- // FIXME: this is implementation specific, depends on whether
- // the underlay has an a concept of a bridge domain.
- leaf supporting-bridge-domain {
- description
- "Reference to the network element bridge domain, which has
- been configured to support this virtual bridge domain on
- this bridge member.
-
- This reference needs to be resolved against the supporting
- node's configuration data store.";
- config false;
- type extref:external-reference;
- }
- }
- }
-
- augment "/nt:network-topology/nt:topology/nt:node/nt:termination-point" {
- ext:augment-identifier "termination-point-vbridge-augment";
- when "../bridge-member";
-
- choice interface-type {
- leaf user-interface {
- description
- "Reference to the network element interface, which is
- configured to be a member of this virtual bridge domain.
-
- This reference needs to be resolved against the supporting
- node's configuration data store.";
- type extref:external-reference;
- mandatory true;
- }
- leaf tunnel-interface {
- description
- "Reference to the network element interface, which is
- configured to on the member to support exchange of packet
- passing through this virtual bridge domain towards other
- domain members.
-
- This reference needs to be resolved against the supporting
- node's configuration data store.";
- config false;
- type extref:external-reference;
- mandatory true;
- }
- }
- }
-
- augment "/nt:network-topology/nt:topology/nt:link" {
- when "../nt:topology-types/vbridge-topology";
- ext:augment-identifier "link-vbridge-augment";
- leaf tunnel {
- description
- "Reference to the network element tunnel interface supporting
- cross-connect between two bridge members.
-
- This reference needs to be resolved against the supporting
- node's operational data store.";
- config false;
- type extref:external-reference;
- }
- }
-}
diff --git a/vbd/artifacts/pom.xml b/vbd/artifacts/pom.xml
deleted file mode 100644
index be55469c7..000000000
--- a/vbd/artifacts/pom.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-
-<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>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-artifacts</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <packaging>pom</packaging>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-api</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-impl</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-impl</artifactId>
- <type>xml</type>
- <classifier>config</classifier>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-ui-bundle</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-ui-module</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-features</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <classifier>features</classifier>
- <type>xml</type>
- </dependency>
- </dependencies>
- </dependencyManagement>
-</project>
diff --git a/vbd/features/pom.xml b/vbd/features/pom.xml
deleted file mode 100644
index 25ff4aebf..000000000
--- a/vbd/features/pom.xml
+++ /dev/null
@@ -1,140 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-<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>io.fd.honeycomb.common</groupId>
- <artifactId>features-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <relativePath>../../common/features-parent</relativePath>
- </parent>
-
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-features</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <name>${project.artifactId}</name>
- <modelVersion>4.0.0</modelVersion>
-
- <prerequisites>
- <maven>3.1.1</maven>
- </prerequisites>
- <properties>
- <mdsal.version>2.0.2-Beryllium-SR2</mdsal.version>
- <mdsal.model.version>0.8.2-Beryllium-SR2</mdsal.model.version>
- <restconf.version>1.3.2-Beryllium-SR2</restconf.version>
- <netconf.mdsal.version>1.3.2-Beryllium-SR2</netconf.mdsal.version>
- <netconf.version>1.0.2-Beryllium-SR2</netconf.version>
- <yangtools.version>0.8.2-Beryllium-SR2</yangtools.version>
- <dlux.version>0.3.2-Beryllium-SR2</dlux.version>
- <v3po.version>1.0.0-SNAPSHOT</v3po.version>
- <configfile.directory>etc/opendaylight/karaf</configfile.directory>
- </properties>
- <dependencyManagement>
- <dependencies>
- <!-- project specific dependencies -->
- <dependency>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>mdsal-artifacts</artifactId>
- <version>2.0.2-Beryllium-SR2</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>mdsal-model-artifacts</artifactId>
- <version>0.8.2-Beryllium-SR2</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>yangtools-artifacts</artifactId>
- <version>0.8.2-Beryllium-SR2</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
-
- <dependency>
- <groupId>io.fd.honeycomb.v3po</groupId>
- <artifactId>v3po-artifacts</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
-
- <dependency>
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-artifacts</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <dependencies>
- <dependency>
- <groupId>org.opendaylight.yangtools</groupId>
- <artifactId>features-yangtools</artifactId>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal</groupId>
- <artifactId>features-mdsal</artifactId>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.mdsal.model</groupId>
- <artifactId>features-mdsal-model</artifactId>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>io.fd.honeycomb.v3po</groupId>
- <artifactId>v3po-features</artifactId>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-impl</artifactId>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-impl</artifactId>
- <type>xml</type>
- <classifier>config</classifier>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-api</artifactId>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-ui-bundle</artifactId>
- </dependency>
- </dependencies>
-</project>
diff --git a/vbd/features/src/main/features/features.xml b/vbd/features/src/main/features/features.xml
deleted file mode 100644
index bf09b6243..000000000
--- a/vbd/features/src/main/features/features.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-<features name="odl-vbd-${project.version}" xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://karaf.apache.org/xmlns/features/v1.2.0 http://karaf.apache.org/xmlns/features/v1.2.0">
- <repository>mvn:org.opendaylight.yangtools/features-yangtools/{{VERSION}}/xml/features</repository>
- <repository>mvn:org.opendaylight.mdsal/features-mdsal/{{VERSION}}/xml/features</repository>
- <repository>mvn:org.opendaylight.mdsal.model/features-mdsal-model/{{VERSION}}/xml/features</repository>
- <repository>mvn:io.fd.honeycomb.v3po/v3po-features/{{VERSION}}/xml/features</repository>
- <repository>mvn:org.opendaylight.netconf/features-netconf-connector/{{VERSION}}/xml/features</repository>
-
- <feature name='odl-vbd-api' version='${project.version}' description='OpenDaylight :: vbd :: api'>
- <feature version='${mdsal.model.version}'>odl-mdsal-models</feature>
- <feature version='${v3po.version}'>odl-v3po-api</feature>
- <bundle>mvn:io.fd.honeycomb.vbd/vbd-api/{{VERSION}}</bundle>
- </feature>
-
- <feature name='odl-vbd' version='${project.version}' description='OpenDaylight :: vbd'>
- <feature version='${mdsal.version}'>odl-mdsal-binding</feature>
- <feature version='${project.version}'>odl-vbd-api</feature>
- <feature version='${netconf.version}'>odl-netconf-connector-ssh</feature>
- <feature version='${netconf.mdsal.version}'>odl-netconf-mdsal</feature>
- <feature version='${netconf.version}'>odl-netconf-topology</feature>
- <bundle>mvn:io.fd.honeycomb.vbd/vbd-impl/{{VERSION}}</bundle>
- <configfile finalname="${configfile.directory}/vbd.xml">mvn:io.fd.honeycomb.vbd/vbd-impl/{{VERSION}}/xml/config</configfile>
- </feature>
-
- <feature name='odl-vbd-rest' version='${project.version}' description='OpenDaylight :: vbd :: REST'>
- <feature version="${project.version}">odl-vbd</feature>
- <feature version="${restconf.version}">odl-restconf</feature>
- </feature>
-
- <feature name='odl-vbd-ui' version='${project.version}' description='OpenDaylight :: vbd :: UI'>
- <feature version="${project.version}">odl-vbd-rest</feature>
- <feature version="${restconf.version}">odl-mdsal-apidocs</feature>
- <feature version="${restconf.version}">odl-mdsal-xsql</feature>
- <feature version="${dlux.version}">odl-dlux-yangui</feature>
- <bundle>mvn:io.fd.honeycomb.vbd/vbd-ui-bundle/{{VERSION}}</bundle>
- </feature>
-
-</features>
diff --git a/vbd/gui/bundle/pom.xml b/vbd/gui/bundle/pom.xml
deleted file mode 100644
index 3fc8301d8..000000000
--- a/vbd/gui/bundle/pom.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<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>io.fd.honeycomb.common</groupId>
- <artifactId>api-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <relativePath>../../../common/api-parent</relativePath>
- </parent>
-
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-ui-bundle</artifactId>
- <name>vbd-ui-bundle</name>
- <version>1.0.0-SNAPSHOT</version>
- <packaging>bundle</packaging>
-
- <dependencies>
- <dependency>
- <groupId>org.osgi</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- </dependency>
- <dependency>
- <groupId>org.apache.felix</groupId>
- <artifactId>org.osgi.compendium</artifactId>
- <version>1.4.0</version>
- </dependency>
- <dependency>
- <groupId>org.slf4j</groupId>
- <artifactId>jcl-over-slf4j</artifactId>
- </dependency>
- <dependency>
- <groupId>org.opendaylight.dlux</groupId>
- <artifactId>loader</artifactId>
- <version>0.3.2-Beryllium-SR2</version>
- </dependency>
- <dependency>
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-ui-module</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
- </dependencies>
-
- <build>
- <resources>
- <resource>
- <directory>target/generated-resources</directory>
- </resource>
- <resource>
- <directory>src/main/resources</directory>
- </resource>
- </resources>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <!--loader Resources-->
- <execution>
- <id>unpack-loader-resources</id>
- <goals>
- <goal>unpack-dependencies</goal>
- </goals>
- <phase>generate-resources</phase>
- <configuration>
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
- <groupId>org.openvpp.vbd</groupId>
- <includeArtifactIds>vbd-ui-module</includeArtifactIds>
- <excludes>META-INF\/**</excludes>
- <excludeTransitive>true</excludeTransitive>
- <ignorePermissions>false</ignorePermissions>
- </configuration>
- </execution>
- </executions>
- </plugin>
- <plugin>
- <groupId>org.apache.felix</groupId>
- <artifactId>maven-bundle-plugin</artifactId>
- <extensions>true</extensions>
- <configuration>
- <instructions>
- <Import-Package>org.osgi.service.http,
- org.osgi.framework;version="1.0.0",
- org.opendaylight.dlux.loader,
- org.slf4j
- </Import-Package>
- <Export-Package></Export-Package>
- </instructions>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/vbd/gui/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml b/vbd/gui/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
deleted file mode 100644
index 265cd7538..000000000
--- a/vbd/gui/bundle/src/main/resources/OSGI-INF/blueprint/blueprint.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
- <property name="httpService" ref="httpService"/>
- <property name="loader" ref="loader"/>
- <property name="moduleName" value="vpp"/>
- <property name="url" value="/src/app/vpp"/>
- <property name="directory" value="/vpp"/>
- <property name="requireJs" value="app/vpp/main"/>
- <property name="angularJs" value="app.vpp"/>
- <property name="cssDependencies">
- <list>
- <value>src/app/vpp/assets/css/next.css</value>
- <value>src/app/vpp/bower_components/angular-material/angular-material.min.css</value>
- <value>src/app/vpp/assets/css/vpp.css</value>
- </list>
- </property>
- </bean>
-</blueprint>
diff --git a/vbd/gui/module/pom.xml b/vbd/gui/module/pom.xml
deleted file mode 100644
index cdade2893..000000000
--- a/vbd/gui/module/pom.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Cisco Systems, Inc. and others. All rights reserved.
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
--->
-<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>io.fd.honeycomb.common</groupId>
- <artifactId>api-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <relativePath>../../../common/api-parent</relativePath>
- </parent>
-
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-ui-module</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <name>${project.artifactId}</name>
- <description>VPP UI Module Resources</description>
- <packaging>jar</packaging>
-
- <build>
- <plugins>
- <plugin>
- <groupId>com.github.eirslett</groupId>
- <artifactId>frontend-maven-plugin</artifactId>
- <version>0.0.27</version>
- <configuration>
- <nodeVersion>v0.12.9</nodeVersion>
- <npmVersion>3.1.3</npmVersion>
- <workingDirectory>src/main/resources/vpp/</workingDirectory>
- </configuration>
- <executions>
- <execution>
- <id>npm</id>
- <goals>
- <goal>install-node-and-npm</goal>
- <goal>npm</goal>
- </goals>
- <phase>generate-resources</phase>
- </execution>
- <execution>
- <id>bower</id>
- <goals>
- <goal>bower</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/vbd/gui/module/src/main/resources/vpp/.gitignore b/vbd/gui/module/src/main/resources/vpp/.gitignore
deleted file mode 100644
index 4a688ff05..000000000
--- a/vbd/gui/module/src/main/resources/vpp/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-node_modules/
-bower_components/ \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/css/next.css b/vbd/gui/module/src/main/resources/vpp/assets/css/next.css
deleted file mode 100644
index 584bb5a3e..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/css/next.css
+++ /dev/null
@@ -1,93 +0,0 @@
-/*Copyright (c) 2015 Cisco and/or its affiliates.
-
-The NeXt SDK is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives (CC BY-NC-ND) 4.0 International License . A copy of the license can be found in the license.txt file accompanying this distribution and at http://creativecommons.org/licenses/by-nc-nd/4.0/
-
-The code, technical concepts, all information contained herein, and related documentation are the property of and are vested in Cisco Technology, Inc. and/or its affiliated entities, under various laws including copyright, international treaties, patent, trade secret and/or contract. All use of the material herein must be in strict accordance with the terms of the license noted above. Any rights not expressly licensed are reserved.*/
-/*Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License
-
-By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
-
-Section 1 – Definitions.
-
-Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
-Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
-Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
-Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
-Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
-Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
-Licensor means the individual(s) or entity(ies) granting rights under this Public License.
-NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
-Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
-Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
-You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
-Section 2 – Scope.
-
-License grant.
-Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
-reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
-produce and reproduce, but not Share, Adapted Material for NonCommercial purposes only.
-Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
-Term. The term of this Public License is specified in Section 6(a).
-Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
-Downstream recipients.
-Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
-No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
-No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
-Other rights.
-
-Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
-Patent and trademark rights are not licensed under this Public License.
-To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
-Section 3 – License Conditions.
-
-Your exercise of the Licensed Rights is expressly made subject to the following conditions.
-
-Attribution.
-
-If You Share the Licensed Material, You must:
-
-retain the following if it is supplied by the Licensor with the Licensed Material:
-identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
-a copyright notice;
-a notice that refers to this Public License;
-a notice that refers to the disclaimer of warranties;
-a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
-indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
-indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
-For the avoidance of doubt, You do not have permission under this Public License to Share Adapted Material.
-You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
-If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
-Section 4 – Sui Generis Database Rights.
-
-Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
-
-for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only and provided You do not Share Adapted Material;
-if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
-You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
-For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
-Section 5 – Disclaimer of Warranties and Limitation of Liability.
-
-Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
-To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
-The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
-Section 6 – Term and Termination.
-
-This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
-Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
-
-automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
-upon express reinstatement by the Licensor.
-For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
-For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
-Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
-Section 7 – Other Terms and Conditions.
-
-The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
-Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
-Section 8 – Interpretation.
-
-For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
-To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
-No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
-Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.*/
-@font-face{font-family:next-font;src:url(../fonts/next-font.eot?-9scffx);src:url(../fonts/next-font.eot?#iefix-9scffx) format('embedded-opentype'),url(../fonts/next-font.woff?-9scffx) format('woff'),url(../fonts/next-font.ttf?-9scffx) format('truetype'),url(../fonts/next-font.svg?-9scffx#next-font) format('svg');font-weight:400;font-style:normal}[class*=" n-icon-"],[class^=n-icon-]{font-family:next-font;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-icon-hostgroupbg:before{content:"\e64c"}.n-icon-hostgroup:before{content:"\e64d"}.n-icon-wirelesshost:before{content:"\e64e"}.n-icon-wirelesshostwithborder-30:before{content:"\e64f"}.n-icon-firewallwithboder:before{content:"\e649"}.n-icon-unknowndevicewithborder:before{content:"\e64a"}.n-icon-unlinkwithborder:before{content:"\e64b"}.n-icon-unlinked:before{content:"\e646"}.n-icon-firewall:before{content:"\e647"}.n-icon-firewallbg:before{content:"\e648"}.n-icon-accesspointwithborder:before{content:"\e637"}.n-icon-camerawithborder:before{content:"\e638"}.n-icon-cloudwithborder:before{content:"\e639"}.n-icon-grouplwithborder:before{content:"\e63a"}.n-icon-groupmwithborder:before{content:"\e63b"}.n-icon-groupswithborder:before{content:"\e63c"}.n-icon-hostwithborder:before{content:"\e63d"}.n-icon-ipphonewithborder:before{content:"\e63e"}.n-icon-nexus5000withborder:before{content:"\e63f"}.n-icon-phonewithborder:before{content:"\e640"}.n-icon-routerwithborder:before{content:"\e641"}.n-icon-serverwithborder:before{content:"\e642"}.n-icon-switchwithborder:before{content:"\e643"}.n-icon-unknowndeviceswithborder:before{content:"\e644"}.n-icon-wlcwithborder:before{content:"\e645"}.n-icon-co-worker:before{content:"\e634"}.n-icon-layer:before{content:"\e635"}.n-icon-layout:before{content:"\e636"}.n-icon-cloud:before{content:"\e633"}.n-icon-de-aggregation:before{content:"\e632"}.n-icon-expand:before{content:"\e62d"}.n-icon-collapse:before{content:"\e62e"}.n-icon-groupsbg:before{content:"\e62f"}.n-icon-groupmbg:before{content:"\e630"}.n-icon-grouplbg:before{content:"\e631"}.n-icon-fullscreen:before{content:"\e62c"}.n-icon-movemode:before{content:"\e62b"}.n-icon-RCV:before{content:"\e62a"}.n-icon-PGN:before{content:"\e60b"}.n-icon-co-edit:before{content:"\e60c"}.n-icon-wlc:before{content:"\e60f"}.n-icon-wlcbg:before{content:"\e610"}.n-icon-unknownbg:before{content:"\e611"}.n-icon-unknown:before{content:"\e612"}.n-icon-switch:before{content:"\e618"}.n-icon-switchbg:before{content:"\e619"}.n-icon-serverbg:before{content:"\e61a"}.n-icon-server:before{content:"\e61b"}.n-icon-router:before{content:"\e61c"}.n-icon-routerbg:before{content:"\e61d"}.n-icon-phone:before{content:"\e61e"}.n-icon-phonebg:before{content:"\e61f"}.n-icon-nexus5000:before{content:"\e620"}.n-icon-nexus5000bg:before{content:"\e621"}.n-icon-ipphone:before{content:"\e622"}.n-icon-ipphonebg:before{content:"\e623"}.n-icon-host:before{content:"\e624"}.n-icon-hostbg:before{content:"\e625"}.n-icon-camera:before{content:"\e626"}.n-icon-camerabg:before{content:"\e627"}.n-icon-accesspoint:before{content:"\e628"}.n-icon-accesspointbg:before{content:"\e629"}.n-icon-groups:before{content:"\e615"}.n-icon-groupm2:before{content:"\e616"}.n-icon-groupl:before{content:"\e617"}.n-icon-zoomout-minus:before{content:"\e613"}.n-icon-zoomin-plus:before{content:"\e614"}.n-icon-zoomout:before{content:"\e606"}.n-icon-zoomin:before{content:"\e607"}.n-icon-zoombyselection:before{content:"\e608"}.n-icon-viewsetting:before{content:"\e609"}.n-icon-selectnode:before{content:"\e60a"}.n-icon-fitstage:before{content:"\e60d"}.n-icon-aggregation:before{content:"\e60e"}.n-icon-interface:before{content:"\e600"}.n-icon-router2:before{content:"\e601"}.n-icon-openflow:before{content:"\e602"}.n-icon-BMP:before{content:"\e603"}.n-icon-BGP:before{content:"\e604"}.n-icon-acl:before{content:"\e605"}.n-topology.n-topology-blue{position:relative;overflow:hidden;background:#fff;-webkit-transition:background .6s;transition:background .6s;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-blue:focus{outline:0 none}.n-topology.n-topology-blue .n-topology-fit{-webkit-transition:all .6s linear!important;transition:all .6s linear!important}.n-topology.n-topology-blue .n-topology-fit .link,.n-topology.n-topology-blue .n-topology-fit .linkSet,.n-topology.n-topology-blue .n-topology-fit .node,.n-topology.n-topology-blue .n-topology-fit .nodeSet{-webkit-transition:all .9s linear!important;transition:all .9s linear!important}.n-topology.n-topology-blue.n-topology-loading .n-topology-nav,.n-topology.n-topology-blue.n-topology-loading svg{-webkit-filter:blur(5px);-moz-filter:blur(5px)}.n-topology.n-topology-blue svg{box-sizing:content-box;position:absolute;top:0;left:0;right:0;bottom:0}.n-topology.n-topology-blue text:empty{display:none}.n-topology.n-topology-blue g{pointer-events:all}.n-topology.n-topology-blue defs .bg{fill:#0386d2}.n-topology.n-topology-blue defs .stroke{stroke:#0386d2}.n-topology.n-topology-blue defs [fill*='#FFFFFF']{fill:#fff}.n-topology.n-topology-blue .n-svg{border:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-blue .fontIcon{font-family:next-font;fill:#0386d2;alignment-baseline:central;text-anchor:middle;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-blue text{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-blue .n-topology-icon .fontIcon{cursor:pointer}.n-topology.n-topology-blue .iconBG{fill:#fff}.n-topology.n-topology-blue .iconBGActive{fill:#0386d2}.n-topology.n-topology-blue .node:not(.node-selected) .selectedBG{display:none}.n-topology.n-topology-blue .node .selectedBG{fill:transparent;opacity:.8;stroke:#f2ad4e;stroke-width:3;pointer-events:none}.n-topology.n-topology-blue .node .dot{fill:#0386d2}.n-topology.n-topology-blue .node text.node-label{font-family:"Cisco Sans Reg";fill:#0386d2;pointer-events:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:11px}.n-topology.n-topology-blue .node.disable .node-label{fill:#ccc!important}.n-topology.n-topology-blue .node.disable .iconBG.iconBGActive,.n-topology.n-topology-blue .node.disable .showIcon .iconShape{fill:#ccc}.n-topology.n-topology-blue .link line,.n-topology.n-topology-blue .link path{stroke:#5bc1df;stroke-width:1px;fill:none;cursor:pointer}.n-topology.n-topology-blue .link line.link:hover,.n-topology.n-topology-blue .link path.link:hover{stroke:#26a1c5}.n-topology.n-topology-blue .link line.link_bg:hover~line{stroke:#26a1c5!important}.n-topology.n-topology-blue .link .link-label{font-family:"Cisco Sans Reg";fill:#0386d2;font-size:12px}.n-topology.n-topology-blue .link .source-abel,.n-topology.n-topology-blue .link .target-label{font-family:"Cisco Sans Reg";fill:#0386d2;opacity:.8;font-size:12px}.n-topology.n-topology-blue .link .disable-label{fill:#fff}.n-topology.n-topology-blue .link .disable-bg{fill:#ccc}.n-topology.n-topology-blue .link .link_bg{stroke:transparent}.n-topology.n-topology-blue .link.disable line,.n-topology.n-topology-blue .link.disable path{stroke:#ccc!important;stroke-width:1px}.n-topology.n-topology-blue .link.disable .link_bg{stroke:transparent!important}.n-topology.n-topology-blue .link.link-selected line,.n-topology.n-topology-blue .link.link-selected path{stroke:#ccc;stroke-width:2px}.n-topology.n-topology-blue .nodeset .selectedBG{fill:transparent;opacity:.8;stroke:#f2ad4e;stroke-width:3;pointer-events:none}.n-topology.n-topology-blue .nodeset .dot{fill:#fff;stroke:#0386d2;stroke-width:1}.n-topology.n-topology-blue .nodeset .icon{cursor:pointer}.n-topology.n-topology-blue .nodeset .bg{fill:#0386d2;pointer-events:none}.n-topology.n-topology-blue .nodeset text.node-label{font-family:"Cisco Sans Reg";fill:#0386d2;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.n-topology.n-topology-blue .nodeset.disable{opacity:.3;stroke:#ccc}.n-topology.n-topology-blue .nodeset .iconBG,.n-topology.n-topology-blue .nodeset .iconBGActive{fill:#fff}.n-topology.n-topology-blue .nodeset .iconBGActive~.iconShape{display:block!important}.n-topology.n-topology-blue .nodeset .indicator .iconBG{fill:#fff}.n-topology.n-topology-blue .nodeset .indicator .iconBG:hover{fill:#0386d2}.n-topology.n-topology-blue .nodeset .indicator .iconShape{fill:#0266a0}.n-topology.n-topology-blue .group .bg{opacity:.6;stroke-width:10px;stroke-linejoin:round}.n-topology.n-topology-blue .group .groupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";text-anchor:middle;alignment-baseline:inherit}.n-topology.n-topology-blue .group .fontIcon.iconShape{fill:#9BB150}.n-topology.n-topology-blue .group .nodeSetGroupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";alignment-baseline:inherit;fill:#9BB150}.n-topology.n-topology-blue .group .groupLabel:hover~.bg{opacity:.7}.n-topology.n-topology-blue .group.aggregationGroup .bg{stroke-width:10px;stroke-linejoin:round;fill:#9BB150;stroke:#9BB150;pointer-events:none;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.n-topology.n-topology-blue .group.aggregationGroup.fade-active-item{opacity:1}.n-topology.n-topology-blue .group.aggregationGroup.fade-active-item .bg{opacity:.5}.n-topology.n-topology-blue .link-set-bg{stroke:#5bc1df;stroke-width:2px}.n-topology.n-topology-blue .link-set-circle{fill:#0386d2;stroke:#0386d2;stroke-width:16px;stroke-linejoin:round}.n-topology.n-topology-blue .link-set-text{font-family:"Cisco Sans Reg";fill:#fff;text-anchor:middle;dominant-baseline:central;font-size:12px;pointer-events:none}.n-topology.n-topology-blue .link-set.disable .link-set-bg{stroke:#ccc}.n-topology.n-topology-blue .link-set.disable .link-set-circle{fill:#ccc;stroke:#ccc}@media screen and (-webkit-min-device-pixel-ratio:0){.n-topology.n-topology-blue .link-set-circle,.n-topology.n-topology-blue ::i-block-chrome{stroke-width:8px!important}}.n-topology.n-topology-blue .mapPath{fill:#d6effe;stroke:#ade0fe;stroke-width:1;opacity:.5;pointer-events:none}.n-topology.n-topology-blue .mapBoundary{fill:none;stroke:#ade0fe;stroke-width:1;pointer-events:none}.n-topology.n-topology-blue .selectionRect{stroke:#0386d2;fill:#0386d2;fill-opacity:.1;pointer-events:none}.n-topology.n-topology-blue-setting{max-width:none!important}.n-topology.n-topology-blue .aggregationGroup .aggregationText{fill:#0386d2;font-size:12px}.n-topology.n-topology-blue .aggregationGroup .aggregationRect{fill:#0386d2;opacity:.2;stroke:#0386d2;stroke-width:3;stroke-linejoin:round;pointer-events:none}.n-topology.n-topology-blue .layer>*{transition:opacity .6s}.n-topology.n-topology-blue .layer.fade-layer>:not(.fade-highlight-item):not(.fade-active-item),.n-topology.n-topology-blue.fade-active-priority.fade-active-occur .layer.fade-layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-blue.fade-active-priority.fade-active-occur.fade-all .layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-blue.fade-all .layer>:not(.fade-highlight-item):not(.fade-active-item){opacity:.2}.n-topology.n-topology-blue .n-topology-nav{position:absolute;top:0;left:8px;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-blue .n-topology-nav li{list-style:none;padding:0}.n-topology.n-topology-blue .n-topology-nav ul{padding:0;margin:0}.n-topology.n-topology-blue .n-topology-nav span{-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-blue .n-topology-nav>ul{padding:0;margin-top:30px;width:32px}.n-topology.n-topology-blue .n-topology-nav>ul>li{display:inline-block;list-style:none;width:25px;margin-top:5px;-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-blue .n-topology-nav-mode{padding:0;position:relative;width:25px}.n-topology.n-topology-blue .n-topology-nav-mode li{width:25px;height:25px;line-height:30px;display:inline-block;text-align:center;cursor:pointer;-webkit-transition:all .6s;transition:all .6s;background:#eaeaea;margin-top:-2px}.n-topology.n-topology-blue .n-topology-nav-mode li:hover span{color:#0386d2}.n-topology.n-topology-blue .n-topology-nav-mode span{color:#999;display:inline-block;font-size:18px}.n-topology.n-topology-blue .n-topology-nav-mode-selected{background:#0386d2!important}.n-topology.n-topology-blue .n-topology-nav-mode-selected span{color:#fff}.n-topology.n-topology-blue .n-topology-nav-mode-selected:hover{background:#0386d2!important}.n-topology.n-topology-blue .n-topology-nav-mode-selected:hover span{color:#fff!important}.n-topology.n-topology-blue .n-topology-nav-zoom{position:relative;height:51px;margin-top:10px!important}.n-topology.n-topology-blue .n-topology-nav-zoom>span{display:inline-block;position:absolute;text-align:center;font-size:25px;color:#999;background:#eaeaea}.n-topology.n-topology-blue .n-topology-nav-zoom-in{top:0;left:0;cursor:pointer}.n-topology.n-topology-blue .n-topology-nav-zoom-in:hover{color:gray;background:#d8d8d8}.n-topology.n-topology-blue .n-topology-nav-zoom-out{top:25px;left:0;cursor:pointer}.n-topology.n-topology-blue .n-topology-nav-zoom-out:hover{color:gray;background:#d8d8d8}.n-topology.n-topology-blue .n-topology-nav-zoom-selection{cursor:pointer;text-align:center;font-size:22px;color:#999}.n-topology.n-topology-blue .n-topology-nav-zoom-selection:hover{color:#4d4d4d}.n-topology.n-topology-blue .n-topology-nav-zoom-selection-selected{color:#3fb7fc}.n-topology.n-topology-blue .n-topology-nav-fit{cursor:pointer;text-align:center;font-size:22px;color:#999}.n-topology.n-topology-blue .n-topology-nav-fit:hover{color:#4d4d4d}.n-topology.n-topology-blue .n-topology-nav-agr{cursor:pointer;line-height:24px;text-align:center;font-size:20px;height:24px;color:#999;display:none}.n-topology.n-topology-blue .n-topology-nav-agr:hover{color:#4d4d4d}@-webkit-keyframes agr-icon-ani{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}.n-topology.n-topology-blue .n-topology-nav .agr-icon{-webkit-animation-duration:3s;-webkit-animation-name:agr-icon-ani;-webkit-animation-iteration-count:infinite;-webkit-animation-direction:normal;-webkit-animation-timing-function:linear;-webkit-transition:0 none;color:#0396eb}.n-topology.n-topology-blue .n-topology-nav .agr-text{font-size:10px;color:#eaeaea;position:absolute;left:10px;margin-top:-1px;height:12px}.n-topology.n-topology-blue .n-topology-nav-full{cursor:pointer;text-align:center;font-size:18px;color:#999}.n-topology.n-topology-blue .n-topology-nav-full:hover{color:#4d4d4d}.n-topology.n-topology-blue .n-topology-nav-setting{cursor:pointer;text-align:center;color:#999;line-height:1;-webkit-transition:none 0!important;transition:none 0!important}.n-topology.n-topology-blue .n-topology-nav-setting:hover{opacity:1;color:#0396eb}.n-topology.n-topology-blue .n-topology-nav-setting-icon{font-size:20px}.n-topology.n-topology-blue .n-topology-nav-setting-icon-selected{color:#0396eb}.n-topology.n-topology-blue .n-topology-loading{overflow:hidden;position:absolute;top:0;bottom:0;left:0;right:0;height:100%;width:100%;display:none}.n-topology.n-topology-blue .n-topology-loading ul{position:absolute;left:calc(49.3%);top:calc(45.8%);display:inline-block;text-indent:2.8em}.n-topology.n-topology-blue .n-topology-loading ul li:after,.n-topology.n-topology-blue .n-topology-loading ul:after{width:1.4em;height:1.4em;border-radius:100%;content:"";display:block}.n-topology.n-topology-blue .n-topology-loading ul:after{position:absolute;top:2.8em}.n-topology.n-topology-blue .n-topology-loading li{position:absolute;padding-bottom:5.6em;top:0;left:0;list-style:none}.n-topology.n-topology-blue .n-topology-loading li:after{background:#0386d2}.n-topology.n-topology-blue .n-topology-loading li:nth-child(1){-webkit-transform:rotate(0deg);-webkit-animation-delay:.125s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(1):after{-webkit-animation-delay:.125s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(2){-webkit-transform:rotate(36deg);-webkit-animation-delay:.25s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(2):after{-webkit-animation-delay:.25s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(3){-webkit-transform:rotate(72deg);-webkit-animation-delay:.375s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(3):after{-webkit-animation-delay:.375s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(4){-webkit-transform:rotate(108deg);-webkit-animation-delay:.5s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(4):after{-webkit-animation-delay:.5s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(5){-webkit-transform:rotate(144deg);-webkit-animation-delay:.625s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(5):after{-webkit-animation-delay:.625s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(6){-webkit-transform:rotate(180deg);-webkit-animation-delay:.75s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(6):after{-webkit-animation-delay:.75s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(7){-webkit-transform:rotate(216deg);-webkit-animation-delay:.875s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(7):after{-webkit-animation-delay:.875s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(8){-webkit-transform:rotate(252deg);-webkit-animation-delay:1s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(8):after{-webkit-animation-delay:1s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(9){-webkit-transform:rotate(288deg);-webkit-animation-delay:1.125s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(9):after{-webkit-animation-delay:1.125s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(10){-webkit-transform:rotate(324deg);-webkit-animation-delay:1.25s}.n-topology.n-topology-blue .n-topology-loading li:nth-child(10):after{-webkit-animation-delay:1.25s}.n-topology.n-topology-blue .n-topology-loading li{-webkit-animation:dotAnimation 2.5s infinite}@-webkit-keyframes dotAnimation{0%,100%,55%{padding:0 0 5.6em}5%,50%{padding:2.8em 0}}.n-topology.n-topology-blue .n-topology-loading li:after{-webkit-animation:dotAnimationTwo 2.5s infinite}@-webkit-keyframes dotAnimationTwo{0%,100%,55%{opacity:1;-webkit-transform:scale(1)}5%,50%{opacity:.5;-webkit-transform:scale(0.5)}}.n-topology.n-topology-dark{position:relative;overflow:hidden;background:#000;-webkit-transition:background .6s;transition:background .6s;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-dark:focus{outline:0 none}.n-topology.n-topology-dark .n-topology-fit{-webkit-transition:all .6s linear!important;transition:all .6s linear!important}.n-topology.n-topology-dark .n-topology-fit .link,.n-topology.n-topology-dark .n-topology-fit .linkSet,.n-topology.n-topology-dark .n-topology-fit .node,.n-topology.n-topology-dark .n-topology-fit .nodeSet{-webkit-transition:all .9s linear!important;transition:all .9s linear!important}.n-topology.n-topology-dark.n-topology-loading .n-topology-nav,.n-topology.n-topology-dark.n-topology-loading svg{-webkit-filter:blur(5px);-moz-filter:blur(5px)}.n-topology.n-topology-dark svg{box-sizing:content-box;position:absolute;top:0;left:0;right:0;bottom:0}.n-topology.n-topology-dark text:empty{display:none}.n-topology.n-topology-dark g{pointer-events:all}.n-topology.n-topology-dark defs .bg{fill:#00a9ff}.n-topology.n-topology-dark defs .stroke{stroke:#00a9ff}.n-topology.n-topology-dark defs [fill*='#FFFFFF']{fill:#000}.n-topology.n-topology-dark .n-svg{border:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-dark .fontIcon{font-family:next-font;fill:#00a9ff;alignment-baseline:central;text-anchor:middle;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-dark text{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-dark .n-topology-icon .fontIcon{cursor:pointer}.n-topology.n-topology-dark .iconBG{fill:#000}.n-topology.n-topology-dark .iconBGActive{fill:#00a9ff}.n-topology.n-topology-dark .node:not(.node-selected) .selectedBG{display:none}.n-topology.n-topology-dark .node .selectedBG{fill:transparent;opacity:.8;stroke:#f7931e;stroke-width:3;pointer-events:none}.n-topology.n-topology-dark .node .dot{fill:#00a9ff}.n-topology.n-topology-dark .node text.node-label{font-family:"Cisco Sans Reg";fill:#00a9ff;pointer-events:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:11px}.n-topology.n-topology-dark .node.disable .node-label{fill:#ccc!important}.n-topology.n-topology-dark .node.disable .iconBG.iconBGActive,.n-topology.n-topology-dark .node.disable .showIcon .iconShape{fill:#ccc}.n-topology.n-topology-dark .link line,.n-topology.n-topology-dark .link path{stroke:#09cadd;stroke-width:1px;fill:none;cursor:pointer}.n-topology.n-topology-dark .link line.link:hover,.n-topology.n-topology-dark .link path.link:hover{stroke:#068591}.n-topology.n-topology-dark .link line.link_bg:hover~line{stroke:#068591!important}.n-topology.n-topology-dark .link .link-label{font-family:"Cisco Sans Reg";fill:#00a9ff;font-size:12px}.n-topology.n-topology-dark .link .source-abel,.n-topology.n-topology-dark .link .target-label{font-family:"Cisco Sans Reg";fill:#00a9ff;opacity:.8;font-size:12px}.n-topology.n-topology-dark .link .disable-label{fill:#fff}.n-topology.n-topology-dark .link .disable-bg{fill:#ccc}.n-topology.n-topology-dark .link .link_bg{stroke:transparent}.n-topology.n-topology-dark .link.disable line,.n-topology.n-topology-dark .link.disable path{stroke:#ccc!important;stroke-width:1px}.n-topology.n-topology-dark .link.disable .link_bg{stroke:transparent!important}.n-topology.n-topology-dark .link.link-selected line,.n-topology.n-topology-dark .link.link-selected path{stroke:#ccc;stroke-width:2px}.n-topology.n-topology-dark .nodeset .selectedBG{fill:transparent;opacity:.8;stroke:#f7931e;stroke-width:3;pointer-events:none}.n-topology.n-topology-dark .nodeset .dot{fill:#000;stroke:#00a9ff;stroke-width:1}.n-topology.n-topology-dark .nodeset .icon{cursor:pointer}.n-topology.n-topology-dark .nodeset .bg{fill:#00a9ff;pointer-events:none}.n-topology.n-topology-dark .nodeset text.node-label{font-family:"Cisco Sans Reg";fill:#00a9ff;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.n-topology.n-topology-dark .nodeset.disable{opacity:.3;stroke:#ccc}.n-topology.n-topology-dark .nodeset .iconBG,.n-topology.n-topology-dark .nodeset .iconBGActive{fill:#000}.n-topology.n-topology-dark .nodeset .iconBGActive~.iconShape{display:block!important}.n-topology.n-topology-dark .nodeset .indicator .iconBG{fill:#000}.n-topology.n-topology-dark .nodeset .indicator .iconBG:hover{fill:#00a9ff}.n-topology.n-topology-dark .nodeset .indicator .iconShape{fill:#0087cc}.n-topology.n-topology-dark .group .bg{opacity:.6;stroke-width:10px;stroke-linejoin:round}.n-topology.n-topology-dark .group .groupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";text-anchor:middle;alignment-baseline:inherit}.n-topology.n-topology-dark .group .fontIcon.iconShape{fill:#9BB150}.n-topology.n-topology-dark .group .nodeSetGroupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";alignment-baseline:inherit;fill:#9BB150}.n-topology.n-topology-dark .group .groupLabel:hover~.bg{opacity:.7}.n-topology.n-topology-dark .group.aggregationGroup .bg{stroke-width:10px;stroke-linejoin:round;fill:#9BB150;stroke:#9BB150;pointer-events:none;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.n-topology.n-topology-dark .group.aggregationGroup.fade-active-item{opacity:1}.n-topology.n-topology-dark .group.aggregationGroup.fade-active-item .bg{opacity:.5}.n-topology.n-topology-dark .link-set-bg{stroke:#09cadd;stroke-width:2px}.n-topology.n-topology-dark .link-set-circle{fill:#00a9ff;stroke:#00a9ff;stroke-width:16px;stroke-linejoin:round}.n-topology.n-topology-dark .link-set-text{font-family:"Cisco Sans Reg";fill:#000;text-anchor:middle;dominant-baseline:central;font-size:12px;pointer-events:none}.n-topology.n-topology-dark .link-set.disable .link-set-bg{stroke:#ccc}.n-topology.n-topology-dark .link-set.disable .link-set-circle{fill:#ccc;stroke:#ccc}@media screen and (-webkit-min-device-pixel-ratio:0){.n-topology.n-topology-dark .link-set-circle,.n-topology.n-topology-dark ::i-block-chrome{stroke-width:8px!important}}.n-topology.n-topology-dark .mapPath{fill:#fff;stroke:#d6f1ff;stroke-width:1;opacity:.5;pointer-events:none}.n-topology.n-topology-dark .mapBoundary{fill:none;stroke:#d6f1ff;stroke-width:1;pointer-events:none}.n-topology.n-topology-dark .selectionRect{stroke:#00a9ff;fill:#00a9ff;fill-opacity:.1;pointer-events:none}.n-topology.n-topology-dark-setting{max-width:none!important}.n-topology.n-topology-dark .aggregationGroup .aggregationText{fill:#00a9ff;font-size:12px}.n-topology.n-topology-dark .aggregationGroup .aggregationRect{fill:#00a9ff;opacity:.2;stroke:#00a9ff;stroke-width:3;stroke-linejoin:round;pointer-events:none}.n-topology.n-topology-dark .layer>*{transition:opacity .6s}.n-topology.n-topology-dark .layer.fade-layer>:not(.fade-highlight-item):not(.fade-active-item),.n-topology.n-topology-dark.fade-active-priority.fade-active-occur .layer.fade-layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-dark.fade-active-priority.fade-active-occur.fade-all .layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-dark.fade-all .layer>:not(.fade-highlight-item):not(.fade-active-item){opacity:.2}.n-topology.n-topology-dark .n-topology-nav{position:absolute;top:0;left:8px;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-dark .n-topology-nav li{list-style:none;padding:0}.n-topology.n-topology-dark .n-topology-nav ul{padding:0;margin:0}.n-topology.n-topology-dark .n-topology-nav span{-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-dark .n-topology-nav>ul{padding:0;margin-top:30px;width:32px}.n-topology.n-topology-dark .n-topology-nav>ul>li{display:inline-block;list-style:none;width:25px;margin-top:5px;-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-dark .n-topology-nav-mode{padding:0;position:relative;width:25px}.n-topology.n-topology-dark .n-topology-nav-mode li{width:25px;height:25px;line-height:30px;display:inline-block;text-align:center;cursor:pointer;-webkit-transition:all .6s;transition:all .6s;background:#333;margin-top:-2px}.n-topology.n-topology-dark .n-topology-nav-mode li:hover span{color:#00a9ff}.n-topology.n-topology-dark .n-topology-nav-mode span{color:#666;display:inline-block;font-size:18px}.n-topology.n-topology-dark .n-topology-nav-mode-selected{background:#00a9ff!important}.n-topology.n-topology-dark .n-topology-nav-mode-selected span{color:#000}.n-topology.n-topology-dark .n-topology-nav-mode-selected:hover{background:#00a9ff!important}.n-topology.n-topology-dark .n-topology-nav-mode-selected:hover span{color:#000!important}.n-topology.n-topology-dark .n-topology-nav-zoom{position:relative;height:51px;margin-top:10px!important}.n-topology.n-topology-dark .n-topology-nav-zoom>span{display:inline-block;position:absolute;text-align:center;font-size:25px;color:#666;background:#333}.n-topology.n-topology-dark .n-topology-nav-zoom-in{top:0;left:0;cursor:pointer}.n-topology.n-topology-dark .n-topology-nav-zoom-in:hover{color:#b3b3b3;background:#4d4d4d}.n-topology.n-topology-dark .n-topology-nav-zoom-out{top:25px;left:0;cursor:pointer}.n-topology.n-topology-dark .n-topology-nav-zoom-out:hover{color:#b3b3b3;background:#4d4d4d}.n-topology.n-topology-dark .n-topology-nav-zoom-selection{cursor:pointer;text-align:center;font-size:22px;color:#666}.n-topology.n-topology-dark .n-topology-nav-zoom-selection:hover{color:#b3b3b3}.n-topology.n-topology-dark .n-topology-nav-zoom-selection-selected{color:#66cbff}.n-topology.n-topology-dark .n-topology-nav-fit{cursor:pointer;text-align:center;font-size:22px;color:#666}.n-topology.n-topology-dark .n-topology-nav-fit:hover{color:#b3b3b3}.n-topology.n-topology-dark .n-topology-nav-agr{cursor:pointer;line-height:24px;text-align:center;font-size:20px;height:24px;color:#666;display:none}.n-topology.n-topology-dark .n-topology-nav-agr:hover{color:#b3b3b3}@-webkit-keyframes agr-icon-ani{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}.n-topology.n-topology-dark .n-topology-nav .agr-icon{-webkit-animation-duration:3s;-webkit-animation-name:agr-icon-ani;-webkit-animation-iteration-count:infinite;-webkit-animation-direction:normal;-webkit-animation-timing-function:linear;-webkit-transition:0 none;color:#1ab2ff}.n-topology.n-topology-dark .n-topology-nav .agr-text{font-size:10px;color:#333;position:absolute;left:10px;margin-top:-1px;height:12px}.n-topology.n-topology-dark .n-topology-nav-full{cursor:pointer;text-align:center;font-size:18px;color:#666}.n-topology.n-topology-dark .n-topology-nav-full:hover{color:#b3b3b3}.n-topology.n-topology-dark .n-topology-nav-setting{cursor:pointer;text-align:center;color:#666;line-height:1;-webkit-transition:none 0!important;transition:none 0!important}.n-topology.n-topology-dark .n-topology-nav-setting:hover{opacity:1;color:#1ab2ff}.n-topology.n-topology-dark .n-topology-nav-setting-icon{font-size:20px}.n-topology.n-topology-dark .n-topology-nav-setting-icon-selected{color:#1ab2ff}.n-topology.n-topology-dark .n-topology-loading{overflow:hidden;position:absolute;top:0;bottom:0;left:0;right:0;height:100%;width:100%;display:none}.n-topology.n-topology-dark .n-topology-loading ul{position:absolute;left:calc(49.3%);top:calc(45.8%);display:inline-block;text-indent:2.8em}.n-topology.n-topology-dark .n-topology-loading ul li:after,.n-topology.n-topology-dark .n-topology-loading ul:after{width:1.4em;height:1.4em;border-radius:100%;content:"";display:block}.n-topology.n-topology-dark .n-topology-loading ul:after{position:absolute;top:2.8em}.n-topology.n-topology-dark .n-topology-loading li{position:absolute;padding-bottom:5.6em;top:0;left:0;list-style:none}.n-topology.n-topology-dark .n-topology-loading li:after{background:#00a9ff}.n-topology.n-topology-dark .n-topology-loading li:nth-child(1){-webkit-transform:rotate(0deg);-webkit-animation-delay:.125s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(1):after{-webkit-animation-delay:.125s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(2){-webkit-transform:rotate(36deg);-webkit-animation-delay:.25s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(2):after{-webkit-animation-delay:.25s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(3){-webkit-transform:rotate(72deg);-webkit-animation-delay:.375s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(3):after{-webkit-animation-delay:.375s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(4){-webkit-transform:rotate(108deg);-webkit-animation-delay:.5s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(4):after{-webkit-animation-delay:.5s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(5){-webkit-transform:rotate(144deg);-webkit-animation-delay:.625s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(5):after{-webkit-animation-delay:.625s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(6){-webkit-transform:rotate(180deg);-webkit-animation-delay:.75s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(6):after{-webkit-animation-delay:.75s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(7){-webkit-transform:rotate(216deg);-webkit-animation-delay:.875s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(7):after{-webkit-animation-delay:.875s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(8){-webkit-transform:rotate(252deg);-webkit-animation-delay:1s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(8):after{-webkit-animation-delay:1s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(9){-webkit-transform:rotate(288deg);-webkit-animation-delay:1.125s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(9):after{-webkit-animation-delay:1.125s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(10){-webkit-transform:rotate(324deg);-webkit-animation-delay:1.25s}.n-topology.n-topology-dark .n-topology-loading li:nth-child(10):after{-webkit-animation-delay:1.25s}.n-topology.n-topology-dark .n-topology-loading li{-webkit-animation:dotAnimation 2.5s infinite}@-webkit-keyframes dotAnimation{0%,100%,55%{padding:0 0 5.6em}5%,50%{padding:2.8em 0}}.n-topology.n-topology-dark .n-topology-loading li:after{-webkit-animation:dotAnimationTwo 2.5s infinite}@-webkit-keyframes dotAnimationTwo{0%,100%,55%{opacity:1;-webkit-transform:scale(1)}5%,50%{opacity:.5;-webkit-transform:scale(0.5)}}.n-topology.n-topology-green{position:relative;overflow:hidden;background:#fff;-webkit-transition:background .6s;transition:background .6s;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-green:focus{outline:0 none}.n-topology.n-topology-green .n-topology-fit{-webkit-transition:all .6s linear!important;transition:all .6s linear!important}.n-topology.n-topology-green .n-topology-fit .link,.n-topology.n-topology-green .n-topology-fit .linkSet,.n-topology.n-topology-green .n-topology-fit .node,.n-topology.n-topology-green .n-topology-fit .nodeSet{-webkit-transition:all .9s linear!important;transition:all .9s linear!important}.n-topology.n-topology-green.n-topology-loading .n-topology-nav,.n-topology.n-topology-green.n-topology-loading svg{-webkit-filter:blur(5px);-moz-filter:blur(5px)}.n-topology.n-topology-green svg{box-sizing:content-box;position:absolute;top:0;left:0;right:0;bottom:0}.n-topology.n-topology-green text:empty{display:none}.n-topology.n-topology-green g{pointer-events:all}.n-topology.n-topology-green defs .bg{fill:#26999e}.n-topology.n-topology-green defs .stroke{stroke:#26999e}.n-topology.n-topology-green defs [fill*='#FFFFFF']{fill:#fff}.n-topology.n-topology-green .n-svg{border:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-green .fontIcon{font-family:next-font;fill:#26999e;alignment-baseline:central;text-anchor:middle;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-green text{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-green .n-topology-icon .fontIcon{cursor:pointer}.n-topology.n-topology-green .iconBG{fill:#fff}.n-topology.n-topology-green .iconBGActive{fill:#26999e}.n-topology.n-topology-green .node:not(.node-selected) .selectedBG{display:none}.n-topology.n-topology-green .node .selectedBG{fill:transparent;opacity:.8;stroke:#f2ad4e;stroke-width:3;pointer-events:none}.n-topology.n-topology-green .node .dot{fill:#26999e}.n-topology.n-topology-green .node text.node-label{font-family:"Cisco Sans Reg";fill:#26999e;pointer-events:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:11px}.n-topology.n-topology-green .node.disable .node-label{fill:#ccc!important}.n-topology.n-topology-green .node.disable .iconBG.iconBGActive,.n-topology.n-topology-green .node.disable .showIcon .iconShape{fill:#ccc}.n-topology.n-topology-green .link line,.n-topology.n-topology-green .link path{stroke:#5edadd;stroke-width:1px;fill:none;cursor:pointer}.n-topology.n-topology-green .link line.link:hover,.n-topology.n-topology-green .link path.link:hover{stroke:#29bfc3}.n-topology.n-topology-green .link line.link_bg:hover~line{stroke:#29bfc3!important}.n-topology.n-topology-green .link .link-label{font-family:"Cisco Sans Reg";fill:#26999e;font-size:12px}.n-topology.n-topology-green .link .source-abel,.n-topology.n-topology-green .link .target-label{font-family:"Cisco Sans Reg";fill:#26999e;opacity:.8;font-size:12px}.n-topology.n-topology-green .link .disable-label{fill:#fff}.n-topology.n-topology-green .link .disable-bg{fill:#ccc}.n-topology.n-topology-green .link .link_bg{stroke:transparent}.n-topology.n-topology-green .link.disable line,.n-topology.n-topology-green .link.disable path{stroke:#ccc!important;stroke-width:1px}.n-topology.n-topology-green .link.disable .link_bg{stroke:transparent!important}.n-topology.n-topology-green .link.link-selected line,.n-topology.n-topology-green .link.link-selected path{stroke:#ccc;stroke-width:2px}.n-topology.n-topology-green .nodeset .selectedBG{fill:transparent;opacity:.8;stroke:#f2ad4e;stroke-width:3;pointer-events:none}.n-topology.n-topology-green .nodeset .dot{fill:#fff;stroke:#26999e;stroke-width:1}.n-topology.n-topology-green .nodeset .icon{cursor:pointer}.n-topology.n-topology-green .nodeset .bg{fill:#26999e;pointer-events:none}.n-topology.n-topology-green .nodeset text.node-label{font-family:"Cisco Sans Reg";fill:#26999e;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.n-topology.n-topology-green .nodeset.disable{opacity:.3;stroke:#ccc}.n-topology.n-topology-green .nodeset .iconBG,.n-topology.n-topology-green .nodeset .iconBGActive{fill:#fff}.n-topology.n-topology-green .nodeset .iconBGActive~.iconShape{display:block!important}.n-topology.n-topology-green .nodeset .indicator .iconBG{fill:#fff}.n-topology.n-topology-green .nodeset .indicator .iconBG:hover{fill:#26999e}.n-topology.n-topology-green .nodeset .indicator .iconShape{fill:#1c7175}.n-topology.n-topology-green .group .bg{opacity:.6;stroke-width:10px;stroke-linejoin:round}.n-topology.n-topology-green .group .groupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";text-anchor:middle;alignment-baseline:inherit}.n-topology.n-topology-green .group .fontIcon.iconShape{fill:#9BB150}.n-topology.n-topology-green .group .nodeSetGroupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";alignment-baseline:inherit;fill:#9BB150}.n-topology.n-topology-green .group .groupLabel:hover~.bg{opacity:.7}.n-topology.n-topology-green .group.aggregationGroup .bg{stroke-width:10px;stroke-linejoin:round;fill:#9BB150;stroke:#9BB150;pointer-events:none;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.n-topology.n-topology-green .group.aggregationGroup.fade-active-item{opacity:1}.n-topology.n-topology-green .group.aggregationGroup.fade-active-item .bg{opacity:.5}.n-topology.n-topology-green .link-set-bg{stroke:#5edadd;stroke-width:2px}.n-topology.n-topology-green .link-set-circle{fill:#26999e;stroke:#26999e;stroke-width:16px;stroke-linejoin:round}.n-topology.n-topology-green .link-set-text{font-family:"Cisco Sans Reg";fill:#fff;text-anchor:middle;dominant-baseline:central;font-size:12px;pointer-events:none}.n-topology.n-topology-green .link-set.disable .link-set-bg{stroke:#ccc}.n-topology.n-topology-green .link-set.disable .link-set-circle{fill:#ccc;stroke:#ccc}@media screen and (-webkit-min-device-pixel-ratio:0){.n-topology.n-topology-green .link-set-circle,.n-topology.n-topology-green ::i-block-chrome{stroke-width:8px!important}}.n-topology.n-topology-green .mapPath{fill:#cff2f4;stroke:#afe9ec;stroke-width:1;opacity:.5;pointer-events:none}.n-topology.n-topology-green .mapBoundary{fill:none;stroke:#afe9ec;stroke-width:1;pointer-events:none}.n-topology.n-topology-green .selectionRect{stroke:#26999e;fill:#26999e;fill-opacity:.1;pointer-events:none}.n-topology.n-topology-green-setting{max-width:none!important}.n-topology.n-topology-green .aggregationGroup .aggregationText{fill:#26999e;font-size:12px}.n-topology.n-topology-green .aggregationGroup .aggregationRect{fill:#26999e;opacity:.2;stroke:#26999e;stroke-width:3;stroke-linejoin:round;pointer-events:none}.n-topology.n-topology-green .layer>*{transition:opacity .6s}.n-topology.n-topology-green .layer.fade-layer>:not(.fade-highlight-item):not(.fade-active-item),.n-topology.n-topology-green.fade-active-priority.fade-active-occur .layer.fade-layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-green.fade-active-priority.fade-active-occur.fade-all .layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-green.fade-all .layer>:not(.fade-highlight-item):not(.fade-active-item){opacity:.2}.n-topology.n-topology-green .n-topology-nav{position:absolute;top:0;left:8px;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-green .n-topology-nav li{list-style:none;padding:0}.n-topology.n-topology-green .n-topology-nav ul{padding:0;margin:0}.n-topology.n-topology-green .n-topology-nav span{-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-green .n-topology-nav>ul{padding:0;margin-top:30px;width:32px}.n-topology.n-topology-green .n-topology-nav>ul>li{display:inline-block;list-style:none;width:25px;margin-top:5px;-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-green .n-topology-nav-mode{padding:0;position:relative;width:25px}.n-topology.n-topology-green .n-topology-nav-mode li{width:25px;height:25px;line-height:30px;display:inline-block;text-align:center;cursor:pointer;-webkit-transition:all .6s;transition:all .6s;background:#eaeaea;margin-top:-2px}.n-topology.n-topology-green .n-topology-nav-mode li:hover span{color:#26999e}.n-topology.n-topology-green .n-topology-nav-mode span{color:#999;display:inline-block;font-size:18px}.n-topology.n-topology-green .n-topology-nav-mode-selected{background:#26999e!important}.n-topology.n-topology-green .n-topology-nav-mode-selected span{color:#fff}.n-topology.n-topology-green .n-topology-nav-mode-selected:hover{background:#26999e!important}.n-topology.n-topology-green .n-topology-nav-mode-selected:hover span{color:#fff!important}.n-topology.n-topology-green .n-topology-nav-zoom{position:relative;height:51px;margin-top:10px!important}.n-topology.n-topology-green .n-topology-nav-zoom>span{display:inline-block;position:absolute;text-align:center;font-size:25px;color:#999;background:#eaeaea}.n-topology.n-topology-green .n-topology-nav-zoom-in{top:0;left:0;cursor:pointer}.n-topology.n-topology-green .n-topology-nav-zoom-in:hover{color:gray;background:#d8d8d8}.n-topology.n-topology-green .n-topology-nav-zoom-out{top:25px;left:0;cursor:pointer}.n-topology.n-topology-green .n-topology-nav-zoom-out:hover{color:gray;background:#d8d8d8}.n-topology.n-topology-green .n-topology-nav-zoom-selection{cursor:pointer;text-align:center;font-size:22px;color:#999}.n-topology.n-topology-green .n-topology-nav-zoom-selection:hover{color:#4d4d4d}.n-topology.n-topology-green .n-topology-nav-zoom-selection-selected{color:#54d0d6}.n-topology.n-topology-green .n-topology-nav-fit{cursor:pointer;text-align:center;font-size:22px;color:#999}.n-topology.n-topology-green .n-topology-nav-fit:hover{color:#4d4d4d}.n-topology.n-topology-green .n-topology-nav-agr{cursor:pointer;line-height:24px;text-align:center;font-size:20px;height:24px;color:#999;display:none}.n-topology.n-topology-green .n-topology-nav-agr:hover{color:#4d4d4d}@-webkit-keyframes agr-icon-ani{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}.n-topology.n-topology-green .n-topology-nav .agr-icon{-webkit-animation-duration:3s;-webkit-animation-name:agr-icon-ani;-webkit-animation-iteration-count:infinite;-webkit-animation-direction:normal;-webkit-animation-timing-function:linear;-webkit-transition:0 none;color:#2badb3}.n-topology.n-topology-green .n-topology-nav .agr-text{font-size:10px;color:#eaeaea;position:absolute;left:10px;margin-top:-1px;height:12px}.n-topology.n-topology-green .n-topology-nav-full{cursor:pointer;text-align:center;font-size:18px;color:#999}.n-topology.n-topology-green .n-topology-nav-full:hover{color:#4d4d4d}.n-topology.n-topology-green .n-topology-nav-setting{cursor:pointer;text-align:center;color:#999;line-height:1;-webkit-transition:none 0!important;transition:none 0!important}.n-topology.n-topology-green .n-topology-nav-setting:hover{opacity:1;color:#2badb3}.n-topology.n-topology-green .n-topology-nav-setting-icon{font-size:20px}.n-topology.n-topology-green .n-topology-nav-setting-icon-selected{color:#2badb3}.n-topology.n-topology-green .n-topology-loading{overflow:hidden;position:absolute;top:0;bottom:0;left:0;right:0;height:100%;width:100%;display:none}.n-topology.n-topology-green .n-topology-loading ul{position:absolute;left:calc(49.3%);top:calc(45.8%);display:inline-block;text-indent:2.8em}.n-topology.n-topology-green .n-topology-loading ul li:after,.n-topology.n-topology-green .n-topology-loading ul:after{width:1.4em;height:1.4em;border-radius:100%;content:"";display:block}.n-topology.n-topology-green .n-topology-loading ul:after{position:absolute;top:2.8em}.n-topology.n-topology-green .n-topology-loading li{position:absolute;padding-bottom:5.6em;top:0;left:0;list-style:none}.n-topology.n-topology-green .n-topology-loading li:after{background:#26999e}.n-topology.n-topology-green .n-topology-loading li:nth-child(1){-webkit-transform:rotate(0deg);-webkit-animation-delay:.125s}.n-topology.n-topology-green .n-topology-loading li:nth-child(1):after{-webkit-animation-delay:.125s}.n-topology.n-topology-green .n-topology-loading li:nth-child(2){-webkit-transform:rotate(36deg);-webkit-animation-delay:.25s}.n-topology.n-topology-green .n-topology-loading li:nth-child(2):after{-webkit-animation-delay:.25s}.n-topology.n-topology-green .n-topology-loading li:nth-child(3){-webkit-transform:rotate(72deg);-webkit-animation-delay:.375s}.n-topology.n-topology-green .n-topology-loading li:nth-child(3):after{-webkit-animation-delay:.375s}.n-topology.n-topology-green .n-topology-loading li:nth-child(4){-webkit-transform:rotate(108deg);-webkit-animation-delay:.5s}.n-topology.n-topology-green .n-topology-loading li:nth-child(4):after{-webkit-animation-delay:.5s}.n-topology.n-topology-green .n-topology-loading li:nth-child(5){-webkit-transform:rotate(144deg);-webkit-animation-delay:.625s}.n-topology.n-topology-green .n-topology-loading li:nth-child(5):after{-webkit-animation-delay:.625s}.n-topology.n-topology-green .n-topology-loading li:nth-child(6){-webkit-transform:rotate(180deg);-webkit-animation-delay:.75s}.n-topology.n-topology-green .n-topology-loading li:nth-child(6):after{-webkit-animation-delay:.75s}.n-topology.n-topology-green .n-topology-loading li:nth-child(7){-webkit-transform:rotate(216deg);-webkit-animation-delay:.875s}.n-topology.n-topology-green .n-topology-loading li:nth-child(7):after{-webkit-animation-delay:.875s}.n-topology.n-topology-green .n-topology-loading li:nth-child(8){-webkit-transform:rotate(252deg);-webkit-animation-delay:1s}.n-topology.n-topology-green .n-topology-loading li:nth-child(8):after{-webkit-animation-delay:1s}.n-topology.n-topology-green .n-topology-loading li:nth-child(9){-webkit-transform:rotate(288deg);-webkit-animation-delay:1.125s}.n-topology.n-topology-green .n-topology-loading li:nth-child(9):after{-webkit-animation-delay:1.125s}.n-topology.n-topology-green .n-topology-loading li:nth-child(10){-webkit-transform:rotate(324deg);-webkit-animation-delay:1.25s}.n-topology.n-topology-green .n-topology-loading li:nth-child(10):after{-webkit-animation-delay:1.25s}.n-topology.n-topology-green .n-topology-loading li{-webkit-animation:dotAnimation 2.5s infinite}@-webkit-keyframes dotAnimation{0%,100%,55%{padding:0 0 5.6em}5%,50%{padding:2.8em 0}}.n-topology.n-topology-green .n-topology-loading li:after{-webkit-animation:dotAnimationTwo 2.5s infinite}@-webkit-keyframes dotAnimationTwo{0%,100%,55%{opacity:1;-webkit-transform:scale(1)}5%,50%{opacity:.5;-webkit-transform:scale(0.5)}}.n-topology.n-topology-slate{position:relative;overflow:hidden;background:#223343;-webkit-transition:background .6s;transition:background .6s;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-slate:focus{outline:0 none}.n-topology.n-topology-slate .n-topology-fit{-webkit-transition:all .6s linear!important;transition:all .6s linear!important}.n-topology.n-topology-slate .n-topology-fit .link,.n-topology.n-topology-slate .n-topology-fit .linkSet,.n-topology.n-topology-slate .n-topology-fit .node,.n-topology.n-topology-slate .n-topology-fit .nodeSet{-webkit-transition:all .9s linear!important;transition:all .9s linear!important}.n-topology.n-topology-slate.n-topology-loading .n-topology-nav,.n-topology.n-topology-slate.n-topology-loading svg{-webkit-filter:blur(5px);-moz-filter:blur(5px)}.n-topology.n-topology-slate svg{box-sizing:content-box;position:absolute;top:0;left:0;right:0;bottom:0}.n-topology.n-topology-slate text:empty{display:none}.n-topology.n-topology-slate g{pointer-events:all}.n-topology.n-topology-slate defs .bg{fill:#fff}.n-topology.n-topology-slate defs .stroke{stroke:#fff}.n-topology.n-topology-slate defs [fill*='#FFFFFF']{fill:#223343}.n-topology.n-topology-slate .n-svg{border:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-slate .fontIcon{font-family:next-font;fill:#fff;alignment-baseline:central;text-anchor:middle;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-slate text{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-slate .n-topology-icon .fontIcon{cursor:pointer}.n-topology.n-topology-slate .iconBG{fill:#223343}.n-topology.n-topology-slate .iconBGActive{fill:#fff}.n-topology.n-topology-slate .node:not(.node-selected) .selectedBG{display:none}.n-topology.n-topology-slate .node .selectedBG{fill:transparent;opacity:.8;stroke:#f7931e;stroke-width:3;pointer-events:none}.n-topology.n-topology-slate .node .dot{fill:#fff}.n-topology.n-topology-slate .node text.node-label{font-family:"Cisco Sans Reg";fill:#fff;pointer-events:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:11px}.n-topology.n-topology-slate .node.disable .node-label{fill:#ccc!important}.n-topology.n-topology-slate .node.disable .iconBG.iconBGActive,.n-topology.n-topology-slate .node.disable .showIcon .iconShape{fill:#ccc}.n-topology.n-topology-slate .link line,.n-topology.n-topology-slate .link path{stroke:#49a9bf;stroke-width:1px;fill:none;cursor:pointer}.n-topology.n-topology-slate .link line.link:hover,.n-topology.n-topology-slate .link path.link:hover{stroke:#307889}.n-topology.n-topology-slate .link line.link_bg:hover~line{stroke:#307889!important}.n-topology.n-topology-slate .link .link-label{font-family:"Cisco Sans Reg";fill:#fff;font-size:12px}.n-topology.n-topology-slate .link .source-abel,.n-topology.n-topology-slate .link .target-label{font-family:"Cisco Sans Reg";fill:#fff;opacity:.8;font-size:12px}.n-topology.n-topology-slate .link .disable-label{fill:#fff}.n-topology.n-topology-slate .link .disable-bg{fill:#ccc}.n-topology.n-topology-slate .link .link_bg{stroke:transparent}.n-topology.n-topology-slate .link.disable line,.n-topology.n-topology-slate .link.disable path{stroke:#ccc!important;stroke-width:1px}.n-topology.n-topology-slate .link.disable .link_bg{stroke:transparent!important}.n-topology.n-topology-slate .link.link-selected line,.n-topology.n-topology-slate .link.link-selected path{stroke:#ccc;stroke-width:2px}.n-topology.n-topology-slate .nodeset .selectedBG{fill:transparent;opacity:.8;stroke:#f7931e;stroke-width:3;pointer-events:none}.n-topology.n-topology-slate .nodeset .dot{fill:#223343;stroke:#fff;stroke-width:1}.n-topology.n-topology-slate .nodeset .icon{cursor:pointer}.n-topology.n-topology-slate .nodeset .bg{fill:#fff;pointer-events:none}.n-topology.n-topology-slate .nodeset text.node-label{font-family:"Cisco Sans Reg";fill:#fff;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.n-topology.n-topology-slate .nodeset.disable{opacity:.3;stroke:#ccc}.n-topology.n-topology-slate .nodeset .iconBG,.n-topology.n-topology-slate .nodeset .iconBGActive{fill:#223343}.n-topology.n-topology-slate .nodeset .iconBGActive~.iconShape{display:block!important}.n-topology.n-topology-slate .nodeset .indicator .iconBG{fill:#223343}.n-topology.n-topology-slate .nodeset .indicator .iconBG:hover{fill:#fff}.n-topology.n-topology-slate .nodeset .indicator .iconShape{fill:#e6e6e6}.n-topology.n-topology-slate .group .bg{opacity:.6;stroke-width:10px;stroke-linejoin:round}.n-topology.n-topology-slate .group .groupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";text-anchor:middle;alignment-baseline:inherit}.n-topology.n-topology-slate .group .fontIcon.iconShape{fill:#9BB150}.n-topology.n-topology-slate .group .nodeSetGroupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";alignment-baseline:inherit;fill:#9BB150}.n-topology.n-topology-slate .group .groupLabel:hover~.bg{opacity:.7}.n-topology.n-topology-slate .group.aggregationGroup .bg{stroke-width:10px;stroke-linejoin:round;fill:#9BB150;stroke:#9BB150;pointer-events:none;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.n-topology.n-topology-slate .group.aggregationGroup.fade-active-item{opacity:1}.n-topology.n-topology-slate .group.aggregationGroup.fade-active-item .bg{opacity:.5}.n-topology.n-topology-slate .link-set-bg{stroke:#49a9bf;stroke-width:2px}.n-topology.n-topology-slate .link-set-circle{fill:#fff;stroke:#fff;stroke-width:16px;stroke-linejoin:round}.n-topology.n-topology-slate .link-set-text{font-family:"Cisco Sans Reg";fill:#223343;text-anchor:middle;dominant-baseline:central;font-size:12px;pointer-events:none}.n-topology.n-topology-slate .link-set.disable .link-set-bg{stroke:#ccc}.n-topology.n-topology-slate .link-set.disable .link-set-circle{fill:#ccc;stroke:#ccc}@media screen and (-webkit-min-device-pixel-ratio:0){.n-topology.n-topology-slate .link-set-circle,.n-topology.n-topology-slate ::i-block-chrome{stroke-width:8px!important}}.n-topology.n-topology-slate .mapPath{fill:#fff;stroke:#eee;stroke-width:1;opacity:.5;pointer-events:none}.n-topology.n-topology-slate .mapBoundary{fill:none;stroke:#eee;stroke-width:1;pointer-events:none}.n-topology.n-topology-slate .selectionRect{stroke:#fff;fill:#fff;fill-opacity:.1;pointer-events:none}.n-topology.n-topology-slate-setting{max-width:none!important}.n-topology.n-topology-slate .aggregationGroup .aggregationText{fill:#fff;font-size:12px}.n-topology.n-topology-slate .aggregationGroup .aggregationRect{fill:#fff;opacity:.2;stroke:#fff;stroke-width:3;stroke-linejoin:round;pointer-events:none}.n-topology.n-topology-slate .layer>*{transition:opacity .6s}.n-topology.n-topology-slate .layer.fade-layer>:not(.fade-highlight-item):not(.fade-active-item),.n-topology.n-topology-slate.fade-active-priority.fade-active-occur .layer.fade-layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-slate.fade-active-priority.fade-active-occur.fade-all .layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-slate.fade-all .layer>:not(.fade-highlight-item):not(.fade-active-item){opacity:.2}.n-topology.n-topology-slate .n-topology-nav{position:absolute;top:0;left:8px;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-slate .n-topology-nav li{list-style:none;padding:0}.n-topology.n-topology-slate .n-topology-nav ul{padding:0;margin:0}.n-topology.n-topology-slate .n-topology-nav span{-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-slate .n-topology-nav>ul{padding:0;margin-top:30px;width:32px}.n-topology.n-topology-slate .n-topology-nav>ul>li{display:inline-block;list-style:none;width:25px;margin-top:5px;-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-slate .n-topology-nav-mode{padding:0;position:relative;width:25px}.n-topology.n-topology-slate .n-topology-nav-mode li{width:25px;height:25px;line-height:30px;display:inline-block;text-align:center;cursor:pointer;-webkit-transition:all .6s;transition:all .6s;background:#446787;margin-top:-2px}.n-topology.n-topology-slate .n-topology-nav-mode li:hover span{color:#fff}.n-topology.n-topology-slate .n-topology-nav-mode span{color:#888;display:inline-block;font-size:18px}.n-topology.n-topology-slate .n-topology-nav-mode-selected{background:#fff!important}.n-topology.n-topology-slate .n-topology-nav-mode-selected span{color:#223343}.n-topology.n-topology-slate .n-topology-nav-mode-selected:hover{background:#fff!important}.n-topology.n-topology-slate .n-topology-nav-mode-selected:hover span{color:#223343!important}.n-topology.n-topology-slate .n-topology-nav-zoom{position:relative;height:51px;margin-top:10px!important}.n-topology.n-topology-slate .n-topology-nav-zoom>span{display:inline-block;position:absolute;text-align:center;font-size:25px;color:#888;background:#446787}.n-topology.n-topology-slate .n-topology-nav-zoom-in{top:0;left:0;cursor:pointer}.n-topology.n-topology-slate .n-topology-nav-zoom-in:hover{color:#d5d5d5;background:#5680a8}.n-topology.n-topology-slate .n-topology-nav-zoom-out{top:25px;left:0;cursor:pointer}.n-topology.n-topology-slate .n-topology-nav-zoom-out:hover{color:#d5d5d5;background:#5680a8}.n-topology.n-topology-slate .n-topology-nav-zoom-selection{cursor:pointer;text-align:center;font-size:22px;color:#888}.n-topology.n-topology-slate .n-topology-nav-zoom-selection:hover{color:#d5d5d5}.n-topology.n-topology-slate .n-topology-nav-zoom-selection-selected{color:#fff}.n-topology.n-topology-slate .n-topology-nav-fit{cursor:pointer;text-align:center;font-size:22px;color:#888}.n-topology.n-topology-slate .n-topology-nav-fit:hover{color:#d5d5d5}.n-topology.n-topology-slate .n-topology-nav-agr{cursor:pointer;line-height:24px;text-align:center;font-size:20px;height:24px;color:#888;display:none}.n-topology.n-topology-slate .n-topology-nav-agr:hover{color:#d5d5d5}@-webkit-keyframes agr-icon-ani{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}.n-topology.n-topology-slate .n-topology-nav .agr-icon{-webkit-animation-duration:3s;-webkit-animation-name:agr-icon-ani;-webkit-animation-iteration-count:infinite;-webkit-animation-direction:normal;-webkit-animation-timing-function:linear;-webkit-transition:0 none;color:#fff}.n-topology.n-topology-slate .n-topology-nav .agr-text{font-size:10px;color:#446787;position:absolute;left:10px;margin-top:-1px;height:12px}.n-topology.n-topology-slate .n-topology-nav-full{cursor:pointer;text-align:center;font-size:18px;color:#888}.n-topology.n-topology-slate .n-topology-nav-full:hover{color:#d5d5d5}.n-topology.n-topology-slate .n-topology-nav-setting{cursor:pointer;text-align:center;color:#888;line-height:1;-webkit-transition:none 0!important;transition:none 0!important}.n-topology.n-topology-slate .n-topology-nav-setting:hover{opacity:1;color:#fff}.n-topology.n-topology-slate .n-topology-nav-setting-icon{font-size:20px}.n-topology.n-topology-slate .n-topology-nav-setting-icon-selected{color:#fff}.n-topology.n-topology-slate .n-topology-loading{overflow:hidden;position:absolute;top:0;bottom:0;left:0;right:0;height:100%;width:100%;display:none}.n-topology.n-topology-slate .n-topology-loading ul{position:absolute;left:calc(49.3%);top:calc(45.8%);display:inline-block;text-indent:2.8em}.n-topology.n-topology-slate .n-topology-loading ul li:after,.n-topology.n-topology-slate .n-topology-loading ul:after{width:1.4em;height:1.4em;border-radius:100%;content:"";display:block}.n-topology.n-topology-slate .n-topology-loading ul:after{position:absolute;top:2.8em}.n-topology.n-topology-slate .n-topology-loading li{position:absolute;padding-bottom:5.6em;top:0;left:0;list-style:none}.n-topology.n-topology-slate .n-topology-loading li:after{background:#fff}.n-topology.n-topology-slate .n-topology-loading li:nth-child(1){-webkit-transform:rotate(0deg);-webkit-animation-delay:.125s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(1):after{-webkit-animation-delay:.125s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(2){-webkit-transform:rotate(36deg);-webkit-animation-delay:.25s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(2):after{-webkit-animation-delay:.25s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(3){-webkit-transform:rotate(72deg);-webkit-animation-delay:.375s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(3):after{-webkit-animation-delay:.375s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(4){-webkit-transform:rotate(108deg);-webkit-animation-delay:.5s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(4):after{-webkit-animation-delay:.5s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(5){-webkit-transform:rotate(144deg);-webkit-animation-delay:.625s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(5):after{-webkit-animation-delay:.625s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(6){-webkit-transform:rotate(180deg);-webkit-animation-delay:.75s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(6):after{-webkit-animation-delay:.75s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(7){-webkit-transform:rotate(216deg);-webkit-animation-delay:.875s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(7):after{-webkit-animation-delay:.875s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(8){-webkit-transform:rotate(252deg);-webkit-animation-delay:1s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(8):after{-webkit-animation-delay:1s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(9){-webkit-transform:rotate(288deg);-webkit-animation-delay:1.125s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(9):after{-webkit-animation-delay:1.125s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(10){-webkit-transform:rotate(324deg);-webkit-animation-delay:1.25s}.n-topology.n-topology-slate .n-topology-loading li:nth-child(10):after{-webkit-animation-delay:1.25s}.n-topology.n-topology-slate .n-topology-loading li{-webkit-animation:dotAnimation 2.5s infinite}@-webkit-keyframes dotAnimation{0%,100%,55%{padding:0 0 5.6em}5%,50%{padding:2.8em 0}}.n-topology.n-topology-slate .n-topology-loading li:after{-webkit-animation:dotAnimationTwo 2.5s infinite}@-webkit-keyframes dotAnimationTwo{0%,100%,55%{opacity:1;-webkit-transform:scale(1)}5%,50%{opacity:.5;-webkit-transform:scale(0.5)}}.n-topology.n-topology-yellow{position:relative;overflow:hidden;background:#000;-webkit-transition:background .6s;transition:background .6s;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-yellow:focus{outline:0 none}.n-topology.n-topology-yellow .n-topology-fit{-webkit-transition:all .6s linear!important;transition:all .6s linear!important}.n-topology.n-topology-yellow .n-topology-fit .link,.n-topology.n-topology-yellow .n-topology-fit .linkSet,.n-topology.n-topology-yellow .n-topology-fit .node,.n-topology.n-topology-yellow .n-topology-fit .nodeSet{-webkit-transition:all .9s linear!important;transition:all .9s linear!important}.n-topology.n-topology-yellow.n-topology-loading .n-topology-nav,.n-topology.n-topology-yellow.n-topology-loading svg{-webkit-filter:blur(5px);-moz-filter:blur(5px)}.n-topology.n-topology-yellow svg{box-sizing:content-box;position:absolute;top:0;left:0;right:0;bottom:0}.n-topology.n-topology-yellow text:empty{display:none}.n-topology.n-topology-yellow g{pointer-events:all}.n-topology.n-topology-yellow defs .bg{fill:#ffc200}.n-topology.n-topology-yellow defs .stroke{stroke:#ffc200}.n-topology.n-topology-yellow defs [fill*='#FFFFFF']{fill:#000}.n-topology.n-topology-yellow .n-svg{border:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-yellow .fontIcon{font-family:next-font;fill:#ffc200;alignment-baseline:central;text-anchor:middle;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-yellow text{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.n-topology.n-topology-yellow .n-topology-icon .fontIcon{cursor:pointer}.n-topology.n-topology-yellow .iconBG{fill:#000}.n-topology.n-topology-yellow .iconBGActive{fill:#ffc200}.n-topology.n-topology-yellow .node:not(.node-selected) .selectedBG{display:none}.n-topology.n-topology-yellow .node .selectedBG{fill:transparent;opacity:.8;stroke:#ff7900;stroke-width:3;pointer-events:none}.n-topology.n-topology-yellow .node .dot{fill:#ffc200}.n-topology.n-topology-yellow .node text.node-label{font-family:"Cisco Sans Reg";fill:#ffc200;pointer-events:none;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;font-size:11px}.n-topology.n-topology-yellow .node.disable .node-label{fill:#ccc!important}.n-topology.n-topology-yellow .node.disable .iconBG.iconBGActive,.n-topology.n-topology-yellow .node.disable .showIcon .iconShape{fill:#ccc}.n-topology.n-topology-yellow .link line,.n-topology.n-topology-yellow .link path{stroke:#997b19;stroke-width:1px;fill:none;cursor:pointer}.n-topology.n-topology-yellow .link line.link:hover,.n-topology.n-topology-yellow .link path.link:hover{stroke:#55440e}.n-topology.n-topology-yellow .link line.link_bg:hover~line{stroke:#55440e!important}.n-topology.n-topology-yellow .link .link-label{font-family:"Cisco Sans Reg";fill:#ffc200;font-size:12px}.n-topology.n-topology-yellow .link .source-abel,.n-topology.n-topology-yellow .link .target-label{font-family:"Cisco Sans Reg";fill:#ffc200;opacity:.8;font-size:12px}.n-topology.n-topology-yellow .link .disable-label{fill:#fff}.n-topology.n-topology-yellow .link .disable-bg{fill:#ccc}.n-topology.n-topology-yellow .link .link_bg{stroke:transparent}.n-topology.n-topology-yellow .link.disable line,.n-topology.n-topology-yellow .link.disable path{stroke:#ccc!important;stroke-width:1px}.n-topology.n-topology-yellow .link.disable .link_bg{stroke:transparent!important}.n-topology.n-topology-yellow .link.link-selected line,.n-topology.n-topology-yellow .link.link-selected path{stroke:#ccc;stroke-width:2px}.n-topology.n-topology-yellow .nodeset .selectedBG{fill:transparent;opacity:.8;stroke:#ff7900;stroke-width:3;pointer-events:none}.n-topology.n-topology-yellow .nodeset .dot{fill:#000;stroke:#ffc200;stroke-width:1}.n-topology.n-topology-yellow .nodeset .icon{cursor:pointer}.n-topology.n-topology-yellow .nodeset .bg{fill:#ffc200;pointer-events:none}.n-topology.n-topology-yellow .nodeset text.node-label{font-family:"Cisco Sans Reg";fill:#ffc200;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;pointer-events:none}.n-topology.n-topology-yellow .nodeset.disable{opacity:.3;stroke:#ccc}.n-topology.n-topology-yellow .nodeset .iconBG,.n-topology.n-topology-yellow .nodeset .iconBGActive{fill:#000}.n-topology.n-topology-yellow .nodeset .iconBGActive~.iconShape{display:block!important}.n-topology.n-topology-yellow .nodeset .indicator .iconBG{fill:#000}.n-topology.n-topology-yellow .nodeset .indicator .iconBG:hover{fill:#ffc200}.n-topology.n-topology-yellow .nodeset .indicator .iconShape{fill:#cc9b00}.n-topology.n-topology-yellow .group .bg{opacity:.6;stroke-width:10px;stroke-linejoin:round}.n-topology.n-topology-yellow .group .groupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";text-anchor:middle;alignment-baseline:inherit}.n-topology.n-topology-yellow .group .fontIcon.iconShape{fill:#9BB150}.n-topology.n-topology-yellow .group .nodeSetGroupLabel{cursor:pointer;font-size:18px;font-family:"Cisco Sans Reg";alignment-baseline:inherit;fill:#9BB150}.n-topology.n-topology-yellow .group .groupLabel:hover~.bg{opacity:.7}.n-topology.n-topology-yellow .group.aggregationGroup .bg{stroke-width:10px;stroke-linejoin:round;fill:#9BB150;stroke:#9BB150;pointer-events:none;opacity:0;-webkit-transition:opacity .3s linear;transition:opacity .3s linear}.n-topology.n-topology-yellow .group.aggregationGroup.fade-active-item{opacity:1}.n-topology.n-topology-yellow .group.aggregationGroup.fade-active-item .bg{opacity:.5}.n-topology.n-topology-yellow .link-set-bg{stroke:#997b19;stroke-width:2px}.n-topology.n-topology-yellow .link-set-circle{fill:#ffc200;stroke:#ffc200;stroke-width:16px;stroke-linejoin:round}.n-topology.n-topology-yellow .link-set-text{font-family:"Cisco Sans Reg";fill:#000;text-anchor:middle;dominant-baseline:central;font-size:12px;pointer-events:none}.n-topology.n-topology-yellow .link-set.disable .link-set-bg{stroke:#ccc}.n-topology.n-topology-yellow .link-set.disable .link-set-circle{fill:#ccc;stroke:#ccc}@media screen and (-webkit-min-device-pixel-ratio:0){.n-topology.n-topology-yellow .link-set-circle,.n-topology.n-topology-yellow ::i-block-chrome{stroke-width:8px!important}}.n-topology.n-topology-yellow .mapPath{fill:#333;stroke:#555;stroke-width:1;opacity:.5;pointer-events:none}.n-topology.n-topology-yellow .mapBoundary{fill:none;stroke:#555;stroke-width:1;pointer-events:none}.n-topology.n-topology-yellow .selectionRect{stroke:#ffc200;fill:#ffc200;fill-opacity:.1;pointer-events:none}.n-topology.n-topology-yellow-setting{max-width:none!important}.n-topology.n-topology-yellow .aggregationGroup .aggregationText{fill:#ffc200;font-size:12px}.n-topology.n-topology-yellow .aggregationGroup .aggregationRect{fill:#ffc200;opacity:.2;stroke:#ffc200;stroke-width:3;stroke-linejoin:round;pointer-events:none}.n-topology.n-topology-yellow .layer>*{transition:opacity .6s}.n-topology.n-topology-yellow .layer.fade-layer>:not(.fade-highlight-item):not(.fade-active-item),.n-topology.n-topology-yellow.fade-active-priority.fade-active-occur .layer.fade-layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-yellow.fade-active-priority.fade-active-occur.fade-all .layer>.fade-highlight-item:not(.fade-active-item),.n-topology.n-topology-yellow.fade-all .layer>:not(.fade-highlight-item):not(.fade-active-item){opacity:.2}.n-topology.n-topology-yellow .n-topology-nav{position:absolute;top:0;left:8px;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-topology.n-topology-yellow .n-topology-nav li{list-style:none;padding:0}.n-topology.n-topology-yellow .n-topology-nav ul{padding:0;margin:0}.n-topology.n-topology-yellow .n-topology-nav span{-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-yellow .n-topology-nav>ul{padding:0;margin-top:30px;width:32px}.n-topology.n-topology-yellow .n-topology-nav>ul>li{display:inline-block;list-style:none;width:25px;margin-top:5px;-webkit-transition:all .6s;transition:all .6s}.n-topology.n-topology-yellow .n-topology-nav-mode{padding:0;position:relative;width:25px}.n-topology.n-topology-yellow .n-topology-nav-mode li{width:25px;height:25px;line-height:30px;display:inline-block;text-align:center;cursor:pointer;-webkit-transition:all .6s;transition:all .6s;background:#333;margin-top:-2px}.n-topology.n-topology-yellow .n-topology-nav-mode li:hover span{color:#ffc200}.n-topology.n-topology-yellow .n-topology-nav-mode span{color:#666;display:inline-block;font-size:18px}.n-topology.n-topology-yellow .n-topology-nav-mode-selected{background:#ffc200!important}.n-topology.n-topology-yellow .n-topology-nav-mode-selected span{color:#000}.n-topology.n-topology-yellow .n-topology-nav-mode-selected:hover{background:#ffc200!important}.n-topology.n-topology-yellow .n-topology-nav-mode-selected:hover span{color:#000!important}.n-topology.n-topology-yellow .n-topology-nav-zoom{position:relative;height:51px;margin-top:10px!important}.n-topology.n-topology-yellow .n-topology-nav-zoom>span{display:inline-block;position:absolute;text-align:center;font-size:25px;color:#666;background:#333}.n-topology.n-topology-yellow .n-topology-nav-zoom-in{top:0;left:0;cursor:pointer}.n-topology.n-topology-yellow .n-topology-nav-zoom-in:hover{color:#b3b3b3;background:#4d4d4d}.n-topology.n-topology-yellow .n-topology-nav-zoom-out{top:25px;left:0;cursor:pointer}.n-topology.n-topology-yellow .n-topology-nav-zoom-out:hover{color:#b3b3b3;background:#4d4d4d}.n-topology.n-topology-yellow .n-topology-nav-zoom-selection{cursor:pointer;text-align:center;font-size:22px;color:#666}.n-topology.n-topology-yellow .n-topology-nav-zoom-selection:hover{color:#b3b3b3}.n-topology.n-topology-yellow .n-topology-nav-zoom-selection-selected{color:#ffda66}.n-topology.n-topology-yellow .n-topology-nav-fit{cursor:pointer;text-align:center;font-size:22px;color:#666}.n-topology.n-topology-yellow .n-topology-nav-fit:hover{color:#b3b3b3}.n-topology.n-topology-yellow .n-topology-nav-agr{cursor:pointer;line-height:24px;text-align:center;font-size:20px;height:24px;color:#666;display:none}.n-topology.n-topology-yellow .n-topology-nav-agr:hover{color:#b3b3b3}@-webkit-keyframes agr-icon-ani{0%{-webkit-transform:rotate(0deg)}100%{-webkit-transform:rotate(360deg)}}.n-topology.n-topology-yellow .n-topology-nav .agr-icon{-webkit-animation-duration:3s;-webkit-animation-name:agr-icon-ani;-webkit-animation-iteration-count:infinite;-webkit-animation-direction:normal;-webkit-animation-timing-function:linear;-webkit-transition:0 none;color:#ffc81a}.n-topology.n-topology-yellow .n-topology-nav .agr-text{font-size:10px;color:#333;position:absolute;left:10px;margin-top:-1px;height:12px}.n-topology.n-topology-yellow .n-topology-nav-full{cursor:pointer;text-align:center;font-size:18px;color:#666}.n-topology.n-topology-yellow .n-topology-nav-full:hover{color:#b3b3b3}.n-topology.n-topology-yellow .n-topology-nav-setting{cursor:pointer;text-align:center;color:#666;line-height:1;-webkit-transition:none 0!important;transition:none 0!important}.n-topology.n-topology-yellow .n-topology-nav-setting:hover{opacity:1;color:#ffc81a}.n-topology.n-topology-yellow .n-topology-nav-setting-icon{font-size:20px}.n-topology.n-topology-yellow .n-topology-nav-setting-icon-selected{color:#ffc81a}.n-topology.n-topology-yellow .n-topology-loading{overflow:hidden;position:absolute;top:0;bottom:0;left:0;right:0;height:100%;width:100%;display:none}.n-topology.n-topology-yellow .n-topology-loading ul{position:absolute;left:calc(49.3%);top:calc(45.8%);display:inline-block;text-indent:2.8em}.n-topology.n-topology-yellow .n-topology-loading ul li:after,.n-topology.n-topology-yellow .n-topology-loading ul:after{width:1.4em;height:1.4em;border-radius:100%;content:"";display:block}.n-topology.n-topology-yellow .n-topology-loading ul:after{position:absolute;top:2.8em}.n-topology.n-topology-yellow .n-topology-loading li{position:absolute;padding-bottom:5.6em;top:0;left:0;list-style:none}.n-topology.n-topology-yellow .n-topology-loading li:after{background:#ffc200}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(1){-webkit-transform:rotate(0deg);-webkit-animation-delay:.125s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(1):after{-webkit-animation-delay:.125s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(2){-webkit-transform:rotate(36deg);-webkit-animation-delay:.25s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(2):after{-webkit-animation-delay:.25s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(3){-webkit-transform:rotate(72deg);-webkit-animation-delay:.375s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(3):after{-webkit-animation-delay:.375s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(4){-webkit-transform:rotate(108deg);-webkit-animation-delay:.5s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(4):after{-webkit-animation-delay:.5s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(5){-webkit-transform:rotate(144deg);-webkit-animation-delay:.625s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(5):after{-webkit-animation-delay:.625s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(6){-webkit-transform:rotate(180deg);-webkit-animation-delay:.75s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(6):after{-webkit-animation-delay:.75s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(7){-webkit-transform:rotate(216deg);-webkit-animation-delay:.875s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(7):after{-webkit-animation-delay:.875s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(8){-webkit-transform:rotate(252deg);-webkit-animation-delay:1s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(8):after{-webkit-animation-delay:1s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(9){-webkit-transform:rotate(288deg);-webkit-animation-delay:1.125s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(9):after{-webkit-animation-delay:1.125s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(10){-webkit-transform:rotate(324deg);-webkit-animation-delay:1.25s}.n-topology.n-topology-yellow .n-topology-loading li:nth-child(10):after{-webkit-animation-delay:1.25s}.n-topology.n-topology-yellow .n-topology-loading li{-webkit-animation:dotAnimation 2.5s infinite}@-webkit-keyframes dotAnimation{0%,100%,55%{padding:0 0 5.6em}5%,50%{padding:2.8em 0}}.n-topology.n-topology-yellow .n-topology-loading li:after{-webkit-animation:dotAnimationTwo 2.5s infinite}@-webkit-keyframes dotAnimationTwo{0%,100%,55%{opacity:1;-webkit-transform:scale(1)}5%,50%{opacity:.5;-webkit-transform:scale(0.5)}}.n-topology-tooltip{padding:0;opacity:.8!important;max-height:450px}.n-topology-tooltip-header{min-width:160px;line-height:24px;position:relative;border-bottom:dotted 1px #ccc}.n-topology-tooltip-header-actions{float:right}.n-topology-tooltip-header-actions i{cursor:pointer}.n-topology-tooltip-header-text{line-height:24px;color:#333;font-size:14px;font-weight:700}.n-topology-tooltip-content{margin-bottom:6px;padding:3px;min-height:30px}.n-topology-tooltip-content label{display:inline-block;margin-right:8px;font-weight:700}.n-topology-tooltip-content ul{margin:0;padding:0}.n-topology-tooltip-content li{list-style:none}.n-topology-tooltip:after{display:none}.n-topology-tooltip .popover-content{padding:5px 10px}.n-topology-setting-panel{max-width:342px!important;font-family:Arial}.n-topology-setting-panel .popover-content{width:330px;line-height:24px;height:auto}.n-topology-setting-panel .popover-content h3{margin:4px 0 6px}.n-topology-setting-panel .popover-content h5{margin:5px 0}.n-topology-setting-panel .popover-content label{font-size:12px;margin-right:12px}.n-topology-setting-panel .popover-content .btn-group button{margin:0;margin-right:-1px}.n-topology-setting-panel .popover-content .n-radio{margin-right:12px;font-weight:400}.n-topology-setting-panel .popover-content .n-radio span{margin-left:3px}.n-topology-setting-panel .popover-content-label{display:inline-block;margin-right:20px}.n-topology-setting-panel .popover-content .toggleLabelCheckBox{float:right;margin-right:12px}.n-topology-thumbnail{position:absolute;border:solid 1px #ccc;box-shadow:0 0 10px #ccc;margin-top:-10px;margin-left:-10px;z-index:100;background:#fff}.n-topology-thumbnail-container{position:relative}.n-topology-thumbnail-win{position:absolute;border:solid 1px red}.n-topology-thumbnail-svg{border:solid 1px #c4c4c4;background:#fff}.n-topology-thumbnail .handler{position:absolute;bottom:0;right:0;cursor:pointer}@font-face{font-family:"Cisco Sans Extra Light";src:url(../fonts/ciscosansextralight-webfont.eot);src:url(../fonts/ciscosansextralight-webfont.eot?#iefix) format('embedded-opentype'),url(../fonts/ciscosansextralight-webfont.woff) format('woff'),url(../fonts/ciscosansextralight-webfont.ttf) format('truetype'),url(../fonts/ciscosansextralight-webfont.svg#CiscoSansExtraLight) format('svg');font-weight:400;font-style:normal}@font-face{font-family:"Cisco Sans Reg";src:url(../fonts/ciscosansregular-webfont.eot);src:url(../fonts/ciscosansregular-webfont.eot?#iefix) format('embedded-opentype'),url(../fonts/ciscosansregular-webfont.woff) format('woff'),url(../fonts/ciscosansregular-webfont.ttf) format('truetype'),url(../fonts/ciscosansregular-webfont.svg#CiscoSansReg) format('svg');font-weight:400;font-style:normal}.n-userselect,.n-userselect *{-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.n-transition{-webkit-transition:all .4!important;transition:all .4s!important}.n-moveCursor{cursor:move!important}.n-dragCursor{cursor:pointer}.n-crosshairCursor,.n-crosshairCursor *{cursor:crosshair!important}.n-zoomInCursor{cursor:-webkit-zoom-in;cursor:zoom-in}.n-waitCursor{cursor:wait}.n-blockEvent,.n-blockEvent *{pointer-events:none}.n-hidden{display:none!important}.clearfix:after,.clearfix:before{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right: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;visibility:hidden!important}.affix{position:fixed}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-o-user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-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;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default:active,.btn-default:focus,.btn-default:hover,.open .dropdown-toggle.btn-default{color:#333;background-color:#ebebeb;border-color:#adadad}.btn-default.active,.btn-default:active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-primary{color:#fff;background-color:#0386d2;border-color:#0376b9}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{color:#fff;background-color:#026caa;border-color:#024f7d}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#0386d2;border-color:#0376b9}.btn-warning{color:#fff;background-color:#f2ad4e;border-color:#f0a236}.btn-warning.active,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open .dropdown-toggle.btn-warning{color:#fff;background-color:#ef9b28;border-color:#d98510}.btn-warning.active,.btn-warning:active,.open .dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f2ad4e;border-color:#f0a236}.btn-danger{color:#fff;background-color:#da534f;border-color:#d63e3a}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{color:#fff;background-color:#d3322d;border-color:#ae2825}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#da534f;border-color:#d63e3a}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success:active,.btn-success:focus,.btn-success:hover,.open .dropdown-toggle.btn-success{color:#fff;background-color:#47a447;border-color:#398439}.btn-success.active,.btn-success:active,.open .dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-info{color:#fff;background-color:#5bc1df;border-color:#46b9db}.btn-info.active,.btn-info:active,.btn-info:focus,.btn-info:hover,.open .dropdown-toggle.btn-info{color:#fff;background-color:#39b4d8;border-color:#259bbe}.btn-info.active,.btn-info:active,.open .dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc1df;border-color:#46b9db}.btn-link{color:#0386d2;font-weight:400;cursor:pointer;border-radius:0}.btn-link,.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:#025687;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:#999;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-xs{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.btn-default .caret{border-top-color:#333}.btn-danger .caret,.btn-info .caret,.btn-primary .caret,.btn-success .caret,.btn-warning .caret{border-top-color:#fff}.dropup .btn-default .caret{border-bottom-color:#333}.dropup .btn-danger .caret,.dropup .btn-info .caret,.dropup .btn-primary .caret,.dropup .btn-success .caret,.dropup .btn-warning .caret{border-bottom-color:#fff}.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-vertical>.btn:focus,.btn-group>.btn:focus{outline:0}.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:after,.btn-toolbar:before{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn-group+.btn-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-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-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>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group-xs>.btn{font-size:12px;line-height:1.5;border-radius:3px;padding:1px 5px}.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right: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{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.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-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:4px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child>.btn:last-child,.btn-group-vertical>.btn-group:first-child>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified .btn{float:none;display:table-cell;width:1%}[data-toggle=buttons]>.btn>input[type=checkbox],[data-toggle=buttons]>.btn>input[type=radio]{display:none}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;background-color:#fff;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);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;font-weight:400;line-height:18px;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{border-width:10px;content:""}.popover.top .arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top .arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right .arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom .arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom .arrow:after{content:" ";top:1px;margin-left:-10px;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{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px} \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/css/vpp.css b/vbd/gui/module/src/main/resources/vpp/assets/css/vpp.css
deleted file mode 100644
index 2aa42ff79..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/css/vpp.css
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-html,body {
- width: 100%;
- background-color: #414040;
-}
-
-#next-app {
- overflow: hidden;
-}
-
-svg {
- border: none;
- border-radius: 0;
- background-image: none;
- background-color: rgb(66,66,66);
-}
-
-text.node-label { fill: #FFFFFF !important; }
-
-md-sidenav.md-locked-open {
- width: 550px;
- min-width: 550px;
- max-width: 550px;
-}
-
-.truckDialog {
- width: 16px;
- height: 16px;
-}
-.marker {
- height: 25px;
- width: 35px;
-}
-
-.ui-grid-header-cell-label {
- color: black !important;
-}
-
-span.center {
- display: block;
- margin-left: auto;
- margin-right: auto;
-}
-
-.n-topology.n-topology-blue {
- background-color: white;
-}
-
-.n-topology-nav {
- display: none;
-}
-
-.node-label {
- fill: #414040 !important;
-}
-
-.n-topology-nav-setting-icon {
- display:none;
-}
-
-.st-sort-ascent:before{
- content: '\25B2';
-}
-
-.st-sort-descent:before{
- content: '\25BC';
-}
-
-.gridStyle {
- border: 1px solid rgb(212,212,212);
- width: 400px;
- height: 300px
-}
-
-.white {
- color: white !important;
-}
-
-.scene3 {
- position: fixed;
- z-index: 10;
- font-size: 14px;
- right: 10px;
- width: 200px;
- text-align: center
-}
-
-.md-dialog-container.ng-scope {
- z-index: 10000000;
-}
-
-.n-topology.n-topology-blue .n-topology-nav-mode-selected:hover {
- background: #414040 !important;
-}
-
-.n-topology.n-topology-blue .n-topology-nav-mode-selected {
- background: #414040 !important;
-}
-
-.n-topology.n-topology-blue .node .selectedBG {
- stroke: #FFA500 !important;
-}
-
-.st-sort-ascent:after{
- content: '\25B2';
-}
-
-.st-sort-descent:after{
- content: '\25BC';
-}
-
-.st-sort-ascent:before{
- content: none;
-}
-
-.st-sort-descent:before{
- content: none;
-}
-
-/*button overrides*/
-button span {
- color: orange;
- font-weight: bold;
-}
-
-button.md-button[disabled] span {
- color: #ffc966;
-}
-
-button.md-raised.md-button {
- background-color: orange !important;
-}
-
-button.md-raised.md-button span{
- color: black;
-}
-
-a.md-button.md-default-theme.md-raised,
-a.md-button.md-raised,
-.md-button.md-default-theme.md-raised,
-.md-button.md-raised {
- background-color: #424242;
-}
-
-a.md-button.md-default-theme[disabled], a.md-button[disabled], a.md-button.md-default-theme.md-raised[disabled],
-a.md-button.md-raised[disabled], a.md-button.md-default-theme.md-fab[disabled], a.md-button.md-fab[disabled],
-a.md-button.md-default-theme.md-accent[disabled], a.md-button.md-accent[disabled], a.md-button.md-default-theme.md-warn[disabled],
-a.md-button.md-warn[disabled], .md-button.md-default-theme[disabled], .md-button[disabled], .md-button.md-default-theme.md-raised[disabled],
-.md-button.md-raised[disabled], .md-button.md-default-theme.md-fab[disabled], .md-button.md-fab[disabled], .md-button.md-default-theme.md-accent[disabled],
-.md-button.md-accent[disabled], .md-button.md-default-theme.md-warn[disabled], .md-button.md-warn[disabled] {
- color: #FFA500;
-}
-
-/*table overrides*/
-.table-striped > tbody > tr:nth-child(odd) > td, .table-striped > tbody > tr:nth-child(odd) > th {
- background-color: transparent;
-}
-
-.table > thead > tr > th,
-.table > tbody > tr > th,
-.table > tfoot > tr > th,
-.table > thead > tr > td,
-.table > tbody > tr > td,
-.table > tfoot > tr > td {
- vertical-align: middle;
- border-top: 1px solid rgba(221, 221, 221, 0.6);
-}
-
-.table > thead > tr > th.interactive {
- color: orange;
-}
-
-/*input overrides*/
-md-input-container.md-default-theme,
-md-input-container label,
-md-input-container.md-default-theme,
-md-input-container .md-placeholder {
- text-shadow: none;
- color: white;
-}
-
-md-input-container.md-default-theme:not(.md-input-invalid).md-input-focused,
-md-input-container:not(.md-input-invalid).md-input-focused label {
- color: orange;
-}
-md-input-container.md-default-theme:not(.md-input-invalid).md-input-has-value,
-md-input-container:not(.md-input-invalid).md-input-has-value label {
- color: white;
-}
-
-md-input-container.md-default-theme,
-md-input-container .md-input {
- text-shadow: none;
-}
-
-md-input-container.md-default-theme:not(.md-input-invalid).md-input-focused,
-md-input-container:not(.md-input-invalid).md-input-focused .md-input {
- border-color: orange;
-}
-
-input:-webkit-autofill,
-textarea:-webkit-autofill,
-select:-webkit-autofill {
- background-color: transparent !important;
- text-shadow: none;
- color: white !important;
-}
-
-md-select-menu.md-default-theme,
-md-select-menu md-option[selected] div.md-text {
- color: orange;
-}
-
-md-select.md-default-theme,
-md-select .md-select-value {
- border-bottom-color: orange;
-}
-
-md-select .md-select-value span {
- color: orange;
-}
-
-md-input-container label {
- color: white !important;
-}
-
-md-input-container.md-input-focused label {
- color: orange !important;
-}
-
-md-option[selected] div.md-text {
- color: orange;
-}
-
-md-option div.md-text:hover {
- color: orange;
-}
-
-md-select.md-default-theme:not([disabled]):focus,
-md-select:not([disabled]):focus .md-select-value {
- color: orange;
-}
-
-md-ripple-container {
-
-}
-
-/*tab overrides*/
-md-tab-item.md-active {
- color: orange;
-}
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/data/locale-en_US.json b/vbd/gui/module/src/main/resources/vpp/assets/data/locale-en_US.json
deleted file mode 100644
index 77292a0b6..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/data/locale-en_US.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "WORKING": "It's Working"
-}
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansExtraLight.otf b/vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansExtraLight.otf
deleted file mode 100644
index 259574ae0..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansExtraLight.otf
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansRegular.otf b/vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansRegular.otf
deleted file mode 100644
index 30c3be898..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/CiscoSansRegular.otf
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.eot b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.eot
deleted file mode 100644
index 376bcf4d4..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.svg b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.svg
deleted file mode 100644
index 47624eb70..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.svg
+++ /dev/null
@@ -1,232 +0,0 @@
-<?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 webfont generated by Font Squirrel.
-Copyright : Copyright c 2010 by Ralph du Carrois Erik Spiekermann Botio Nikoltchev All rights reserved
-Designer : Ralph du Carrois Erik Spiekermann Botio Nikoltchev
-Foundry : Ralph du Carrois Erik Spiekermann Botio Nikoltchev
-Foundry URL : httpedenspiekermanncom
-</metadata>
-<defs>
-<font id="CiscoSansExtraLight" horiz-adv-x="1228" >
-<font-face units-per-em="2048" ascent="1618" descent="-430" />
-<missing-glyph horiz-adv-x="614" />
-<glyph unicode=" " horiz-adv-x="614" />
-<glyph unicode="&#x09;" horiz-adv-x="614" />
-<glyph unicode="&#xa0;" horiz-adv-x="614" />
-<glyph unicode="!" horiz-adv-x="532" d="M193 0v164h147v-164h-147zM199 1475h127l-13 -1012h-102z" />
-<glyph unicode="&#x22;" d="M215 1317v188h119v-188l-19 -313h-77zM500 1317v188h118v-188l-18 -313h-78z" />
-<glyph unicode="#" d="M90 399v93h180l39 450h-178v92h186l35 400h105l-37 -400h442l35 400h102l-34 -400h172v-92h-181l-38 -450h178v-93h-187l-35 -399h-102l33 399h-440l-33 -399h-105l35 399h-172zM373 492h442l37 450h-440z" />
-<glyph unicode="$" d="M72 379h121q29 -147 144.5 -225t287.5 -78q195 0 304 82t109 217q0 127 -97 202.5t-372 141.5q-236 55 -336 144t-100 237q0 150 114.5 250t321.5 112v238h105v-238q190 -12 319 -108.5t162 -253.5h-119q-29 125 -138.5 195.5t-274.5 70.5q-180 0 -275.5 -72.5 t-95.5 -185.5q0 -115 80 -178.5t317 -118.5q274 -63 390 -165.5t116 -264.5q0 -164 -128 -277.5t-353 -126.5v-253h-105v256q-197 10 -330.5 113.5t-166.5 285.5z" />
-<glyph unicode="%" horiz-adv-x="1697" d="M106 1118q0 166 96.5 256t237.5 90q143 0 239.5 -90t96.5 -256t-96 -256t-240 -90q-141 0 -237.5 90t-96.5 256zM205 1118q0 -131 66.5 -196.5t168.5 -65.5q100 0 169 66.5t69 195.5q0 131 -67.5 196.5t-170 65.5t-169 -65.5t-66.5 -196.5zM449 0l684 1434h108 l-682 -1434h-110zM922 315.5q0 165.5 96 256t237 90.5q143 0 239.5 -90.5t96.5 -256t-96 -256t-240 -90.5q-141 0 -237 90.5t-96 256zM1020 315q0 -131 66.5 -196.5t168.5 -65.5q100 0 169 66.5t69 195.5q0 131 -67.5 197t-170 66t-169 -66t-66.5 -197z" />
-<glyph unicode="&#x26;" horiz-adv-x="1288" d="M72 330q0 137 77.5 232t239.5 190q-131 131 -188.5 215t-57.5 176q0 129 98.5 225t272.5 96q176 0 276.5 -94t100.5 -221q0 -223 -344 -416l418 -411q100 158 127 366l100 -12q-27 -236 -154 -426l217 -213l-79 -68l-201 201q-176 -201 -438 -201q-217 0 -341 98.5 t-124 262.5zM186 340q0 -129 95.5 -203t263.5 -74q209 0 358 175l-446 446q-135 -80 -203 -157.5t-68 -186.5zM250 1143q0 -74 49 -143.5t178 -200.5q309 178 309 348q0 90 -67.5 158.5t-202.5 68.5q-131 0 -198.5 -67.5t-67.5 -163.5z" />
-<glyph unicode="'" horiz-adv-x="552" d="M217 1317v188h119v-188l-19 -313h-79z" />
-<glyph unicode="(" horiz-adv-x="696" d="M168 655q0 303 96 560.5t238 443.5h96q-147 -225 -232 -466t-85 -538t85 -537.5t232 -465.5h-96q-141 186 -237.5 443t-96.5 560z" />
-<glyph unicode=")" horiz-adv-x="696" d="M96 -348q150 227 235 466.5t85 536.5t-85 537t-235 467h99q139 -184 235 -441t96 -562.5t-96 -562.5t-235 -441h-99z" />
-<glyph unicode="*" horiz-adv-x="962" d="M104 1194l33 98l312 -123l-23 336h106l-22 -338l313 125l33 -98l-328 -84l215 -260l-84 -64l-180 283l-178 -283l-84 64l215 260z" />
-<glyph unicode="+" d="M199 608v101h360v366h109v-366h362v-101h-362v-364h-109v364h-360z" />
-<glyph unicode="," horiz-adv-x="571" d="M152 -213q117 43 116 213h-55v162h152v-150q0 -246 -213 -297v72z" />
-<glyph unicode="-" horiz-adv-x="1105" d="M199 608v101h708v-101h-708z" />
-<glyph unicode="." horiz-adv-x="583" d="M217 0v164h150v-164h-150z" />
-<glyph unicode="/" horiz-adv-x="733" d="M86 -184l453 1689h106l-452 -1689h-107z" />
-<glyph unicode="0" d="M123 717q0 375 135 561t356.5 186t355.5 -185t134 -562q0 -375 -134 -561.5t-355.5 -186.5t-356.5 187.5t-135 560.5zM238 716.5q0 -327.5 98 -490.5t278.5 -163t278.5 163t98 490.5t-98 490.5t-278.5 163t-278.5 -163t-98 -490.5z" />
-<glyph unicode="1" d="M311 1126v117l334 191h109v-1434h-111v1315z" />
-<glyph unicode="2" d="M143 1087q27 174 155 275.5t316 101.5q186 0 310.5 -106.5t124.5 -284.5q0 -135 -65.5 -244.5t-233.5 -279.5l-443 -447h740v-102h-887v102l532 541q131 133 188.5 226.5t57.5 201.5q0 135 -89 216t-239 81q-141 0 -236 -77t-112 -204h-119z" />
-<glyph unicode="3" d="M104 326h117q27 -125 125 -192.5t248 -67.5q168 0 269.5 88t101.5 237q0 154 -93.5 236t-242.5 82h-148v98h140q135 0 219 77t84 203q0 131 -92.5 207t-239.5 76q-145 0 -238.5 -67.5t-117.5 -190.5h-115q29 164 157 258t320 94q188 0 312 -98t124 -268 q0 -129 -69.5 -215t-198.5 -121q135 -18 223 -116.5t88 -252.5q0 -195 -133 -309.5t-350 -114.5q-197 0 -328 95.5t-162 261.5z" />
-<glyph unicode="4" d="M135 270v111l649 1053h119v-1067h221v-97h-221v-270h-110v270h-658zM250 367h543v890z" />
-<glyph unicode="5" d="M115 334h116q27 -129 126.5 -200t238.5 -71q162 0 270.5 109t108.5 287q0 176 -100.5 276.5t-266.5 100.5q-121 0 -211 -49.5t-141 -118.5h-92l29 766h821v-97h-717l-23 -544q143 135 353 135q203 0 333 -126t130 -347q0 -213 -140.5 -349.5t-357.5 -136.5 q-184 0 -315 100.5t-162 264.5z" />
-<glyph unicode="6" d="M135 653q0 233 42 398.5t119 252.5t163 123.5t190 36.5q143 0 254 -76.5t144 -205.5h-119q-29 90 -101.5 139t-179.5 49q-391 0 -403 -676q51 106 155.5 172t233.5 66q201 0 326.5 -130t125.5 -347q0 -223 -134 -354.5t-328 -131.5q-254 0 -371 185.5t-117 498.5z M262 475q0 -96 33 -185t119 -156.5t211 -67.5q145 0 246.5 103t101.5 277q0 184 -96.5 288t-258.5 104q-152 0 -254 -99.5t-102 -263.5z" />
-<glyph unicode="7" d="M145 1333v101h908v-101l-643 -1333h-123l649 1333h-791z" />
-<glyph unicode="8" d="M109 362q0 291 333 394q-119 41 -200.5 124t-81.5 218q0 176 132 271t322 95q193 0 324 -90t131 -266q0 -244 -301 -346q352 -111 352 -389q0 -176 -138 -290t-368 -114q-227 0 -366 112.5t-139 280.5zM223 371q0 -137 109.5 -222.5t281.5 -85.5t282 84t110 224 q0 272 -414 348q-166 -41 -267.5 -119.5t-101.5 -228.5zM268 1104q0 -246 353 -307q154 39 245.5 108.5t91.5 198.5q0 131 -99 200.5t-245 69.5q-141 0 -243.5 -68.5t-102.5 -201.5z" />
-<glyph unicode="9" d="M135 979q0 215 132 350t325 135q256 0 374.5 -184t118.5 -500q0 -811 -514 -811q-147 0 -259.5 78t-145.5 207h117q25 -90 104.5 -140.5t185.5 -50.5q186 0 291 157t113 519q-51 -109 -155.5 -173t-233.5 -64q-195 0 -324 126t-129 351zM248 987q0 -188 99 -289.5 t255 -101.5q152 0 254 99.5t102 262.5q0 156 -90 283t-272 127q-150 0 -249 -105.5t-99 -275.5z" />
-<glyph unicode=":" horiz-adv-x="583" d="M217 0v164h150v-164h-150zM217 901v164h150v-164h-150z" />
-<glyph unicode=";" horiz-adv-x="583" d="M152 -213q117 43 116 213h-51v162h148v-150q0 -246 -213 -297v72zM217 901v164h148v-164h-148z" />
-<glyph unicode="&#x3c;" d="M199 610v101l831 407v-117l-713 -337v-7l713 -338v-116z" />
-<glyph unicode="=" d="M199 395v101h831v-101h-831zM199 821v101h831v-101h-831z" />
-<glyph unicode="&#x3e;" d="M199 203v116l712 338v7l-712 337v117l831 -407v-101z" />
-<glyph unicode="?" horiz-adv-x="1064" d="M111 1149q29 160 148.5 258t304 98t302 -97t117.5 -241q0 -88 -51 -176t-178 -213l-90 -88q-47 -51 -62.5 -111.5t-15.5 -164.5h-111q0 170 33 247.5t145 176.5q119 102 166 171.5t47 157.5q0 102 -85 172t-222 70q-131 0 -219 -70.5t-111 -189.5h-118zM457 0v162h149 v-162h-149z" />
-<glyph unicode="@" horiz-adv-x="1890" d="M117 649q0 180 52 327.5t138 244t198.5 162t227.5 94t234 28.5q356 0 580.5 -195.5t224.5 -498.5q0 -268 -108 -435t-273 -167q-96 0 -154.5 62.5t-62.5 150.5q-29 -70 -119 -135.5t-207 -65.5q-133 0 -231.5 97.5t-98.5 273.5q0 248 123 397.5t315 149.5q78 0 151 -42 t99 -118l37 145h82l-76 -581q-4 -61 -4 -70q0 -84 38 -130t106 -46q119 0 197.5 136t78.5 376q0 268 -191.5 435t-506.5 167q-100 0 -200.5 -24.5t-200 -82t-174.5 -142.5t-122 -217t-47 -296q0 -229 108.5 -398t276.5 -248t371 -79q168 0 317 51l15 -92q-152 -55 -338 -55 q-166 0 -317.5 53t-272.5 152.5t-193.5 259t-72.5 356.5zM625 625q0 -156 66.5 -235t176.5 -79q143 0 227.5 127t84.5 367q0 121 -61.5 183.5t-157.5 62.5q-139 0 -237.5 -114.5t-98.5 -311.5z" />
-<glyph unicode="A" horiz-adv-x="1353" d="M14 0l592 1475h144l589 -1475h-127l-165 418h-746l-166 -418h-121zM340 514h670l-332 850z" />
-<glyph unicode="B" horiz-adv-x="1306" d="M168 0v1475h506q225 0 347 -97.5t122 -267.5q0 -115 -73 -207t-193 -121q139 -20 232 -123.5t93 -248.5q0 -193 -133 -301.5t-387 -108.5h-514zM283 98h415q184 0 283.5 81t99.5 231q0 145 -99 232t-273 87h-426v-631zM283 823h419q154 0 240 80t86 205q0 127 -90 199.5 t-250 72.5h-405v-557z" />
-<glyph unicode="C" horiz-adv-x="1472" d="M106 725q0 369 186.5 574.5t479.5 205.5q242 0 406.5 -128t197.5 -347h-114q-35 182 -165 278.5t-325 96.5q-242 0 -394.5 -179t-152.5 -501q0 -301 153.5 -478t395.5 -177q199 0 331 112.5t155 306.5h114q-25 -223 -188.5 -371.5t-413.5 -148.5q-299 0 -482.5 206 t-183.5 550z" />
-<glyph unicode="D" horiz-adv-x="1400" d="M168 0v1475h416q322 0 516 -192.5t194 -545.5q0 -344 -199.5 -540.5t-516.5 -196.5h-410zM283 98h309q264 0 425 167t161 472q0 307 -163 474t-427 167h-305v-1280z" />
-<glyph unicode="E" horiz-adv-x="1157" d="M168 0v1475h872v-101h-757v-575h698v-99h-698v-600h757v-100h-872z" />
-<glyph unicode="F" horiz-adv-x="1132" d="M168 0v1475h858v-101h-743v-616h667v-99h-667v-659h-115z" />
-<glyph unicode="G" horiz-adv-x="1497" d="M106 735q0 365 185.5 567.5t472.5 202.5q233 0 389 -115.5t197 -318.5h-115q-41 162 -164 248t-307 86q-229 0 -385 -173t-156 -497q0 -315 160 -491t389 -176q197 0 334 120.5t137 300.5v187h-477v96h580v-772h-84l-17 242q-66 -129 -192.5 -201t-288.5 -72 q-285 0 -471.5 202t-186.5 564z" />
-<glyph unicode="H" horiz-adv-x="1402" d="M168 0v1475h115v-672h835v672h117v-1475h-117v700h-835v-700h-115z" />
-<glyph unicode="I" horiz-adv-x="450" d="M168 0v1475h115v-1475h-115z" />
-<glyph unicode="J" horiz-adv-x="1073" d="M66 391h114q8 -156 92 -238.5t224 -82.5q143 0 223 89t80 253v1063h116v-1063q0 -203 -113.5 -323t-309.5 -120q-190 0 -304 116t-122 306z" />
-<glyph unicode="K" horiz-adv-x="1220" d="M168 0v1475h115v-687l710 687h142l-736 -711l797 -764h-156l-757 725v-725h-115z" />
-<glyph unicode="L" horiz-adv-x="1122" d="M168 0v1475h117v-1369h751v-106h-868z" />
-<glyph unicode="M" horiz-adv-x="1724" d="M168 0v1475h170l543 -1352l512 1352h163v-1475h-110v1315l-506 -1315h-123l-536 1325v-1325h-113z" />
-<glyph unicode="N" horiz-adv-x="1458" d="M168 0v1475h141l877 -1319v1319h104v-1475h-135l-879 1327v-1327h-108z" />
-<glyph unicode="O" horiz-adv-x="1542" d="M106 735q0 360 189.5 565t476.5 205t475.5 -203.5t188.5 -566.5q0 -360 -187.5 -563t-478.5 -203t-477.5 205t-186.5 561zM225 735q0 -322 155 -494.5t390 -172.5q238 0 392.5 172t154.5 495q0 317 -151.5 494.5t-395.5 177.5q-242 0 -393.5 -177.5t-151.5 -494.5z" />
-<glyph unicode="P" horiz-adv-x="1282" d="M168 0v1475h496q248 0 385 -122t137 -341q0 -207 -144.5 -327t-384.5 -120h-374v-565h-115zM283 666h376q193 0 299.5 91t106.5 255q0 172 -104.5 268t-292.5 96h-385v-710z" />
-<glyph unicode="Q" horiz-adv-x="1542" d="M106 735q0 360 189.5 565t476.5 205t475.5 -203.5t188.5 -566.5q0 -410 -244 -616l229 -285l-98 -67l-215 292q-143 -90 -338 -90q-291 0 -477.5 205t-186.5 561zM225 735q0 -322 155 -494.5t390 -172.5q238 0 392.5 172t154.5 495q0 317 -151.5 494.5t-395.5 177.5 q-242 0 -393.5 -177.5t-151.5 -494.5z" />
-<glyph unicode="R" horiz-adv-x="1288" d="M168 0v1475h504q248 0 382 -116t134 -327q0 -154 -97.5 -260t-252.5 -147l415 -625h-139l-395 606h-436v-606h-115zM283 705h389q182 0 288.5 90t106.5 237q0 166 -99.5 255t-291.5 89h-393v-671z" />
-<glyph unicode="S" horiz-adv-x="1323" d="M86 377h121q29 -150 150.5 -228.5t304.5 -78.5q207 0 320.5 84t113.5 223q0 141 -100.5 219t-391.5 141q-246 53 -350 150.5t-104 255.5q0 164 133 263t374 99q221 0 372 -98t183 -270h-118q-29 127 -142.5 198.5t-292.5 71.5q-195 0 -294 -70.5t-99 -187.5 q0 -123 86 -193.5t332 -126.5q291 -68 409.5 -171t118.5 -277q0 -178 -146 -295t-404 -117q-231 0 -386 107.5t-190 300.5z" />
-<glyph unicode="T" horiz-adv-x="1177" d="M35 1372v103h1108v-103h-498v-1372h-115v1372h-495z" />
-<glyph unicode="U" horiz-adv-x="1437" d="M158 483v992h112v-998q0 -180 126 -294.5t322.5 -114.5t322.5 114.5t126 294.5v998h113v-992q0 -221 -152.5 -367.5t-408.5 -146.5q-260 0 -410.5 145.5t-150.5 368.5z" />
-<glyph unicode="V" horiz-adv-x="1284" d="M14 1475h121q336 -918 506 -1375q96 256 272.5 727t241.5 648h113q-365 -983 -549 -1475h-156z" />
-<glyph unicode="W" horiz-adv-x="1953" d="M25 1475h118l371 -1358l391 1358h158l383 -1354l373 1354h110l-407 -1475h-152l-389 1364l-393 -1364h-156z" />
-<glyph unicode="X" horiz-adv-x="1255" d="M35 0l526 764l-487 711h137l424 -623l438 623h129l-504 -711l523 -764h-140l-452 674l-461 -674h-133z" />
-<glyph unicode="Y" horiz-adv-x="1275" d="M14 1475h125l496 -791q170 262 506 791h119l-566 -897v-578h-116v580z" />
-<glyph unicode="Z" horiz-adv-x="1308" d="M96 0v102l981 1270h-934v103h1069v-99l-979 -1276h959v-100h-1096z" />
-<glyph unicode="[" horiz-adv-x="538" d="M88 -348v2007h373v-94h-264v-1819h264v-94h-373z" />
-<glyph unicode="\" horiz-adv-x="681" d="M61 1505h105l452 -1689h-104q-303 1126 -453 1689z" />
-<glyph unicode="]" horiz-adv-x="538" d="M76 -254h266v1819h-266v94h373v-2007h-373v94z" />
-<glyph unicode="^" horiz-adv-x="1024" d="M96 819l359 656h112l361 -656h-117l-299 555l-299 -555h-117z" />
-<glyph unicode="_" horiz-adv-x="1234" d="M61 -127h1110v-100h-1110v100z" />
-<glyph unicode="`" horiz-adv-x="485" d="M61 1505h152l211 -280h-102z" />
-<glyph unicode="a" horiz-adv-x="1083" d="M96 270q0 141 95.5 223t314.5 119l319 54v92q0 115 -76.5 181.5t-213.5 66.5q-125 0 -204 -59.5t-89 -158.5h-115q12 137 125 222.5t289 85.5q180 0 287.5 -94.5t107.5 -256.5v-745h-90l-17 176q-123 -207 -376 -207q-158 0 -257.5 81t-99.5 220zM211 279 q0 -104 73.5 -160t196.5 -56q133 0 238.5 90.5t105.5 225.5v199l-286 -50q-182 -31 -255 -90t-73 -159z" />
-<glyph unicode="b" horiz-adv-x="1187" d="M158 0v1475h110v-609q53 104 149.5 167t225.5 63q205 0 327 -141.5t122 -409.5q0 -274 -128 -425t-329 -151q-127 0 -222.5 60.5t-146.5 165.5l-18 -195h-90zM260 532q0 -227 98.5 -348t260 -121t260 123t98.5 361q0 225 -97.5 339.5t-258.5 114.5q-152 0 -256.5 -115.5 t-104.5 -353.5z" />
-<glyph unicode="c" horiz-adv-x="1105" d="M96 524q0 272 134.5 422t340.5 150q170 0 288 -88t145 -238h-121q-20 106 -103.5 170t-204.5 64q-162 0 -263 -124t-101 -360q0 -223 102.5 -340t259.5 -117q125 0 212 69t108 181h117q-25 -152 -145 -248t-296 -96q-207 0 -340 146.5t-133 408.5z" />
-<glyph unicode="d" horiz-adv-x="1187" d="M96 522q0 276 128 425t329 149q125 0 220 -59.5t147 -159.5v598h110v-1475h-90l-18 203q-53 -106 -149.5 -170t-225.5 -64q-195 0 -323 144.5t-128 408.5zM211 522q0 -223 100.5 -341t257.5 -118q152 0 256.5 118t104.5 351q0 225 -99.5 347t-261.5 122 q-158 0 -258 -121.5t-100 -357.5z" />
-<glyph unicode="e" horiz-adv-x="1169" d="M96 532.5q0 266.5 136.5 415t349.5 148.5q215 0 348 -149.5t133 -440.5h-854q8 -217 117.5 -330t277.5 -113q121 0 207 60.5t117 167.5h116q-39 -147 -156.5 -234.5t-285.5 -87.5q-223 0 -364.5 148.5t-141.5 415zM211 598h737q-10 199 -110.5 303.5t-255.5 104.5 q-152 0 -254.5 -106.5t-116.5 -301.5z" />
-<glyph unicode="f" horiz-adv-x="614" d="M55 971v94h158v180q0 121 68.5 190.5t183.5 69.5q84 0 160 -24v-95q-92 25 -158 25q-143 0 -143 -162v-184h249v-94h-249v-971h-111v971h-158z" />
-<glyph unicode="g" horiz-adv-x="1187" d="M96 559q0 250 129 393.5t328 143.5q127 0 223 -58.5t148 -158.5l16 186h90v-1059q0 -178 -119.5 -291.5t-326.5 -113.5q-182 0 -298 78.5t-143 222.5h117q18 -104 104.5 -157.5t215.5 -53.5q160 0 250 86t90 233v232q-115 -205 -371 -205q-190 0 -321.5 139t-131.5 383z M211 559q0 -203 101.5 -315.5t256.5 -112.5q158 0 259.5 104.5t101.5 325.5q0 215 -99.5 327.5t-261.5 112.5q-158 0 -258 -112.5t-100 -329.5z" />
-<glyph unicode="h" horiz-adv-x="1132" d="M158 0v1475h110v-586q51 98 145.5 152.5t202.5 54.5q170 0 269.5 -99.5t99.5 -271.5v-725h-111v721q0 133 -74.5 206.5t-207.5 73.5q-127 0 -225.5 -95t-98.5 -249v-657h-110z" />
-<glyph unicode="i" horiz-adv-x="425" d="M147 1323v152h134v-152h-134zM158 0v1065h110v-1065h-110z" />
-<glyph unicode="j" horiz-adv-x="425" d="M-106 -283q72 -20 129 -20q70 0 102.5 38t32.5 128v1202h110v-1208q0 -123 -59 -189.5t-170 -66.5q-76 0 -145 22v94zM145 1323v152h134v-152h-134z" />
-<glyph unicode="k" horiz-adv-x="999" d="M158 0v1475h110v-844l510 434h150l-547 -465l614 -600h-149l-578 563v-563h-110z" />
-<glyph unicode="l" horiz-adv-x="425" d="M158 0v1475h110v-1475h-110z" />
-<glyph unicode="m" horiz-adv-x="1746" d="M158 0v1065h92l12 -166q51 98 139 147.5t189 49.5q248 0 317 -211q51 106 146.5 158.5t201.5 52.5q162 0 253 -95.5t91 -269.5v-731h-110v725q0 276 -256 276q-131 0 -215 -98t-84 -244v-659h-111v725q0 276 -252 276q-129 0 -216 -98t-87 -241v-662h-110z" />
-<glyph unicode="n" horiz-adv-x="1132" d="M158 0v1065h92l12 -182q53 102 148.5 157.5t205.5 55.5q170 0 269.5 -99.5t99.5 -271.5v-725h-111v721q0 133 -74.5 206.5t-207.5 73.5q-127 0 -225.5 -95t-98.5 -244v-662h-110z" />
-<glyph unicode="o" horiz-adv-x="1173" d="M96 532q0 270 137.5 417t354.5 147q219 0 354 -146.5t135 -417t-135 -417t-352 -146.5t-355.5 148.5t-138.5 414.5zM211 532.5q0 -227.5 105.5 -350.5t271.5 -123q170 0 272.5 122t102.5 351.5t-102.5 351.5t-272.5 122q-168 0 -272.5 -123t-104.5 -350.5z" />
-<glyph unicode="p" horiz-adv-x="1187" d="M158 -369v1434h90l18 -199q51 104 148.5 167t228.5 63q203 0 326 -142.5t123 -408.5q0 -274 -129 -425t-332 -151q-125 0 -218.5 59.5t-144.5 161.5v-559h-110zM260 532q0 -227 97.5 -348t256.5 -121q162 0 262.5 124t100.5 360q0 225 -97.5 339.5t-258.5 114.5 q-152 0 -256.5 -115.5t-104.5 -353.5z" />
-<glyph unicode="q" horiz-adv-x="1187" d="M96 522q0 276 128 425t329 149q127 0 222 -59.5t149 -162.5l16 191h90v-1434h-110v568q-53 -104 -149.5 -167t-223.5 -63q-195 0 -323 144.5t-128 408.5zM211 522q0 -223 100.5 -341t257.5 -118q152 0 256.5 118t104.5 351q0 225 -99.5 347t-261.5 122 q-158 0 -258 -121.5t-100 -357.5z" />
-<glyph unicode="r" horiz-adv-x="698" d="M158 0v1065h90l16 -205q84 236 299 236q61 0 111 -17v-108q-66 18 -117 18q-121 0 -205 -110.5t-84 -296.5v-582h-110z" />
-<glyph unicode="s" horiz-adv-x="1017" d="M76 283h114q12 -102 96.5 -163t219.5 -61q141 0 221 64.5t80 157.5q0 100 -80 151t-268 84q-346 59 -346 297q0 125 100 204t287 79q166 0 279.5 -80t135.5 -215h-114q-14 90 -97 147.5t-208 57.5q-133 0 -202 -51.5t-69 -131.5q0 -88 64.5 -136t232.5 -81 q211 -39 305.5 -111.5t94.5 -207.5q0 -133 -114 -225.5t-304 -92.5q-184 0 -297 86.5t-131 227.5z" />
-<glyph unicode="t" horiz-adv-x="618" d="M45 969v96h154l6 256h104v-256h248v-96h-248v-756q0 -150 140 -150q66 0 129 17v-90q-70 -20 -136 -21q-117 0 -180 63.5t-63 182.5v754h-154z" />
-<glyph unicode="u" horiz-adv-x="1122" d="M147 344v721h111v-721q0 -137 74 -209t205 -72q139 0 228 99.5t89 249.5v653h111v-1065h-91l-14 170q-55 -98 -149.5 -149.5t-198.5 -51.5q-164 0 -264.5 96.5t-100.5 278.5z" />
-<glyph unicode="v" horiz-adv-x="1017" d="M35 1065h121l354 -971l358 971h115l-399 -1065h-150z" />
-<glyph unicode="w" horiz-adv-x="1574" d="M45 1065h113l284 -952l283 952h139l293 -948l264 948h109l-307 -1065h-133l-299 952l-283 -952h-137z" />
-<glyph unicode="x" horiz-adv-x="1046" d="M35 0l414 559l-394 506h138l325 -424l303 424h129l-368 -502l430 -563h-135l-363 479l-348 -479h-131z" />
-<glyph unicode="y" horiz-adv-x="1017" d="M35 1065h119l381 -979l337 979h111l-375 -1073q-84 -240 -136 -315.5t-161 -75.5q-49 0 -110 20v90q53 -18 104 -18q66 0 99.5 58.5t97.5 248.5h-43z" />
-<glyph unicode="z" horiz-adv-x="980" d="M76 0v106l706 865h-676v94h799v-111l-702 -860h702v-94h-829z" />
-<glyph unicode="{" horiz-adv-x="696" d="M104 604v105q86 0 139.5 52t53.5 148v455q0 147 71.5 221t233.5 74v-92q-115 0 -155.5 -46t-40.5 -147v-452q0 -106 -50.5 -175t-134.5 -90q84 -20 134.5 -88.5t50.5 -177.5v-450q0 -100 40.5 -146.5t155.5 -46.5v-92q-162 0 -233.5 73.5t-71.5 221.5v455q0 96 -53.5 147 t-139.5 51z" />
-<glyph unicode="|" horiz-adv-x="708" d="M303 -287v1895h103v-1895h-103z" />
-<glyph unicode="}" horiz-adv-x="696" d="M92 -252q115 0 157 47t42 146v450q0 109 49 177.5t135 88.5q-86 20 -135 88t-49 177v452q0 98 -42 145.5t-157 47.5v92q164 0 235.5 -74t71.5 -221v-455q0 -96 53.5 -148t139.5 -52v-105q-86 0 -139.5 -51t-53.5 -147v-455q0 -147 -71.5 -221t-235.5 -74v92z" />
-<glyph unicode="~" d="M199 580v114q102 82 223 82q88 0 205.5 -59.5t183.5 -59.5q106 0 219 99v-115q-102 -82 -225 -82q-88 0 -205 59.5t-182 59.5q-106 0 -219 -98z" />
-<glyph unicode="&#xa1;" horiz-adv-x="532" d="M193 942v164h147v-164h-147zM199 -369l12 1012h102l13 -1012h-127z" />
-<glyph unicode="&#xa2;" d="M156 524q0 250 114.5 397.5t298.5 170.5v260h105v-260q154 -8 258 -95.5t129 -226.5h-119q-20 106 -103 170t-206 64q-160 0 -261.5 -124t-101.5 -360q0 -223 102.5 -340t260.5 -117q125 0 212 69t105 181h119q-25 -141 -131.5 -234t-263.5 -106v-249h-105v249 q-184 20 -298.5 163.5t-114.5 387.5z" />
-<glyph unicode="&#xa3;" d="M143 0v100q147 55 148 222v348h-92v94h92v309q0 186 106.5 288.5t280.5 102.5q145 0 250.5 -80.5t136.5 -218.5h-111q-23 92 -96.5 148.5t-181.5 56.5q-131 0 -204 -78t-73 -221v-307h439v-94h-439v-234q0 -78 -4 -127t-29.5 -111.5t-74.5 -97.5h782v-100h-930z" />
-<glyph unicode="&#xa4;" d="M106 270l134 136q-94 119 -95 290q0 164 93 287l-132 131l76 76l129 -129q129 111 301 110.5t303 -112.5l132 131l75 -76l-133 -133q90 -125 90 -285q0 -168 -92 -290l135 -136l-75 -75l-136 133q-127 -106 -299 -107q-166 0 -299 105l-131 -131zM252 696 q0 -166 105.5 -272.5t256.5 -106.5q150 0 254.5 106.5t104.5 272.5t-104.5 272.5t-254.5 106.5q-152 0 -257 -106.5t-105 -272.5z" />
-<glyph unicode="&#xa5;" d="M25 1434h127l462 -750l476 750h116l-479 -764h252v-92h-307v-193h307v-90h-307v-295h-115v295h-301v90h301v193h-301v92h250z" />
-<glyph unicode="&#xa6;" horiz-adv-x="708" d="M303 -285v789h103v-789h-103zM303 819v789h103v-789h-103z" />
-<glyph unicode="&#xa7;" d="M193 655q0 104 65.5 177t185.5 108q-176 90 -176 242q0 125 97.5 203.5t265.5 78.5q139 0 241.5 -67.5t131.5 -175.5h-119q-23 70 -91.5 112.5t-164.5 42.5q-119 0 -185.5 -53t-66.5 -133q0 -84 62.5 -134t201.5 -91q219 -66 307 -145t88 -197q0 -104 -67.5 -178 t-186.5 -109q180 -92 181 -240q0 -127 -99.5 -203.5t-261.5 -76.5q-143 0 -248.5 68.5t-136.5 174.5h123q18 -66 91 -110.5t173 -44.5q115 0 182.5 53t67.5 133q0 82 -63.5 132t-200.5 93q-221 66 -309 144.5t-88 195.5zM299 664q0 -92 68.5 -146.5t257.5 -116.5 q37 -8 67 -22q238 66 238 233q0 96 -74 152.5t-283 120.5q-39 12 -41 14q-233 -65 -233 -235z" />
-<glyph unicode="&#xa8;" horiz-adv-x="770" d="M104 1331v144h129v-144h-129zM524 1331v144h129v-144h-129z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1751" d="M121 739q0 193 65.5 344.5t175 240.5t240.5 135t272.5 46t272.5 -46t240.5 -135t175 -240.5t65.5 -344.5q0 -195 -65.5 -346t-175 -241.5t-239.5 -136.5t-273.5 -46t-273.5 46t-239.5 136.5t-175 241.5t-65.5 346zM219 739q0 -170 55.5 -305t149.5 -216t209 -123 t241.5 -42t242.5 42t210 123t149.5 216t55.5 305t-55.5 304.5t-149.5 215t-210 121.5t-242.5 41t-241.5 -41t-209 -121.5t-149.5 -215t-55.5 -304.5zM508 737q0 213 106.5 325t262.5 112q131 0 222 -68t111 -184h-102q-14 80 -76.5 125t-152.5 45q-119 0 -196 -90.5 t-77 -264.5q0 -170 79 -255t192 -85q96 0 159.5 51.5t79.5 131.5h98q-20 -117 -111 -191t-229 -74q-152 0 -259 107.5t-107 314.5z" />
-<glyph unicode="&#xaa;" horiz-adv-x="937" d="M131 0v100h674v-100h-674zM145 858q0 41 8.5 74t30 58.5t41 46t57 35.5t63.5 25.5t77 20.5t78.5 15.5t87 14.5t84.5 13v74q0 188 -205 188q-80 0 -134 -41t-67 -100h-96q14 94 99 157.5t204 63.5q133 0 215 -70.5t82 -195.5v-610h-74l-18 125q-80 -143 -262 -144 q-115 0 -193 65.5t-78 184.5zM248 862q0 -80 51 -125t139 -45q94 0 164 69.5t70 158.5v157l-191 -30q-113 -18 -173 -60.5t-60 -124.5z" />
-<glyph unicode="&#xab;" horiz-adv-x="970" d="M129 645l248 420h84l-201 -424l180 -457h-84zM510 645l248 420h84l-201 -424l180 -457h-84z" />
-<glyph unicode="&#xac;" d="M199 608v101h831v-465h-108v364h-723z" />
-<glyph unicode="&#xad;" horiz-adv-x="1105" d="M184 608v101h738v-101h-738z" />
-<glyph unicode="&#xae;" horiz-adv-x="1275" d="M150 1010q0 162 77.5 276.5t184 162.5t225.5 48q88 0 171 -28.5t155.5 -86t116.5 -153.5t44 -219q0 -162 -76.5 -277t-184 -164t-226.5 -49q-86 0 -170 30t-156.5 86t-116.5 153.5t-44 220.5zM229 1009.5q0 -200.5 121 -310t287 -109.5q168 0 289 109.5t121 310 t-121 310.5t-289 110q-166 0 -287 -110t-121 -310.5zM483 750v526h158q82 0 133 -39t51 -115q0 -115 -108 -151l131 -221h-80l-119 206h-96v-206h-70zM553 1014h92q51 0 80 31.5t29 76.5q0 43 -29 71t-86 28h-86v-207z" />
-<glyph unicode="&#xaf;" horiz-adv-x="618" d="M61 1337v97h496v-97h-496z" />
-<glyph unicode="&#xb0;" d="M143 1130.5q0 153.5 95.5 240.5t230.5 87q133 0 229.5 -88t96.5 -239.5t-96.5 -239.5t-229.5 -88q-135 0 -230.5 87t-95.5 240.5zM246 1130.5q0 -110.5 62.5 -176t160.5 -65.5t159.5 65.5t61.5 176t-61.5 176t-159.5 65.5t-160.5 -65.5t-62.5 -176z" />
-<glyph unicode="&#xb1;" d="M199 0v100h831v-100h-831zM199 608v101h360v366h109v-366h362v-101h-362v-325h-109v325h-360z" />
-<glyph unicode="&#xb2;" horiz-adv-x="696" d="M94 1452q16 90 87 148.5t173 58.5q109 0 177.5 -65.5t68.5 -163.5q0 -76 -39 -138.5t-117 -140.5l-206 -207h352v-84h-469v84l268 273q115 115 115 215q0 57 -36 103t-116 46q-63 0 -105 -35t-57 -94h-96z" />
-<glyph unicode="&#xb3;" horiz-adv-x="696" d="M90 1036h100q12 -47 57.5 -78.5t96.5 -31.5q78 0 122 44t44 109q0 76 -49 115t-123 39h-47v74h53q55 0 97 41t42 100q0 61 -36.5 97t-100.5 36q-127 0 -156 -106h-96q18 88 89 136t167 48q98 0 163 -57.5t65 -151.5q0 -133 -140 -174q72 -14 121 -62.5t49 -138.5 q0 -98 -73.5 -162.5t-188.5 -64.5q-96 0 -170 55t-86 133z" />
-<glyph unicode="&#xb4;" horiz-adv-x="485" d="M61 1225l211 280h152l-260 -280h-103z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1132" d="M158 -369v1434h110v-721q0 -143 77 -213t202 -70q137 0 227 99.5t90 247.5v657h111v-1065h-92l-13 166q-53 -98 -147 -147.5t-197 -49.5q-170 0 -258 103v-441h-110z" />
-<glyph unicode="&#xb6;" horiz-adv-x="1157" d="M139 1134.5q0 90.5 34 160t86 106.5t102.5 55.5t93.5 18.5h102v-1844h-102v1166q-43 0 -93.5 17t-102.5 53t-86 106.5t-34 161zM850 -369v1844h102v-1844h-102z" />
-<glyph unicode="&#xb7;" horiz-adv-x="583" d="M217 573v164h150v-164h-150z" />
-<glyph unicode="&#xb8;" horiz-adv-x="552" d="M29 -315h92q14 -100 139 -101q63 0 101 35t38 88q0 127 -221 127l17 199h79v-133q217 -29 218 -191q0 -86 -66 -144.5t-166 -58.5q-206 1 -231 179z" />
-<glyph unicode="&#xb9;" horiz-adv-x="696" d="M119 1419v97l207 122h102v-694h154v-84h-435v84h187v600z" />
-<glyph unicode="&#xba;" horiz-adv-x="858" d="M84 1056.5q0 227.5 95 338t251 110.5t249 -109.5t93 -338.5q0 -227 -94 -337t-246 -110q-154 0 -251 109.5t-97 337zM90 0v100h655v-100h-655zM186 1056.5q0 -188.5 69 -276.5t175.5 -88t173 88t66.5 276.5t-66.5 277.5t-173 89t-175.5 -89t-69 -277.5z" />
-<glyph unicode="&#xbb;" horiz-adv-x="970" d="M129 1065h86l246 -420l-225 -461h-86l180 457zM510 1065h84l248 -420l-228 -461h-84l181 457z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1802" d="M172 1214v97l207 123h102v-695h154v-84h-434v84h186v600zM383 -184l973 1802h114l-974 -1802h-113zM1106 172v86l172 520h96l-174 -524h209v43l14 195h78v-238h127v-82h-127v-172h-92v172h-303z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1802" d="M158 1214v97l207 123h102v-695h154v-84h-435v84h187v600zM369 -184l972 1802h115l-975 -1802h-112zM1137 592q16 90 86.5 148.5t173.5 58.5q109 0 177 -65.5t68 -164.5q0 -76 -38.5 -138t-116.5 -140l-207 -207h352v-84h-469v84l269 272q115 115 114 215 q0 57 -35.5 103.5t-115.5 46.5q-63 0 -105.5 -35t-56.5 -94h-96z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1802" d="M168 842h100q12 -47 57.5 -79t96.5 -32q78 0 122 44t44 110q0 76 -49.5 114.5t-122.5 38.5h-47v74h53q55 0 97 41t42 100q0 61 -37 97t-100 36q-127 0 -156 -106h-96q18 88 89 136t167 48q98 0 162.5 -57t64.5 -152q0 -133 -139 -174q72 -14 121 -62t49 -138 q0 -98 -73.5 -163t-188.5 -65q-96 0 -170 55.5t-86 133.5zM387 -184l973 1802h115l-975 -1802h-113zM1110 172v86l172 520h96l-174 -524h209v43l14 195h78v-238h127v-82h-127v-172h-92v172h-303z" />
-<glyph unicode="&#xbf;" horiz-adv-x="1064" d="M82 -61q0 94 48 178t179 209l90 86q49 45 62.5 101t15.5 177h111q0 -170 -33 -249t-145 -175q-119 -104 -166 -172.5t-47 -154.5q0 -102 85 -172t222 -70q131 0 219 70.5t111 189.5h118q-29 -160 -148.5 -258t-304 -98t-301 97.5t-116.5 240.5zM459 942v164h147v-164 h-147z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1353" d="M14 0l592 1475h144l589 -1475h-127l-165 418h-746l-166 -418h-121zM340 514h670l-332 850zM426 1853h152l210 -280h-102z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1353" d="M14 0l592 1475h144l589 -1475h-127l-165 418h-746l-166 -418h-121zM340 514h670l-332 850zM553 1573l211 280h151l-260 -280h-102z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1353" d="M14 0l592 1475h144l589 -1475h-127l-165 418h-746l-166 -418h-121zM340 514h670l-332 850zM391 1573l223 280h127l222 -280h-109l-178 213l-174 -213h-111z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1353" d="M14 0l592 1475h144l589 -1475h-127l-165 418h-746l-166 -418h-121zM340 514h670l-332 850zM403 1630v103q86 61 160 61q61 0 124 -35t104 -35q68 0 155 70v-100q-84 -63 -160 -64q-59 0 -120.5 35t-104.5 35q-70 0 -158 -70z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1353" d="M14 0l592 1475h144l589 -1475h-127l-165 418h-746l-166 -418h-121zM340 514h670l-332 850zM401 1679v144h129v-144h-129zM821 1679v144h129v-144h-129z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1353" d="M14 0l574 1430q-74 23 -117 83t-43 142q0 104 67.5 170.5t178 66.5t178.5 -66.5t68 -170.5q0 -80 -41 -139.5t-113 -83.5l573 -1432h-127l-165 418h-746l-166 -418h-121zM340 514h670l-332 850zM516 1655q0 -78 43 -122t115 -44q70 0 113.5 44t43.5 122q0 76 -44 120 t-113 44q-72 0 -115 -43t-43 -121z" />
-<glyph unicode="&#xc6;" horiz-adv-x="1914" d="M0 0l897 1475h901v-101h-717v-575h658v-99h-658v-602h717v-98h-831v416h-592l-252 -416h-123zM436 514h531v870z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1472" d="M106 725q0 369 186.5 574.5t479.5 205.5q242 0 406.5 -128t197.5 -347h-114q-35 182 -165 278.5t-325 96.5q-242 0 -394.5 -179t-152.5 -501q0 -301 153.5 -478t395.5 -177q199 0 331 112.5t155 306.5h114q-25 -213 -175 -358t-384 -160v-71q104 -14 160.5 -63.5 t56.5 -127.5q0 -86 -66.5 -144.5t-168.5 -58.5q-96 0 -162 46.5t-80 132.5h94q6 -45 47 -73t103 -28q63 0 102 35t39 88q0 127 -223 127l12 137q-283 16 -453 218t-170 536z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1157" d="M168 0v1475h872v-101h-757v-575h698v-99h-698v-600h757v-100h-872zM381 1853h151l211 -280h-102z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1157" d="M168 0v1475h872v-101h-757v-575h698v-99h-698v-600h757v-100h-872zM471 1573l211 280h152l-261 -280h-102z" />
-<glyph unicode="&#xca;" horiz-adv-x="1157" d="M168 0v1475h872v-101h-757v-575h698v-99h-698v-600h757v-100h-872zM319 1573l224 280h127l221 -280h-109l-178 213l-174 -213h-111z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1157" d="M168 0v1475h872v-101h-757v-575h698v-99h-698v-600h757v-100h-872zM317 1679v144h129v-144h-129zM737 1679v144h129v-144h-129z" />
-<glyph unicode="&#xcc;" horiz-adv-x="450" d="M-20 1853h151l211 -280h-102zM168 0v1475h115v-1475h-115z" />
-<glyph unicode="&#xcd;" horiz-adv-x="450" d="M109 1573l210 280h152l-260 -280h-102zM168 0v1475h115v-1475h-115z" />
-<glyph unicode="&#xce;" horiz-adv-x="450" d="M-59 1573l223 280h127l221 -280h-109l-178 213l-174 -213h-110zM168 0v1475h115v-1475h-115z" />
-<glyph unicode="&#xcf;" horiz-adv-x="450" d="M-49 1679v144h129v-144h-129zM168 0v1475h115v-1475h-115zM371 1679v144h129v-144h-129z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1400" d="M51 723v100h117v652h416q322 0 516 -192.5t194 -545.5q0 -344 -200.5 -540.5t-515.5 -196.5h-410v723h-117zM283 98h307q264 0 425 167t161 472q0 307 -162 473t-428 166h-303v-553h467v-100h-467v-625z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1458" d="M168 0v1475h141l877 -1319v1319h104v-1475h-135l-879 1327v-1327h-108zM479 1630v103q86 61 160 61q61 0 123.5 -35t103.5 -35q68 0 156 70v-100q-84 -63 -160 -64q-59 0 -120.5 35t-104.5 35q-70 0 -158 -70z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1542" d="M106 735q0 360 189.5 565t476.5 205t475.5 -203.5t188.5 -566.5q0 -360 -187.5 -563t-478.5 -203t-477.5 205t-186.5 561zM225 735q0 -322 155 -494.5t390 -172.5q238 0 392.5 172t154.5 495q0 317 -151.5 494.5t-395.5 177.5q-242 0 -393.5 -177.5t-151.5 -494.5z M506 1853h151l211 -280h-102z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1542" d="M106 735q0 360 189.5 565t476.5 205t475.5 -203.5t188.5 -566.5q0 -360 -187.5 -563t-478.5 -203t-477.5 205t-186.5 561zM225 735q0 -322 155 -494.5t390 -172.5q238 0 392.5 172t154.5 495q0 317 -151.5 494.5t-395.5 177.5q-242 0 -393.5 -177.5t-151.5 -494.5z M659 1573l211 280h152l-260 -280h-103z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1542" d="M106 735q0 360 189.5 565t476.5 205t475.5 -203.5t188.5 -566.5q0 -360 -187.5 -563t-478.5 -203t-477.5 205t-186.5 561zM225 735q0 -322 155 -494.5t390 -172.5q238 0 392.5 172t154.5 495q0 317 -151.5 494.5t-395.5 177.5q-242 0 -393.5 -177.5t-151.5 -494.5z M479 1573l223 280h127l222 -280h-109l-178 213l-174 -213h-111z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1542" d="M106 735q0 360 189.5 565t476.5 205t475.5 -203.5t188.5 -566.5q0 -360 -187.5 -563t-478.5 -203t-477.5 205t-186.5 561zM225 735q0 -322 155 -494.5t390 -172.5q238 0 392.5 172t154.5 495q0 317 -151.5 494.5t-395.5 177.5q-242 0 -393.5 -177.5t-151.5 -494.5z M498 1630v103q86 61 159 61q61 0 124 -35t104 -35q68 0 155 70v-100q-84 -63 -159 -64q-59 0 -121 35t-105 35q-69 0 -157 -70z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1542" d="M106 735q0 360 189.5 565t476.5 205t475.5 -203.5t188.5 -566.5q0 -360 -187.5 -563t-478.5 -203t-477.5 205t-186.5 561zM225 735q0 -322 155 -494.5t390 -172.5q238 0 392.5 172t154.5 495q0 317 -151.5 494.5t-395.5 177.5q-242 0 -393.5 -177.5t-151.5 -494.5z M487 1679v144h129v-144h-129zM907 1679v144h129v-144h-129z" />
-<glyph unicode="&#xd7;" d="M283 401l258 258l-258 256l71 72l258 -258l260 258l72 -69l-260 -259l260 -258l-72 -71l-260 258l-258 -258z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1542" d="M106 735q0 367 193 568.5t471 201.5q117 0 221 -37l78 211h105l-91 -249q162 -86 257.5 -263.5t95.5 -431.5q0 -369 -191.5 -567.5t-474.5 -198.5q-106 0 -215 35l-82 -229h-104l96 266q-166 86 -262.5 261t-96.5 433zM225 735q0 -219 75 -370.5t204 -227.5l452 1237 q-92 33 -186 33q-242 0 -393.5 -177.5t-151.5 -494.5zM588 98q88 -31 182 -30q238 0 392.5 172t154.5 495q0 217 -73 369.5t-202 228.5z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1437" d="M158 483v992h112v-998q0 -180 126 -294.5t322.5 -114.5t322.5 114.5t126 294.5v998h113v-992q0 -221 -152.5 -367.5t-408.5 -146.5q-260 0 -410.5 145.5t-150.5 368.5zM483 1853h152l211 -280h-103z" />
-<glyph unicode="&#xda;" horiz-adv-x="1437" d="M158 483v992h112v-998q0 -180 126 -294.5t322.5 -114.5t322.5 114.5t126 294.5v998h113v-992q0 -221 -152.5 -367.5t-408.5 -146.5q-260 0 -410.5 145.5t-150.5 368.5zM592 1573l211 280h151l-260 -280h-102z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1437" d="M158 483v992h112v-998q0 -180 126 -294.5t322.5 -114.5t322.5 114.5t126 294.5v998h113v-992q0 -221 -152.5 -367.5t-408.5 -146.5q-260 0 -410.5 145.5t-150.5 368.5zM432 1573l223 280h127l222 -280h-109l-178 213l-174 -213h-111z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1437" d="M158 483v992h112v-998q0 -180 126 -294.5t322.5 -114.5t322.5 114.5t126 294.5v998h113v-992q0 -221 -152.5 -367.5t-408.5 -146.5q-260 0 -410.5 145.5t-150.5 368.5zM442 1679v144h129v-144h-129zM862 1679v144h129v-144h-129z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1275" d="M14 1475h125l496 -791q170 262 506 791h119l-566 -897v-578h-116v580zM528 1573l211 280h152l-260 -280h-103z" />
-<glyph unicode="&#xde;" horiz-adv-x="1273" d="M168 0v1475h115v-263h376q248 0 387.5 -122.5t139.5 -344.5q0 -211 -146.5 -332.5t-382.5 -121.5h-374v-291h-115zM283 391h376q190 0 298 94.5t108 259.5q0 174 -104.5 271.5t-294.5 97.5h-383v-723z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1150" d="M158 0v1108q0 184 96 290.5t274 106.5q154 0 255.5 -76.5t101.5 -222.5q0 -70 -34 -128t-74 -92t-73.5 -76t-33.5 -81q0 -53 34.5 -93t126.5 -87q264 -135 265 -346q0 -137 -97.5 -235.5t-259.5 -98.5q-139 0 -231 62.5t-125 167.5h123q51 -137 237 -138q104 0 171 64.5 t67 169.5q0 90 -46 151.5t-159 120.5q-123 66 -167 120t-44 140q0 53 33 101.5t73 80t72.5 83t32.5 108.5q0 100 -68.5 155.5t-179.5 55.5q-117 0 -188.5 -72.5t-71.5 -226.5v-1112h-110z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1083" d="M96 270q0 141 95.5 223t314.5 119l319 54v92q0 115 -76.5 181.5t-213.5 66.5q-125 0 -204 -59.5t-89 -158.5h-115q12 137 125 222.5t289 85.5q180 0 287.5 -94.5t107.5 -256.5v-745h-90l-17 176q-123 -207 -376 -207q-158 0 -257.5 81t-99.5 220zM211 279 q0 -104 73.5 -160t196.5 -56q133 0 238.5 90.5t105.5 225.5v199l-286 -50q-182 -31 -255 -90t-73 -159zM264 1505h152l211 -280h-103z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1083" d="M96 270q0 141 95.5 223t314.5 119l319 54v92q0 115 -76.5 181.5t-213.5 66.5q-125 0 -204 -59.5t-89 -158.5h-115q12 137 125 222.5t289 85.5q180 0 287.5 -94.5t107.5 -256.5v-745h-90l-17 176q-123 -207 -376 -207q-158 0 -257.5 81t-99.5 220zM211 279 q0 -104 73.5 -160t196.5 -56q133 0 238.5 90.5t105.5 225.5v199l-286 -50q-182 -31 -255 -90t-73 -159zM461 1225l211 280h151l-260 -280h-102z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1083" d="M96 270q0 141 95.5 223t314.5 119l319 54v92q0 115 -76.5 181.5t-213.5 66.5q-125 0 -204 -59.5t-89 -158.5h-115q12 137 125 222.5t289 85.5q180 0 287.5 -94.5t107.5 -256.5v-745h-90l-17 176q-123 -207 -376 -207q-158 0 -257.5 81t-99.5 220zM211 279 q0 -104 73.5 -160t196.5 -56q133 0 238.5 90.5t105.5 225.5v199l-286 -50q-182 -31 -255 -90t-73 -159zM258 1225l223 280h127l221 -280h-108l-178 213l-174 -213h-111z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1083" d="M96 270q0 141 95.5 223t314.5 119l319 54v92q0 115 -76.5 181.5t-213.5 66.5q-125 0 -204 -59.5t-89 -158.5h-115q12 137 125 222.5t289 85.5q180 0 287.5 -94.5t107.5 -256.5v-745h-90l-17 176q-123 -207 -376 -207q-158 0 -257.5 81t-99.5 220zM211 279 q0 -104 73.5 -160t196.5 -56q133 0 238.5 90.5t105.5 225.5v199l-286 -50q-182 -31 -255 -90t-73 -159zM268 1282v102q86 61 160 62q61 0 123.5 -35t103.5 -35q68 0 156 70v-100q-84 -63 -160 -64q-59 0 -120.5 35t-104.5 35q-70 0 -158 -70z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1083" d="M96 270q0 141 95.5 223t314.5 119l319 54v92q0 115 -76.5 181.5t-213.5 66.5q-125 0 -204 -59.5t-89 -158.5h-115q12 137 125 222.5t289 85.5q180 0 287.5 -94.5t107.5 -256.5v-745h-90l-17 176q-123 -207 -376 -207q-158 0 -257.5 81t-99.5 220zM211 279 q0 -104 73.5 -160t196.5 -56q133 0 238.5 90.5t105.5 225.5v199l-286 -50q-182 -31 -255 -90t-73 -159zM264 1331v144h129v-144h-129zM684 1331v144h129v-144h-129z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1083" d="M96 270q0 141 95.5 223t314.5 119l319 54v92q0 115 -76.5 181.5t-213.5 66.5q-125 0 -204 -59.5t-89 -158.5h-115q12 137 125 222.5t289 85.5q180 0 287.5 -94.5t107.5 -256.5v-745h-90l-17 176q-123 -207 -376 -207q-158 0 -257.5 81t-99.5 220zM211 279 q0 -104 73.5 -160t196.5 -56q133 0 238.5 90.5t105.5 225.5v199l-286 -50q-182 -31 -255 -90t-73 -159zM291 1433.5q0 104.5 67.5 171t178 66.5t178 -66.5t67.5 -171t-68.5 -172t-177 -67.5t-177 67.5t-68.5 172zM379 1433.5q0 -77.5 44 -121.5t113.5 -44t113.5 45t44 120.5 t-44 119.5t-113.5 44t-113.5 -43t-44 -120.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1898" d="M96 266q0 129 93.5 212t338.5 112l297 35v125q0 115 -77.5 185.5t-212.5 70.5q-119 0 -202 -61.5t-93 -162.5h-115q16 139 129 226.5t285 87.5q139 0 235 -63.5t131 -174.5q68 117 176.5 177.5t225.5 60.5q205 0 341 -139.5t140 -415.5h-854q14 -246 121.5 -363 t273.5 -117q113 0 203 63.5t121 172.5h119q-39 -152 -161 -240t-284 -88q-139 0 -261 72t-185 213q-41 -123 -148.5 -204t-273.5 -81q-160 0 -261.5 79t-101.5 218zM211 272q0 -98 71.5 -154.5t198.5 -56.5t231.5 86t112.5 215v175l-270 -31q-188 -23 -266 -80.5t-78 -153.5 zM940 631h733q-16 174 -115.5 274.5t-250.5 100.5q-139 0 -240.5 -98.5t-126.5 -276.5z" />
-<glyph unicode="&#xe7;" horiz-adv-x="1105" d="M96 524q0 272 134.5 422t340.5 150q170 0 288 -88t145 -238h-121q-20 106 -103.5 170t-204.5 64q-162 0 -263 -124t-101 -360q0 -223 102.5 -340t259.5 -117q125 0 212 69t108 181h117q-25 -145 -135.5 -239t-272.5 -103v-71q217 -29 217 -191q0 -86 -65.5 -144.5 t-166 -58.5t-167 46.5t-80.5 132.5h94q6 -45 48 -73t104 -28q63 0 102 34t39 89q0 127 -223 127l12 139q-188 18 -304 161.5t-116 389.5z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1169" d="M96 532.5q0 266.5 136.5 415t349.5 148.5q215 0 348 -149.5t133 -440.5h-854q8 -217 117.5 -330t277.5 -113q121 0 207 60.5t117 167.5h116q-39 -147 -156.5 -234.5t-285.5 -87.5q-223 0 -364.5 148.5t-141.5 415zM211 598h737q-10 199 -110.5 303.5t-255.5 104.5 q-152 0 -254.5 -106.5t-116.5 -301.5zM305 1505h152l211 -280h-103z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1169" d="M96 532.5q0 266.5 136.5 415t349.5 148.5q215 0 348 -149.5t133 -440.5h-854q8 -217 117.5 -330t277.5 -113q121 0 207 60.5t117 167.5h116q-39 -147 -156.5 -234.5t-285.5 -87.5q-223 0 -364.5 148.5t-141.5 415zM211 598h737q-10 199 -110.5 303.5t-255.5 104.5 q-152 0 -254.5 -106.5t-116.5 -301.5zM502 1225l211 280h151l-260 -280h-102z" />
-<glyph unicode="&#xea;" horiz-adv-x="1169" d="M96 532.5q0 266.5 136.5 415t349.5 148.5q215 0 348 -149.5t133 -440.5h-854q8 -217 117.5 -330t277.5 -113q121 0 207 60.5t117 167.5h116q-39 -147 -156.5 -234.5t-285.5 -87.5q-223 0 -364.5 148.5t-141.5 415zM211 598h737q-10 199 -110.5 303.5t-255.5 104.5 q-152 0 -254.5 -106.5t-116.5 -301.5zM291 1225l223 280h127l221 -280h-108l-179 213l-174 -213h-110z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1169" d="M96 532.5q0 266.5 136.5 415t349.5 148.5q215 0 348 -149.5t133 -440.5h-854q8 -217 117.5 -330t277.5 -113q121 0 207 60.5t117 167.5h116q-39 -147 -156.5 -234.5t-285.5 -87.5q-223 0 -364.5 148.5t-141.5 415zM211 598h737q-10 199 -110.5 303.5t-255.5 104.5 q-152 0 -254.5 -106.5t-116.5 -301.5zM303 1331v144h129v-144h-129zM723 1331v144h129v-144h-129z" />
-<glyph unicode="&#xec;" horiz-adv-x="425" d="M-33 1505h152l211 -280h-103zM158 0v1065h110v-1065h-110z" />
-<glyph unicode="&#xed;" horiz-adv-x="425" d="M106 1225l211 280h152l-260 -280h-103zM158 0v1065h110v-1065h-110z" />
-<glyph unicode="&#xee;" horiz-adv-x="425" d="M-68 1225l224 280h127l221 -280h-109l-178 213l-174 -213h-111zM158 0v1065h110v-1065h-110z" />
-<glyph unicode="&#xef;" horiz-adv-x="425" d="M-57 1331v144h129v-144h-129zM158 0v1065h110v-1065h-110zM362 1331v144h130v-144h-130z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1124" d="M96 485q0 215 118 355.5t316 140.5q145 0 248 -76t137 -184q-18 352 -247 528l-105 -110h-125l152 159q-121 72 -305 105l14 98q215 -45 358 -133l101 107h125l-150 -158q293 -227 293 -672q0 -315 -115.5 -495.5t-363.5 -180.5q-205 0 -328 142.5t-123 373.5zM209 479 q0 -188 93 -300.5t245 -112.5q172 0 267 117.5t95 303.5q0 162 -97 281t-267 119q-150 0 -243 -102.5t-93 -305.5z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1132" d="M158 0v1065h92l12 -182q53 102 148.5 157.5t205.5 55.5q170 0 269.5 -99.5t99.5 -271.5v-725h-111v721q0 133 -74.5 206.5t-207.5 73.5q-127 0 -225.5 -95t-98.5 -244v-662h-110zM315 1282v102q86 61 160 62q61 0 124 -35t103 -35q68 0 156 70v-100q-84 -63 -160 -64 q-59 0 -120.5 35t-104.5 35q-70 0 -158 -70z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1173" d="M96 532q0 270 137.5 417t354.5 147q219 0 354 -146.5t135 -417t-135 -417t-352 -146.5t-355.5 148.5t-138.5 414.5zM211 532.5q0 -227.5 105.5 -350.5t271.5 -123q170 0 272.5 122t102.5 351.5t-102.5 351.5t-272.5 122q-168 0 -272.5 -123t-104.5 -350.5zM315 1505h152 l211 -280h-103z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1173" d="M96 532q0 270 137.5 417t354.5 147q219 0 354 -146.5t135 -417t-135 -417t-352 -146.5t-355.5 148.5t-138.5 414.5zM211 532.5q0 -227.5 105.5 -350.5t271.5 -123q170 0 272.5 122t102.5 351.5t-102.5 351.5t-272.5 122q-168 0 -272.5 -123t-104.5 -350.5zM496 1225 l211 280h151l-260 -280h-102z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1173" d="M96 532q0 270 137.5 417t354.5 147q219 0 354 -146.5t135 -417t-135 -417t-352 -146.5t-355.5 148.5t-138.5 414.5zM211 532.5q0 -227.5 105.5 -350.5t271.5 -123q170 0 272.5 122t102.5 351.5t-102.5 351.5t-272.5 122q-168 0 -272.5 -123t-104.5 -350.5zM297 1225 l223 280h127l221 -280h-108l-178 213l-174 -213h-111z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1173" d="M96 532q0 270 137.5 417t354.5 147q219 0 354 -146.5t135 -417t-135 -417t-352 -146.5t-355.5 148.5t-138.5 414.5zM211 532.5q0 -227.5 105.5 -350.5t271.5 -123q170 0 272.5 122t102.5 351.5t-102.5 351.5t-272.5 122q-168 0 -272.5 -123t-104.5 -350.5zM311 1282v102 q86 61 160 62q61 0 123.5 -35t103.5 -35q68 0 156 70v-100q-84 -63 -160 -64q-59 0 -120.5 35t-104.5 35q-70 0 -158 -70z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1173" d="M96 532q0 270 137.5 417t354.5 147q219 0 354 -146.5t135 -417t-135 -417t-352 -146.5t-355.5 148.5t-138.5 414.5zM211 532.5q0 -227.5 105.5 -350.5t271.5 -123q170 0 272.5 122t102.5 351.5t-102.5 351.5t-272.5 122q-168 0 -272.5 -123t-104.5 -350.5zM311 1331v144 h129v-144h-129zM731 1331v144h129v-144h-129z" />
-<glyph unicode="&#xf7;" d="M199 608v101h831v-101h-831zM543 131v162h141v-162h-141zM543 1024v164h141v-164h-141z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1173" d="M96 532q0 270 137.5 417t354.5 147q104 0 184 -33l105 227h106l-123 -270q217 -143 217 -488q0 -270 -135 -416.5t-352 -146.5q-100 0 -189 35l-102 -229h-106l120 272q-217 149 -217 485zM211 532q0 -272 149 -391l375 834q-68 31 -147 31q-168 0 -272.5 -123.5 t-104.5 -350.5zM440 90q68 -31 148 -31q170 0 272.5 122t102.5 351q0 272 -148 394z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1122" d="M147 344v721h111v-721q0 -137 74 -209t205 -72q139 0 228 99.5t89 249.5v653h111v-1065h-91l-14 170q-55 -98 -149.5 -149.5t-198.5 -51.5q-164 0 -264.5 96.5t-100.5 278.5zM295 1505h151l211 -280h-102z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1122" d="M147 344v721h111v-721q0 -137 74 -209t205 -72q139 0 228 99.5t89 249.5v653h111v-1065h-91l-14 170q-55 -98 -149.5 -149.5t-198.5 -51.5q-164 0 -264.5 96.5t-100.5 278.5zM459 1225l211 280h151l-260 -280h-102z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1122" d="M147 344v721h111v-721q0 -137 74 -209t205 -72q139 0 228 99.5t89 249.5v653h111v-1065h-91l-14 170q-55 -98 -149.5 -149.5t-198.5 -51.5q-164 0 -264.5 96.5t-100.5 278.5zM270 1225l224 280h127l221 -280h-109l-178 213l-174 -213h-111z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1122" d="M147 344v721h111v-721q0 -137 74 -209t205 -72q139 0 228 99.5t89 249.5v653h111v-1065h-91l-14 170q-55 -98 -149.5 -149.5t-198.5 -51.5q-164 0 -264.5 96.5t-100.5 278.5zM281 1331v144h129v-144h-129zM700 1331v144h129v-144h-129z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1017" d="M35 1065h119l381 -979l337 979h111l-375 -1073q-84 -240 -136 -315.5t-161 -75.5q-49 0 -110 20v90q53 -18 104 -18q66 0 99.5 58.5t97.5 248.5h-43zM408 1225l210 280h152l-260 -280h-102z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1187" d="M158 -369v1844h110v-609q53 104 149.5 167t225.5 63q197 0 323 -138.5t126 -412.5q0 -276 -128 -426t-329 -150q-254 0 -367 221v-559h-110zM260 532q0 -221 96.5 -345t261.5 -124q158 0 258.5 121t100.5 363q0 231 -99.5 342.5t-256.5 111.5q-154 0 -257.5 -118 t-103.5 -351z" />
-<glyph unicode="&#xff;" horiz-adv-x="1017" d="M35 1065h119l381 -979l337 979h111l-375 -1073q-84 -240 -136 -315.5t-161 -75.5q-49 0 -110 20v90q53 -18 104 -18q66 0 99.5 58.5t97.5 248.5h-43zM240 1331v144h129v-144h-129zM659 1331v144h129v-144h-129z" />
-<glyph unicode="&#x152;" horiz-adv-x="1937" d="M106 739q0 369 194 567.5t478 198.5q109 0 215 -30h828v-101h-715v-575h655v-99h-655v-600h715v-100h-832q-104 -25 -219 -25q-285 0 -474.5 198.5t-189.5 565.5zM225 739q0 -322 152.5 -493.5t392.5 -171.5q123 0 219 32v1264q-98 37 -211 37q-246 0 -399.5 -176.5 t-153.5 -491.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="2039" d="M96 532q0 281 141.5 422.5t350.5 141.5q145 0 260 -76t172 -221q61 143 176 220t246 77q209 0 344 -141.5t139 -448.5h-854q8 -221 125 -333t270 -112q113 0 202 62.5t120 173.5h119q-41 -158 -160 -243t-285 -85q-139 0 -260 79t-182 222q-59 -147 -172 -224t-258 -77 q-213 0 -353.5 143.5t-140.5 419.5zM209 532.5q0 -231.5 107.5 -353.5t271.5 -122q162 0 268.5 124t106.5 351q0 233 -105.5 353.5t-269.5 120.5q-168 0 -273.5 -121t-105.5 -352.5zM1073 596h737q-12 201 -110 305.5t-256 104.5q-147 0 -252 -105.5t-119 -304.5z" />
-<glyph unicode="&#x178;" horiz-adv-x="1275" d="M14 1475h125l496 -791q170 262 506 791h119l-566 -897v-578h-116v580zM360 1679v144h129v-144h-129zM780 1679v144h129v-144h-129z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="690" d="M59 1225l224 280h127l221 -280h-109l-178 213l-174 -213h-111z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="665" d="M61 1282v102q86 61 160 62q61 0 124 -35t104 -35q68 0 155 70v-100q-84 -63 -160 -64q-59 0 -120.5 35t-104.5 35q-70 0 -158 -70z" />
-<glyph unicode="&#x2013;" horiz-adv-x="856" d="M18 608v101h820v-101h-820z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1265" d="M18 608v101h1229v-101h-1229z" />
-<glyph unicode="&#x2018;" horiz-adv-x="565" d="M201 1024v150q0 248 215 301v-74q-61 -20 -89 -69.5t-28 -143.5h53v-164h-151z" />
-<glyph unicode="&#x2019;" horiz-adv-x="565" d="M147 1024v74q61 20 89 69.5t28 143.5h-53v164h151v-150q0 -248 -215 -301z" />
-<glyph unicode="&#x201a;" horiz-adv-x="565" d="M147 -213q117 41 117 213h-53v162h151v-150q0 -246 -215 -297v72z" />
-<glyph unicode="&#x201c;" horiz-adv-x="854" d="M207 1024v150q0 248 213 301v-74q-117 -41 -117 -213h55v-164h-151zM489 1024v150q0 248 216 301v-74q-61 -20 -89 -69.5t-28 -143.5h53v-164h-152z" />
-<glyph unicode="&#x201d;" horiz-adv-x="849" d="M147 1024v74q61 20 89 69.5t28 143.5h-53v164h151v-150q0 -248 -215 -301zM432 1024v74q117 41 117 213h-55v164h151v-150q0 -248 -213 -301z" />
-<glyph unicode="&#x201e;" horiz-adv-x="849" d="M147 -213q117 41 117 213h-53v162h151v-150q0 -246 -215 -297v72zM432 -213q117 43 117 213h-55v162h151v-150q0 -244 -213 -297v72z" />
-<glyph unicode="&#x2022;" horiz-adv-x="606" d="M168 518v266h272v-266h-272z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1392" d="M217 0v164h137v-164h-137zM629 0v164h137v-164h-137zM1038 0v164h138v-164h-138z" />
-<glyph unicode="&#x2039;" horiz-adv-x="591" d="M129 645l248 420h84l-201 -424l180 -457h-84z" />
-<glyph unicode="&#x203a;" horiz-adv-x="591" d="M129 1065h86l246 -420l-225 -461h-86l180 457z" />
-<glyph unicode="&#x20ac;" d="M35 520l24 94h123q-2 31 -2 102.5t2 104.5h-147l24 94h134q35 285 177 417t349 132q193 0 319.5 -94t155.5 -258h-115q-25 121 -121 187.5t-241 66.5q-156 0 -265.5 -106.5t-140.5 -344.5h619l-25 -94h-604q-4 -33 -4 -104.5t4 -102.5h547l-25 -94h-510 q29 -236 139.5 -344t274.5 -108q145 0 236.5 65.5t115.5 188.5h115q-29 -164 -158 -258.5t-319 -94.5q-207 0 -347.5 136.5t-176.5 414.5h-158z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1691" d="M66 1393v82h823l252 -699l243 699h140v-811h-90v712l-250 -712h-90l-260 712v-712h-86v729h-295v-729h-93v729h-294z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1065" d="M0 1065h1065v-1065h-1065v1065z" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1107" d="M55 969v96h158v156q0 133 80 206.5t235 73.5q117 0 254 -37v-94q-141 37 -243 37q-111 0 -163 -43t-52 -139v-160h626v-1065h-110v969h-516v-969h-111v969h-158z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1118" d="M55 971v94h158v113q0 324 346 323q150 0 293 -39l109 13v-1475h-111v1366q-141 43 -283 43q-133 0 -188 -54.5t-55 -170.5v-119h237v-94h-237v-971h-111v971h-158z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="1740" d="M55 969v96h158v94q0 330 344 330q166 0 356 -74q84 90 252 90q131 0 252 -39v-94q-127 39 -241 39q-217 0 -218 -182v-164h629v-1065h-110v969h-519v-969h-110v969h-524v-969h-111v969h-158zM324 1065h524v158q0 68 20 114q-145 61 -303 62q-135 0 -188 -56.5t-53 -177.5 v-100z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="1755" d="M55 971v94h158v94q0 332 344 332q176 0 367 -80q84 94 272 94q145 0 293 -41l108 13v-1477h-110v1368q-141 43 -281 43q-135 0 -190 -53t-55 -172v-121h237v-94h-237v-971h-111v971h-526v-971h-111v971h-158zM324 1065h526v117q0 94 29 153q-145 63 -314 64 q-133 0 -187 -56.5t-54 -177.5v-100z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.ttf b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.ttf
deleted file mode 100644
index 382713f2d..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.woff b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.woff
deleted file mode 100644
index 8e6ac0b0f..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansextralight-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.eot b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.eot
deleted file mode 100644
index f1664ad24..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.eot
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.svg b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.svg
deleted file mode 100644
index 2ac7c0b05..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.svg
+++ /dev/null
@@ -1,232 +0,0 @@
-<?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 webfont generated by Font Squirrel.
-Copyright : Copyright c 2010 by Ralph du Carrois Erik Spiekermann Botio Nikoltchev All rights reserved
-Designer : Ralph du Carrois Erik Spiekermann Botio Nikoltchev
-Foundry : Ralph du Carrois Erik Spiekermann Botio Nikoltchev
-Foundry URL : httpedenspiekermanncom
-</metadata>
-<defs>
-<font id="CiscoSansRegular" horiz-adv-x="1228" >
-<font-face units-per-em="2048" ascent="1618" descent="-430" />
-<missing-glyph horiz-adv-x="614" />
-<glyph unicode=" " horiz-adv-x="614" />
-<glyph unicode="&#x09;" horiz-adv-x="614" />
-<glyph unicode="&#xa0;" horiz-adv-x="614" />
-<glyph unicode="!" horiz-adv-x="583" d="M174 0v238h236v-238h-236zM174 1475h236l-41 -983h-154z" />
-<glyph unicode="&#x22;" d="M164 1317v188h205v-188l-31 -313h-143zM492 1317v188h204v-188l-30 -313h-144z" />
-<glyph unicode="#" d="M41 369v153h168l33 389h-160v154h174l33 369h172l-33 -369h432l33 369h172l-33 -369h156v-154h-170l-33 -389h162v-153h-176l-31 -369h-172l31 369h-432l-31 -369h-172l31 369h-154zM381 522h432l33 389h-432z" />
-<glyph unicode="$" d="M51 399h215q39 -258 357 -258q168 0 257 69t89 179q0 104 -86 165.5t-355 131.5q-229 59 -327.5 157.5t-98.5 250.5q0 145 111 246.5t315 119.5v240h183v-240q199 -20 315.5 -118.5t140.5 -264.5h-215q-39 215 -350 215q-147 0 -219 -51t-72 -135q0 -88 69 -143.5 t296 -114.5q272 -70 387 -179.5t115 -271t-124 -282.5t-343 -142v-249h-183v251q-193 20 -320.5 129t-156.5 295z" />
-<glyph unicode="%" horiz-adv-x="1722" d="M72 1118q0 164 102 255t245.5 91t247 -91t103.5 -255t-103.5 -255t-247 -91t-245.5 91t-102 255zM238 1118.5q0 -104.5 50 -154t132 -49.5t134 49.5t52 154t-52 153.5t-134 49t-132 -49t-50 -153.5zM365 0l782 1434h196l-782 -1434h-196zM952 315.5q0 163.5 102.5 255 t246 91.5t247 -91.5t103.5 -255t-103.5 -255t-247 -91.5t-246 91.5t-102.5 255zM1118 315.5q0 -104.5 50.5 -153.5t132 -49t134 49t52.5 153.5t-52.5 153.5t-134 49t-132 -49t-50.5 -153.5z" />
-<glyph unicode="&#x26;" horiz-adv-x="1402" d="M82 352q0 147 73.5 240.5t225.5 177.5q-109 111 -148.5 182.5t-39.5 161.5q0 137 111.5 243.5t279.5 106.5t276.5 -97t108.5 -220q0 -260 -301 -412l342 -323q70 133 90 284l180 -22q-27 -213 -139 -387l200 -189l-145 -129l-176 170q-180 -170 -434 -170 q-223 0 -363.5 105.5t-140.5 277.5zM287 367q0 -106 82 -167t231 -61q172 0 297 121l-399 391q-106 -59 -158.5 -125.5t-52.5 -158.5zM383 1116q0 -66 31.5 -117t128.5 -145q131 70 186 134.5t55 152.5q0 63 -51 113.5t-145 50.5q-100 0 -152.5 -58.5t-52.5 -130.5z" />
-<glyph unicode="'" horiz-adv-x="552" d="M174 1317v188h205v-188l-31 -313h-143z" />
-<glyph unicode="(" horiz-adv-x="696" d="M133 655q0 303 98.5 559t241.5 445h162q-303 -463 -303 -1003.5t303 -1003.5h-162q-143 188 -241.5 444t-98.5 559z" />
-<glyph unicode=")" horiz-adv-x="696" d="M61 -348q303 463 303.5 1003.5t-303.5 1003.5h162q143 -188 241.5 -444.5t98.5 -559.5t-98 -559t-242 -444h-162z" />
-<glyph unicode="*" horiz-adv-x="962" d="M92 1157l60 172l272 -125l-35 301h180l-34 -303l276 127l59 -172l-301 -61l205 -222l-147 -106l-148 262l-149 -264l-146 108l205 224z" />
-<glyph unicode="+" d="M184 571v174h338v345h187v-345h335v-174h-335v-342h-187v342h-338z" />
-<glyph unicode="," horiz-adv-x="614" d="M158 -205q127 27 127 205h-97v238h238v-207q0 -160 -78 -242t-190 -96v102z" />
-<glyph unicode="-" horiz-adv-x="1105" d="M184 573v175h738v-175h-738z" />
-<glyph unicode="." horiz-adv-x="614" d="M188 0v238h238v-238h-238z" />
-<glyph unicode="/" horiz-adv-x="819" d="M61 -184l510 1689h187l-510 -1689h-187z" />
-<glyph unicode="0" d="M102 721q0 377 140.5 560t372 183t371.5 -183t140 -560q0 -371 -141 -561.5t-370.5 -190.5t-371 190.5t-141.5 561.5zM303 721q0 -588 311.5 -588t311.5 588q0 297 -77 438t-234.5 141t-234.5 -141t-77 -438z" />
-<glyph unicode="1" d="M272 1063v203l324 168h192v-1434h-194v1229z" />
-<glyph unicode="2" d="M123 1059q25 176 161 290.5t343 114.5q203 0 335 -110.5t132 -296.5q0 -143 -72 -260t-270 -305l-328 -312h663v-180h-929v180l467 449q152 145 210 235t58 191q0 111 -72.5 177t-197.5 66q-123 0 -202 -64.5t-91 -174.5h-207z" />
-<glyph unicode="3" d="M100 356h209q51 -221 303 -221q145 0 228.5 72t83.5 188q0 135 -85 203t-198 68h-119v170h115q92 0 164.5 62.5t72.5 176.5q0 109 -80.5 167t-193.5 58q-119 0 -195.5 -56t-93.5 -148h-207q27 168 164.5 268t341.5 100q195 0 330 -96t135 -278q0 -115 -71.5 -203 t-186.5 -125q131 -29 219 -124t88 -247q0 -186 -139 -303t-369 -117q-221 0 -356 104.5t-160 280.5z" />
-<glyph unicode="4" d="M90 270v183l615 981h204v-996h232v-168h-232v-270h-190v270h-629zM309 438h410v678z" />
-<glyph unicode="5" d="M104 348h209q20 -92 99.5 -152.5t203.5 -60.5q135 0 223.5 90t88.5 248q0 156 -83 241t-224 85q-176 0 -287 -131h-174l30 766h881v-166h-702l-17 -420q131 104 314 104q199 0 331.5 -128t132.5 -359q0 -209 -139 -352.5t-377 -143.5q-211 0 -347 111.5t-163 267.5z" />
-<glyph unicode="6" d="M143 659q0 231 43 395.5t120 250.5t165 122.5t195 36.5q164 0 281.5 -82t150.5 -221h-217q-18 66 -74.5 105t-142.5 39q-297 0 -326 -553q59 96 152.5 141t189.5 45q207 0 326.5 -133t119.5 -348q0 -231 -143 -359.5t-336 -128.5q-248 0 -376 177t-128 513zM358 463 q0 -156 81 -243t208 -87q121 0 201 84t80 229q0 152 -77 240t-206 88q-137 0 -212 -89t-75 -222z" />
-<glyph unicode="7" d="M154 1257v177h911v-177l-586 -1257h-223l600 1257h-702z" />
-<glyph unicode="8" d="M92 373q0 150 82 242t199 137q-227 106 -228 329q0 186 135.5 284.5t333.5 98.5q201 0 335 -92t134 -276q0 -207 -235 -332q289 -127 289 -377q0 -184 -144.5 -301t-378 -117t-378 114t-144.5 290zM301 387q0 -111 81 -183.5t232.5 -72.5t232.5 69.5t81 186.5 q0 80 -30 136.5t-93.5 89t-106.5 46t-127 31.5q-111 -33 -190.5 -106.5t-79.5 -196.5zM338 1092q0 -76 30.5 -131.5t84 -84t99.5 -41t103 -20.5q231 90 232 277q0 98 -79 158.5t-194 60.5q-119 0 -197.5 -56.5t-78.5 -162.5z" />
-<glyph unicode="9" d="M143 977q0 219 136.5 353t343.5 134q504 0 503 -690q0 -805 -528 -805q-166 0 -282.5 83t-151.5 224h217q43 -147 225 -147q141 0 225 126t99 425q-59 -96 -151.5 -140t-188.5 -44q-201 0 -324 129t-123 352zM342 987q0 -156 79 -242t204 -86q137 0 211.5 89.5 t74.5 222.5q0 156 -80.5 242.5t-207.5 86.5q-123 0 -202 -84t-79 -229z" />
-<glyph unicode=":" horiz-adv-x="614" d="M188 0v238h238v-238h-238zM188 827v238h238v-238h-238z" />
-<glyph unicode=";" horiz-adv-x="614" d="M158 -205q127 27 127 205h-97v238h238v-207q0 -160 -78 -242t-190 -96v102zM188 827v238h238v-238h-238z" />
-<glyph unicode="&#x3c;" d="M184 563v195l860 389v-197l-665 -284v-11l665 -284v-197z" />
-<glyph unicode="=" d="M184 362v175h860v-175h-860zM184 782v174h860v-174h-860z" />
-<glyph unicode="&#x3e;" d="M184 174v197l666 284v11l-666 284v197l860 -389v-195z" />
-<glyph unicode="?" horiz-adv-x="1193" d="M102 1096q31 197 170.5 303t358.5 106q215 0 348 -109.5t133 -271.5q0 -258 -301 -426q-76 -41 -102.5 -100t-26.5 -170h-195q0 176 52.5 273.5t189.5 166.5q172 88 172 256q0 94 -75.5 151.5t-200.5 57.5q-274 0 -310 -237h-213zM471 0v238h236v-238h-236z" />
-<glyph unicode="@" horiz-adv-x="1855" d="M102 641q0 182 54.5 332.5t141.5 247t199.5 163t224.5 94t222 27.5q211 0 391.5 -75.5t299 -236.5t118.5 -374q0 -262 -115.5 -443t-298.5 -181q-88 0 -151.5 59t-71.5 131q-29 -59 -109.5 -114.5t-179.5 -55.5q-127 0 -222 87t-95 267q0 248 112.5 406t319.5 158 q59 0 113.5 -32t77.5 -87l36 104h146l-76 -581q-6 -49 -6 -84q0 -109 100 -109q92 0 162 131t70 342q0 246 -174 389.5t-447 143.5q-86 0 -173 -22.5t-175 -77t-154.5 -134.5t-108.5 -202.5t-42 -274.5q0 -166 57.5 -297t154.5 -210t214 -119t246 -40q154 0 313 54v-160 q-145 -53 -330 -53q-164 0 -312.5 52t-268 151.5t-191.5 261t-72 362.5zM696 567q0 -102 50.5 -151t119.5 -49q100 0 166 109.5t66 324.5q0 184 -142 184q-125 0 -192.5 -117t-67.5 -301z" />
-<glyph unicode="A" horiz-adv-x="1445" d="M0 0l606 1475h236l604 -1475h-232l-145 373h-702l-148 -373h-219zM434 543h567l-280 723z" />
-<glyph unicode="B" horiz-adv-x="1335" d="M154 0v1475h530q252 0 383 -102.5t131 -289.5q0 -104 -67.5 -190t-169.5 -113q119 -20 200.5 -121.5t81.5 -242.5q0 -197 -144.5 -306.5t-418.5 -109.5h-526zM362 170h349q315 0 315 246q0 276 -307 276h-357v-522zM362 852h351q131 0 202.5 62.5t71.5 168.5 q0 111 -75.5 172.5t-211.5 61.5h-338v-465z" />
-<glyph unicode="C" horiz-adv-x="1492" d="M92 737.5q0 364.5 190.5 566t501.5 201.5q258 0 433.5 -147.5t191.5 -356.5h-211q-20 152 -132 241t-282 89q-219 0 -349 -151.5t-130 -442.5q0 -281 128 -436.5t339 -155.5q178 0 298 106.5t130 268.5h211q-12 -223 -191.5 -387t-451.5 -164q-313 0 -494.5 202 t-181.5 566.5z" />
-<glyph unicode="D" horiz-adv-x="1449" d="M154 0v1475h479q338 0 531.5 -184.5t193.5 -553.5q0 -350 -204 -543.5t-536 -193.5h-464zM362 172h277q244 0 376 144.5t132 420.5q0 285 -135 428.5t-377 143.5h-273v-1137z" />
-<glyph unicode="E" horiz-adv-x="1175" d="M154 0v1475h919v-177h-711v-462h652v-172h-652v-488h711v-176h-919z" />
-<glyph unicode="F" horiz-adv-x="1148" d="M154 0v1475h903v-177h-695v-501h623v-174h-623v-623h-208z" />
-<glyph unicode="G" horiz-adv-x="1511" d="M92 739q0 365 190.5 565.5t485.5 200.5q248 0 416 -132t194 -331h-204q-29 135 -136.5 212t-269.5 77q-203 0 -333 -152.5t-130 -439.5q0 -283 135 -440.5t330 -157.5q176 0 299 104.5t123 264.5v115h-432v168h620v-793h-153l-29 176q-70 -98 -188.5 -152.5t-264.5 -54.5 q-285 0 -469 205t-184 565z" />
-<glyph unicode="H" horiz-adv-x="1447" d="M154 0v1475h208v-641h721v641h211v-1475h-211v657h-721v-657h-208z" />
-<glyph unicode="I" horiz-adv-x="516" d="M154 0v1475h208v-1475h-208z" />
-<glyph unicode="J" horiz-adv-x="1105" d="M51 414h211q12 -268 250 -269q115 0 178.5 76t63.5 213v1041h209v-1043q0 -223 -120 -343t-339 -120q-199 0 -323 125t-130 320z" />
-<glyph unicode="K" horiz-adv-x="1294" d="M154 0v1475h208v-656l601 656h258l-670 -705l733 -770h-276l-646 694v-694h-208z" />
-<glyph unicode="L" horiz-adv-x="1130" d="M154 0v1475h211v-1289h694v-186h-905z" />
-<glyph unicode="M" horiz-adv-x="1783" d="M154 0v1475h290l469 -1229l443 1229h274v-1475h-196v1145l-426 -1145h-197l-455 1155v-1155h-202z" />
-<glyph unicode="N" horiz-adv-x="1472" d="M154 0v1475h276l703 -1225v1225h186v-1475h-264l-711 1235v-1235h-190z" />
-<glyph unicode="O" horiz-adv-x="1585" d="M92 737q0 360 200 564t503 204q305 0 501.5 -200.5t196.5 -567.5q0 -356 -196.5 -562t-503.5 -206q-313 0 -507 205t-194 563zM305 737.5q0 -284.5 133 -441.5t354.5 -157t354.5 157t133 441.5t-133 441t-354.5 156.5t-354.5 -156.5t-133 -441z" />
-<glyph unicode="P" horiz-adv-x="1292" d="M154 0v1475h479q279 0 428 -123t149 -357q0 -225 -148.5 -347t-436.5 -122h-263v-526h-208zM362 696h267q190 0 277 76t87 223.5t-92 228.5t-264 81h-275v-609z" />
-<glyph unicode="Q" horiz-adv-x="1585" d="M92 737q0 360 200 564t503 204q305 0 501.5 -200.5t196.5 -567.5q0 -393 -244 -606l238 -297l-168 -110l-217 311q-141 -66 -309 -66q-313 0 -507 205t-194 563zM305 737.5q0 -284.5 133 -441.5t354.5 -157t354.5 157t133 441.5t-133 441t-354.5 156.5t-354.5 -156.5 t-133 -441z" />
-<glyph unicode="R" horiz-adv-x="1335" d="M154 0v1475h477q281 0 432 -120t151 -343q0 -295 -296 -408l397 -604h-246l-356 561h-351v-561h-208zM362 731h279q170 0 263 75t93 206q0 293 -362 293h-273v-574z" />
-<glyph unicode="S" horiz-adv-x="1337" d="M72 414h215q18 -127 117.5 -200t261.5 -73q176 0 273 74t97 184q0 74 -33.5 119t-133 90t-298.5 101q-250 70 -349 166t-99 251q0 166 140 272.5t388 106.5q240 0 398.5 -106.5t185.5 -292.5h-215q-16 109 -110.5 168t-258.5 59q-160 0 -239.5 -55t-79.5 -143 q0 -90 71.5 -143.5t315.5 -121.5q301 -84 413.5 -186t112.5 -276q0 -180 -155.5 -309.5t-419.5 -129.5q-240 0 -403.5 121t-194.5 324z" />
-<glyph unicode="T" horiz-adv-x="1234" d="M20 1288v187h1194v-187h-495v-1288h-209v1288h-490z" />
-<glyph unicode="U" horiz-adv-x="1447" d="M143 494v981h209v-1000q0 -150 98.5 -240t276.5 -90t276.5 90.5t98.5 239.5v1000h203v-981q0 -242 -158 -383.5t-422 -141.5q-266 0 -424 142.5t-158 382.5z" />
-<glyph unicode="V" horiz-adv-x="1325" d="M0 1475h221l447 -1278l452 1278h205l-528 -1475h-260z" />
-<glyph unicode="W" horiz-adv-x="1972" d="M10 1475h213l314 -1227l337 1227h261l319 -1223l315 1223h193l-389 -1475h-242l-334 1249l-344 -1249h-256z" />
-<glyph unicode="X" horiz-adv-x="1335" d="M20 0l533 762l-496 713h246l375 -549l383 549h237l-514 -707l531 -768h-250l-395 596l-414 -596h-236z" />
-<glyph unicode="Y" horiz-adv-x="1288" d="M0 1475h229l416 -709l430 709h213l-540 -889v-586h-207v586z" />
-<glyph unicode="Z" horiz-adv-x="1308" d="M82 0v182l897 1112h-850v181h1098v-177l-899 -1118h878v-180h-1124z" />
-<glyph unicode="[" horiz-adv-x="696" d="M154 -348v2007h430v-164h-242v-1679h242v-164h-430z" />
-<glyph unicode="\" horiz-adv-x="819" d="M61 1505h187l510 -1689h-187z" />
-<glyph unicode="]" horiz-adv-x="696" d="M113 -184h241v1679h-241v164h430v-2007h-430v164z" />
-<glyph unicode="^" horiz-adv-x="1024" d="M53 819l367 656h184l367 -656h-213l-246 457l-246 -457h-213z" />
-<glyph unicode="_" d="M61 -92h1106v-174h-1106v174z" />
-<glyph unicode="`" horiz-adv-x="585" d="M61 1505h254l209 -280h-176z" />
-<glyph unicode="a" horiz-adv-x="1126" d="M82 274q0 147 95 232.5t308 122.5l312 53v53q0 98 -63.5 151.5t-182.5 53.5q-217 0 -240 -172h-209q16 150 138 239t319 89q205 0 319.5 -100.5t114.5 -268.5v-727h-162l-24 145q-125 -176 -356 -176q-172 0 -270.5 86t-98.5 219zM291 295q0 -78 53 -119t154 -41 q115 0 207 75t92 181v137l-265 -47q-137 -23 -189 -66.5t-52 -119.5z" />
-<glyph unicode="b" horiz-adv-x="1247" d="M143 0v1475h197v-557q125 178 356 178q213 0 341 -146.5t128 -408.5q0 -270 -133 -421t-350 -151q-227 0 -346 172l-31 -141h-162zM330 545q0 -190 88 -299t233 -109q143 0 226.5 102.5t83.5 305.5q0 188 -85 285.5t-224.5 97.5t-230.5 -100.5t-91 -282.5z" />
-<glyph unicode="c" horiz-adv-x="1134" d="M82 524q0 264 137 418t365 154q184 0 309 -92.5t151 -253.5h-217q-20 86 -82.5 133t-156.5 47q-137 0 -217 -103.5t-80 -308.5q0 -186 84 -284.5t215 -98.5q100 0 166.5 54.5t81.5 152.5h215q-23 -160 -149 -266.5t-318 -106.5q-221 0 -362.5 146.5t-141.5 408.5z" />
-<glyph unicode="d" horiz-adv-x="1247" d="M82 526q0 279 131 424.5t352 145.5t342 -166v545h197v-1475h-162l-35 150q-123 -180 -354 -181q-209 0 -340 147.5t-131 409.5zM287 522q0 -186 85 -285.5t224 -99.5q150 0 236 106.5t86 276.5q0 193 -86.5 300.5t-235.5 107.5q-145 0 -227 -101.5t-82 -304.5z" />
-<glyph unicode="e" horiz-adv-x="1185" d="M82 532q0 270 141.5 417t370.5 147q233 0 366.5 -148.5t133.5 -458.5h-811q12 -178 100 -266t227 -88q94 0 164 48t94 124h213q-41 -152 -165.5 -245t-311.5 -93q-236 0 -379 145.5t-143 417.5zM291 645h602q-10 145 -89 219t-206 74q-121 0 -202.5 -75t-104.5 -218z" />
-<glyph unicode="f" horiz-adv-x="659" d="M41 897v168h158v149q0 131 81.5 211t215.5 80q80 0 174 -24v-170q-98 25 -162 24q-53 0 -83 -29.5t-30 -78.5v-162h230v-168h-230v-897h-196v897h-158z" />
-<glyph unicode="g" horiz-adv-x="1247" d="M82 557q0 248 132 393.5t351 145.5q229 0 346 -172l31 141h162v-1042q0 -186 -130 -304t-362 -118q-209 0 -331.5 87t-149.5 240h211q31 -172 264 -172q147 0 224 72t77 205v137q-119 -139 -354 -139q-197 0 -334 141t-137 385zM287 553q0 -164 88 -259t221 -95 q152 0 237 93t85 255q0 182 -87.5 281.5t-234.5 99.5q-141 0 -225 -95.5t-84 -279.5z" />
-<glyph unicode="h" horiz-adv-x="1161" d="M143 0v1475h197v-531q117 152 311 152q176 0 276.5 -104.5t100.5 -297.5v-694h-197v692q0 236 -227 236q-113 0 -188.5 -75t-75.5 -204v-649h-197z" />
-<glyph unicode="i" horiz-adv-x="483" d="M131 1243v232h221v-232h-221zM143 0v1065h197v-1065h-197z" />
-<glyph unicode="j" horiz-adv-x="483" d="M-100 -213q82 -18 123 -18q68 0 94 28.5t26 106.5v1161h197v-1171q0 -133 -76 -213t-211 -80q-78 0 -153 24v162zM131 1243v232h221v-232h-221z" />
-<glyph unicode="k" horiz-adv-x="1064" d="M143 0v1475h197v-824l418 414h258l-479 -463l538 -602h-262l-473 537v-537h-197z" />
-<glyph unicode="l" horiz-adv-x="483" d="M143 0v1475h197v-1475h-197z" />
-<glyph unicode="m" horiz-adv-x="1792" d="M143 0v1065h162l21 -125q109 156 313 156q223 0 313 -168q106 168 346 168q168 0 264.5 -98.5t96.5 -284.5v-713h-197v698q0 119 -51 174.5t-156 55.5q-115 0 -185.5 -82t-70.5 -197v-649h-196v698q0 121 -51.5 175.5t-155.5 54.5q-106 0 -181 -79t-75 -194v-655h-197z " />
-<glyph unicode="n" horiz-adv-x="1161" d="M143 0v1065h162l23 -135q119 166 323 166q176 0 276.5 -104.5t100.5 -297.5v-694h-197v692q0 236 -227 236q-111 0 -187.5 -74t-76.5 -197v-657h-197z" />
-<glyph unicode="o" horiz-adv-x="1214" d="M82 532q0 274 148.5 419t377.5 145q231 0 378 -144.5t147 -419.5q0 -270 -145.5 -416.5t-381.5 -146.5q-231 0 -377.5 147.5t-146.5 415.5zM287 532.5q0 -192.5 90 -298t233 -105.5q145 0 231.5 104.5t86.5 298.5q0 197 -88 300.5t-232 103.5q-141 0 -231 -105.5 t-90 -298z" />
-<glyph unicode="p" horiz-adv-x="1247" d="M143 -369v1434h162l31 -139q131 170 360 170q213 0 341 -146.5t128 -408.5q0 -270 -133 -421t-350 -151q-227 0 -342 168v-506h-197zM330 545q0 -190 88 -299t233 -109q143 0 226.5 102.5t83.5 305.5q0 188 -85 285.5t-224.5 97.5t-230.5 -100.5t-91 -282.5z" />
-<glyph unicode="q" horiz-adv-x="1247" d="M82 526q0 279 131 424.5t352 145.5q227 0 348 -160l29 129h162v-1434h-197v516q-125 -178 -354 -178q-209 0 -340 147.5t-131 409.5zM287 522q0 -186 85 -285.5t224 -99.5q150 0 236 106.5t86 276.5q0 193 -86.5 300.5t-235.5 107.5q-145 0 -227 -101.5t-82 -304.5z" />
-<glyph unicode="r" horiz-adv-x="729" d="M143 0v1065h162l27 -158q90 188 270 189q59 0 117 -15v-196q-70 18 -125 18q-111 0 -182.5 -90t-71.5 -278v-535h-197z" />
-<glyph unicode="s" horiz-adv-x="1046" d="M61 305h201q33 -180 260 -180q117 0 180.5 46t63.5 118q0 37 -15.5 64.5t-37 46t-67.5 35t-82 25.5t-107 25q-186 41 -268.5 115t-82.5 193q0 139 108 221t306 82q178 0 294 -83t142 -229h-200q-35 156 -238 156q-106 0 -159.5 -36t-53.5 -93q0 -63 49 -97t199 -67 q211 -47 311.5 -119.5t100.5 -224.5q0 -150 -119 -242t-326 -92q-199 0 -322 91t-137 245z" />
-<glyph unicode="t" horiz-adv-x="659" d="M31 897v168h157l13 256h184v-256h229v-168h-229v-637q0 -119 113 -119q53 0 120 17v-168q-76 -20 -145 -21q-137 0 -211 80t-74 215v633h-157z" />
-<glyph unicode="u" horiz-adv-x="1153" d="M133 371v694h197v-698q0 -229 221 -230q127 0 194.5 81t67.5 198v649h197v-1065h-162l-23 123q-113 -154 -319 -154q-170 0 -271.5 101.5t-101.5 300.5z" />
-<glyph unicode="v" horiz-adv-x="1052" d="M20 1065h216l294 -905l297 905h205l-375 -1065h-266z" />
-<glyph unicode="w" horiz-adv-x="1658" d="M31 1065h205l229 -856l254 856h235l250 -852l228 852h196l-311 -1065h-227l-259 842l-253 -842h-236z" />
-<glyph unicode="x" horiz-adv-x="1083" d="M20 0l398 553l-373 512h236l254 -358l241 358h225l-356 -498l418 -567h-240l-288 412l-283 -412h-232z" />
-<glyph unicode="y" horiz-adv-x="1052" d="M20 1065h213l302 -905l301 905h196l-370 -1079q-70 -203 -141.5 -294t-207.5 -91q-53 0 -127 18v160q57 -14 103 -15q66 0 100.5 48.5t85.5 187.5h-63z" />
-<glyph unicode="z" horiz-adv-x="987" d="M61 0v186l633 713h-602v166h834v-186l-633 -711h633v-168h-865z" />
-<glyph unicode="{" horiz-adv-x="696" d="M61 569v176q82 0 135.5 44.5t53.5 136.5v381q0 178 89 265t286 87v-154q-115 0 -152 -44t-37 -144v-359q0 -240 -174 -301q174 -61 174 -301v-358q0 -100 37 -144t152 -44v-154q-197 0 -286 87t-89 265v381q0 92 -53.5 136t-135.5 44z" />
-<glyph unicode="|" horiz-adv-x="737" d="M281 -287v1895h176v-1895h-176z" />
-<glyph unicode="}" horiz-adv-x="696" d="M72 -190q115 0 151.5 44t36.5 144v358q0 240 174 301q-174 61 -174 301v359q0 100 -37 144t-151 44v154q197 0 285.5 -87t88.5 -265v-381q0 -92 53.5 -136.5t135.5 -44.5v-176q-82 0 -135.5 -44t-53.5 -136v-381q0 -178 -89 -265t-285 -87v154z" />
-<glyph unicode="~" d="M184 537v186q102 82 246 82q88 0 204 -56.5t175 -56.5q129 0 235 92v-186q-102 -82 -245 -82q-88 0 -205 56.5t-176 56.5q-128 0 -234 -92z" />
-<glyph unicode="&#xa1;" horiz-adv-x="583" d="M174 -369l41 983h154l41 -983h-236zM174 868v238h236v-238h-236z" />
-<glyph unicode="&#xa2;" d="M135 524q0 233 108.5 382t295.5 181v265h182v-262q152 -20 253 -109.5t124 -230.5h-217q-20 86 -83 133t-157 47q-137 0 -217 -103.5t-80 -308.5q0 -186 84 -284.5t215 -98.5q100 0 167 54.5t81 152.5h215q-20 -141 -122.5 -242.5t-262.5 -124.5v-251h-182v256 q-182 31 -293 172t-111 372z" />
-<glyph unicode="&#xa3;" d="M123 0v180q158 49 158 223v232h-97v160h97v274q0 195 117.5 295t297.5 100q160 0 270.5 -82t147.5 -254h-207q-37 170 -217 170q-100 0 -157.5 -60t-57.5 -171v-272h395v-160h-395v-219q0 -152 -115 -236h736v-180h-973z" />
-<glyph unicode="&#xa4;" d="M68 305l127 127q-72 119 -72 264q0 141 70 260l-123 125l139 140l119 -121q127 86 286.5 86t286.5 -86l119 121l139 -140l-123 -125q70 -119 70 -260q0 -145 -72 -264l127 -127l-139 -139l-123 123q-127 -82 -284.5 -82t-284.5 82l-123 -123zM305 696.5 q0 -141.5 89 -230.5t222 -89q129 0 218.5 89t89.5 230.5t-89.5 230.5t-218.5 89q-133 0 -222 -89t-89 -230.5z" />
-<glyph unicode="&#xa5;" d="M16 1434h230l370 -668l385 668h213l-417 -711h209v-150h-287v-157h287v-150h-287v-266h-207v266h-287v150h287v157h-287v150h207z" />
-<glyph unicode="&#xa6;" horiz-adv-x="737" d="M281 -287v789h176v-789h-176zM281 819v789h176v-789h-176z" />
-<glyph unicode="&#xa7;" d="M143 664q0 188 187 278q-113 90 -113 223q0 127 107.5 213t302.5 86q160 0 279.5 -83t156.5 -230h-209q-14 72 -73.5 117t-155.5 45q-106 0 -159.5 -38t-53.5 -101q0 -66 47 -106t174 -73q250 -63 352 -153t102 -230q0 -195 -194 -282q121 -86 121 -217 q0 -137 -106.5 -218t-297.5 -81q-170 0 -287.5 81.5t-154.5 229.5h209q14 -70 76.5 -115t158.5 -45q207 0 207 137q0 63 -49 105.5t-172 73.5q-252 63 -353.5 154.5t-101.5 228.5zM330 678q0 -78 56 -128t222 -97q84 -27 156 -56q137 70 137 195q0 57 -22.5 94t-110.5 81 t-256 87q-29 6 -57 18q-125 -67 -125 -194z" />
-<glyph unicode="&#xa8;" horiz-adv-x="798" d="M61 1270v205h213v-205h-213zM524 1270v205h213v-205h-213z" />
-<glyph unicode="&#xa9;" horiz-adv-x="1810" d="M123 737.5q0 194.5 68.5 346t183 240.5t250 135t281 46t280.5 -46t249.5 -135t183.5 -240.5t69 -346t-69 -346t-183.5 -241t-249.5 -135.5t-280.5 -46t-281 46t-250 135.5t-183 241t-68.5 346zM293 737q0 -299 179 -462.5t433 -163.5t433.5 163.5t179.5 462.5t-179.5 463 t-433.5 164t-433 -164t-179 -463zM524 735q0 219 114 326.5t269 107.5q137 0 234.5 -69.5t115.5 -194.5h-165q-29 137 -181 137q-98 0 -161.5 -74.5t-63.5 -228.5q0 -162 68.5 -230.5t158.5 -68.5q84 0 131.5 46t55.5 110h164q-16 -115 -109.5 -199t-245.5 -84 q-47 0 -96 11.5t-102.5 42t-93 76.5t-66.5 122t-27 170z" />
-<glyph unicode="&#xaa;" horiz-adv-x="1024" d="M113 0v174h798v-174h-798zM137 858q0 246 332 287l205 24v43q0 154 -174 154q-156 0 -178 -109h-172q16 106 115.5 177t238.5 71q147 0 244.5 -76.5t97.5 -205.5v-598h-125l-29 96q-33 -51 -103.5 -85t-152.5 -34q-121 0 -210 61.5t-89 194.5zM313 866q0 -119 152 -118 q82 0 145.5 51t63.5 127v104l-164 -18q-197 -23 -197 -146z" />
-<glyph unicode="&#xab;" horiz-adv-x="1044" d="M123 645l254 420h137l-160 -426l140 -455h-138zM530 645l254 420h138l-160 -426l139 -455h-137z" />
-<glyph unicode="&#xac;" d="M184 573v175h860v-519h-186v344h-674z" />
-<glyph unicode="&#xad;" horiz-adv-x="1105" d="M184 573v175h738v-175h-738z" />
-<glyph unicode="&#xae;" horiz-adv-x="1318" d="M143 1010q0 127 48.5 226t125 155.5t164.5 85t178.5 28.5t178.5 -28.5t164.5 -85t125 -155.5t48.5 -226t-48.5 -226.5t-125 -156t-164.5 -85t-178.5 -28.5t-178.5 28.5t-164.5 85t-125 156t-48.5 226.5zM272 1009.5q0 -196.5 114 -291.5t273.5 -95t273.5 95t114 291.5 t-114 292t-273.5 95.5t-273.5 -95.5t-114 -292zM506 752v522h151q80 0 132.5 -42t52.5 -120q0 -98 -90 -145l112 -215h-116l-95 190h-45v-190h-102zM608 1026h47q35 0 56.5 23.5t21.5 62.5q0 37 -21.5 58.5t-60.5 21.5h-43v-166z" />
-<glyph unicode="&#xaf;" horiz-adv-x="675" d="M61 1296v168h553v-168h-553z" />
-<glyph unicode="&#xb0;" d="M123 1130.5q0 155.5 101.5 247.5t242.5 92t242.5 -92t101.5 -247.5t-101.5 -247.5t-242.5 -92t-242.5 92t-101.5 247.5zM295 1130.5q0 -88.5 47 -142.5t125 -54t125 54t47 142.5t-47 142.5t-125 54t-125 -54t-47 -142.5z" />
-<glyph unicode="&#xb1;" d="M184 0v174h860v-174h-860zM184 573v175h336v342h187v-342h337v-175h-337v-262h-187v262h-336z" />
-<glyph unicode="&#xb2;" horiz-adv-x="696" d="M90 1425q2 94 79 164t191 70q106 0 181 -63.5t75 -172.5q0 -119 -180 -290l-137 -134h305v-139h-498v139l250 248q102 102 103 180q0 109 -105 109q-98 0 -106 -111h-158z" />
-<glyph unicode="&#xb3;" horiz-adv-x="696" d="M59 1059h164q4 -37 38 -63.5t75 -26.5q61 0 93 33.5t32 87.5q0 123 -137 122h-48v117h41q49 0 84 27.5t35 83.5q0 43 -27.5 69.5t-74.5 26.5q-94 0 -109 -86h-159q16 102 98 155.5t182 53.5q98 0 172 -56.5t74 -160.5q0 -55 -37 -100.5t-98 -65.5q68 -14 117 -63.5 t49 -135.5q0 -96 -82 -162.5t-201 -66.5q-121 0 -197 61.5t-84 149.5z" />
-<glyph unicode="&#xb4;" horiz-adv-x="585" d="M61 1225l209 280h254l-286 -280h-177z" />
-<glyph unicode="&#xb5;" horiz-adv-x="1163" d="M143 -369v1434h197v-698q0 -125 62.5 -177.5t158.5 -52.5q125 0 193.5 79t68.5 192v657h197v-1065h-162l-20 115q-109 -145 -301 -146q-104 0 -197 62v-400h-197z" />
-<glyph unicode="&#xb6;" d="M133 1120q0 96 36 170t91 112t107.5 55.5t95.5 17.5h176v-1844h-176v1137q-35 0 -75 10t-86 36t-83 63.5t-61.5 101t-24.5 141.5zM899 -369v1844h176v-1844h-176z" />
-<glyph unicode="&#xb7;" horiz-adv-x="614" d="M188 532v238h238v-238h-238z" />
-<glyph unicode="&#xb8;" horiz-adv-x="622" d="M45 -303h154q4 -33 34.5 -57.5t77.5 -24.5q49 0 80 25.5t31 70.5q0 102 -193 103l21 227h137v-127q186 -41 186 -201q0 -98 -73.5 -160.5t-190.5 -62.5q-102 0 -176 55.5t-88 151.5z" />
-<glyph unicode="&#xb9;" horiz-adv-x="696" d="M104 1372v154l193 112h160v-639h139v-139h-463v139h172v486z" />
-<glyph unicode="&#xba;" horiz-adv-x="1024" d="M113 0v174h778v-174h-778zM117 1055q0 129 33.5 222t94 140t126 67.5t143.5 20.5t143.5 -20.5t126 -67.5t94 -139t33.5 -223t-34.5 -224.5t-94 -140.5t-125 -67.5t-143.5 -20.5t-143.5 20.5t-125 68.5t-94 141.5t-34.5 222.5zM295 1055q0 -158 59.5 -235t159.5 -77 t159.5 76t59.5 235.5t-60.5 234.5t-158.5 75t-158.5 -76.5t-60.5 -232.5z" />
-<glyph unicode="&#xbb;" horiz-adv-x="1044" d="M123 1065h137l254 -420l-233 -461h-138l140 455zM530 1065h138l254 -420l-234 -461h-137l139 455z" />
-<glyph unicode="&#xbc;" horiz-adv-x="1802" d="M115 1167v154l192 113h160v-639h139v-140h-463v140h172v485zM283 -184l1073 1802h213l-1075 -1802h-211zM1135 145v144l172 489h155l-174 -497h148v47l26 164h119v-211h105v-136h-105v-145h-145v145h-301z" />
-<glyph unicode="&#xbd;" horiz-adv-x="1802" d="M102 1167v154l193 113h160v-639h139v-140h-463v140h172v485zM270 -184l1073 1802h213l-1075 -1802h-211zM1178 565q2 94 78.5 164t191.5 70q106 0 181 -63.5t75 -172.5q0 -119 -180 -291l-138 -133h306v-139h-498v139l250 248q102 102 102 180q0 109 -104 109 q-98 0 -107 -111h-157z" />
-<glyph unicode="&#xbe;" horiz-adv-x="1802" d="M96 864h164q4 -37 38 -63.5t75 -26.5q61 0 93 34t32 87q0 123 -138 123h-47v117h41q49 0 84 27.5t35 82.5q0 43 -27.5 69.5t-74.5 26.5q-94 0 -109 -86h-160q16 102 98.5 155.5t182.5 53.5q98 0 172 -56t74 -161q0 -55 -37 -100t-98 -66q68 -14 116.5 -63t48.5 -135 q0 -96 -81.5 -163t-200.5 -67q-121 0 -197 61.5t-84 149.5zM289 -184l1073 1802h213l-1075 -1802h-211zM1141 145v144l172 489h155l-174 -497h148v47l26 164h119v-211h105v-136h-105v-145h-145v145h-301z" />
-<glyph unicode="&#xbf;" horiz-adv-x="1193" d="M82 -18q0 258 301 426q76 41 102.5 100t26.5 170h195q0 -176 -52.5 -273.5t-189.5 -166.5q-172 -88 -172 -256q0 -94 75.5 -151.5t200.5 -57.5q274 0 310 237h213q-31 -197 -170.5 -303t-358.5 -106q-215 0 -348 109.5t-133 271.5zM487 868v238h236v-238h-236z" />
-<glyph unicode="&#xc0;" horiz-adv-x="1445" d="M0 0l606 1475h236l604 -1475h-232l-145 373h-702l-148 -373h-219zM432 1853h254l209 -280h-176zM434 543h567l-280 723z" />
-<glyph unicode="&#xc1;" horiz-adv-x="1445" d="M0 0l606 1475h236l604 -1475h-232l-145 373h-702l-148 -373h-219zM434 543h567l-280 723zM553 1573l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xc2;" horiz-adv-x="1445" d="M0 0l606 1475h236l604 -1475h-232l-145 373h-702l-148 -373h-219zM371 1573l241 280h224l239 -280h-198l-154 168l-154 -168h-198zM434 543h567l-280 723z" />
-<glyph unicode="&#xc3;" horiz-adv-x="1445" d="M0 0l606 1475h236l604 -1475h-232l-145 373h-702l-148 -373h-219zM416 1599v166q94 68 182 68q70 0 133.5 -39t112.5 -39q68 0 166 78v-166q-94 -68 -174 -68q-70 0 -133.5 39t-112.5 39q-76 0 -174 -78zM434 543h567l-280 723z" />
-<glyph unicode="&#xc4;" horiz-adv-x="1445" d="M0 0l606 1475h236l604 -1475h-232l-145 373h-702l-148 -373h-219zM383 1618v205h213v-205h-213zM434 543h567l-280 723zM846 1618v205h213v-205h-213z" />
-<glyph unicode="&#xc5;" horiz-adv-x="1445" d="M0 0l584 1419q-137 61 -138 219q0 106 73 176t196 70t196.5 -69.5t73.5 -176.5q0 -143 -125 -211l586 -1427h-232l-145 373h-702l-148 -373h-219zM434 543h567l-280 723zM586 1638.5q0 -57.5 34.5 -93.5t94 -36t95.5 36t36 93q0 59 -36 94t-95.5 35t-94 -35.5t-34.5 -93z " />
-<glyph unicode="&#xc6;" horiz-adv-x="2000" d="M0 0l907 1475h991v-177h-669v-462h610v-172h-610v-488h669v-176h-878v373h-567l-228 -373h-225zM557 543h463v753z" />
-<glyph unicode="&#xc7;" horiz-adv-x="1492" d="M92 737q0 365 190.5 566.5t501.5 201.5q258 0 433.5 -147.5t191.5 -356.5h-211q-20 152 -132 241t-282 89q-219 0 -349 -151.5t-130 -442.5q0 -281 128 -436.5t339 -155.5q178 0 298 106.5t130 268.5h211q-12 -207 -168 -364.5t-395 -182.5v-59q186 -41 186 -201 q0 -98 -73.5 -160.5t-190.5 -62.5q-102 0 -176 55.5t-88 151.5h153q4 -33 35 -57.5t78 -24.5q49 0 80 25.5t31 70.5q0 102 -193 103l15 157q-285 23 -449 221.5t-164 544.5z" />
-<glyph unicode="&#xc8;" horiz-adv-x="1175" d="M154 0v1475h919v-177h-711v-462h652v-172h-652v-488h711v-176h-919zM317 1853h254l209 -280h-176z" />
-<glyph unicode="&#xc9;" horiz-adv-x="1175" d="M154 0v1475h919v-177h-711v-462h652v-172h-652v-488h711v-176h-919zM473 1573l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xca;" horiz-adv-x="1175" d="M154 0v1475h919v-177h-711v-462h652v-172h-652v-488h711v-176h-919zM256 1573l242 280h223l240 -280h-199l-154 168l-153 -168h-199z" />
-<glyph unicode="&#xcb;" horiz-adv-x="1175" d="M154 0v1475h919v-177h-711v-462h652v-172h-652v-488h711v-176h-919zM279 1618v205h213v-205h-213zM741 1618v205h213v-205h-213z" />
-<glyph unicode="&#xcc;" horiz-adv-x="516" d="M-39 1853h254l209 -280h-176zM154 0v1475h208v-1475h-208z" />
-<glyph unicode="&#xcd;" horiz-adv-x="516" d="M86 1573l209 280h254l-287 -280h-176zM154 0v1475h208v-1475h-208z" />
-<glyph unicode="&#xce;" horiz-adv-x="516" d="M-94 1573l241 280h224l239 -280h-198l-154 168l-154 -168h-198zM154 0v1475h208v-1475h-208z" />
-<glyph unicode="&#xcf;" horiz-adv-x="516" d="M-80 1618v205h213v-205h-213zM154 0v1475h208v-1475h-208zM383 1618v205h213v-205h-213z" />
-<glyph unicode="&#xd0;" horiz-adv-x="1449" d="M51 686v176h103v613h479q338 0 531.5 -184.5t193.5 -553.5q0 -350 -204 -543.5t-536 -193.5h-464v686h-103zM362 172h277q244 0 376 144.5t132 420.5q0 285 -135 428.5t-377 143.5h-273v-447h420v-176h-420v-514z" />
-<glyph unicode="&#xd1;" horiz-adv-x="1472" d="M154 0v1475h276l703 -1225v1225h186v-1475h-264l-711 1235v-1235h-190zM457 1599v166q94 68 182 68q70 0 133.5 -39t112.5 -39q68 0 166 78v-166q-94 -68 -174 -68q-70 0 -133.5 39t-112.5 39q-76 0 -174 -78z" />
-<glyph unicode="&#xd2;" horiz-adv-x="1585" d="M92 737q0 360 200 564t503 204q305 0 501.5 -200.5t196.5 -567.5q0 -356 -196.5 -562t-503.5 -206q-313 0 -507 205t-194 563zM305 737.5q0 -284.5 133 -441.5t354.5 -157t354.5 157t133 441.5t-133 441t-354.5 156.5t-354.5 -156.5t-133 -441zM492 1853h253l209 -280 h-176z" />
-<glyph unicode="&#xd3;" horiz-adv-x="1585" d="M92 737q0 360 200 564t503 204q305 0 501.5 -200.5t196.5 -567.5q0 -356 -196.5 -562t-503.5 -206q-313 0 -507 205t-194 563zM305 737.5q0 -284.5 133 -441.5t354.5 -157t354.5 157t133 441.5t-133 441t-354.5 156.5t-354.5 -156.5t-133 -441zM637 1573l209 280h254 l-287 -280h-176z" />
-<glyph unicode="&#xd4;" horiz-adv-x="1585" d="M92 737q0 360 200 564t503 204q305 0 501.5 -200.5t196.5 -567.5q0 -356 -196.5 -562t-503.5 -206q-313 0 -507 205t-194 563zM305 737.5q0 -284.5 133 -441.5t354.5 -157t354.5 157t133 441.5t-133 441t-354.5 156.5t-354.5 -156.5t-133 -441zM426 1573l242 280h223 l239 -280h-198l-154 168l-153 -168h-199z" />
-<glyph unicode="&#xd5;" horiz-adv-x="1585" d="M92 737q0 360 200 564t503 204q305 0 501.5 -200.5t196.5 -567.5q0 -356 -196.5 -562t-503.5 -206q-313 0 -507 205t-194 563zM305 737.5q0 -284.5 133 -441.5t354.5 -157t354.5 157t133 441.5t-133 441t-354.5 156.5t-354.5 -156.5t-133 -441zM489 1599v166 q94 68 183 68q70 0 133 -39t113 -39q68 0 165 78v-166q-94 -68 -174 -68q-70 0 -133 39t-112 39q-77 0 -175 -78z" />
-<glyph unicode="&#xd6;" horiz-adv-x="1585" d="M92 737q0 360 200 564t503 204q305 0 501.5 -200.5t196.5 -567.5q0 -356 -196.5 -562t-503.5 -206q-313 0 -507 205t-194 563zM305 737.5q0 -284.5 133 -441.5t354.5 -157t354.5 157t133 441.5t-133 441t-354.5 156.5t-354.5 -156.5t-133 -441zM434 1618v205h213v-205 h-213zM897 1618v205h213v-205h-213z" />
-<glyph unicode="&#xd7;" d="M246 418l243 241l-243 242l123 123l243 -242l248 244l123 -123l-246 -244l246 -243l-123 -123l-248 244l-243 -242z" />
-<glyph unicode="&#xd8;" horiz-adv-x="1585" d="M92 737q0 201 62.5 354.5t166 240.5t223.5 130t249 43q88 0 184 -22l74 196h182l-94 -256q162 -84 258 -255t96 -431q0 -201 -62.5 -354.5t-166 -240.5t-223 -130t-248.5 -43q-88 0 -183 23l-75 -217h-183l97 274q-357 186 -357 688zM305 737q0 -369 217 -520l398 1102 q-61 16 -127 16q-221 0 -354.5 -156.5t-133.5 -441.5zM662 156q66 -16 131 -17q221 0 354 157t133 441q0 367 -217 518z" />
-<glyph unicode="&#xd9;" horiz-adv-x="1447" d="M143 494v981h209v-1000q0 -150 98.5 -240t276.5 -90t276.5 90.5t98.5 239.5v1000h203v-981q0 -242 -158 -383.5t-422 -141.5q-266 0 -424 142.5t-158 382.5zM440 1853h254l209 -280h-176z" />
-<glyph unicode="&#xda;" horiz-adv-x="1447" d="M143 494v981h209v-1000q0 -150 98.5 -240t276.5 -90t276.5 90.5t98.5 239.5v1000h203v-981q0 -242 -158 -383.5t-422 -141.5q-266 0 -424 142.5t-158 382.5zM567 1573l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xdb;" horiz-adv-x="1447" d="M143 494v981h209v-1000q0 -150 98.5 -240t276.5 -90t276.5 90.5t98.5 239.5v1000h203v-981q0 -242 -158 -383.5t-422 -141.5q-266 0 -424 142.5t-158 382.5zM377 1573l241 280h224l239 -280h-198l-154 168l-154 -168h-198z" />
-<glyph unicode="&#xdc;" horiz-adv-x="1447" d="M143 494v981h209v-1000q0 -150 98.5 -240t276.5 -90t276.5 90.5t98.5 239.5v1000h203v-981q0 -242 -158 -383.5t-422 -141.5q-266 0 -424 142.5t-158 382.5zM383 1618v205h213v-205h-213zM846 1618v205h213v-205h-213z" />
-<glyph unicode="&#xdd;" horiz-adv-x="1288" d="M0 1475h229l416 -709l430 709h213l-540 -889v-586h-207v586zM549 1573l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xde;" horiz-adv-x="1261" d="M154 0v1475h208v-238h263q270 0 427.5 -128t157.5 -367.5t-157.5 -366.5t-427.5 -127h-263v-248h-208zM362 418h267q365 0 364 323q0 158 -91 242t-273 84h-267v-649z" />
-<glyph unicode="&#xdf;" horiz-adv-x="1234" d="M143 0v1073q0 190 112 311t304 121q168 0 286 -79.5t118 -231.5q0 -76 -31 -133t-67 -86t-66.5 -67t-30.5 -77q0 -35 29.5 -64.5t120.5 -72.5q150 -72 213 -157.5t63 -210.5q0 -139 -110.5 -248t-295.5 -109q-334 0 -378 289h200q18 -123 178 -123q96 0 150.5 48 t54.5 134q0 84 -37.5 135.5t-134.5 98.5q-141 70 -190 126t-49 159q0 55 28.5 102t64.5 76.5t64.5 75t28.5 94.5q0 68 -57.5 110.5t-151.5 42.5q-102 0 -160.5 -68.5t-58.5 -191.5v-1077h-197z" />
-<glyph unicode="&#xe0;" horiz-adv-x="1126" d="M82 274q0 147 95 232.5t308 122.5l312 53v53q0 98 -63.5 151.5t-182.5 53.5q-217 0 -240 -172h-209q16 150 138 239t319 89q205 0 319.5 -100.5t114.5 -268.5v-727h-162l-24 145q-125 -176 -356 -176q-172 0 -270.5 86t-98.5 219zM221 1505h254l209 -280h-176zM291 295 q0 -78 53 -119t154 -41q115 0 207 75t92 181v137l-265 -47q-137 -23 -189 -66.5t-52 -119.5z" />
-<glyph unicode="&#xe1;" horiz-adv-x="1126" d="M82 274q0 147 95 232.5t308 122.5l312 53v53q0 98 -63.5 151.5t-182.5 53.5q-217 0 -240 -172h-209q16 150 138 239t319 89q205 0 319.5 -100.5t114.5 -268.5v-727h-162l-24 145q-125 -176 -356 -176q-172 0 -270.5 86t-98.5 219zM291 295q0 -78 53 -119t154 -41 q115 0 207 75t92 181v137l-265 -47q-137 -23 -189 -66.5t-52 -119.5zM459 1225l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xe2;" horiz-adv-x="1126" d="M82 274q0 147 95 232.5t308 122.5l312 53v53q0 98 -63.5 151.5t-182.5 53.5q-217 0 -240 -172h-209q16 150 138 239t319 89q205 0 319.5 -100.5t114.5 -268.5v-727h-162l-24 145q-125 -176 -356 -176q-172 0 -270.5 86t-98.5 219zM205 1225l241 280h224l239 -280h-198 l-154 168l-154 -168h-198zM291 295q0 -78 53 -119t154 -41q115 0 207 75t92 181v137l-265 -47q-137 -23 -189 -66.5t-52 -119.5z" />
-<glyph unicode="&#xe3;" horiz-adv-x="1126" d="M82 274q0 147 95 232.5t308 122.5l312 53v53q0 98 -63.5 151.5t-182.5 53.5q-217 0 -240 -172h-209q16 150 138 239t319 89q205 0 319.5 -100.5t114.5 -268.5v-727h-162l-24 145q-125 -176 -356 -176q-172 0 -270.5 86t-98.5 219zM262 1251v166q94 68 182 68 q70 0 133.5 -39t112.5 -39q68 0 166 78v-166q-94 -68 -174 -68q-68 0 -131.5 39t-114.5 39q-76 0 -174 -78zM291 295q0 -78 53 -119t154 -41q115 0 207 75t92 181v137l-265 -47q-137 -23 -189 -66.5t-52 -119.5z" />
-<glyph unicode="&#xe4;" horiz-adv-x="1126" d="M82 274q0 147 95 232.5t308 122.5l312 53v53q0 98 -63.5 151.5t-182.5 53.5q-217 0 -240 -172h-209q16 150 138 239t319 89q205 0 319.5 -100.5t114.5 -268.5v-727h-162l-24 145q-125 -176 -356 -176q-172 0 -270.5 86t-98.5 219zM217 1270v205h213v-205h-213zM291 295 q0 -78 53 -119t154 -41q115 0 207 75t92 181v137l-265 -47q-137 -23 -189 -66.5t-52 -119.5zM680 1270v205h213v-205h-213z" />
-<glyph unicode="&#xe5;" horiz-adv-x="1126" d="M82 274q0 147 95 232.5t308 122.5l312 53v53q0 98 -63.5 151.5t-182.5 53.5q-217 0 -240 -172h-209q16 150 138 239t319 89q205 0 319.5 -100.5t114.5 -268.5v-727h-162l-24 145q-125 -176 -356 -176q-172 0 -270.5 86t-98.5 219zM291 295q0 -78 53 -119t154 -41 q115 0 207 75t92 181v137l-265 -47q-137 -23 -189 -66.5t-52 -119.5zM293 1433.5q0 106.5 72.5 176t195.5 69.5t196.5 -69.5t73.5 -176t-73.5 -176t-196.5 -69.5t-195.5 69.5t-72.5 176zM432 1433.5q0 -57.5 36 -93t93 -35.5q59 0 95 35.5t36 93.5q0 59 -35.5 94t-95.5 35 q-57 0 -93 -36t-36 -93.5z" />
-<glyph unicode="&#xe6;" horiz-adv-x="1900" d="M82 279q0 281 391 329l324 41v86q0 96 -62.5 150.5t-183.5 54.5q-221 0 -240 -172h-209q18 154 140.5 241t316.5 87q258 0 367 -172q139 172 383 172q231 0 365 -145.5t134 -446.5h-811q4 -106 36 -183t83 -115t101.5 -54.5t107.5 -16.5q96 0 165 48t93 124h213 q-41 -154 -168 -246t-309 -92q-297 0 -432 219q-57 -96 -166 -157.5t-248 -61.5q-176 0 -283.5 78t-107.5 232zM291 289q0 -68 49 -111t158 -43q106 0 199.5 68.5t99.5 171.5v121l-277 -35q-129 -16 -179 -56t-50 -116zM1008 659h600q-10 137 -89 208t-206 71 q-113 0 -195.5 -68t-109.5 -211z" />
-<glyph unicode="&#xe7;" horiz-adv-x="1134" d="M82 524q0 264 137 418t365 154q184 0 309 -92.5t151 -253.5h-217q-20 86 -82.5 133t-156.5 47q-137 0 -217 -103.5t-80 -308.5q0 -186 84 -284.5t215 -98.5q100 0 166.5 54.5t81.5 152.5h215q-20 -145 -126 -246.5t-272 -122.5v-59q186 -41 187 -201q0 -98 -74 -160.5 t-190 -62.5q-102 0 -176 55.5t-89 151.5h154q4 -33 34.5 -57.5t78.5 -24.5q49 0 79.5 25.5t30.5 70.5q0 102 -192 103l14 161q-193 25 -311.5 167t-118.5 382z" />
-<glyph unicode="&#xe8;" horiz-adv-x="1185" d="M82 532q0 270 141.5 417t370.5 147q233 0 366.5 -148.5t133.5 -458.5h-811q12 -178 100 -266t227 -88q94 0 164 48t94 124h213q-41 -152 -165.5 -245t-311.5 -93q-236 0 -379 145.5t-143 417.5zM242 1505h254l209 -280h-177zM291 645h602q-10 145 -89 219t-206 74 q-121 0 -202.5 -75t-104.5 -218z" />
-<glyph unicode="&#xe9;" horiz-adv-x="1185" d="M82 532q0 270 141.5 417t370.5 147q233 0 366.5 -148.5t133.5 -458.5h-811q12 -178 100 -266t227 -88q94 0 164 48t94 124h213q-41 -152 -165.5 -245t-311.5 -93q-236 0 -379 145.5t-143 417.5zM291 645h602q-10 145 -89 219t-206 74q-121 0 -202.5 -75t-104.5 -218z M483 1225l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xea;" horiz-adv-x="1185" d="M82 532q0 270 141.5 417t370.5 147q233 0 366.5 -148.5t133.5 -458.5h-811q12 -178 100 -266t227 -88q94 0 164 48t94 124h213q-41 -152 -165.5 -245t-311.5 -93q-236 0 -379 145.5t-143 417.5zM236 1225l241 280h223l240 -280h-199l-153 168l-154 -168h-198zM291 645 h602q-10 145 -89 219t-206 74q-121 0 -202.5 -75t-104.5 -218z" />
-<glyph unicode="&#xeb;" horiz-adv-x="1185" d="M82 532q0 270 141.5 417t370.5 147q233 0 366.5 -148.5t133.5 -458.5h-811q12 -178 100 -266t227 -88q94 0 164 48t94 124h213q-41 -152 -165.5 -245t-311.5 -93q-236 0 -379 145.5t-143 417.5zM246 1270v205h213v-205h-213zM291 645h602q-10 145 -89 219t-206 74 q-121 0 -202.5 -75t-104.5 -218zM709 1270v205h213v-205h-213z" />
-<glyph unicode="&#xec;" horiz-adv-x="483" d="M-78 1505h254l209 -280h-176zM143 0v1065h197v-1065h-197z" />
-<glyph unicode="&#xed;" horiz-adv-x="483" d="M111 1225l208 280h254l-286 -280h-176zM143 0v1065h197v-1065h-197z" />
-<glyph unicode="&#xee;" horiz-adv-x="483" d="M-111 1225l242 280h223l240 -280h-199l-153 168l-154 -168h-199zM143 0v1065h197v-1065h-197z" />
-<glyph unicode="&#xef;" horiz-adv-x="483" d="M-96 1270v205h213v-205h-213zM143 0v1065h197v-1065h-197zM367 1270v205h213v-205h-213z" />
-<glyph unicode="&#xf0;" horiz-adv-x="1189" d="M82 487q0 225 133 363.5t332 138.5q115 0 218 -53t142 -133q-37 266 -205 401l-61 -65h-211l139 145q-106 47 -254 70v184q221 -47 375 -125l60 62h211l-140 -146q274 -217 275 -674q0 -330 -137.5 -508t-374.5 -178q-221 0 -361.5 138t-140.5 380zM283 477 q0 -180 85 -262t216 -82q137 0 227 95.5t90 252.5q0 160 -91 252t-239 92q-131 0 -209.5 -90t-78.5 -258z" />
-<glyph unicode="&#xf1;" horiz-adv-x="1161" d="M143 0v1065h162l23 -135q119 166 323 166q176 0 276.5 -104.5t100.5 -297.5v-694h-197v692q0 236 -227 236q-111 0 -187.5 -74t-76.5 -197v-657h-197zM305 1251v166q94 68 182 68q70 0 133.5 -39t112.5 -39q68 0 166 78v-166q-94 -68 -174 -68q-70 0 -133.5 39t-112.5 39 q-76 0 -174 -78z" />
-<glyph unicode="&#xf2;" horiz-adv-x="1214" d="M82 532q0 274 148.5 419t377.5 145q231 0 378 -144.5t147 -419.5q0 -270 -145.5 -416.5t-381.5 -146.5q-231 0 -377.5 147.5t-146.5 415.5zM274 1505h254l209 -280h-176zM287 532.5q0 -192.5 90 -298t233 -105.5q145 0 231.5 104.5t86.5 298.5q0 197 -88 300.5 t-232 103.5q-141 0 -231 -105.5t-90 -298z" />
-<glyph unicode="&#xf3;" horiz-adv-x="1214" d="M82 532q0 274 148.5 419t377.5 145q231 0 378 -144.5t147 -419.5q0 -270 -145.5 -416.5t-381.5 -146.5q-231 0 -377.5 147.5t-146.5 415.5zM287 532.5q0 -192.5 90 -298t233 -105.5q145 0 231.5 104.5t86.5 298.5q0 197 -88 300.5t-232 103.5q-141 0 -231 -105.5 t-90 -298zM487 1225l209 280h254l-286 -280h-177z" />
-<glyph unicode="&#xf4;" horiz-adv-x="1214" d="M82 532q0 274 148.5 419t377.5 145q231 0 378 -144.5t147 -419.5q0 -270 -145.5 -416.5t-381.5 -146.5q-231 0 -377.5 147.5t-146.5 415.5zM244 1225l241 280h224l239 -280h-198l-154 168l-154 -168h-198zM287 532.5q0 -192.5 90 -298t233 -105.5q145 0 231.5 104.5 t86.5 298.5q0 197 -88 300.5t-232 103.5q-141 0 -231 -105.5t-90 -298z" />
-<glyph unicode="&#xf5;" horiz-adv-x="1214" d="M82 532q0 274 148.5 419t377.5 145q231 0 378 -144.5t147 -419.5q0 -270 -145.5 -416.5t-381.5 -146.5q-231 0 -377.5 147.5t-146.5 415.5zM287 532.5q0 -192.5 90 -298t233 -105.5q145 0 231.5 104.5t86.5 298.5q0 197 -88 300.5t-232 103.5q-141 0 -231 -105.5 t-90 -298zM303 1251v166q94 68 182 68q70 0 133.5 -39t112.5 -39q68 0 166 78v-166q-94 -68 -174 -68q-68 0 -131.5 39t-114.5 39q-76 0 -174 -78z" />
-<glyph unicode="&#xf6;" horiz-adv-x="1214" d="M82 532q0 274 148.5 419t377.5 145q231 0 378 -144.5t147 -419.5q0 -270 -145.5 -416.5t-381.5 -146.5q-231 0 -377.5 147.5t-146.5 415.5zM268 1270v205h213v-205h-213zM287 532.5q0 -192.5 90 -298t233 -105.5q145 0 231.5 104.5t86.5 298.5q0 197 -88 300.5 t-232 103.5q-141 0 -231 -105.5t-90 -298zM731 1270v205h213v-205h-213z" />
-<glyph unicode="&#xf7;" d="M184 573v175h860v-175h-860zM496 131v238h237v-238h-237zM496 950v238h237v-238h-237z" />
-<glyph unicode="&#xf8;" horiz-adv-x="1214" d="M82 532q0 274 148.5 419t377.5 145q88 0 158 -21l100 215h183l-131 -282q215 -147 215 -476q0 -270 -145.5 -416.5t-381.5 -146.5q-86 0 -155 21l-99 -215h-186l131 282q-215 151 -215 475zM287 532q0 -199 98 -307l317 697q-43 14 -94 14q-141 0 -231 -105.5t-90 -298.5 zM516 141q45 -12 94 -12q145 0 231.5 104.5t86.5 298.5q0 199 -97 308z" />
-<glyph unicode="&#xf9;" horiz-adv-x="1153" d="M133 371v694h197v-698q0 -229 221 -230q127 0 194.5 81t67.5 198v649h197v-1065h-162l-23 123q-113 -154 -319 -154q-170 0 -271.5 101.5t-101.5 300.5zM252 1505h254l209 -280h-176z" />
-<glyph unicode="&#xfa;" horiz-adv-x="1153" d="M133 371v694h197v-698q0 -229 221 -230q127 0 194.5 81t67.5 198v649h197v-1065h-162l-23 123q-113 -154 -319 -154q-170 0 -271.5 101.5t-101.5 300.5zM442 1225l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xfb;" horiz-adv-x="1153" d="M133 371v694h197v-698q0 -229 221 -230q127 0 194.5 81t67.5 198v649h197v-1065h-162l-23 123q-113 -154 -319 -154q-170 0 -271.5 101.5t-101.5 300.5zM221 1225l242 280h223l240 -280h-199l-154 168l-153 -168h-199z" />
-<glyph unicode="&#xfc;" horiz-adv-x="1153" d="M133 371v694h197v-698q0 -229 221 -230q127 0 194.5 81t67.5 198v649h197v-1065h-162l-23 123q-113 -154 -319 -154q-170 0 -271.5 101.5t-101.5 300.5zM231 1270v205h213v-205h-213zM694 1270v205h213v-205h-213z" />
-<glyph unicode="&#xfd;" horiz-adv-x="1052" d="M20 1065h213l302 -905l301 905h196l-370 -1079q-70 -203 -141.5 -294t-207.5 -91q-53 0 -127 18v160q57 -14 103 -15q66 0 100.5 48.5t85.5 187.5h-63zM426 1225l209 280h254l-287 -280h-176z" />
-<glyph unicode="&#xfe;" horiz-adv-x="1247" d="M143 -369v1844h197v-557q125 178 356 178q88 0 168 -30t149.5 -91.5t110.5 -174t41 -259.5q0 -276 -136 -424t-347 -148q-223 0 -340 166v-504h-199zM330 545q0 -170 79.5 -289t241.5 -119q131 0 220.5 94.5t89.5 313.5q0 207 -92.5 295t-217.5 88q-150 0 -235.5 -106.5 t-85.5 -276.5z" />
-<glyph unicode="&#xff;" horiz-adv-x="1052" d="M20 1065h213l302 -905l301 905h196l-370 -1079q-70 -203 -141.5 -294t-207.5 -91q-53 0 -127 18v160q57 -14 103 -15q66 0 100.5 48.5t85.5 187.5h-63zM188 1270v205h213v-205h-213zM651 1270v205h213v-205h-213z" />
-<glyph unicode="&#x152;" horiz-adv-x="2029" d="M92 737q0 201 62.5 354.5t166 240.5t223.5 130t249 43t256 -30h878v-177h-670v-462h611v-172h-611v-488h670v-176h-878q-131 -31 -256 -31q-133 0 -252 41t-222.5 128t-165 240.5t-61.5 358.5zM305 737q0 -287 131 -442.5t357 -155.5q143 0 256 49v1098q-113 49 -256 49 q-221 0 -354.5 -156.5t-133.5 -441.5z" />
-<glyph unicode="&#x153;" horiz-adv-x="2023" d="M82 532.5q0 129.5 35 231.5t89 162.5t127 100.5t140.5 54.5t134.5 14.5q121 0 235.5 -49.5t188.5 -161.5q70 109 178.5 160t221.5 51q231 0 365 -147.5t134 -459.5h-811q6 -102 39 -175.5t83 -110.5t100.5 -52.5t105.5 -15.5q96 0 164.5 48t93.5 124h213 q-41 -154 -168 -246t-309 -92q-270 0 -410 211q-74 -113 -188.5 -162t-235.5 -49q-68 0 -135 14.5t-140 54.5t-127 100.5t-89 162.5t-35 231.5zM287 532.5q0 -200.5 94 -302t229 -101.5t226.5 99.5t91.5 303.5q0 203 -92.5 303.5t-227.5 100.5t-228 -101.5t-93 -302z M1128 645h603q-10 145 -89 219t-206 74q-115 0 -200 -71.5t-108 -221.5z" />
-<glyph unicode="&#x178;" horiz-adv-x="1288" d="M0 1475h229l416 -709l430 709h213l-540 -889v-586h-207v586zM307 1618v205h213v-205h-213zM770 1618v205h213v-205h-213z" />
-<glyph unicode="&#x2c6;" horiz-adv-x="819" d="M57 1225l242 280h223l240 -280h-199l-153 168l-154 -168h-199z" />
-<glyph unicode="&#x2dc;" horiz-adv-x="716" d="M61 1251v166q94 68 183 68q70 0 133 -39t112 -39q68 0 166 78v-166q-94 -68 -174 -68q-68 0 -131 39t-114 39q-77 0 -175 -78z" />
-<glyph unicode="&#x2013;" horiz-adv-x="942" d="M61 573v175h820v-175h-820z" />
-<glyph unicode="&#x2014;" horiz-adv-x="1351" d="M61 573v175h1229v-175h-1229z" />
-<glyph unicode="&#x2018;" horiz-adv-x="593" d="M178 930v207q0 160 78 241.5t190 96.5v-103q-127 -27 -127 -205h97v-237h-238z" />
-<glyph unicode="&#x2019;" horiz-adv-x="593" d="M147 930v102q127 27 127 205h-96v238h238v-207q0 -160 -78 -242t-191 -96z" />
-<glyph unicode="&#x201a;" horiz-adv-x="593" d="M147 -205q127 27 127 205h-96v238h238v-207q0 -160 -78 -242t-191 -96v102z" />
-<glyph unicode="&#x201c;" horiz-adv-x="944" d="M178 930v207q0 160 78 241.5t190 96.5v-103q-127 -27 -127 -205h97v-237h-238zM528 930v207q0 160 78 241.5t191 96.5v-103q-127 -27 -127 -205h96v-237h-238z" />
-<glyph unicode="&#x201d;" horiz-adv-x="944" d="M147 930v102q127 27 127 205h-96v238h238v-207q0 -160 -78 -242t-191 -96zM498 930v102q127 27 127 205h-97v238h238v-207q0 -160 -77.5 -242t-190.5 -96z" />
-<glyph unicode="&#x201e;" horiz-adv-x="944" d="M147 -205q127 27 127 205h-96v238h238v-207q0 -160 -78 -242t-191 -96v102zM498 -205q127 27 127 205h-97v238h238v-207q0 -160 -78 -242t-190 -96v102z" />
-<glyph unicode="&#x2022;" horiz-adv-x="614" d="M129 483v338h356v-338h-356z" />
-<glyph unicode="&#x2026;" horiz-adv-x="1843" d="M188 0v238h238v-238h-238zM803 0v238h237v-238h-237zM1417 0v238h238v-238h-238z" />
-<glyph unicode="&#x2039;" horiz-adv-x="636" d="M123 645l254 420h137l-160 -426l140 -455h-138z" />
-<glyph unicode="&#x203a;" horiz-adv-x="636" d="M123 1065h137l254 -420l-233 -461h-138l140 455z" />
-<glyph unicode="&#x20ac;" d="M6 481l41 160h84q-2 25 -2 76q0 43 2 63h-125l41 160h100q47 254 199 389t373 135q215 0 345 -112.5t157 -288.5h-213q-25 106 -97.5 166.5t-191.5 60.5q-295 0 -359 -350h498l-41 -160h-475v-63q0 -51 2 -76h432l-41 -160h-373q72 -336 359 -336q231 0 287 232h215 q-41 -182 -170 -295t-336 -113q-223 0 -371.5 132t-195.5 380h-144z" />
-<glyph unicode="&#x2122;" horiz-adv-x="1720" d="M51 1339v136h932l174 -615l164 615h246v-811h-150v655l-182 -655h-162l-194 655v-655h-146v675h-278v-675h-158v675h-246z" />
-<glyph unicode="&#xe000;" horiz-adv-x="1065" d="M0 1065h1065v-1065h-1065v1065z" />
-<glyph unicode="&#xfb01;" horiz-adv-x="1091" d="M41 897v168h158v119q0 139 84 225t256 86q119 0 254 -35v-170q-139 35 -224 35q-90 0 -132 -30.5t-42 -98.5v-131h553v-1065h-196v897h-357v-897h-196v897h-158z" />
-<glyph unicode="&#xfb02;" horiz-adv-x="1122" d="M41 897v168h158v119q0 139 84 225t256 86q115 0 245 -33l195 13v-1475h-197v1294q-123 31 -213 31t-132 -30.5t-42 -98.5v-131h209v-168h-209v-897h-196v897h-158z" />
-<glyph unicode="&#xfb03;" horiz-adv-x="1679" d="M41 897v168h158v88q0 143 85 237.5t255 94.5q154 0 331 -66q90 86 256 86q119 0 254 -35v-170q-139 35 -223 35q-90 0 -132 -30.5t-42 -98.5v-141h553v-1065h-197v897h-356v-897h-197v897h-391v-897h-196v897h-158zM395 1065h391v129q0 55 11 92q-117 39 -232 39 q-170 0 -170 -160v-100z" />
-<glyph unicode="&#xfb04;" horiz-adv-x="1710" d="M41 897v168h158v88q0 143 85 237.5t255 94.5q154 0 331 -66q90 86 256 86q115 0 246 -32l195 12v-1485h-197v1305q-123 31 -213 30.5t-132 -31t-42 -98.5v-141h209v-168h-209v-897h-197v897h-391v-897h-196v897h-158zM395 1065h391v129q0 55 11 92q-117 39 -232 39 q-170 0 -170 -160v-100z" />
-</font>
-</defs></svg> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.ttf b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.ttf
deleted file mode 100644
index 9ef31b1a9..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.ttf
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.woff b/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.woff
deleted file mode 100644
index 50ebdd8f4..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/ciscosansregular-webfont.woff
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.eot b/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.eot
deleted file mode 100644
index 7d9047f5b..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.eot
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.svg b/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.svg
deleted file mode 100644
index 30f8d11a1..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.svg
+++ /dev/null
@@ -1,90 +0,0 @@
-<?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>Generated by IcoMoon</metadata>
-<defs>
-<font id="next-font" horiz-adv-x="512">
-<font-face units-per-em="512" ascent="491.52" descent="-20.48" />
-<missing-glyph horiz-adv-x="512" />
-<glyph unicode="&#x20;" d="" horiz-adv-x="256" />
-<glyph unicode="&#xe600;" d="M362.060 240c0-58.586-47.493-106.079-106.079-106.079s-106.079 47.493-106.079 106.079c0 58.586 47.493 106.079 106.079 106.079s106.079-47.493 106.079-106.079zM501.365-16c-2.718 0-5.416 1.044-7.504 3.112l-490.769 490.788c-4.136 4.136-4.136 10.852 0 15.008 4.155 4.136 10.852 4.136 15.008 0l490.769-490.788c4.136-4.136 4.136-10.852 0-15.008-2.087-2.068-4.805-3.112-7.504-3.112zM10.596-16c-2.737 0-5.416 1.044-7.504 3.112-4.136 4.136-4.136 10.852 0 15.008l490.788 490.769c4.136 4.136 10.872 4.136 15.008 0s4.136-10.852 0-15.008l-490.788-490.768c-2.068-2.068-4.806-3.112-7.504-3.112zM150.393 389.921c0-23.441-19.002-42.444-42.444-42.444s-42.444 19.003-42.444 42.444c0 23.441 19.002 42.444 42.444 42.444s42.444-19.002 42.444-42.444zM446.926 389.921c0-23.43-18.994-42.424-42.424-42.424s-42.424 18.994-42.424 42.424c0 23.43 18.994 42.424 42.424 42.424s42.424-18.994 42.424-42.424zM446.926 92.896c0-23.43-18.994-42.424-42.424-42.424s-42.424 18.994-42.424 42.424c0 23.43 18.994 42.424 42.424 42.424s42.424-18.994 42.424-42.424zM150.393 92.896c0-23.441-19.002-42.444-42.444-42.444s-42.444 19.002-42.444 42.443c0 23.441 19.002 42.443 42.444 42.443s42.444-19.002 42.444-42.443z" />
-<glyph unicode="&#xe601;" d="M248.673 456.083c-118.803 0-215.108-96.312-215.108-215.108 0-118.803 96.312-215.115 215.108-215.115s215.108 96.312 215.108 215.115c0 118.804-96.312 215.109-215.108 215.109zM127.118 410.817l83.788-99.899 24.786 20.791-4.34-68.581-68.29 7.659 24.793 20.792-83.787 99.906 23.052 19.333zM158.361 110.642l-68.346 7.064 10.375 67.924 19.789-25.595 103.148 79.723 18.4-23.798-103.148-79.723 19.782-25.595zM363.862 65.603l-79.73 103.155-25.595-19.782 7.064 68.346 67.925-10.382-25.595-19.782 79.723-103.148-23.791-18.406zM382.69 322.833l-107.51-73.785-17.024 24.807 107.502 73.786-18.303 26.673 67.841-10.921-14.197-67.247-18.31 26.688z" horiz-adv-x="491" />
-<glyph unicode="&#xe602;" d="M306.688 62.928l-32.928 60.16-11.728-31.28c-7.488 3.776-22.048 13.488-31.936 28.848-12.784 19.904-17.392 49.12-13.056 70.72 4.784 18.944 20.16 38.608 37.12 51.2 21.376 15.984 58.912 21.264 92.096 23.68 0 0.144-76.96-17.904-93.616-54.864-10.752-23.984-11.104-48 7.12-75.168 57.744 19.728 69.168 35.52 94.208 126.64 2.272 8.176 2.816 18.512 1.552 26.896-46.672 6.576-100.288 11.984-143.776-10.144-12.416-6.304-25.488-14.56-35.84-23.888-46.736-42.224-66.288-111.488-31.056-166.768 20.24-31.712 52.24-53.984 82.432-75.552 1.248-0.912-7.808-26.176-8.768-29.36l28.816 12.464 80.16 35.904-20.8 30.512zM107.088 250.336c-8.032 18.96-10.592 41.984-5.872 65.6 10.528 52.928 53.568 89.248 95.888 80.96 32.96-6.464 55.792-38.144 59.376-76.816 33.584-1.728 67.44-11.808 98.8-22.928 5.328 94.336-52.416 178.88-139.008 195.84-95.808 18.752-190.928-52.128-212.080-158.016-16.304-81.696 16.192-160.528 75.776-201.008-9.68 41.68 2.176 83.136 27.12 116.368z" horiz-adv-x="356" />
-<glyph unicode="&#xe603;" d="M542.884 37.339c0-29.337-23.982-53.339-53.299-53.339h-436.245c-29.317 0-53.34 24.003-53.34 53.339v405.32c0 29.337 24.023 53.339 53.34 53.339h436.245c29.317 0 53.299-24.003 53.299-53.339v-405.32zM500.212 442.66c0 5.68-4.988 10.668-10.627 10.668h-436.245c-5.66 0-10.627-4.988-10.627-10.668v-405.32c0-5.68 4.968-10.668 10.627-10.668h436.245c5.639 0 10.627 5.008 10.627 10.668v405.32zM170.687 69.344h-85.344v127.995h85.323v-127.995zM298.682 69.344h-85.303v298.661h85.303v-298.661zM438.159 69.344h-85.323v341.313h85.323v-341.313z" horiz-adv-x="543" />
-<glyph unicode="&#xe604;" d="M168.451 239.442h-23.195v-39.438h22.684c13.853 0 20.517 6.647 20.517 18.572 0 13.598-6.791 20.867-20.006 20.867zM348.491 285.703h-17.87v-45.943h17.344c16.93 0 23.736 8.050 23.736 22.588 0 14.698-8.13 23.354-23.211 23.354zM185.939 268.997c0 10.984-6.807 17.631-18.683 17.631h-21.999v-35.119h22.796c11.749 0.016 17.886 7.126 17.886 17.487zM460.622 83.84c-11.223 0.287-21.569-3.284-30.065-9.31l-48.923 48.94c29.826 30.687 48.254 72.5 48.254 118.682 0 46.102-18.38 87.836-48.111 118.523l46.947 46.931c8.274-6.775 18.62-11.127 30.161-11.43 27.563-0.718 50.486 21.026 51.203 48.589 0.733 27.563-21.026 50.486-48.573 51.219-27.563 0.702-50.502-21.059-51.219-48.589-0.287-10.952 3.060-21.058 8.832-29.444l-47.617-47.616c-29.969 26.239-69.105 42.244-112.067 42.244-46.181 0-88.012-18.428-118.683-48.254l-51.41 51.394c6.233 8.082 10.154 18.061 10.442 29.045 0.734 27.562-21.043 50.486-48.589 51.219-27.547 0.701-50.47-21.059-51.187-48.589-0.718-27.579 21.026-50.486 48.573-51.219 11.493-0.303 22.031 3.459 30.623 9.74l51.873-51.857c-26.144-29.954-42.101-69.026-42.101-111.908 0-42.962 16.021-82.097 42.244-112.082l-54.344-54.344c-7.445 4.814-16.165 7.859-25.666 8.114-27.563 0.702-50.486-21.058-51.203-48.589-0.718-27.563 21.026-50.486 48.573-51.219 27.563-0.717 50.502 21.026 51.219 48.589 0.335 12.945-4.4 24.757-12.259 33.843l53.371 53.356c30.671-29.731 72.421-48.111 118.523-48.111 42.866 0 81.954 15.957 111.908 42.101l48.988-48.988c-6.488-8.178-10.633-18.332-10.92-29.571-0.717-27.563 21.026-50.486 48.573-51.219 27.563-0.717 50.502 21.026 51.219 48.589s-21.058 50.47-48.589 51.219zM165.916 187.155h-34.257v111.381h34.544c22.143 0 33.477-11.143 33.477-29.555 0-10.521-6.663-20.262-15.479-22.892 9.868-2.024 18.412-12.848 18.412-27.546 0-19.623-12.53-31.389-36.696-31.389zM298.5 187.155h-9.995l-1.881 13.295c-5.994-9.74-16.675-15.623-29.476-15.623-23.88 0-42.563 20.724-42.563 58.169 0 38.211 19.608 57.851 44.029 57.851 21.887 0 37.493-15.32 39.757-34.959h-13.343c-2.391 13.614-12.274 21.808-26.414 21.808-16.818 0-30.161-14.538-30.161-44.715 0-30.017 14.538-45.177 30.288-45.177 14.937 0 27.483 11.446 27.483 27.849v8.656h-28.152v12.673h40.411v-59.827zM347.71 226.913h-17.089v-39.757h-13.614v111.382h31.213c24.151 0 37.606-12.689 37.606-36.202 0.016-22.573-12.897-35.421-38.115-35.421z" horiz-adv-x="510" />
-<glyph unicode="&#xe605;" d="M217.2 163.008l-19.808 64.528-15.248-50.192-4.368-14.336zM556.368 481.776l-12.384 14.224-69.088-60.192c-11.664 9.392-26.512 15.040-42.672 15.040-37.68 0-68.224-30.528-68.224-68.208 0-12.8 3.616-24.736 9.728-34.992l-32.816-28.608c-36.064 37.584-86.672 61.072-142.88 61.072-109.36 0.016-198.032-88.656-198.032-198.064 0-1.584 0.192-3.136 0.24-4.704h131.216l36.352 96.704h60.496l36.336-96.704h131.232c0.016 1.568 0.24 3.12 0.24 4.704 0 46.416-16.096 89.008-42.832 122.768l32.32 28.144c12.192-11.456 28.56-18.512 46.624-18.512 37.664 0 68.192 30.544 68.192 68.192 0 14.688-4.688 28.272-12.576 39.392l68.528 59.744zM295.76 94.544h-58.096l-8.976 29.632h-62.992l-8.736-29.632h-56.624l27.6 73.36h-127.2c7.264-102.752 92.72-183.904 197.312-183.904 104.624 0 190.064 81.152 197.344 183.92h-127.184l27.552-73.376z" horiz-adv-x="557" />
-<glyph unicode="&#xe606;" d="M0 496v-512h512v512h-512zM386.192 226.34h-239.063v34.161h239.083v-34.161z" />
-<glyph unicode="&#xe607;" d="M0 496v-512h512v512h-512zM361.82 222.94h-88.74v-88.76h-34.14v88.76h-88.76v34.119h88.74v88.76h34.14v-88.76h88.74v-34.119z" />
-<glyph unicode="&#xe608;" d="M462.254 21.519h-42.23v21.135h42.23v-21.135zM377.815 21.519h-42.23v21.135h42.23v-21.135zM293.376 21.519h-42.23v21.135h42.23v-21.135zM208.958 21.519h-42.209v21.135h42.23v-21.135zM124.519 21.519h-30.515v32.85h21.115v-11.735h9.4v-21.115zM481.28 65.879h-21.115v42.25h21.115v-42.25zM115.118 96.64h-21.115v42.25h21.115v-42.25zM481.28 150.38h-21.115v42.27h21.115v-42.27zM115.118 181.161h-21.115v42.25h21.115v-42.25zM481.28 234.901h-21.115v42.25h21.115v-42.25zM481.28 319.421h-21.115v42.271h21.115v-42.271zM465.428 388.091h-42.23v21.135h42.23v-21.136zM381.010 388.091h-42.23v21.135h42.23v-21.136zM296.55 388.091h-42.23v21.135h42.23v-21.136zM221.47 339.881c0-8.13-6.574-14.684-14.663-14.684h-88.043c-8.11 0-14.663 6.553-14.663 14.684v0c0 8.13 6.553 14.704 14.663 14.704h88.043c8.089 0 14.663-6.574 14.663-14.704v0zM162.796 398.659c8.11 0 14.643-6.595 14.643-14.684v-88.166c0-8.090-6.554-14.684-14.643-14.684v0c-8.131 0-14.684 6.594-14.684 14.684v88.166c0 8.089 6.554 14.684 14.684 14.684v0zM344.945 199.060l-70.451 70.533c12.82 20.398 20.377 44.401 20.377 70.288 0 73.011-59.126 132.199-132.055 132.199-72.95 0-132.076-59.187-132.076-132.199 0-72.99 59.126-132.178 132.076-132.178 25.805 0 49.869 7.557 70.206 20.337l70.43-70.492c5.735-5.735 13.23-8.622 20.746-8.622s15.012 2.908 20.767 8.622c11.428 11.469 11.428 30.044-0.021 41.513zM74.731 339.881c0 48.62 39.526 88.125 88.064 88.125s88.023-39.506 88.023-88.125c0-48.62-39.486-88.146-88.023-88.146s-88.064 39.526-88.064 88.146z" />
-<glyph unicode="&#xe609;" d="M456.478 209.874c0-3.993-3.195-8.807-7.475-9.605l-49.337-7.475c-2.928-8.54-6.123-16.527-10.404-24.269 9.072-13.066 18.678-24.801 28.529-36.803 1.618-1.863 2.683-4.26 2.683-6.656s-0.798-4.26-2.416-6.144c-6.39-8.54-42.394-47.739-51.466-47.739-2.396 0-4.793 1.065-6.922 2.396l-36.803 28.795c-7.721-3.993-16.015-7.475-24.289-10.137-1.843-16.261-3.44-33.608-7.721-49.603-1.086-4.26-4.793-7.475-9.605-7.475h-59.187c-4.792 0-9.072 3.461-9.605 8.007l-7.475 49.070c-8.254 2.663-16.261 5.858-24.002 9.851l-37.601-28.529c-1.863-1.598-4.26-2.396-6.656-2.396s-4.792 1.065-6.677 2.928c-14.131 12.8-32.809 29.348-43.991 44.81-1.331 1.863-1.864 3.993-1.864 6.144 0 2.396 0.799 4.26 2.13 6.123 9.052 12.267 18.924 24.002 27.996 36.536-4.546 8.54-8.274 17.346-10.936 26.399l-48.804 7.209c-4.526 0.798-7.721 5.079-7.721 9.605v59.207c0 3.993 3.195 8.806 7.209 9.605l49.603 7.475c2.662 8.54 6.124 16.528 10.404 24.535-9.073 12.78-18.657 24.781-28.529 36.782-1.597 1.863-2.662 3.993-2.662 6.39s1.065 4.26 2.396 6.144c6.39 8.806 42.394 47.739 51.466 47.739 2.396 0 4.792-1.065 6.922-2.662l36.803-28.529c7.742 3.993 16.016 7.454 24.29 10.117 1.863 16.261 3.461 33.608 7.721 49.603 1.065 4.281 4.792 7.475 9.605 7.475h59.187c4.813 0 9.072-3.461 9.605-8.007l7.454-49.070c8.274-2.662 16.281-5.857 24.023-9.851l37.868 28.529c1.598 1.598 3.993 2.396 6.39 2.396 2.416 0 4.813-1.065 6.676-2.662 14.131-13.066 32.809-29.594 43.991-45.322 1.331-1.598 1.863-3.728 1.863-5.878 0-2.396-0.798-4.26-2.13-6.123-9.052-12.267-18.923-24.002-27.996-36.536 4.546-8.54 8.274-17.346 10.937-26.132l48.804-7.454c4.526-0.798 7.721-5.079 7.721-9.605v-59.207zM251.679 308.26c-37.602 0-68.26-30.679-68.26-68.26s30.679-68.26 68.26-68.26 68.26 30.679 68.26 68.26-30.659 68.26-68.26 68.26z" />
-<glyph unicode="&#xe60a;" d="M422.356 55.727h-33.007v16.503h33.007v-16.503zM356.342 55.727h-33.007v16.503h33.007v-16.503zM290.349 55.727h-33.007v16.503h33.007v-16.503zM224.334 55.727h-33.007v16.503h33.007v-16.503zM181.683 79.090h-16.504v32.986h16.504v-32.986zM440.232 87.342h-16.503v33.007h16.503v-33.007zM181.683 145.104h-16.504v33.007h16.504v-33.007zM440.232 153.356h-16.503v33.007h16.503v-33.007zM181.683 211.099h-16.504v33.007h16.504v-33.007zM440.232 219.37h-16.503v33.007h16.503v-33.007zM440.232 285.385h-16.503v33.007h16.503v-33.007zM404.461 315.628h-33.007v16.504h33.007v-16.504zM338.466 315.628h-33.007v16.504h33.007v-16.504zM272.452 315.628h-33.007v16.504h33.007v-16.504zM165.179 330.78l78.73-50.35c9.316 14.538 14.804 31.799 14.804 50.35 0 51.62-41.873 93.493-93.513 93.493s-93.534-41.852-93.534-93.493c0-51.66 41.873-93.534 93.514-93.534 10.852 0 21.213 1.945 30.898 5.344l-30.898 88.19zM262.624 184.377l67.591-77.031 13.534 10.217-59.053 84.217 52.377 6.942-153.57 98.243 60.281-172.059 18.838 49.47z" />
-<glyph unicode="&#xe60b;" d="M446.173 150.060l-17.586-30.224c-9.619-16.75-31.318-22.536-48.079-12.916l-73.075 42.034v-84.337c0-19.229-15.924-35.163-35.154-35.163h-35.162c-19.229 0-35.162 15.933-35.162 35.163v84.337l-73.075-42.034c-16.76-9.619-38.459-3.835-48.078 12.916l-17.576 30.224c-9.619 16.76-3.853 38.459 12.906 48.079l73.075 42.293-73.075 42.313c-16.76 9.61-22.526 31.309-12.906 48.069l17.577 30.224c9.619 16.76 31.319 22.526 48.078 12.916l73.075-42.035v84.337c-0.009 19.229 15.924 35.163 35.154 35.163h35.162c19.229 0 35.154-15.933 35.154-35.163v-84.337l73.075 42.035c16.76 9.61 38.459 3.844 48.079-12.916l17.586-30.224c9.61-16.76 3.844-38.459-12.925-48.069l-73.065-42.313 73.065-42.293c16.779-9.619 22.545-31.318 12.935-48.079z" />
-<glyph unicode="&#xe60c;" d="M82.766 177.788h-33.813c-25.23 0-48.952 12.111-48.952 40.129 0 20.434-0.759 89.070 31.296 89.070 5.296 0 31.535-21.443 65.599-21.443 11.611 0 22.703 2.019 33.554 5.805-0.75-5.555-1.259-11.101-1.259-16.657 0-22.962 7.315-45.675 20.444-64.6-26.239-0.76-49.961-12.111-66.868-32.305zM96.894 306.987c-35.582 0-64.6 29.018-64.6 64.6s29.017 64.6 64.6 64.6 64.6-29.018 64.6-64.6-29.018-64.6-64.6-64.6zM352.514-16h-220.548c-40.368 0-67.368 24.471-67.368 65.359 0 57.026 13.38 144.587 87.302 144.587 8.584 0 39.869-35.072 90.339-35.072s81.756 35.072 90.339 35.072c73.922 0 87.302-87.561 87.302-144.587 0-40.888-26.999-65.359-67.368-65.359zM242.24 177.788c-53.498 0-96.894 43.406-96.894 96.894s43.406 96.894 96.894 96.894 96.894-43.406 96.894-96.894-43.396-96.894-96.894-96.894zM478.616 275.192c-6.625-1.069-12.7-3.447-18.106-6.735l-134.235 168.538c6.375 7.754 9.603 17.976 7.884 28.608-3.188 19.734-21.753 33.104-41.467 29.926-19.675-3.177-33.084-21.743-29.887-41.457 3.188-19.695 21.743-33.074 41.428-29.887 5.156 0.839 9.842 2.738 13.939 5.416l133.675-167.849c-11.431-11.022-17.476-27.238-14.769-44.105 4.416-27.349 30.197-45.924 57.555-41.498 27.338 4.406 45.944 30.176 41.518 57.515-4.417 27.349-30.176 45.954-57.535 41.527z" horiz-adv-x="652" />
-<glyph unicode="&#xe60d;" d="M161.956 283.029h188.109v-99.041h-188.109v99.041zM429.036 114.068h-346.071v233.902h346.050v-233.902zM105.083 135.019h301.834v192h-301.834v-192zM52.839 302.832h-22.119v97.137h110.428v-20.971h-88.31zM481.28 302.832h-22.118v76.165h-88.351v20.971h110.469zM141.148 62.050h-110.428v97.157h22.118v-76.206h88.31zM481.28 62.050h-110.469v20.951h88.351v76.206h22.118z" />
-<glyph unicode="&#xe60e;" d="M483.52 245.333c0-47.128-38.205-85.333-85.334-85.333s-85.334 38.205-85.334 85.333c0 47.129 38.205 85.334 85.334 85.334s85.334-38.205 85.334-85.334zM178.667 328.554l119.296-83.222-119.296-83.221zM200 88.277h-121.024v21.334h99.69v85.397h21.334zM200 294.528h-21.334v86.528h-99.691v21.334h121.024zM139.819 391.722c0-29.455-23.878-53.333-53.334-53.333s-53.334 23.878-53.334 53.333c0 29.455 23.878 53.334 53.334 53.334s53.334-23.878 53.334-53.334zM139.819 98.944c0-29.455-23.878-53.334-53.334-53.334s-53.334 23.878-53.334 53.334c0 29.455 23.878 53.334 53.334 53.334s53.334-23.878 53.334-53.334z" />
-<glyph unicode="&#xe60f;" d="M478.596-16h-153.956c-16.568 0-30.064 13.495-30.064 30.064v154.904c0 16.569 13.495 30.064 30.064 30.064h153.956c16.568 0 30.064-13.495 30.064-30.064v-154.917c0-16.568-13.482-30.051-30.064-30.051zM324.64 192.351c-12.894 0-23.384-10.489-23.384-23.384v-154.918c0-12.894 10.489-23.384 23.384-23.384h153.956c12.894 0 23.384 10.489 23.384 23.384v154.918c0 12.894-10.489 23.384-23.384 23.384h-153.956zM474.079 82.050c1.697-0.989 1.951-2.806 1.416-4.236-5.532-13.669-17.45-49.159-34.954-49.68-0.187 0-0.334 0-0.467 0-13.736 0-26.243 19.241-38.269 58.819-13.683 44.923-25.374 54.517-32.883 54.517-0.094 0-0.187-0.026-0.267-0.026-15.26-0.414-28.354-39.084-32.108-53.928-0.428-1.777-2.071-2.699-3.567-2.245-1.536 0.467-2.418 2.245-1.978 3.955 1.483 5.973 15.3 58.004 37.52 58.685 13.87 0.267 26.55-18.867 38.709-58.913 13.656-44.829 25.334-54.409 32.87-54.409 0.080 0 0.187 0 0.267 0 13.082 0.374 24.8 33.738 29.957 46.245 0.721 1.524 2.045 2.218 3.755 1.216zM478.876 74.861c-5.264-2.058-10.035 0.628-11.638 6.641-2.445 9.046-17.49 49.078-26.87 49.305-1.964 0.281-12.947-2.111-27.526-50.053-13.082-43.118-27.005-63.255-43.76-63.255-0.214 0-0.387 0-0.588 0.040-25.882 0.775-40.38 52.873-43.052 63.282-1.296 5.158 1.363 10.489 5.973 11.959 4.596 1.524 9.366-1.483 10.663-6.641 5.251-20.483 17.45-49.012 26.831-49.279 1.804 0 12.988 2.084 27.565 50.107 13.082 43.118 27.005 63.202 43.72 63.202 0.227 0 0.414 0 0.615-0.026 21.646-0.601 41.555-59.821 42.784-64.644 1.256-4.81-0.575-8.993-4.716-10.636zM425.108 496h-398.384c-14.698 0-26.724-12.026-26.724-26.724v-400.415c0-14.698 12.025-26.724 26.724-26.724h271.192v126.831c0 14.698 12.026 26.724 26.724 26.724h127.205v273.584c-0.014 14.698-12.039 26.724-26.737 26.724zM157.684 134.174c-0.013-5.625-4.543-10.168-10.168-10.168l-2.071 0.026c-5.612 0-10.155 4.517-10.168 10.168l-0.013 34.006-82.175-82.189c-3.982-3.995-10.395-3.969-14.364 0l-1.483 1.47c-3.955 3.969-3.955 10.369 0.014 14.351l81.895 81.908h-33.431c-5.612-0.026-10.168 4.57-10.168 10.168v2.058c-0.053 5.625 4.516 10.195 10.129 10.195l58.124 0.014c0.294-0.026 0.575-0.12 0.869-0.12 2.94 0.281 5.986-0.682 8.204-2.926l1.457-1.443c1.911-1.924 2.873-4.37 2.953-6.882 0.227-0.815 0.374-1.657 0.387-2.526v-58.111zM289.418 165.561l-1.47-1.457c-3.982-3.982-10.396-3.982-14.39 0l-24.052 24.038v-116.221c0-5.639-4.53-10.168-10.168-10.168h-2.058c-5.625 0-10.155 4.529-10.155 10.168l-0.026 115.834-23.624-23.651c-3.969-3.982-10.422-3.982-14.377 0l-1.457 1.457c-4.008 3.928-4.008 10.382-0.026 14.364l41.075 41.087c0.24 0.187 0.494 0.348 0.708 0.548 1.884 2.272 4.73 3.728 7.857 3.728h2.058c2.713 0 5.131-1.042 6.948-2.739 0.749-0.441 1.443-0.935 2.084-1.536l41.075-41.087c3.969-3.982 3.969-10.423 0-14.364zM302.78 396.294l-1.804-1.75c-4.877-4.904-12.76-4.904-17.625 0l-29.543 29.463v-142.651c0-6.908-5.572-12.48-12.48-12.48h-2.539c-6.908 0-12.453 5.572-12.453 12.48l-0.026 142.157-29.008-28.969c-4.837-4.93-12.787-4.93-17.637-0.026l-1.804 1.777c-4.891 4.837-4.891 12.734-0.026 17.625l50.415 50.428c0.308 0.24 0.628 0.427 0.842 0.721 2.339 2.766 5.813 4.556 9.674 4.556h2.525c3.34 0 6.293-1.269 8.525-3.38 0.882-0.521 1.777-1.149 2.525-1.897l50.428-50.415c4.863-4.904 4.863-12.747 0.014-17.637z" horiz-adv-x="509" />
-<glyph unicode="&#xe610;" d="M481.738 193.72h-26.94v275.381c0 14.794-12.104 26.899-26.899 26.899h-401c-14.794 0-26.899-12.105-26.899-26.899v-403.045c0-14.795 12.104-26.899 26.899-26.899h272.974v-28.271c0-14.794 12.104-26.899 26.899-26.899h154.966c14.795 0 26.899 12.104 26.899 26.899v155.935c0 14.795-12.104 26.899-26.899 26.899z" horiz-adv-x="509" />
-<glyph unicode="&#xe611;" d="M511.986 239.993c0-141.363-114.615-255.993-255.964-255.993-141.392 0-256.022 114.63-256.022 255.993 0 141.392 114.629 256.007 256.022 256.007 141.349 0 255.964-114.615 255.964-256.007z" />
-<glyph unicode="&#xe612;" d="M256.022 496c-141.392 0-256.022-114.615-256.022-256.007 0-141.363 114.629-255.993 256.022-255.993 141.349 0 255.964 114.63 255.964 255.993 0 141.392-114.615 256.007-255.964 256.007zM257.115 81.238c-19.904 0-36.061 16.142-36.061 36.033 0 19.904 16.156 36.062 36.061 36.062s36.033-16.156 36.033-36.062c0-19.89-16.114-36.033-36.033-36.033zM304.875 247.56c-16.866-15.929-24.433-24.377-24.149-35.891 0-4.274 0-5.366 0-5.366 0-6.261-2.485-12.167-6.942-16.639-4.458-4.43-10.35-6.928-16.696-6.928-6.204 0-12.252 2.498-16.682 6.928-4.373 4.387-6.871 10.506-6.871 16.668 0 0-0.029 0.156-0.029 0.284-0.014 0.539-0.014 1.959-0.014 5.055 0.298 35.706 24.135 55.923 38.773 70.064 15.986 15.446 24.079 24.32 24.135 40.051-0.866 24.476-15.007 37.907-39.327 38.773-13.104-0.213-20.075-5.85-27.5-15.504-6.928-9.512-10.875-22.048-11.869-26.336-0.313-1.263-0.355-1.405-0.355-1.405h0.042c-2.484-12.82-14.893-21.197-27.656-18.683-12.792 2.385-21.168 14.822-18.669 27.614 0.34 1.505 3.606 19.223 15.305 38.901 11.031 19.252 34.642 42.82 70.717 42.635 23.625 0.057 45.673-8.603 61.489-24.178 15.901-15.503 25.115-37.722 25.072-61.816 0.029-36.998-23.341-59.615-38.773-74.224z" />
-<glyph unicode="&#xe613;" d="M386.192 226.34h-239.063v34.161h239.083v-34.161z" />
-<glyph unicode="&#xe614;" d="M361.82 222.94h-88.74v-88.76h-34.14v88.76h-88.74v34.119h88.74v88.76h34.14v-88.76h88.74v-34.119z" />
-<glyph unicode="&#xe615;" d="M476.623 309.818v162.899h-93.091v-69.818l-93.141 93.101-255.951-256h46.495v-256.010h139.686v186.192h139.637v-186.192h139.647v256.010h46.535z" horiz-adv-x="581" />
-<glyph unicode="&#xe616;" d="M141.108 496v-512h106.666v85.334h85.334v-85.334h106.676v512h-298.676zM269.108 453.333h42.666v-64h-42.666v64zM269.108 368h42.666v-64h-42.666v64zM269.108 282.666h42.666v-64h-42.666v64zM269.108 197.334h42.666v-64h-42.666v64zM183.775 453.333h42.667v-64h-42.666v64zM183.775 368h42.667v-64h-42.666v64zM183.775 282.666h42.667v-64h-42.666v64zM183.775 197.334h42.667v-64h-42.666v64zM397.108 133.334h-42.656v64h42.656v-64zM397.108 218.666h-42.656v64h42.656v-64zM397.108 304h-42.656v64h42.656v-64zM397.108 389.333h-42.656v64h42.656v-64z" horiz-adv-x="581" />
-<glyph unicode="&#xe617;" d="M148.209 401.188v37.923h-56.889v-37.923h-18.957v-417.188h94.822v417.188h-18.976zM110.287 21.923h-18.957v18.966h18.966v-18.966zM110.287 59.855h-18.957v18.957h18.966v-18.957zM110.287 97.778h-18.957v18.957h18.966v-18.957zM110.287 135.711h-18.957v18.957h18.966v-18.957zM110.287 173.623h-18.957v18.966h18.966v-18.966zM110.287 211.555h-18.957v18.966h18.966v-18.966zM110.287 249.478h-18.957v18.966h18.966v-18.966zM110.287 287.41h-18.957v18.966h18.966v-18.966zM110.287 325.333h-18.957v18.966h18.966v-18.966zM148.209 21.923h-18.957v18.966h18.957v-18.966zM148.209 59.855h-18.957v18.957h18.957v-18.957zM148.209 97.778h-18.957v18.957h18.957v-18.957zM148.209 135.711h-18.957v18.957h18.957v-18.957zM148.209 173.623h-18.957v18.966h18.957v-18.966zM148.209 211.555h-18.957v18.966h18.957v-18.966zM148.209 249.478h-18.957v18.966h18.957v-18.966zM148.209 287.41h-18.957v18.966h18.957v-18.966zM148.209 325.333h-18.957v18.966h18.957v-18.966zM299.92 439.111v-455.111h94.811v512l-94.812-56.889zM337.853 21.923h-18.966v18.966h18.966v-18.966zM337.853 59.855h-18.966v18.957h18.966v-18.957zM337.853 97.778h-18.966v18.957h18.966v-18.957zM337.853 135.711h-18.966v18.957h18.966v-18.957zM337.853 173.623h-18.966v18.966h18.966v-18.966zM337.853 211.555h-18.966v18.966h18.966v-18.966zM337.853 249.478h-18.966v18.966h18.966v-18.966zM337.853 287.41h-18.966v18.966h18.966v-18.966zM337.853 325.333h-18.966v18.966h18.966v-18.966zM337.853 363.266h-18.966v18.957h18.966v-18.957zM337.853 401.188h-18.966v18.957h18.966v-18.957zM375.775 21.923h-18.966v18.966h18.966v-18.966zM375.775 59.855h-18.966v18.957h18.966v-18.957zM375.775 97.778h-18.966v18.957h18.966v-18.957zM375.775 135.711h-18.966v18.957h18.966v-18.957zM375.775 173.623h-18.966v18.966h18.966v-18.966zM375.775 211.555h-18.966v18.966h18.966v-18.966zM375.775 249.478h-18.966v18.966h18.966v-18.966zM375.775 287.41h-18.966v18.966h18.966v-18.966zM375.775 325.333h-18.966v18.966h18.966v-18.966zM375.775 363.266h-18.966v18.957h18.966v-18.957zM375.775 401.188h-18.966v18.957h18.966v-18.957zM186.142 344.299v-360.299h94.822v360.299h-94.822zM224.065 40.889h-18.966v18.966h18.966v-18.966zM224.065 78.812h-18.966v18.966h18.966v-18.966zM224.065 116.734h-18.966v18.966h18.966v-18.966zM224.065 154.666h-18.966v18.957h18.966v-18.957zM224.065 192.589h-18.966v18.966h18.966v-18.966zM224.065 230.522h-18.966v18.956h18.966v-18.956zM224.065 268.444h-18.966v18.966h18.966v-18.966zM224.065 306.367h-18.966v18.966h18.966v-18.966zM261.997 40.889h-18.966v18.966h18.966v-18.966zM261.997 78.812h-18.966v18.966h18.966v-18.966zM261.997 116.734h-18.966v18.966h18.966v-18.966zM261.997 154.666h-18.966v18.957h18.966v-18.957zM261.997 192.589h-18.966v18.966h18.966v-18.966zM261.997 230.522h-18.966v18.956h18.966v-18.956zM261.997 268.444h-18.966v18.966h18.966v-18.966zM261.997 306.367h-18.966v18.966h18.966v-18.966zM489.553 306.367v18.966h-18.957v-18.966h-18.966v18.966h-18.957v-18.966h-18.966v-322.367h94.822v322.367h-18.976zM451.62 40.889h-18.957v18.966h18.957v-18.966zM451.62 78.812h-18.957v18.966h18.957v-18.966zM451.62 116.734h-18.957v18.966h18.957v-18.966zM451.62 154.666h-18.957v18.957h18.957v-18.957zM451.62 192.589h-18.957v18.966h18.957v-18.966zM451.62 230.522h-18.957v18.956h18.957v-18.956zM451.62 268.444h-18.957v18.966h18.957v-18.966zM489.553 40.889h-18.957v18.966h18.957v-18.966zM489.553 78.812h-18.957v18.966h18.957v-18.966zM489.553 116.734h-18.957v18.966h18.957v-18.966zM489.553 154.666h-18.957v18.957h18.957v-18.957zM489.553 192.589h-18.957v18.966h18.957v-18.966zM489.553 230.522h-18.957v18.956h18.957v-18.956zM489.553 268.444h-18.957v18.966h18.957v-18.966z" horiz-adv-x="581" />
-<glyph unicode="&#xe618;" d="M475.238 496h-438.887c-20.173 0-36.352-16.371-36.352-36.57v-438.848c0-20.211 16.179-36.582 36.352-36.582h438.887c20.185 0 36.762 16.371 36.762 36.57v438.861c0 20.198-16.576 36.57-36.762 36.57zM374.759 362.061l1.959 1.959c5.312 5.325 13.913 5.325 19.238 0l55.040-55.014c0.819-0.832 1.459-1.779 2.074-2.791 2.253-2.406 3.673-5.645 3.673-9.28v-2.765c0-4.237-1.945-8.025-4.992-10.534-0.269-0.307-0.512-0.653-0.768-0.935l-55.053-55.001c-5.312-5.337-13.939-5.337-19.213 0.013l-1.971 1.945c-5.299 5.312-5.312 13.965 0.026 19.264l31.642 31.641-155.111 0.026c-7.526-0.026-13.594 6.093-13.594 13.594v2.752c0 7.539 6.080 13.619 13.594 13.619h155.673l-32.231 32.231c-5.286 5.351-5.299 13.952 0.013 19.277zM55.232 370.073c0 3.623 1.408 6.861 3.687 9.28 0.589 1.011 1.255 1.945 2.061 2.791l55.027 55.014c5.338 5.325 13.926 5.325 19.251 0l1.933-1.959c5.325-5.325 5.325-13.913 0-19.264l-32.179-32.218h155.661c7.539 0 13.606-6.093 13.606-13.606v-2.777c0-7.514-6.080-13.594-13.606-13.594l-155.123-0.038 31.654-31.642c5.338-5.299 5.338-13.952 0.013-19.264l-1.946-1.945c-5.286-5.363-13.913-5.363-19.239-0.026l-55.040 55.014c-0.269 0.295-0.474 0.64-0.768 0.935-3.033 2.509-4.992 6.298-4.992 10.534v2.765zM136.819 117.926l-1.933-1.945c-5.312-5.312-13.913-5.312-19.239 0l-55.053 55.014c-0.256 0.269-0.499 0.64-0.768 0.96-3.034 2.471-4.992 6.272-4.992 10.509v2.765c0 3.61 1.408 6.848 3.673 9.255 0.589 0.998 1.242 1.933 2.074 2.791l55.015 54.989c5.338 5.338 13.939 5.338 19.251 0l1.946-1.92c5.325-5.338 5.299-13.939 0-19.277l-32.205-32.231h155.673c7.514 0 13.594-6.106 13.594-13.606v-2.765c0-7.514-6.093-13.619-13.594-13.619h-155.097l31.642-31.642c5.325-5.325 5.325-13.952 0.013-19.277zM457.139 109.325c0-4.25-1.959-8.051-4.966-10.522-0.281-0.32-0.512-0.678-0.781-0.947l-55.040-55.014c-5.325-5.299-13.952-5.299-19.238 0.013l-1.945 1.945c-5.312 5.325-5.337 13.965 0 19.277l31.654 31.642h-155.136c-7.488 0-13.581 6.118-13.581 13.619v2.765c0 7.514 6.093 13.606 13.581 13.606h155.686l-32.205 32.243c-5.312 5.312-5.337 13.926 0 19.251l1.945 1.933c5.325 5.337 13.913 5.337 19.251 0l55.014-54.989c0.819-0.845 1.498-1.805 2.074-2.777 2.279-2.432 3.673-5.671 3.673-9.305v-2.739z" />
-<glyph unicode="&#xe619;" d="M512 459.43c0 20.198-16.576 36.57-36.762 36.57h-438.887c-20.173 0-36.352-16.371-36.352-36.57v-438.848c0-20.211 16.179-36.582 36.352-36.582h438.887c20.185 0 36.762 16.371 36.762 36.57v438.861z" />
-<glyph unicode="&#xe61a;" d="M331.878 9.6c0-14.093-11.52-25.6-25.6-25.6h-280.678c-14.080 0-25.6 11.507-25.6 25.6v460.8c0 14.093 11.52 25.6 25.6 25.6h280.678c14.080 0 25.6-11.507 25.6-25.6v-460.8z" horiz-adv-x="332" />
-<glyph unicode="&#xe61b;" d="M306.279 496h-280.678c-14.080 0-25.6-11.507-25.6-25.6v-460.8c0-14.093 11.52-25.6 25.6-25.6h280.678c14.080 0 25.6 11.507 25.6 25.6v460.8c0 14.093-11.533 25.6-25.6 25.6zM80.793 81.728h-12.442v36.275h12.442v-36.275zM116.288 81.728h-12.454v36.275h12.454v-36.275zM151.757 81.728h-12.416v36.275h12.416v-36.275zM187.277 81.728h-12.467v36.275h12.467v-36.275zM222.758 81.728h-12.48v36.275h12.48v-36.275zM191.257 192.115v15.373h29.619v-15.373h-29.619zM258.253 81.728h-12.454v36.275h12.454v-36.275zM264.87 192.115h-29.645v15.373h29.645v-15.373zM282.663 244.889h-233.434v15.373h233.434v-15.373zM282.663 302.822h-233.434v15.385h233.434v-15.385zM282.663 360.793h-233.434v15.373h233.434v-15.373zM282.663 418.726h-233.434v15.385h233.434v-15.385z" horiz-adv-x="332" />
-<glyph unicode="&#xe61c;" d="M256 496c-141.389 0-256-114.611-256-256s114.611-256 256-256 256 114.611 256 256-114.611 256-256 256zM107.213 386.061l1.959 1.945c5.287 5.274 13.862 5.274 19.162 0l72.499-72.538v31.13c0 7.501 6.093 13.568 13.555 13.568v0.013h2.778c7.475 0 13.555-6.067 13.53-13.542l0.025-63.207c0-1.178-0.218-2.266-0.499-3.405-0.102-3.315-1.395-6.592-3.955-9.152l-1.946-1.933c-2.957-2.97-7.027-4.275-10.918-3.917-0.397-0.038-0.806-0.089-1.216-0.089h-63.194c-7.501 0-13.568 6.055-13.555 13.555v2.714c0 7.513 6.054 13.581 13.555 13.581h30.297l-72.103 72.128c-5.273 5.261-5.248 13.849 0.025 19.149zM227.277 190.745l-72.512-72.499h31.117c7.513 0 13.594-6.067 13.594-13.568v-2.726c0-7.526-6.080-13.594-13.555-13.581l-63.207-0.026c-1.203 0-2.304 0.231-3.43 0.525-3.302 0.089-6.592 1.382-9.139 3.942l-1.933 1.959c-2.983 2.944-4.275 7.027-3.917 10.931-0.038 0.384-0.115 0.793-0.115 1.229v63.168c0 7.501 6.080 13.594 13.581 13.568h2.727c7.488 0 13.581-6.067 13.581-13.555v-30.323l72.115 72.103c5.274 5.299 13.863 5.286 19.136-0.013l1.958-1.933c5.299-5.299 5.299-13.901 0-19.2zM284.505 289.792l72.499 72.499h-31.104c-7.514 0-13.568 6.106-13.568 13.581v2.739c0 7.501 6.055 13.568 13.529 13.555l63.207 0.013c1.229 0 2.304-0.205 3.443-0.499 3.315-0.103 6.592-1.395 9.139-3.942l1.933-1.945c2.969-2.97 4.262-7.027 3.904-10.931 0.026-0.384 0.103-0.793 0.103-1.229v-63.181c0-7.501-6.080-13.581-13.581-13.555h-2.714c-7.488 0-13.568 6.055-13.568 13.543v30.323l-72.141-72.115c-5.261-5.274-13.849-5.248-19.149 0.013l-1.945 1.958c-5.299 5.299-5.299 13.901 0.013 19.175zM404.787 93.747l-1.959-1.959c-5.286-5.286-13.888-5.286-19.187 0l-73.433 73.498v-31.142c0-7.488-6.093-13.555-13.568-13.555h-2.752c-7.501 0-13.555 6.067-13.555 13.517v63.232c0 1.19 0.205 2.291 0.474 3.405 0.103 3.315 1.395 6.592 3.955 9.165l1.945 1.933c2.969 2.957 7.040 4.262 10.931 3.904 0.397 0.038 0.793 0.103 1.216 0.103h63.193c7.475 0 13.568-6.067 13.555-13.568v-2.726c0-7.501-6.080-13.581-13.543-13.581h-30.31l73.063-73.075c5.274-5.261 5.248-13.863-0.026-19.149z" />
-<glyph unicode="&#xe61d;" d="M512 240c0-141.385-114.615-256-256-256s-256 114.615-256 256c0 141.385 114.615 256 256 256s256-114.615 256-256z" />
-<glyph unicode="&#xe61e;" d="M368.333 496h-348.313c-11.046 0-20.019-8.947-20.019-19.994v-472.025c0-11.008 8.973-19.981 20.019-19.981h348.313c11.008 0 19.993 8.973 19.993 19.993v472.013c0 11.046-8.973 19.993-19.993 19.993zM194.611 1.51c-7.962 0-14.439 6.49-14.439 14.438 0 7.974 6.477 14.49 14.439 14.49 7.987 0 14.477-6.515 14.477-14.49 0-7.949-6.489-14.438-14.477-14.438zM351.040 46.605h-313.715v395.878h313.715v-395.878z" horiz-adv-x="389" />
-<glyph unicode="&#xe61f;" d="M20.019-16c-11.046 0-20.019 8.973-20.019 19.993v472.013c0 11.046 8.973 19.993 20.019 19.993h348.313c11.008 0 19.993-8.947 19.993-19.993v-472.026c0-11.008-8.973-19.993-19.993-19.993h-348.313z" horiz-adv-x="389" />
-<glyph unicode="&#xe620;" d="M515.947 9.798c0-14.188-11.609-25.798-25.798-25.798h-157.738c-14.188 0-25.798 11.609-25.798 25.798v157.751c0 14.188 11.609 25.798 25.798 25.798h157.738c14.188 0 25.798-11.609 25.798-25.798v-157.751zM311.748 14.931c0-14.188 11.609-25.798 25.798-25.798h147.47c14.188 0 25.798 11.609 25.798 25.798v147.509c0 14.188-11.609 25.798-25.798 25.798h-147.471c-14.188 0-25.798-11.609-25.798-25.798v-147.509zM306.615 113.115h-73.471c-7.546 0-13.685 6.166-13.685 13.724v2.786c0 7.572 6.14 13.712 13.685 13.712h73.471v24.198c0 14.188 11.609 25.798 25.798 25.798h23.914c0.438 0.632 0.697 1.341 1.264 1.883l1.961 1.947c5.366 5.378 14.021 5.378 19.399 0l3.844-3.844h92.161v276.883c0 14.201-11.609 25.797-25.798 25.797h-423.361c-14.188 0-25.797-11.596-25.797-25.797v-423.348c0-14.188 11.609-25.798 25.797-25.798h280.817v92.058zM357.151 381.524l1.974 1.974c5.353 5.366 14.021 5.366 19.387 0l55.464-55.439c0.825-0.838 1.471-1.793 2.089-2.812 2.27-2.425 3.702-5.688 3.702-9.351v-2.786c0-4.269-1.961-8.088-5.031-10.615-0.271-0.31-0.516-0.658-0.774-0.942l-55.477-55.425c-5.353-5.379-14.046-5.379-19.361 0.013l-1.986 1.96c-5.34 5.353-5.353 14.072 0.026 19.413l31.885 31.885-156.306 0.026c-7.584-0.026-13.698 6.14-13.698 13.699v2.773c0 7.598 6.127 13.724 13.698 13.724h156.874l-32.479 32.479c-5.327 5.392-5.34 14.059 0.013 19.425zM35.175 389.599c0 3.651 1.419 6.913 3.715 9.351 0.593 1.019 1.264 1.961 2.077 2.812l55.452 55.438c5.379 5.366 14.034 5.366 19.4 0l1.948-1.986c5.366-5.366 5.366-14.021 0-19.413l-32.44-32.466h156.861c7.597 0 13.712-6.14 13.712-13.712v-2.799c0-7.572-6.127-13.699-13.712-13.699l-156.319-0.026 31.898-31.886c5.379-5.34 5.379-14.060 0.013-19.412l-1.96-1.961c-5.327-5.404-14.021-5.404-19.386-0.026l-55.465 55.439c-0.271 0.296-0.477 0.645-0.774 0.942-3.057 2.528-5.031 6.346-5.031 10.615v2.786zM117.391 135.508l-1.948-1.961c-5.353-5.353-14.021-5.353-19.386 0l-55.477 55.438c-0.258 0.271-0.503 0.645-0.774 0.967-3.057 2.49-5.030 6.32-5.030 10.59v2.786c0 3.637 1.419 6.901 3.702 9.325 0.593 1.006 1.251 1.947 2.090 2.812l55.439 55.412c5.379 5.378 14.046 5.378 19.4 0l1.96-1.935c5.366-5.379 5.34-14.047 0-19.425l-32.453-32.479h156.873c7.572 0 13.698-6.152 13.698-13.712v-2.786c0-7.572-6.14-13.724-13.698-13.724h-156.306l31.886-31.885c5.379-5.366 5.366-14.060 0.026-19.425zM391.901 58.967c-11.093 7.842-15.995 21.244-13.763 33.897h-38.644v11.144l-16.123-16.407 16.123-16.459v11.144h38.129c-25.113-29.151-39.186-54.536-32.762-61.397 6.475-6.901 31.692 7.068 60.83 32.401-4.94 0.825-9.635 2.735-13.788 5.675zM416.898 53.473c-1.87-0.322-3.715-0.697-5.637-0.697-1.638 0-3.264 0.142-4.863 0.374v-37.174h-11.041l16.291-16.304 16.252 16.304h-11.002v37.497zM499.927 87.602l-16.136 16.407v-11.144h-38.387c26.519 30.235 41.637 56.961 35.007 64.003-6.668 7.133-33.253-7.933-63.513-34.762v38.335h11.002l-16.252 16.317-16.291-16.317h11.041v-38.167c-29.706 26.468-55.864 41.508-62.803 34.878-7.055-6.759 7.907-33.652 34.53-64.261 0.825 4.708 2.579 9.325 5.469 13.492 6.32 9.12 16.678 14.575 27.707 14.575 6.952 0 13.647-2.128 19.361-6.178 15.246-10.809 18.923-32.066 8.281-47.442-5.147-7.43-13.027-12.228-21.721-13.815 28.971-25.488 54.226-39.793 61.050-33.305 6.875 6.591-7.185 32.389-32.62 62.068h38.128v-11.144l16.149 16.459z" horiz-adv-x="516" />
-<glyph unicode="&#xe621;" d="M474.929 46.855c0-14.188-11.609-25.798-25.798-25.798h-423.334c-14.188 0-25.797 11.609-25.797 25.798v423.348c0 14.201 11.609 25.797 25.797 25.797h423.334c14.188 0 25.798-11.596 25.798-25.797v-423.348zM515.947 9.798c0-14.202-11.609-25.798-25.798-25.798h-157.738c-14.188 0-25.798 11.596-25.798 25.798v157.751c0 14.202 11.609 25.798 25.798 25.798h157.738c14.188 0 25.798-11.596 25.798-25.798v-157.751zM311.748 14.931c0-14.202 11.609-25.798 25.798-25.798h147.47c14.188 0 25.798 11.596 25.798 25.798v147.509c0 14.202-11.609 25.798-25.798 25.798h-147.471c-14.188 0-25.798-11.596-25.798-25.798v-147.509zM513.38 12.377c0-14.188-11.609-25.798-25.798-25.798h-152.604c-14.188 0-25.798 11.609-25.798 25.798v152.617c0 14.188 11.609 25.798 25.798 25.798h152.604c14.188 0 25.798-11.609 25.798-25.798v-152.617z" horiz-adv-x="516" />
-<glyph unicode="&#xe622;" d="M535.756 496h-320.961c-15.508 0-28.663 0-29.255 0-0.578 0-13.746 0-29.241 0h-128.102c-15.508 0-28.198-12.689-28.198-28.197v-455.604c0-15.509 12.689-28.197 28.198-28.197h128.102c15.508 0 28.663 0 29.241 0 0.592 0 13.761 0 29.255 0h320.961c15.509 0 28.197 12.689 28.197 28.197v455.604c0 15.508-12.689 28.197-28.197 28.197zM174.121 190.281c6.063-92.404 8.023-140.411 1.917-146.36l-1.692-1.692c-8.375-8.403-12.774-11.053-49.233-11.053-41.535 0-47.175 3.779-55.916 12.322l-0.423 0.423c-5.23 5.104-3.553 40.055 2.538 121.659 2.186 29.339 4.272 57.058 4.272 70.156 0 8.389-1.481 33.485-3.201 62.571-3.581 60.865-6.189 108.040-4.399 115.752 2.975 12.943 13.436 21.599 54.803 21.599 47.26 0 54.351-8.784 59.272-21.204 2.411-6.119-0.79-48.669-5.935-112.918-2.453-30.693-4.582-57.213-4.582-65.799 0-6.302 1.128-23.587 2.58-45.454zM306.086 33.995h-61.373v20.74h61.373v-20.74zM306.086 93.266h-61.373v20.753h61.373v-20.753zM488.032 33.995h-161.925v20.74h161.925v-20.74zM488.032 99.173h-161.925v20.767h161.925v-20.767zM488.032 164.381h-161.925v20.74h161.925v-20.74zM502.695 226.106h-280.341v206.59h280.341v-206.59z" horiz-adv-x="564" />
-<glyph unicode="&#xe623;" d="M214.796 496c-15.508 0-28.663 0-29.255 0-0.578 0-13.746 0-29.241 0h-128.102c-15.508 0-28.198-12.689-28.198-28.197v-455.604c0-15.509 12.689-28.197 28.198-28.197h128.102c15.508 0 28.663 0 29.241 0 0.592 0 13.761 0 29.255 0h320.96c15.509 0 28.197 12.689 28.197 28.197v455.604c0 15.508-12.689 28.197-28.197 28.197h-320.961z" horiz-adv-x="564" />
-<glyph unicode="&#xe624;" d="M619.042 480.25h-567.185c-17.169 0-31.215-14.047-31.215-31.216v-352.891c0-17.168 14.047-31.216 31.215-31.216h250.582l-43.125-43.108c-12.127-12.127-8.023-22.069 9.146-22.069h133.992c17.168 0 21.274 9.942 9.146 22.069l-43.108 43.108h250.551c17.168 0 31.216 14.047 31.216 31.216v352.891c0 17.168-14.063 31.215-31.216 31.215zM597.426 110.081h-523.937v325.015h523.937v-325.015z" horiz-adv-x="671" />
-<glyph unicode="&#xe625;" d="M315.497 68.586c12.209 12.209 32.226 12.209 44.435 0l46.618-46.618c12.209-12.209 8.076-22.218-9.207-22.218h-119.272c-17.284 0-21.416 10.009-9.207 22.217l46.634 46.618zM414.358 18.746c12.209-12.209 8.076-22.217-9.207-22.217h-134.891c-17.284 0-21.416 10.009-9.207 22.217l54.443 54.428c12.209 12.209 32.226 12.209 44.435 0l54.428-54.428zM276.688 25.204c-12.209-12.209-8.076-22.218 9.207-22.218h103.624c17.284 0 21.416 10.009 9.207 22.217l-38.793 38.81c-12.209 12.209-32.226 12.209-44.435 0l-38.81-38.81zM654.617 93.568c0-17.284-14.141-31.425-31.425-31.425h-570.987c-17.284 0-31.425 14.141-31.425 31.425v355.257c0 17.284 14.141 31.425 31.425 31.425h570.987c17.284 0 31.425-14.141 31.425-31.425v-355.257z" horiz-adv-x="676" />
-<glyph unicode="&#xe626;" d="M0 394.299c0-40.82 9.109-73.945 20.36-73.945h70.046v147.975h-70.046c-11.251 0-20.36-33.139-20.36-74.030zM571.11 17.767l-195.89 116.692h15.477v46.16h140.75c15.706 0 28.556 12.85 28.556 28.555v69.39h-451.563v-69.39c0-15.705 12.85-28.555 28.555-28.555h148.732v-46.16h16.405l-195.862-116.692 8.924-14.963 214.766 127.957v-146.761h17.433v146.761l214.808-127.957 8.909 14.963zM560.016 467.459c0 15.705-12.85 28.555-28.556 28.555h-394.466c-15.706 0-28.555-12.85-28.555-28.555v-171.462h451.576v171.462z" horiz-adv-x="568" />
-<glyph unicode="&#xe627;" d="M0 389.687c0-40.36 9.007-73.111 20.131-73.111h69.257v146.306h-69.257c-11.124 0-20.131-32.765-20.131-73.195zM386.291 172.656h148.847c15.529 0 28.234 12.705 28.234 28.233v266.877c0 15.529-12.705 28.233-28.234 28.233h-401.509c-15.528 0-28.233-12.705-28.233-28.233v-266.877c0-15.529 12.705-28.233 28.233-28.233h148.875v-39.88h16.22l-181.513-108.162c-6.677-3.967-10.15-10.545-7.722-14.625 2.428-4.065 9.867-4.136 16.545-0.17l200.218 119.286v-130.989c0-7.764 3.868-14.116 8.611-14.116s8.611 6.353 8.611 14.116v130.989l200.26-119.286c6.677-3.967 14.116-3.896 16.545 0.17 2.414 4.079-1.059 10.658-7.736 14.625l-181.542 108.163h15.288v39.88z" horiz-adv-x="564" />
-<glyph unicode="&#xe628;" d="M252.409 140.277c24.48 0.625 48.531 52.403 59.735 86.012-0.61 1.997-1.127 3.75-1.509 5.076-12.712 44.584-38.882 92.642-57.54 93.101h-0.016c-6.509 0-29.234-6.874-59.019-94.426-0.473-1.387-0.945-2.652-1.418-4.009 28.153-76.974 50.971-85.753 59.765-85.753zM548.018 141.313c25.714 0.671 49.278 54.842 59.871 86.12-0.534 0.991-1.265 1.875-1.585 3.003-12.712 45.239-38.913 94.015-57.646 94.517-6.234 0-28.914-6.768-58.576-93.923-0.564-1.631-1.113-3.155-1.676-4.755 28.076-76.257 50.833-84.961 59.613-84.961zM399.664 330.912c-23.854-0.656-47.404-50.468-59.049-84.518 0.731-2.379 1.372-4.512 1.798-6.036 12.682-44.599 38.776-92.657 57.433-93.131 6.478 0 29.144 6.813 58.957 94.456 0.274 0.808 0.534 1.524 0.823 2.302-28.274 78.026-51.168 86.927-59.964 86.927zM548.978 120.142c0 0-0.015 0-0.030 0-26.4 0-49.781 25.226-71.7 76.73-23.336-56.137-48.197-82.675-77.111-82.675-36.978 0.945-62.661 46.352-76.974 81.135-13.779-33.289-37.526-75.403-69.794-76.257h-0.976c-25.638 0-48.989 25.47-70.938 77.415-23.458-56.594-48.44-83.36-77.477-83.36h-0.96c-34.371 0.899-59.049 41.733-73.697 75.601v-150.99c0-16.766 13.718-30.485 30.484-30.485h526.011c16.766 0 30.485 13.718 30.485 30.485v152.697c-14.038-31.796-36.992-69.505-67.325-70.297zM162.784 240.663c0.351 1.052 0.716 2.012 1.067 3.048-28.335 77.843-51.305 86.729-60.146 86.729-25.866-0.686-49.766-56.412-59.917-86.698 0.975-1.433 1.935-2.881 2.408-4.619 12.666-44.492 38.791-92.475 57.479-92.977 6.493 0.015 29.235 6.829 59.109 94.517zM102.714 351.596v0c26.583 0 50.208-25.729 72.31-78.224 23.535 57.128 48.623 84.138 77.858 84.138 36.642-0.929 62.28-45.788 76.668-80.51 13.962 33.35 37.435 74.2 69.094 75.083h0.015c26.553 0 50.087-25.759 72.096-78.329 23.519 57.219 48.547 84.245 77.736 84.245 30.043-0.808 52.647-31.384 67.783-61.716v145.975c0 16.766-13.718 30.485-30.485 30.485h-525.981c-16.766 0-30.485-13.718-30.485-30.485v-175.835c12.925 34.020 37.922 84.229 73.391 85.174z" horiz-adv-x="646" />
-<glyph unicode="&#xe629;" d="M29.323 442.257c0 16.766 13.718 30.484 30.485 30.484h526.011c16.766 0 30.485-13.718 30.485-30.484v-404.514c0-16.766-13.718-30.485-30.485-30.485h-526.011c-16.766 0-30.485 13.718-30.485 30.485v404.514z" horiz-adv-x="646" />
-<glyph unicode="&#xe62a;" d="M462.478 372.122c0-33.44-27.128-60.525-60.568-60.525-33.389 0-60.525 27.085-60.525 60.525 0 33.448 27.128 60.542 60.525 60.542 33.431 0 60.568-27.094 60.568-60.542zM447.353 103.929c0-35.389-28.697-64.095-64.112-64.095-35.38 0-64.13 28.697-64.13 64.095 0 35.423 28.749 64.112 64.13 64.112 35.414 0 64.112-28.68 64.112-64.112zM362.236 430.198c-0.474 0.517-9.080 8.675-23.584 17.565-14.512 8.778-35.087 19.039-57.558 23.403-5.441 1.69-11.149 2-16.703 2.776-5.613 0.5-10.899 1.733-16.478 1.535-11.184 0.337-21.118-1.009-29.646-2.173-6.691-1.5-12.27-2.707-16.177-3.57-2.259-0.534-3.466-0.991-3.466-0.991l-7.666 27.257c-25.972-22.903-45.193-49.643-56.015-77.271 29.189 4.406 56.955 0.431 80.082-8.175l-7.683 27.283c0 0 1.026 0.406 2.923 0.837 3.243 0.716 7.89 1.75 13.469 2.983 6.907 0.897 14.97 2.001 23.274 1.725 4.165 0.233 8.804-0.923 13.34-1.285 4.562-0.638 9.287-0.793 13.779-2.268 18.497-3.493 35.621-12.167 47.599-19.35 12.046-7.382 18.6-13.719 18.048-13.193l22.463 22.911zM248.593 102.756c0 0 4.216-26.084 5.794-41.692-47.504-1.302-91.292 15.728-119.454 41.692 4.173-0.345 15.16 0 19.419 0 85.842 0 155.447 69.587 155.447 155.43 0 85.868-69.605 155.447-155.447 155.447-79.522 0.008-154.352-73.468-154.352-155.421 0-140.21 114.755-239.495 263.519-239.495 3.966-10.899 5.502-23.3 8.011-34.707 26.861 28.034 38.277 49.289 54.885 85.73-38.976 10.675-48.341 13.486-77.822 33.017zM85.695 246.536c0 54.032 29.439 82.609 75.96 82.609 36.967 0 64.655-19.488 70.415-55.377h-37.2c-4.208 19.945-16.168 29.456-33.216 29.456-22.144 0-37.209-16.6-37.209-56.688 0-42.063 16.392-57.343 36.105-57.343 20.808 0 32.992 10.848 34.76 35.871h37.873c-4.872-40.752-30.345-62.008-73.296-62.008-42.537 0-74.192 27.904-74.192 83.479z" horiz-adv-x="463" />
-<glyph unicode="&#xe62b;" d="M269.873-16c0 0 0 55.644 0 56.906 44.231 32.846 170.641 183.29 180.791 194.676 10.124 11.361-21.794 37.946-46.087 17.724-18.676-15.508-87.897-74.604-95.496-46.782s46.215 205.625 52.501 237.13c6.028 30.346-48.946 45.829-60.409 5.641-10.588-37.121-27.59-121.463-38.564-135.941-12.339-16.255-21.82-6.955-23.082 5.693-1.262 12.623 18.032 176.952-29.007 176.952-51.6 0-21.175-175.407-36.735-180.791-32.871-11.361-26.25 157.735-70.147 150.445-45.932-7.651-0.927-146.014-0.618-163.067 0.284-17.62-8.836-29.394-18.316-10.408-13.164 26.302-44.876 115.023-78.725 96.707-36.993-20.094 109.691-273.401 109.691-341.694 0-40.445 2.525-63.192 2.525-63.192h151.681z" horiz-adv-x="453" />
-<glyph unicode="&#xe62c;" d="M482.743 320.457v175.543h-175.543zM379.603 454.909l62.063-62.063-100.853-100.853-62.063 62.063 100.853 100.853zM0 320.457v175.543h175.543zM203.934 354.052l-62.063-62.063-100.853 100.853 62.063 62.063 100.852-100.853zM482.743 159.543v-175.543h-175.543zM278.747 125.889l62.063 62.063 100.853-100.853-62.063-62.063-100.853 100.853zM0 159.543v-175.543h175.543zM103.080 25.036l-62.063 62.063 100.853 100.853 62.063-62.063-100.853-100.853z" horiz-adv-x="483" />
-<glyph unicode="&#xe62d;" d="M255.987-16c-141.143 0-255.987 114.844-255.987 256.013s114.844 255.987 255.987 255.987 255.987-114.844 255.987-255.987-114.819-256.013-255.987-256.013zM255.987 470.467c-127.075 0-230.455-103.38-230.455-230.455s103.38-230.455 230.455-230.455 230.455 103.38 230.455 230.455-103.355 230.455-230.455 230.455zM240.157 126.752v92.095h-91.201v29.439h91.202v92.554h31.66v-92.554h91.202v-29.413h-91.202v-92.095h-31.66z" />
-<glyph unicode="&#xe62e;" d="M256.013-16c-141.168 0-256.013 114.844-256.013 256.013s114.844 255.987 256.013 255.987c141.117 0 255.962-114.844 255.962-255.987s-114.819-256.013-255.962-256.013zM256.013 470.467c-127.1 0-230.481-103.38-230.481-230.455s103.38-230.455 230.481-230.455c127.075 0 230.43 103.38 230.43 230.455s-103.355 230.455-230.429 230.455zM152.887 254.719h206.199v-29.413h-206.199v29.413z" />
-<glyph unicode="&#xe62f;" d="M442.173 309.822v162.896h-93.089v-69.817l-93.139 93.099-255.946-255.995h46.495v-256.005h418.961v256.005h46.534z" />
-<glyph unicode="&#xe630;" d="M0 496v-512h106.666v85.334h85.334v-85.334h106.666v512h-298.666z" horiz-adv-x="299" />
-<glyph unicode="&#xe631;" d="M75.835 401.188v37.923h-56.879v-37.923h-18.956v-417.188h94.822v417.188h-18.986zM227.555 439.111v-455.111h94.811v512l-94.811-56.889zM113.768 344.299v-360.299h94.821v360.299h-94.822zM417.178 306.367v18.966h-18.957v-18.966h-18.957v18.966h-18.957v-18.966h-18.957v-322.367h94.812v322.367h-18.986z" horiz-adv-x="436" />
-<glyph unicode="&#xe632;" d="M203.819 245.333c0-47.128-38.205-85.333-85.334-85.333s-85.334 38.205-85.334 85.333c0 47.129 38.205 85.334 85.334 85.334s85.334-38.205 85.334-85.334zM338.005 162.134l-119.296 83.2 119.296 83.221zM316.672 195.008h21.334v-85.376h99.69v-21.334h-121.024zM316.672 402.389h121.024v-21.334h-99.69v-86.528h-21.334zM483.498 391.722c0-29.455-23.878-53.333-53.334-53.333s-53.334 23.878-53.334 53.333c0 29.455 23.878 53.334 53.334 53.334s53.334-23.878 53.334-53.334zM483.498 98.966c0-29.455-23.878-53.334-53.334-53.334s-53.334 23.878-53.334 53.334c0 29.455 23.878 53.334 53.334 53.334s53.334-23.878 53.334-53.334z" />
-<glyph unicode="&#xe633;" d="M577.735 278.755c3.010 11.535 4.618 23.619 4.618 36.084-0.006 78.652-63.752 142.411-142.404 142.411-59.128 0-109.853-36.058-131.373-87.371-18.491 21.72-46.017 35.528-76.786 35.528-55.673 0-100.805-45.132-100.805-100.805 0-9.565 1.363-18.82 3.856-27.584-45.468-16.676-77.864-60.329-77.864-111.584 0-65.567 53.135-118.811 118.773-118.811h366.199c65.677 0 118.811 53.238 118.811 118.811 0 53.173-34.863 98.156-83.024 113.322z" horiz-adv-x="718" />
-<glyph unicode="&#xe634;" d="M0-16h554.564c0 0-2.082 68.301-4.847 75.844-2.97 7.646-1.673 18.739-14.472 27.238-12.766 8.329-13.654 7.68-44.135 22.289-17.135 8.158-34.986 14.712-52.77 21.368-16.315 6.11-32.632 12.083-48.879 18.432-10.889 4.301-18.5 12.527-26.317 20.923-2.799 3.003-6.007 6.212-7.919 9.967-2.628 4.95-1.399 9.25-8.772 8.158-7.51-0.921-5.325 13.961-5.325 13.961s8.943 5.393 11.878 14.507c2.491 8.534 6.998 41.915 6.998 41.915s4.983-0.921 9.046 2.082c4.539 2.867 10.82 11.367 15.667 64.649 0.751 11.128-5.735 5.939-5.735 6.417-2.935 14.438 7.475 24.167 3.652 76.322-0.683 9.865-2.526 19.627-8.055 28.091-5.086 7.68-9.318 15.975-14.745 23.313-3.721 5.154-8.738 10.104-14.131 13.517-25.19 15.633-54.784 23.722-84.616 22.971-6.246-0.103-12.049-1.673-18.056-3.618-13.619-4.677-12.357-4.677-18.91-8.534-4.13-2.389-7.237-4.54-10.070-8.329-2.492-3.277-4.471-6.417-9.011-6.622-20.719-0.717-24.030-20.856-30.379-36.659-4.95-11.094-5.666-19.456-4.95-25.805 0.819-6.861 2.014-10.615 3.653-24.576 1.161-10.343 1.126-20.719 2.15-31.062 0.512-3.55 2.15-6.929 2.833-10.411 1.229-6.622-2.799-2.765-4.95-7.441-1.673-4.471 0-28.126 2.935-38.263 2.901-10.718 3.243-25.43 7.816-30.174 4.54-5.222 5.427-2.116 10.411-3.857 4.471-2.048 0 0.717 3.584-9.421 3.413-9.967 2.014-18.944 5.427-30.822 4.471-17.169 12.288-10.582 14.472-19.832 1.536-9.455-1.741-9.455-1.741-9.455s-7.749 0.955-11.912-1.741c-5.359-3.209-8.636-13.449-11.264-18.5-3.038-5.871-5.564-13.824-11.879-17.101-15.224-7.817-32.7-12.459-48.708-18.466-14.745-5.495-29.525-10.991-44.1-16.827-4.745-1.843-9.489-3.687-13.927-6.007-12.8-6.793-34.953-13.243-46.148-20.787-10.786-7.611-23.518-22.221-23.518-31.71 0.034-9.762-4.847-75.946-4.847-75.946zM482.474 254.233h312.866v-28.433h-312.866v28.433zM624.674 396.467h28.433v-312.901h-28.433v312.901z" horiz-adv-x="796" />
-<glyph unicode="&#xe635;" d="M373.178 496h-373.178v-373.178h24.878v348.3h348.3zM422.935 446.243h-373.178v-373.178h24.879v348.3h348.3zM99.514 396.486v-373.178h373.178v373.178h-373.178zM373.178 97.943h-124.392v223.906h24.878v-199.028h99.514v-24.878z" horiz-adv-x="473" />
-<glyph unicode="&#xe636;" d="M522.911 145.991c-0.972 120.339-90.935 146.997-147.605 165.005-53 16.67-74.993 24.665-74.993 57.010v8.651c24.301 10.984 36.671 31.665 36.671 55.334-0.024 35.334-26.294 64.009-61.603 64.009-0.219 0 0.632-0.048 0.632-0.048v0.048c-24.301 0-60.169-28.675-60.169-64.009 0-23.67 11.567-44.35 35.869-55.334v-8.651c0-32.345-20.947-40.34-73.997-57.010-56.646-18.007-143.814-44.666-144.81-165.005-19.028-10.96-32.904-31.664-32.904-55.334 0-35.334 28.189-64.009 63.499-64.009 35.334 0 63.79 28.675 63.79 64.009 0 23.67-13.123 44.374-32.126 55.334 0.656 69.695 39.587 84.325 101.579 104.033 16.379 4.958 30.643 10.668 54.945 19.004v-165.709c-24.301-10.984-35.649-31.664-35.649-55.31 0-35.358 26.852-64.009 62.162-64.009 0.195 0-0.51 0.048-0.316 0.048 0.219 0-0.073-0.048 0.122-0.048 35.334 0 59.173 28.651 59.173 64.009 0 23.669-12.588 44.325-36.889 55.31v165.709c24.301-8.336 39.635-14.046 55.99-19.004 61.992-19.732 99.659-34.362 100.291-104.033-19.003-10.96-30.838-31.664-30.838-55.334 0-35.334 29.259-64.009 64.592-64.009s64.301 28.675 64.301 64.009c0.024 23.669-12.71 44.374-31.713 55.334zM63.062 58.653c-17.691 0-31.98 14.313-31.98 31.981s14.313 32.005 31.98 32.005c17.643 0 31.98-14.337 31.98-32.005s-14.338-31.981-31.98-31.981zM276.984 16.053c-17.399 0.316-31.397 14.459-31.397 31.932s13.998 31.615 31.397 31.932c17.399-0.34 31.397-14.483 31.397-31.932s-13.998-31.615-31.397-31.932zM276.984 400.059c-17.399 0.34-31.397 14.483-31.397 31.932s13.998 31.64 31.397 31.931c17.399-0.316 31.397-14.483 31.397-31.931s-13.998-31.615-31.397-31.932zM490.906 58.653c-17.642 0-31.981 14.313-31.981 31.981s14.337 32.005 31.981 32.005c17.691 0 31.98-14.337 31.98-32.005s-14.289-31.981-31.981-31.981z" horiz-adv-x="555" />
-<glyph unicode="&#xe637;" d="M597.659-16h-557.164c-22.327 0-40.495 18.185-40.495 40.495v431.010c0 22.327 18.168 40.495 40.495 40.495h557.164c22.327 0 40.495-18.168 40.495-40.495v-431.010c0-22.309-18.168-40.495-40.495-40.495zM40.495 478.378c-12.617 0-22.873-10.256-22.873-22.873v-431.010c0-12.617 10.256-22.873 22.873-22.873h557.164c12.617 0 22.873 10.256 22.873 22.873v431.010c0 12.617-10.256 22.873-22.873 22.873h-557.164zM242.316 116.974c-30.451 0-57.905 37.781-83.95 115.457-30.398 90.664-55.826 104.197-68.266 104.197-31.455-0.846-59.103-74.628-67.139-103.017-1.022-3.577-4.335-6.097-8.053-6.097h-0.669l-1.463 0.282c-2.255 0.652-4.036 2.062-5.111 4.036-1.093 1.974-1.322 4.247-0.67 6.396 3.26 11.577 33.534 113.802 82.17 115.105v0c31.419 0 58.927-37.816 84.972-115.564 30.363-90.54 55.738-104.056 68.178-104.056 32.829 0.828 61.306 81.606 67.174 103.175 5.515 19.455 35.173 115.617 82.593 116.956 0.017 0 0.017 0 0.017 0 31.226 0 58.575-37.605 84.496-114.929 30.363-90.611 55.826-104.127 68.302-104.127 30.151 0.81 57.2 67.844 67.351 103.157 1.039 3.63 4.317 6.132 8 6.132h0.758l1.568-0.335c4.423-1.41 6.89-5.921 5.71-10.273-3.313-11.736-33.64-114.136-82.487-115.423h-0.018c-31.49 0-58.927 37.798-84.954 115.493-30.204 90.118-55.438 103.58-67.791 103.58-31.86-0.899-60.055-77.8-67.474-104.655-3.313-11.719-33.64-114.189-82.311-115.493h-0.934zM89.395 110.788c-52.443 1.392-82.699 99.968-88.249 119.704-2.167 7.665 2.256 15.701 9.868 17.921 1.304 0.37 2.643 0.564 4 0.564 6.414 0 12.124-4.37 13.833-10.608 13.163-46.944 40.301-97.977 61.165-98.541 7.119 0 31.825 7.207 62.962 100.003 27.332 81.624 55.879 119.651 89.835 119.651 53.359-1.357 83.686-100.056 89.219-119.828 13.181-47.050 40.318-98.153 61.13-98.717 7.101 0 31.737 7.207 62.786 99.968 27.226 81.237 55.632 119.088 89.448 119.088 53.606-1.428 83.774-101.378 89.272-121.396 2.15-7.7-2.308-15.718-9.921-17.886-1.269-0.37-2.591-0.564-3.929-0.564-6.432 0-12.141 4.37-13.869 10.644-13.198 47.719-40.424 99.563-61.341 100.162-6.872 0-31.508-7.172-62.399-99.404-26.962-80.514-56.301-119.651-89.695-119.651-53.553 1.375-83.685 100.091-89.202 119.863-13.216 47.032-40.389 98.135-61.271 98.682-7.084 0-31.79-7.208-62.857-99.916-26.979-80.567-56.355-119.74-89.783-119.74h-1.004z" horiz-adv-x="638" />
-<glyph unicode="&#xe638;" d="M538.854 164.938h-390.462c-20.055 0-36.354 16.333-36.354 36.405v258.235c0.017 20.089 16.316 36.422 36.354 36.422h390.462c20.055 0 36.354-16.333 36.354-36.422v-258.252c0-20.072-16.299-36.388-36.354-36.388zM148.391 479.004c-10.656 0-19.341-8.719-19.341-19.426v-258.252c0-10.707 8.685-19.409 19.358-19.409h390.462c10.673 0 19.359 8.702 19.359 19.409v258.252c0 10.707-8.685 19.426-19.359 19.426h-390.479zM120.552 289.058h446.158v-17.030h-446.158v17.030zM105.171 304.406h-76.821c-27.55 0-28.349 72.522-28.349 80.782 0 8.277 0.799 80.9 28.366 80.9h76.821v-161.682zM28.366 449.091c-3.365-2.533-11.37-26.344-11.37-63.904 0-37.493 8.005-61.253 12.475-64.058l58.703 0.221v127.741h-59.809zM377.835 156.083c0 0 0-6.68 0-11.336s-1.767-7.206-6.067-7.206-51.43-0.102-55.492-0.102-6.832 3.773-6.832 7.325 0 11.099 0 11.099l68.392 0.221zM380.911 173.079l-88.464-0.272v-35.113c0-5.183 2.923-9.517 7.104-11.914l-170.179-101.618c-6.578-3.909-10.011-10.418-7.614-14.481 1.207-2.039 3.705-3.060 6.731-3.060 2.94 0 6.357 0.969 9.585 2.889l191.238 114.705h6.288v-126.296c0-7.665 3.824-13.936 8.498-13.936s8.498 6.272 8.498 13.937v126.296h6.322l191.238-114.705c3.229-1.921 6.663-2.889 9.586-2.889 3.025 0 5.506 1.020 6.731 3.060 2.396 4.045-1.053 10.555-7.614 14.481l-170.69 101.907c3.909 2.464 6.68 6.646 6.68 11.625v35.216l-13.937 0.17z" horiz-adv-x="575" />
-<glyph unicode="&#xe639;" d="M592.373-16h-440.45c-83.775 0-151.923 68.17-151.923 151.967 0 60.796 36.653 115.906 92.005 139.676-1.975 9.108-2.985 18.392-2.985 27.72 0 71.836 58.447 130.327 130.282 130.327 33.602 0 65.624-12.949 89.789-35.929 30.639 60.115 92.269 98.239 160.57 98.239 99.424 0 180.346-80.922 180.346-180.346 0-12.576-1.339-25.153-3.928-37.509 59.083-22.233 98.26-78.332 98.26-142.2 0-83.775-68.17-151.945-151.967-151.945zM219.303 415.583c-61.849 0-112.175-50.349-112.175-112.22 0-10.381 1.427-20.697 4.28-30.705l2.282-8.055-7.88-2.897c-52.477-19.249-87.725-69.772-87.725-125.74 0-73.81 60.028-133.882 133.838-133.882h440.45c73.811 0 133.882 60.050 133.882 133.882 0 58.733-37.596 110.068-93.564 127.692l-8.187 2.568 2.173 8.318c3.49 13.432 5.245 27.281 5.245 41.109 0 89.459-72.779 162.26-162.26 162.26-65.581 0-124.334-39.046-149.64-99.511l-5.685-13.542-9.548 11.194c-21.421 25.13-52.587 39.528-85.487 39.528z" horiz-adv-x="745" />
-<glyph unicode="&#xe63a;" d="M107.626-16h-107.626v415.001h18.084v36.168h71.441v-36.168h18.101v-415.001zM17.223 1.223h73.18v380.555h-18.101v36.168h-36.995v-36.168h-18.084v-380.555zM324.582-16h-107.625v447.432l107.625 64.568v-512zM234.179 1.223h73.18v464.361l-73.18-43.918v-420.443zM216.112-16h-107.626v360.766h107.626v-360.766zM125.71 1.223h73.18v326.321h-73.18v-326.321zM433.085-16h-107.625v324.582h18.084v18.084h35.307l0.861-18.084v18.084h35.289v-18.084h18.101v-324.582zM342.665 1.223h73.18v290.135h-18.101l-0.844 18.084v-18.084h-35.307l-0.861 18.084v-18.084h-18.084v-290.135zM44.762 50.153h-18.067v18.101h18.101v-18.101zM44.762 86.321h-18.067v18.084h18.101v-18.084zM44.762 122.471h-18.067v18.067h18.101v-18.067zM44.762 158.639h-18.067v18.067h18.101v-18.067zM44.762 194.808h-18.067v18.084h18.101v-18.084zM44.762 230.941h-18.067v18.084h18.101v-18.084zM44.762 267.108h-18.067v18.084h18.101v-18.084zM44.762 303.294h-18.067v18.067h18.101v-18.067zM44.762 339.428h-18.067v18.101h18.101v-18.101zM62.846 68.254h18.066v-18.101h-18.067v18.101zM62.846 104.404h18.066v-18.084h-18.067v18.084zM62.846 140.538h18.066v-18.084h-18.067v18.084zM62.846 176.706h18.066v-18.067h-18.067v18.067zM62.846 212.892h18.066v-18.084h-18.067v18.084zM62.846 249.025h18.066v-18.084h-18.067v18.084zM62.846 285.192h18.066v-18.084h-18.067v18.084zM62.846 321.361h18.066v-18.084h-18.067v18.084zM62.846 357.529h18.066v-18.101h-18.067v18.101zM243.651 68.254h18.067v-18.101h-18.066v18.101zM243.651 104.404h18.067v-18.084h-18.066v18.084zM243.651 140.538h18.067v-18.084h-18.066v18.084zM243.651 176.706h18.067v-18.067h-18.066v18.067zM243.651 212.892h18.067v-18.084h-18.066v18.084zM243.651 249.025h18.067v-18.084h-18.066v18.084zM243.651 285.192h18.067v-18.084h-18.066v18.084zM243.651 321.361h18.067v-18.084h-18.066v18.084zM243.651 357.529h18.067v-18.101h-18.066v18.101zM243.651 393.679h18.067v-18.067h-18.066v18.067zM243.651 429.83h18.067v-18.067h-18.066v18.067zM279.819 68.254h18.101v-18.101h-18.101v18.101zM279.819 104.404h18.101v-18.084h-18.101v18.084zM279.819 140.538h18.101v-18.084h-18.101v18.084zM279.819 176.706h18.101v-18.067h-18.101v18.067zM279.819 212.892h18.101v-18.084h-18.101v18.084zM279.819 249.025h18.101v-18.084h-18.101v18.084zM279.819 285.192h18.101v-18.084h-18.101v18.084zM279.819 321.361h18.101v-18.084h-18.101v18.084zM279.819 357.529h18.101v-18.101h-18.101v18.101zM279.819 393.679h18.101v-18.067h-18.101v18.067zM279.819 429.83h18.101v-18.067h-18.101v18.067zM135.165 86.321h18.084v-18.067h-18.084v18.067zM135.165 122.471h18.084v-18.067h-18.084v18.067zM135.165 158.639h18.084v-18.101h-18.084v18.101zM135.165 194.808h18.084v-18.101h-18.084v18.101zM135.165 230.941h18.084v-18.067h-18.084v18.067zM135.165 267.108h18.084v-18.084h-18.084v18.084zM135.165 303.294h18.084v-18.101h-18.084v18.101zM135.165 339.428h18.084v-18.084h-18.084v18.084zM171.333 86.321h18.101v-18.067h-18.101v18.067zM171.333 122.471h18.101v-18.067h-18.101v18.067zM171.333 158.639h18.101v-18.101h-18.101v18.101zM171.333 194.808h18.101v-18.101h-18.101v18.101zM171.333 230.941h18.101v-18.067h-18.101v18.067zM171.333 267.108h18.101v-18.084h-18.101v18.084zM171.333 303.294h18.101v-18.101h-18.101v18.101zM171.333 339.428h18.101v-18.084h-18.101v18.084zM352.138 86.321h18.067v-18.067h-18.067v18.067zM352.138 122.471h18.067v-18.067h-18.067v18.067zM352.138 158.639h18.067v-18.101h-18.067v18.101zM352.138 194.808h18.067v-18.101h-18.067v18.101zM352.138 230.941h18.067v-18.067h-18.067v18.067zM352.138 267.108h18.067v-18.084h-18.067v18.084zM352.138 303.294h18.067v-18.101h-18.067v18.101zM388.305 86.321h18.067v-18.067h-18.067v18.067zM388.305 122.471h18.067v-18.067h-18.067v18.067zM388.305 158.639h18.067v-18.101h-18.067v18.101zM388.305 194.808h18.067v-18.101h-18.067v18.101zM388.305 230.941h18.067v-18.067h-18.067v18.067zM388.305 267.108h18.067v-18.084h-18.067v18.084zM388.305 303.294h18.067v-18.101h-18.067v18.101z" horiz-adv-x="433" />
-<glyph unicode="&#xe63b;" d="M305.937-16h-120.463v82.425h-64.995v-82.425h-120.48v512h305.937v-512zM202.923 1.448h85.566v477.103h-271.041v-477.103h85.584v82.425h99.891v-82.425zM132.362 446.063h41.213v-61.819h-41.213v61.819zM132.362 363.638h41.213v-61.837h-41.213v61.837zM132.362 281.212h41.213v-61.819h-41.213v61.819zM132.362 198.788h41.213v-61.819h-41.213v61.819zM49.919 446.063h41.23v-61.819h-41.23v61.819zM49.919 363.638h41.23v-61.837h-41.23v61.837zM49.919 281.212h41.23v-61.819h-41.23v61.819zM49.919 198.788h41.23v-61.819h-41.23v61.819zM214.805 198.788h41.212v-61.819h-41.213v61.819zM214.805 281.212h41.212v-61.819h-41.213v61.819zM214.805 363.638h41.212v-61.837h-41.213v61.837zM214.805 446.063h41.212v-61.819h-41.213v61.819z" horiz-adv-x="306" />
-<glyph unicode="&#xe63c;" d="M476.033-16h-151.284v178.595h-116.579v-178.595h-151.344v245.56h-56.827l266.399 266.44 80.671-80.631v54.702h106.62v-161.322l79.209-79.188h-56.887v-245.56zM342.082 1.332h116.599v245.56h32.38l-54.702 54.682v151.164h-71.955v-79.168l-98.024 97.943-224.541-224.621h32.321v-245.56h116.659v178.595h151.263v-178.595z" horiz-adv-x="533" />
-<glyph unicode="&#xe63d;" d="M389.724-16h-120.765c-21.706 0-28.907 11.683-30.988 16.719s-5.238 18.365 10.089 33.742l20.765 20.782h-228.587c-22.192 0-40.238 18.046-40.238 40.238v360.297c0 22.175 18.046 40.221 40.238 40.221h578.157c22.192 0 40.238-18.046 40.238-40.221v-360.297c0-22.175-18.046-40.221-40.238-40.221h-228.536l20.748-20.782c15.36-15.411 12.171-28.739 10.089-33.758s-9.283-16.72-30.972-16.72zM40.238 479.213c-12.926 0-23.451-10.508-23.451-23.434v-360.297c0-12.942 10.525-23.435 23.451-23.435h269.060l-49.37-49.438c-5.858-5.875-8.142-11.365-6.463-15.461 1.713-4.079 7.201-6.346 15.477-6.346h120.765c8.259 0 13.748 2.266 15.461 6.362 1.678 4.029-0.671 9.652-6.463 15.444l-49.32 49.438h269.010c12.942 0 23.452 10.509 23.452 23.435v360.297c0.017 12.926-10.509 23.434-23.434 23.434h-578.174zM604.378 101.777h-550.090v347.707h550.090v-347.707zM70.237 117.707h518.211v315.829h-518.211v-315.829z" horiz-adv-x="659" />
-<glyph unicode="&#xe63e;" d="M525.207-16h-489.478c-19.717 0-35.729 16.012-35.729 35.712v440.56c0 19.717 16.012 35.729 35.729 35.729h489.495c19.7 0 35.729-16.012 35.729-35.729v-440.56c-0.017-19.7-16.029-35.712-35.746-35.712zM35.729 479.002c-10.334 0-18.732-8.397-18.732-18.732v-440.559c0-10.317 8.397-18.731 18.732-18.731h489.495c10.317 0 18.731 8.397 18.731 18.731v440.56c-0.017 10.334-8.414 18.731-18.749 18.731h-489.478zM482.713 213.807h-249.133c-12.884 0-23.371 10.488-23.371 23.371v178.474c0 12.884 10.488 23.371 23.371 23.371h249.133c12.884 0 23.372-10.487 23.372-23.371v-178.474c0-12.867-10.488-23.371-23.372-23.371zM233.58 426.276c-5.864 0-10.624-4.76-10.624-10.623v-178.474c0-5.864 4.76-10.623 10.624-10.623h249.133c5.864 0 10.623 4.76 10.623 10.623v178.474c0 5.864-4.76 10.623-10.623 10.623h-249.133zM128.603 44.291c-38.483 0-54.885 6.935-60.562 25.599-1.921 6.306-0.901 30 3.144 97.957 1.903 31.99 3.859 65.067 3.859 79.99 0 7.904-1.496 33.264-3.059 60.087-4.249 72.426-5.864 105.996-4.097 113.611 4.181 18 21.128 25.327 58.489 25.327 49.225 0 56.976-9.995 62.534-24.12 2.413-6.136 1.36-28.080-5.32-111.844-2.261-28.284-4.403-55.004-4.403-63.061 0-6.867 0.986-26.941 2.125-50.159 4.012-81.707 5.354-119.56 2.618-127.957-6.034-18.544-21.026-25.428-55.327-25.428zM126.394 429.862c-39.111 0-41.083-8.533-41.933-12.17-1.445-7.547 2.124-68.449 4.505-108.768 1.666-28.267 3.094-52.692 3.094-61.089 0-15.417-1.886-47.287-3.892-81.028-2.141-36.12-5.082-85.582-3.773-92.279 1.683-5.422 4.046-13.258 44.244-13.258 34.692 0 37.275 7.921 39.162 13.717 2.142 8.685-1.479 82.302-3.417 121.839-1.207 24.442-2.159 43.717-2.159 51.009 0 8.737 2.056 34.522 4.453 64.404 3.094 38.721 7.768 97.243 6.238 104.96-2.397 5.881-5.066 12.663-46.523 12.663zM323.022 176.905c0-5.524 4.488-10.012 10.029-10.012h136.151c5.524 0 10.012 4.488 10.012 10.012 0 5.541-4.488 10.029-10.012 10.029h-136.15c-5.541-0.017-10.029-4.488-10.029-10.029 0 0 0 5.541 0 0zM323.022 113.912c0-5.541 4.505-10.046 10.046-10.046h136.1c5.541 0 10.046 4.505 10.046 10.046s-4.505 10.046-10.046 10.046h-136.1c-5.541-0.017-10.046-4.505-10.046-10.046 0 0 0 5.541 0 0zM323.022 50.851c0-5.524 4.488-10.012 10.029-10.012h136.151c5.524 0 10.012 4.488 10.012 10.012 0 5.541-4.488 10.029-10.012 10.029h-136.15c-5.541-0.017-10.029-4.488-10.029-10.029 0 0 0 5.541 0 0zM244.526 108.184c0-5.541 4.505-10.046 10.046-10.046h39.111c5.524 0 10.029 4.505 10.029 10.046 0 5.524-4.505 10.029-10.029 10.029h-39.112c-5.558-0.017-10.046-4.505-10.046-10.029 0 0 0 5.524 0 0zM244.526 50.851c0-5.524 4.488-10.012 10.012-10.012h39.145c5.541 0 10.029 4.488 10.029 10.012 0 5.541-4.488 10.029-10.029 10.029h-39.145c-5.541-0.017-10.012-4.488-10.012-10.029 0 0 0 5.541 0 0z" horiz-adv-x="561" />
-<glyph unicode="&#xe63f;" d="M46.779 373.544l52.289-52.516c5.070-5.084 13.251-5.084 18.29 0.031l1.852 1.867c5.070 5.054 5.070 13.327-0.015 18.38l-30.113 30.174 147.515 0.046c7.149 0 12.931 5.813 12.931 12.962v2.656c0 7.194-5.783 12.992-12.931 12.992h-147.986l30.599 30.75c5.070 5.115 5.070 13.311 0 18.396l-1.852 1.882c-5.070 5.055-13.22 5.055-18.305 0l-52.273-52.531c-0.789-0.805-1.426-1.669-1.989-2.641-2.17-2.322-3.506-5.418-3.506-8.879v-2.626c0-4.053 1.867-7.665 4.751-10.063 0.273-0.288 0.471-0.607 0.743-0.88zM88.761 195.035h147.454c7.133 0 12.947 5.829 12.947 13.007v2.641c0 7.164-5.813 12.977-12.947 12.977h-147.986l30.614 30.75c5.039 5.1 5.070 13.311 0 18.411l-1.852 1.821c-5.055 5.1-13.235 5.1-18.305 0l-52.273-52.455c-0.804-0.835-1.426-1.731-1.989-2.671-2.155-2.307-3.491-5.404-3.491-8.819v-2.641c0-4.083 1.852-7.711 4.751-10.063 0.258-0.303 0.486-0.652 0.728-0.896l52.304-52.516c5.070-5.084 13.235-5.084 18.305 0l1.837 1.851c5.024 5.070 5.055 13.311-0.031 18.365l-30.067 30.235zM375.64 330.347h-147.97c-7.149 0-12.947-5.828-12.947-13.023v-2.626c0-7.149 5.798-12.962 12.947-12.962h147.455l-30.067-30.235c-5.084-5.039-5.055-13.327-0.015-18.365l1.851-1.867c5.055-5.1 13.235-5.1 18.289 0l52.303 52.501c0.243 0.288 0.471 0.577 0.728 0.881 2.884 2.398 4.75 6.011 4.75 10.063v2.626c0 3.476-1.366 6.572-3.476 8.879-0.607 0.956-1.199 1.851-2.003 2.656l-52.303 52.516c-5.055 5.084-13.235 5.084-18.289 0l-1.851-1.882c-5.070-5.085-5.039-13.296 0-18.396l30.599-30.766zM428.505 103.466c-13.327 9.411-31.707 6.163-40.996-7.361-9.32-13.463-6.116-32.071 7.224-41.527 13.281-9.44 31.676-6.208 40.981 7.346 9.334 13.463 6.071 32.071-7.209 41.542zM483.526 177.459h-143.842c-13.418 0-24.376-10.974-24.376-24.376v-144.692c0-13.418 10.974-24.376 24.376-24.376h143.857c13.402 0 24.376 10.974 24.376 24.376v144.692c0 13.402-10.989 24.376-24.391 24.376zM480.005 64.11v10.564h-36.108c23.981-28.125 37.399-52.577 30.933-58.815-6.481-6.163-30.493 7.649-57.904 31.935v-35.926h10.382l-15.345-15.451-15.375 15.451h10.442v36.033c-27.745-24.346-51.909-37.99-58.071-31.404-6.056 6.512 7.346 30.614 31.009 58.178h-36.063v-10.564l-15.224 15.572 15.224 15.558v-10.548h36.534c-25.059 28.945-39.326 54.474-32.663 60.864 6.572 6.299 31.282-8.090 59.255-33.149v36.291h-10.442l15.375 15.436 15.345-15.436h-10.382v-36.382c28.519 25.377 53.639 39.767 59.907 32.997 6.238-6.648-8.135-31.995-33.134-60.606h36.306v10.548l15.238-15.558-15.238-15.588zM383.017 180.661l-17.454 17.515c-5.055 5.070-13.235 5.070-18.289 0l-1.851-1.822c-4.265-4.296-4.705-10.716-1.791-15.694h39.387zM311.893 147.179h-83.858c-7.103 0-12.901-5.829-12.901-12.977v-2.626c0-7.164 5.798-13.007 12.901-13.007h83.858v28.611zM311.893 46.139h-279.397c-8.97 0-16.271 7.3-16.271 16.271v401.094c0 8.97 7.3 16.271 16.271 16.271h399.257c8.97 0 16.271-7.3 16.271-16.271v-282.858h16.21v282.858c0 17.925-14.571 32.496-32.496 32.496h-399.243c-17.925 0-32.496-14.571-32.496-32.496v-401.094c0-17.925 14.571-32.496 32.496-32.496h279.397v16.226z" horiz-adv-x="508" />
-<glyph unicode="&#xe640;" d="M365.83-16h-337.952c-15.373 0-27.878 12.454-27.878 27.776v456.448c0 15.322 12.505 27.776 27.878 27.776h337.936c15.339 0 27.81-12.454 27.81-27.776v-456.448c0.017-15.322-12.454-27.776-27.793-27.776zM27.878 479.125c-6.058 0-11.003-4.894-11.003-10.901v-456.448c0-5.99 4.944-10.901 11.002-10.901h337.936c6.024 0 10.935 4.894 10.935 10.901v456.448c0.017 6.007-4.894 10.901-10.918 10.901h-337.952zM354.979 47.010h-316.286v394.771h316.286v-394.771zM55.569 63.885h282.536v361.021h-282.536v-361.021zM208.759 23.336c0-6.356-5.153-11.509-11.508-11.509s-11.508 5.152-11.508 11.509c0 6.356 5.153 11.509 11.508 11.509s11.508-5.152 11.508-11.509zM197.25 9.363c-7.728 0-14.006 6.26-14.006 13.973s6.278 14.006 14.006 14.006c7.762 0 14.040-6.295 14.040-14.006s-6.278-13.973-14.040-13.973zM197.25 32.38c-4.995 0-9.028-4.067-9.028-9.045s4.033-9.011 9.028-9.011c5.012 0 9.078 4.033 9.078 9.011s-4.067 9.045-9.078 9.045z" horiz-adv-x="394" />
-<glyph unicode="&#xe641;" d="M255.992-16c-141.153 0-255.992 114.839-255.992 255.991s114.84 256.009 255.992 256.009 255.992-114.856 255.992-256.009-114.839-255.991-255.992-255.991zM255.992 479.44c-132.028 0-239.433-107.404-239.433-239.449 0-132.028 107.404-239.432 239.433-239.432s239.432 107.404 239.432 239.432c0 132.044-107.404 239.449-239.433 239.449zM112.025 381.326l1.871 1.888c5.133 5.1 13.43 5.1 18.563 0l70.145-70.195v30.138c0 7.237 5.879 13.115 13.115 13.115v0.017h2.683c7.22 0 13.115-5.879 13.099-13.115l0.017-61.138c0-1.142-0.232-2.202-0.497-3.295-0.1-3.229-1.341-6.392-3.809-8.86l-1.871-1.871c-2.865-2.882-6.79-4.14-10.582-3.792-0.364-0.033-0.762-0.1-1.159-0.1h-61.154c-7.253 0-13.131 5.879-13.131 13.115v2.633c0 7.269 5.862 13.115 13.131 13.115h29.327l-69.764 69.798c-5.133 5.134-5.117 13.446 0.016 18.547zM228.205 192.351l-70.196-70.145h30.121c7.253 0 13.148-5.862 13.148-13.132v-2.633c0-7.286-5.879-13.164-13.115-13.148l-61.154-0.017c-1.159 0-2.219 0.232-3.296 0.514-3.213 0.083-6.392 1.341-8.859 3.792l-1.838 1.888c-2.915 2.865-4.14 6.806-3.792 10.582-0.049 0.397-0.132 0.762-0.132 1.175v61.12c0 7.253 5.879 13.132 13.148 13.132h2.617c7.253 0 13.131-5.862 13.131-13.115v-29.344l69.798 69.764c5.117 5.134 13.429 5.134 18.497 0l1.921-1.871c5.117-5.101 5.117-13.43 0-18.563zM283.579 288.179l70.146 70.145h-30.089c-7.286 0-13.132 5.879-13.132 13.132v2.683c0 7.253 5.846 13.115 13.082 13.115h61.137c1.192 0 2.252-0.198 3.345-0.48 3.18-0.1 6.375-1.358 8.826-3.809l1.888-1.871c2.898-2.882 4.123-6.79 3.776-10.582 0.017-0.348 0.099-0.779 0.099-1.159v-61.137c0-7.253-5.862-13.148-13.132-13.115h-2.616c-7.253 0-13.115 5.862-13.115 13.082v29.327l-69.831-69.764c-5.084-5.117-13.397-5.084-18.514 0l-1.871 1.904c-5.15 5.101-5.15 13.429 0 18.53zM399.959 98.491l-1.904-1.904c-5.117-5.117-13.446-5.117-18.546 0l-71.089 71.123v-30.122c0-7.253-5.878-13.115-13.115-13.115h-2.649c-7.253 0-13.115 5.862-13.115 13.065v61.187c0 1.159 0.199 2.236 0.447 3.296 0.116 3.196 1.358 6.375 3.825 8.86l1.888 1.871c2.865 2.882 6.789 4.14 10.582 3.792 0.365 0.033 0.762 0.099 1.142 0.099h61.137c7.253 0 13.132-5.862 13.132-13.132v-2.616c0-7.269-5.878-13.164-13.115-13.164h-29.327l70.709-70.709c5.134-5.101 5.101-13.413 0-18.53z" />
-<glyph unicode="&#xe642;" d="M304.671-16h-271.659c-18.21 0-33.013 14.818-33.013 33.012v445.975c0 18.21 14.802 33.012 33.013 33.012h271.659c18.194 0 33.012-14.802 33.012-33.012v-445.975c0-18.194-14.818-33.012-33.012-33.012zM33.013 479.535c-9.121 0-16.547-7.426-16.547-16.548v-445.975c0-9.122 7.426-16.548 16.547-16.548h271.659c9.122 0 16.548 7.426 16.548 16.548v445.975c0 9.121-7.426 16.547-16.548 16.547h-271.659zM55.883 364.344c0-4.1 3.326-7.426 7.442-7.426h211.050c4.116 0 7.442 3.326 7.442 7.426 0 4.117-3.326 7.442-7.442 7.442h-211.050c-4.117 0-7.442-3.326-7.442-7.442 0 0 0 4.117 0 0zM55.883 420.425c0-4.116 3.326-7.442 7.442-7.442h211.050c4.116 0 7.442 3.326 7.442 7.442s-3.326 7.442-7.442 7.442h-211.050c-4.117 0-7.442-3.326-7.442-7.442 0 0 0 4.116 0 0zM55.883 308.248c0-4.116 3.326-7.442 7.442-7.442h211.050c4.116 0 7.442 3.326 7.442 7.442s-3.326 7.442-7.442 7.442h-211.050c-4.117 0-7.442-3.326-7.442-7.442 0 0 0 4.117 0 0zM55.883 252.167c0-4.1 3.326-7.426 7.426-7.426h211.083c4.1 0 7.426 3.326 7.426 7.426s-3.326 7.426-7.426 7.426h-211.083c-4.1 0.017-7.426-3.326-7.426-7.426 0 0 0 4.1 0 0zM235.896 201.093c0-4.1 3.326-7.426 7.426-7.426h13.847c4.1 0 7.426 3.326 7.426 7.426s-3.326 7.426-7.426 7.426h-13.847c-4.1 0-7.426-3.326-7.426-7.426 0 0 0 4.1 0 0zM193.35 201.093c0-4.1 3.326-7.426 7.426-7.426h13.815c4.1 0 7.426 3.326 7.426 7.426s-3.326 7.426-7.426 7.426h-13.815c-4.1 0-7.426-3.326-7.426-7.426 0 0 0 4.1 0 0zM74.406 92.834c0-3.31 2.684-6.010 6.010-6.010s6.010 2.7 6.010 6.010v23.084c0 3.31-2.684 6.010-6.010 6.010s-6.010-2.7-6.010-6.010v-23.084zM108.736 92.834c0-3.31 2.701-6.010 6.026-6.010 3.309 0 6.010 2.7 6.010 6.010v23.084c0 3.31-2.701 6.010-6.010 6.010-3.326 0-6.026-2.7-6.026-6.010v-23.084zM143.099 92.834c0-3.326 2.684-6.010 6.010-6.010 3.31 0 5.994 2.684 5.994 6.010v23.084c0 3.326-2.684 6.010-5.994 6.010-3.326 0-6.010-2.684-6.010-6.010v-23.084zM177.429 92.851c0-3.326 2.701-6.026 6.026-6.026s6.026 2.7 6.026 6.026v23.051c0 3.326-2.701 6.026-6.026 6.026s-6.026-2.7-6.026-6.026v-23.051zM211.758 92.868c0-3.342 2.701-6.043 6.042-6.043 3.326 0 6.026 2.7 6.026 6.043v23.019c0 3.342-2.701 6.043-6.026 6.043-3.343 0-6.042-2.7-6.042-6.043v-23.019zM246.137 92.834c0-3.31 2.701-6.010 6.010-6.010 3.326 0 6.026 2.7 6.026 6.010v23.084c0 3.31-2.701 6.010-6.026 6.010-3.31 0-6.010-2.7-6.010-6.010v-23.084z" horiz-adv-x="338" />
-<glyph unicode="&#xe643;" d="M467.841-16h-424.14c-24.098 0-43.701 19.709-43.701 43.93v424.123c0 24.239 19.603 43.947 43.701 43.947h424.158c24.327 0 44.124-19.709 44.124-43.947v-424.123c-0.017-24.221-19.815-43.93-44.142-43.93zM43.701 478.813c-14.614 0-26.513-12.005-26.513-26.778v-424.122c0-14.755 11.899-26.76 26.513-26.76h424.158c14.861 0 26.936 12.005 26.936 26.76v424.14c0 14.772-12.093 26.777-26.936 26.777h-424.158zM370.708 357.952l1.939 1.886c5.112 5.165 13.415 5.165 18.581 0l53.202-53.149c0.793-0.811 1.392-1.71 2.010-2.697 2.133-2.345 3.543-5.447 3.543-8.955v-2.679c0-4.072-1.886-7.739-4.813-10.189-0.3-0.3-0.493-0.599-0.74-0.899l-53.22-53.167c-5.147-5.147-13.468-5.147-18.563 0.017l-1.939 1.904c-5.077 5.13-5.112 13.485 0.070 18.598l30.55 30.568-149.93 0.035c-7.245-0.035-13.098 5.888-13.098 13.151v2.644c0 7.263 5.852 13.151 13.098 13.151h150.476l-31.185 31.167c-5.060 5.148-5.094 13.468 0.017 18.615zM61.964 365.69c0 3.508 1.358 6.646 3.543 8.99 0.546 0.987 1.198 1.886 2.010 2.697l53.167 53.167c5.165 5.148 13.451 5.148 18.598 0l1.869-1.904c5.148-5.147 5.148-13.415 0-18.615l-31.096-31.149h150.441c7.263 0 13.151-5.888 13.151-13.168v-2.644c0-7.263-5.888-13.168-13.151-13.168l-149.912-0.018 30.55-30.567c5.183-5.112 5.183-13.486 0-18.615l-1.869-1.904c-5.095-5.165-13.433-5.165-18.598-0.018l-53.15 53.168c-0.282 0.299-0.459 0.635-0.758 0.917-2.944 2.45-4.795 6.082-4.795 10.189v2.644zM140.78 122.031l-1.886-1.886c-5.112-5.13-13.415-5.13-18.563 0l-53.203 53.168c-0.247 0.264-0.476 0.617-0.758 0.935-2.926 2.415-4.813 6.082-4.813 10.154v2.68c0 3.49 1.392 6.611 3.561 8.92 0.564 0.969 1.181 1.904 2.010 2.715l53.167 53.132c5.147 5.165 13.468 5.165 18.598 0l1.886-1.869c5.13-5.148 5.13-13.451 0-18.615l-31.132-31.149h150.476c7.263 0 13.133-5.87 13.133-13.151v-2.662c0-7.263-5.87-13.186-13.133-13.186h-149.93l30.567-30.533c5.148-5.183 5.148-13.503 0.018-18.651zM450.371 113.728c0-4.125-1.904-7.81-4.813-10.189-0.264-0.317-0.476-0.652-0.723-0.935l-53.202-53.168c-5.147-5.112-13.486-5.112-18.615 0.036l-1.886 1.851c-5.112 5.165-5.165 13.503 0 18.651l30.603 30.55h-149.93c-7.227 0-13.115 5.923-13.115 13.186v2.644c0 7.263 5.888 13.151 13.115 13.151h150.458l-31.149 31.185c-5.112 5.147-5.165 13.45 0 18.615l1.886 1.851c5.147 5.165 13.468 5.165 18.615 0l53.168-53.149c0.829-0.811 1.445-1.745 2.010-2.662 2.204-2.362 3.561-5.5 3.561-8.99v-2.627z" />
-<glyph unicode="&#xe644;" d="M256.015-16c-141.155 0-256.015 114.846-256.015 256.015 0 141.139 114.861 255.984 256.015 255.984 141.139 0 255.937-114.845 255.937-255.984 0.015-141.17-114.798-256.015-255.937-256.015zM256.015 480.274c-132.506 0-240.29-107.784-240.29-240.259s107.784-240.274 240.29-240.274c132.458 0 240.212 107.784 240.212 240.274s-107.753 240.258-240.212 240.258zM292.028 121.066c0-19.307-15.651-34.959-34.959-34.959s-34.959 15.651-34.959 34.959c0 19.307 15.651 34.959 34.959 34.959s34.959-15.651 34.959-34.959zM257.053 402.636c-34.974 0.173-57.855-22.676-68.548-41.327-11.339-19.076-14.499-36.248-14.798-37.711-2.438-12.392 5.661-24.453 18.084-26.75 12.376-2.438 24.391 5.677 26.797 18.084h-0.047c0 0 0.047 0.157 0.346 1.368 0.975 4.168 4.797 16.323 11.48 25.538 7.218 9.341 13.964 14.813 26.655 15.018 23.573-0.849 37.27-13.886 38.12-37.585-0.063-15.269-7.894-23.871-23.4-38.827-14.185-13.697-37.302-33.323-37.601-67.919 0-2.972 0-4.356 0.047-4.89 0-0.158 0.016-0.283 0.016-0.283 0-5.96 2.406-11.904 6.652-16.151 4.293-4.293 10.159-6.715 16.166-6.715 6.164 0 11.873 2.406 16.166 6.715 4.341 4.325 6.731 10.049 6.731 16.119 0 0 0 1.070 0 5.19-0.252 11.181 7.108 19.374 23.432 34.801 14.94 14.153 37.632 36.090 37.584 71.945 0.047 23.353-8.853 44.882-24.296 59.915-15.332 15.128-36.704 23.51-59.585 23.463z" />
-<glyph unicode="&#xe645;" d="M298.565 30.776h-264.507c-18.783 0-34.057 15.274-34.057 34.058v397.108c0 18.783 15.274 34.058 34.057 34.058h395.096c18.783 0 34.058-15.275 34.058-34.058v-267.154h-15.123v267.154c0 10.435-8.5 18.934-18.935 18.934h-395.096c-10.435 0-18.934-8.499-18.934-18.934v-397.108c0-10.435 8.499-18.935 18.934-18.935h264.507v-15.123zM444.262 126.28c-1.936 0.272-12.825-2.102-27.282-49.62-0.469-1.573-0.953-2.858-1.437-4.37 11.766-33.619 21.748-41.453 28.462-41.453 0.075 0 0.197 0 0.257 0 12.038 0.363 22.866 28.674 28.447 42.693-0.772 1.058-1.376 2.344-1.784 3.872-2.42 8.938-17.346 48.637-26.663 48.878zM373.41 136.851c-0.075 0-0.166-0.030-0.257-0.030-13.777-0.378-25.77-32.197-30.61-48.985 2.012-1.18 3.584-3.221 4.25-5.868 5.217-20.296 17.301-48.606 26.602-48.849 1.8 0 12.885 2.072 27.358 49.68 0.877 2.858 1.755 5.353 2.632 8.015-12.416 37.354-23.033 46.036-29.974 46.036zM482.177 190.63h-152.685c-14.564 0-26.496-11.917-26.496-26.511v-153.623c0-14.564 11.933-26.496 26.496-26.496h152.685c14.594 0 26.511 11.933 26.511 26.496v153.623c0 14.594-11.917 26.511-26.511 26.511zM482.449 70.808c-1.634-0.651-3.176-0.666-4.658-0.409-5.928-15.184-17.195-45.461-33.347-45.93-0.197 0-0.332 0-0.469 0-11.115 0-21.414 12.945-31.32 38.988-11.721-33.619-24.303-49.529-39.079-49.529-0.212 0-0.393 0-0.59 0.030-25.649 0.772-40.031 52.447-42.678 62.762-1.286 5.111 1.361 10.405 5.944 11.856 0.182 0.060 0.363 0 0.545 0.046 3.66 13.233 16.635 54.005 36.236 54.611 11.887 0.227 22.897-13.989 33.438-43.419 11.327 30.957 23.502 45.688 37.657 45.688 0.227 0 0.409 0 0.605-0.015 21.475-0.605 41.226-59.329 42.451-64.092 1.21-4.825-0.605-8.968-4.733-10.587zM185.714 387.808c4.809-4.87 12.703-4.87 17.498 0.030l28.75 28.719 0.046-140.965c0-6.851 5.505-12.371 12.34-12.371h2.525c6.851 0 12.371 5.52 12.371 12.371v141.449l29.294-29.219c4.825-4.87 12.643-4.87 17.498 0l1.769 1.739c4.809 4.839 4.809 12.613 0 17.482l-50.013 49.998c-0.772 0.741-1.634 1.376-2.511 1.875-2.208 2.118-5.157 3.373-8.454 3.373h-2.511c-3.841 0-7.274-1.769-9.603-4.522-0.227-0.303-0.53-0.469-0.847-0.726l-49.968-50.013c-4.825-4.839-4.825-12.673 0.030-17.452l1.785-1.769zM195.076 159.295c3.932-3.962 10.329-3.962 14.276 0l23.411 23.426 0.030-114.861c0-5.596 4.492-10.087 10.057-10.087h2.057c5.595 0 10.072 4.491 10.072 10.087v115.255l23.865-23.819c3.962-3.962 10.329-3.962 14.262 0l1.452 1.452c3.932 3.902 3.932 10.284 0 14.231l-40.727 40.727c-0.635 0.62-1.331 1.104-2.072 1.543-1.799 1.678-4.174 2.722-6.881 2.722h-2.042c-3.101 0-5.944-1.452-7.804-3.69-0.212-0.212-0.453-0.348-0.696-0.56l-40.727-40.727c-3.947-3.962-3.947-10.375 0.015-14.231l1.452-1.467zM82.483 188.861c0-5.565 4.507-10.132 10.088-10.087h33.135l-81.212-81.243c-3.947-3.947-3.947-10.314-0.030-14.216l1.482-1.467c3.947-3.932 10.314-3.962 14.246 0l81.514 81.5v-33.71c0.015-5.611 4.522-10.087 10.088-10.087l2.057-0.015c5.581 0 10.072 4.491 10.088 10.072v57.635c-0.015 0.862-0.181 1.709-0.393 2.51-0.076 2.48-1.029 4.915-2.919 6.82l-1.452 1.421c-2.193 2.223-5.232 3.191-8.121 2.889-0.317 0-0.575 0.106-0.877 0.136l-57.65-0.015c-5.566 0-10.102-4.522-10.042-10.118v-2.026z" horiz-adv-x="509" />
-<glyph unicode="&#xe646;" d="M256.022 496c-141.392 0-256.022-114.615-256.022-256.007 0-141.363 114.629-255.993 256.022-255.993 141.349 0 255.964 114.63 255.964 255.993 0 141.392-114.615 256.007-255.964 256.007zM319.938 301.382l42.663 42.663c1.108 0.994 2.385 1.49 3.834 1.49s2.712-0.497 3.834-1.49c1.008-1.107 1.49-2.385 1.49-3.847 0-1.448-0.483-2.712-1.49-3.833l-42.635-42.663c-1.235-0.98-2.513-1.49-3.848-1.49s-2.627 0.511-3.848 1.49c-1.008 1.107-1.49 2.385-1.49 3.833 0 1.462 0.483 2.74 1.49 3.847zM291.784 361.536c0 1.548 0.497 2.826 1.49 3.834s2.286 1.49 3.834 1.49c1.562 0 2.853-0.482 3.848-1.49 0.979-0.994 1.49-2.272 1.49-3.834v-53.325c0-1.548-0.511-2.825-1.49-3.848-0.979-0.979-2.272-1.49-3.848-1.49-1.534 0-2.825 0.511-3.834 1.49-0.994 1.008-1.49 2.286-1.49 3.848v53.325zM117.356 181.755c-1.008 0.994-1.505 2.272-1.505 3.834s0.497 2.825 1.505 3.848c0.98 0.994 2.257 1.505 3.819 1.505h53.325c1.548 0 2.839-0.511 3.847-1.505 0.965-1.008 1.49-2.286 1.49-3.848s-0.525-2.825-1.49-3.834c-1.008-0.994-2.3-1.49-3.847-1.49h-53.34c-1.547 0-2.826 0.497-3.805 1.49zM188.995 155.092l-42.649-42.649c-1.121-0.994-2.399-1.49-3.847-1.49-1.334 0-2.626 0.497-3.847 1.49-0.98 1.108-1.49 2.399-1.49 3.834 0 1.448 0.511 2.726 1.49 3.834l42.663 42.663c1.107 0.994 2.371 1.49 3.847 1.49 1.434 0 2.712-0.497 3.833-1.49 0.994-1.108 1.49-2.385 1.49-3.834 0-1.462-0.497-2.74-1.49-3.848zM155.163 280.895l45.644-45.659-2.995-39.966c-3.876 2.314-6.985 4.656-9.314 6.985l-55.981 55.981c-9.314 9.555-13.999 20.885-13.999 33.988 0 13.332 4.728 24.604 14.169 33.833l24.49 24.32c9.228 9.214 20.487 13.843 33.833 13.843 13.43 0 24.76-4.728 33.988-14.169l55.668-55.824c2.329-2.329 4.642-5.438 6.985-9.314l-39.823-3.010-45.502 45.659c-3.081 3.109-6.871 4.671-11.316 4.671-4.33 0-8.121-1.505-11.344-4.515l-24.49-24.306c-3.109-3.123-4.656-6.829-4.656-11.173-0.014-4.472 1.534-8.234 4.643-11.343zM217.135 94.938c0-1.548-0.497-2.825-1.49-3.819-0.994-1.008-2.272-1.49-3.833-1.49s-2.826 0.483-3.833 1.49c-0.994 0.979-1.49 2.257-1.49 3.819v53.339c0 1.548 0.497 2.825 1.49 3.848 0.994 0.979 2.272 1.476 3.833 1.476s2.826-0.497 3.833-1.476c0.994-1.008 1.49-2.286 1.49-3.848v-53.339zM376.245 130.446l-24.49-24.334c-9.2-9.2-20.487-13.842-33.818-13.842-13.43 0-24.76 4.742-33.988 14.169l-55.654 55.824c-2.328 2.329-4.671 5.452-7.013 9.327l39.838 2.995 45.488-45.659c2.995-2.981 6.758-4.515 11.329-4.572 4.543-0.071 8.334 1.42 11.329 4.43l24.49 24.32c3.109 3.109 4.671 6.815 4.671 11.159 0 4.43-1.562 8.221-4.671 11.329l-45.644 45.829 2.995 39.823c3.876-2.328 7-4.656 9.313-6.985l55.981-55.994c9.342-9.555 14.013-20.885 14.013-33.988 0.014-13.346-4.728-24.632-14.169-33.832zM391.592 267.053c-1.008-0.994-2.286-1.476-3.834-1.476h-53.339c-1.548 0-2.811 0.482-3.834 1.476-0.994 1.008-1.49 2.271-1.49 3.847 0 1.548 0.497 2.826 1.49 3.847 1.008 0.98 2.272 1.49 3.834 1.49h53.339c1.534 0 2.811-0.511 3.834-1.49 1.008-1.008 1.49-2.286 1.49-3.847 0.014-1.576-0.483-2.839-1.49-3.847z" />
-<glyph unicode="&#xe647;" d="M112.005 319.999h176.001v-63.996h-176.001v63.996zM112.005 160.001h176.001v-64.012h-176.001v64.012zM378.538 496h-357.425c-11.755 0-21.113-8.62-21.113-20.361v-469.43c0-11.755 9.357-22.21 21.113-22.21h357.441c11.755 0 21.457 10.454 21.457 22.21v469.43c0 11.739-9.717 20.361-21.473 20.361zM375.998 336.002c4.435 0 8.010-3.589 8.010-8.010s-3.574-8.010-8.010-8.010h-72.005v-63.996h72.005c4.435 0 8.010-3.589 8.010-7.994s-3.574-8.010-8.010-8.010h-167.992v-63.996h168.008c4.435 0 8.010-3.589 8.010-8.010s-3.574-7.993-8.010-7.993h-72.005v-64.012h72.005c4.435 0 8.010-3.589 8.010-7.993s-3.574-8.010-8.010-8.010h-168.007v-63.996h168.007c4.435 0 8.010-3.589 8.010-8.010s-3.574-8.010-8.010-8.010h-352.017c-4.404 0-7.994 3.589-7.994 8.010s3.59 8.010 7.994 8.010h168.007v63.996h-168.007c-4.404 0-7.994 3.589-7.994 8.010s3.59 7.993 7.994 7.993h72.005v64.012h-72.005c-4.404 0-7.994 3.589-7.994 7.993s3.59 8.010 7.994 8.010h168.007v63.996h-168.007c-4.404 0-7.994 3.589-7.994 8.010 0 4.388 3.59 7.994 7.994 7.994h72.005v63.996h-72.005c-4.404 0-7.994 3.59-7.994 8.010s3.59 8.010 7.994 8.010h168.007v63.996h-168.007c-4.404 0-7.994 3.589-7.994 8.010s3.59 7.993 7.994 7.993h72.005v56.002c0 4.405 3.59 8.010 7.993 8.010s8.010-3.605 8.010-8.010v-56.002h176.001v56.002c0 4.405 3.589 8.010 7.993 8.010s8.010-3.589 8.010-8.010v-56.002h72.005c4.435 0 8.010-3.589 8.010-7.993s-3.574-8.010-8.010-8.010h-168.007v-63.996h167.992z" horiz-adv-x="400" />
-<glyph unicode="&#xe648;" d="M400.011 475.639c0 11.739-9.717 20.361-21.473 20.361h-357.425c-11.755 0-21.113-8.62-21.113-20.361v-469.43c0-11.755 9.357-22.21 21.113-22.21h357.441c11.755 0 21.457 10.454 21.457 22.21v469.43z" horiz-adv-x="400" />
-<glyph unicode="&#xe649;" d="M374.063-16h-344.344c-16.108 0-29.72 14.081-29.72 30.772v452.222c0 16.258 13.049 29.006 29.72 29.006h344.344c16.86 0 30.077-12.748 30.077-29.006v-452.222c-0.019-16.69-13.781-30.772-30.077-30.772zM29.72 477.226c-6.346 0-10.945-4.3-10.945-10.232v-452.222c0-6.402 5.107-12.015 10.945-12.015h344.343c5.895 0 11.303 5.726 11.303 12.015v452.222c-0.019 5.839-4.863 10.232-11.303 10.232h-344.344zM32.498 394.13h339.106c4.281 0 7.697 3.473 7.697 7.697 0 4.262-3.435 7.697-7.697 7.697h-339.106c-4.243 0-7.697-3.454-7.697-7.697 0-4.225 3.474-7.697 7.697-7.697zM32.498 317.060h339.106c4.281 0 7.697 3.474 7.697 7.697 0 4.262-3.435 7.697-7.697 7.697h-339.106c-4.243 0-7.697-3.454-7.697-7.697s3.474-7.697 7.697-7.697zM101.889 463.501v-61.655c0-4.281 3.454-7.697 7.679-7.697 4.262 0 7.716 3.435 7.716 7.697v61.655c0 4.243-3.474 7.716-7.716 7.716s-7.679-3.492-7.679-7.716zM194.354 401.827v-77.070c0-4.28 3.474-7.697 7.697-7.697 4.262 0 7.716 3.436 7.716 7.697v77.070c0 4.262-3.474 7.697-7.716 7.697-4.243 0.019-7.697-3.435-7.697-7.697zM286.837 463.501v-61.655c0-4.281 3.435-7.697 7.697-7.697 4.243 0 7.697 3.435 7.697 7.697v61.655c0 4.243-3.474 7.716-7.697 7.716-4.262 0-7.697-3.492-7.697-7.716zM32.498 239.99h339.106c4.281 0 7.697 3.474 7.697 7.697s-3.435 7.697-7.697 7.697h-339.106c-4.243 0-7.697-3.474-7.697-7.697s3.474-7.697 7.697-7.697zM101.889 324.757v-77.050c0-4.28 3.454-7.697 7.679-7.697 4.262 0 7.716 3.435 7.716 7.697v77.050c0 4.262-3.474 7.697-7.716 7.697s-7.679-3.454-7.679-7.697zM194.354 247.688v-69.353c0-4.281 3.474-7.697 7.697-7.697 4.262 0 7.716 3.435 7.716 7.697v69.353c0 4.243-3.474 7.697-7.716 7.697-4.243 0.019-7.697-3.454-7.697-7.697zM286.837 324.757v-77.050c0-4.28 3.435-7.697 7.697-7.697 4.243 0 7.697 3.435 7.697 7.697v77.050c0 4.262-3.474 7.697-7.697 7.697-4.262 0-7.697-3.454-7.697-7.697zM32.498 162.94h339.106c4.281 0 7.697 3.474 7.697 7.697 0 4.262-3.435 7.697-7.697 7.697h-339.106c-4.243 0-7.697-3.454-7.697-7.697s3.474-7.697 7.697-7.697zM32.498 85.852h339.106c4.281 0 7.697 3.474 7.697 7.697 0 4.262-3.435 7.697-7.697 7.697h-339.106c-4.243 0-7.697-3.454-7.697-7.697 0-4.224 3.474-7.697 7.697-7.697zM32.498 8.783h339.106c4.281 0 7.697 3.492 7.697 7.716s-3.435 7.716-7.697 7.716h-339.106c-4.243 0-7.697-3.492-7.697-7.716s3.474-7.716 7.697-7.716zM101.889 170.637v-77.070c0-4.281 3.454-7.697 7.679-7.697 4.262 0 7.716 3.435 7.716 7.697v77.070c0 4.262-3.474 7.697-7.716 7.697s-7.679-3.454-7.679-7.697zM194.354 93.55v-77.050c0-4.281 3.474-7.716 7.697-7.716 4.262 0 7.716 3.454 7.716 7.716v77.050c0 4.262-3.474 7.697-7.716 7.697-4.243 0.019-7.697-3.435-7.697-7.697zM286.837 170.637v-77.070c0-4.281 3.435-7.697 7.697-7.697 4.243 0 7.697 3.435 7.697 7.697v77.070c0 4.262-3.474 7.697-7.697 7.697-4.262 0-7.697-3.454-7.697-7.697z" horiz-adv-x="404" />
-<glyph unicode="&#xe64a;" d="M256.016-15.969c-141.157 0-256 114.827-256 256 0 141.142 114.843 255.969 256 255.969 141.11 0 255.937-114.827 255.937-255.969-0.016-141.173-114.827-256-255.937-256zM256.016 482.171c-133.533 0-242.188-108.623-242.188-242.156s108.638-242.188 242.188-242.188c133.502 0 242.124 108.654 242.124 242.187-0.016 133.533-108.623 242.156-242.124 242.156zM292.149 120.627c0-19.381-15.712-35.092-35.092-35.092s-35.092 15.712-35.092 35.092c0 19.381 15.712 35.092 35.092 35.092s35.092-15.712 35.092-35.092zM257.042 403.274c-35.108 0.173-58.077-22.764-68.811-41.486-11.381-19.149-14.554-36.403-14.839-37.855-2.447-12.44 5.667-24.547 18.138-26.852 12.423-2.431 24.5 5.698 26.899 18.154h-0.048c0 0 0.048 0.158 0.347 1.373 0.978 4.184 4.815 16.386 11.508 25.637 7.245 9.377 14.034 14.87 26.757 15.076 23.663-0.853 37.413-13.939 38.265-37.729-0.063-15.344-7.925-23.979-23.49-38.991-14.223-13.75-37.428-33.45-37.744-68.163 0-2.983 0-4.373 0.048-4.925 0-0.158 0.016-0.284 0.016-0.284 0-5.983 2.415-11.95 6.678-16.212 4.31-4.294 10.197-6.74 16.228-6.74 6.188 0 11.918 2.415 16.228 6.74 4.341 4.341 6.757 10.087 6.757 16.18 0 0 0 1.058 0 5.209-0.252 11.224 7.135 19.433 23.521 34.934 14.981 14.192 37.776 36.228 37.728 72.221 0.048 23.426-8.872 45.053-24.389 60.144-15.36 15.202-36.829 23.615-59.797 23.568z" />
-<glyph unicode="&#xe64b;" d="M256.026-16c-141.165 0-256.026 114.827-256.026 255.991s114.861 256.009 256.026 256.009c141.131 0 255.957-114.844 255.957-256.009s-114.809-255.991-255.957-255.991zM256.026 478.683c-131.624 0-238.709-107.086-238.709-238.692s107.086-238.674 238.709-238.674c131.589 0 238.64 107.086 238.64 238.674 0 131.606-107.051 238.692-238.64 238.692zM180.958 191.141c0.952-0.969 1.454-2.216 1.454-3.706 0-1.507-0.502-2.736-1.454-3.706-0.97-0.969-2.216-1.438-3.723-1.438h-51.517c-1.489 0-2.719 0.467-3.689 1.438s-1.454 2.199-1.454 3.706c0 1.489 0.485 2.736 1.454 3.706s2.199 1.472 3.689 1.472h51.534c1.489-0.017 2.754-0.519 3.706-1.472zM286.555 283.386l-38.477-2.909-43.967 44.106c-2.978 3.013-6.649 4.537-10.927 4.537-4.191 0-7.845-1.472-10.962-4.381l-23.655-23.482c-3.013-3.013-4.519-6.598-4.519-10.788 0-4.295 1.506-7.931 4.519-10.944l44.088-44.122-2.892-38.599c-3.74 2.234-6.754 4.502-9.005 6.753l-54.097 54.080c-9.005 9.23-13.525 20.191-13.525 32.833 0 12.883 4.572 23.776 13.698 32.694l23.654 23.481c8.918 8.918 19.81 13.369 32.694 13.369 12.97 0 23.914-4.572 32.833-13.68l53.786-53.941c2.251-2.268 4.485-5.264 6.753-9.005zM191.262 157.962l-41.214-41.214c-1.073-0.969-2.321-1.438-3.706-1.438-1.281 0-2.528 0.467-3.723 1.438-0.952 1.074-1.454 2.32-1.454 3.706s0.502 2.632 1.454 3.688l41.231 41.231c1.073 0.969 2.286 1.454 3.706 1.454 1.368 0 2.615-0.485 3.706-1.454 0.952-1.074 1.438-2.303 1.438-3.706s-0.485-2.632-1.438-3.706zM218.449 151.382v-51.534c0-1.507-0.485-2.736-1.454-3.688-0.97-0.987-2.199-1.438-3.689-1.438-1.506 0-2.736 0.45-3.706 1.438-0.97 0.952-1.454 2.182-1.454 3.688v51.534c0 1.507 0.485 2.736 1.454 3.723 0.97 0.952 2.199 1.42 3.706 1.42 1.489 0 2.719-0.467 3.689-1.42 0.97-0.987 1.454-2.216 1.454-3.723zM385.866 166.829c0-12.884-4.572-23.776-13.697-32.676l-23.654-23.516c-8.901-8.901-19.81-13.368-32.676-13.368-12.97 0-23.931 4.606-32.832 13.697l-53.768 53.941c-2.251 2.234-4.519 5.264-6.788 9.005l38.495 2.909 43.95-44.123c2.892-2.875 6.529-4.364 10.944-4.416 4.399-0.070 8.052 1.351 10.944 4.26l23.672 23.498c2.996 2.996 4.502 6.598 4.502 10.788 0 4.277-1.507 7.931-4.502 10.927l-44.106 44.296 2.892 38.477c3.74-2.269 6.771-4.502 9.005-6.771l54.097-54.097c9.022-9.229 13.524-20.174 13.524-32.832zM300.876 357.433v-51.534c0-1.489-0.502-2.719-1.454-3.706-0.952-0.97-2.199-1.438-3.706-1.438-1.489 0-2.736 0.467-3.706 1.438-0.969 0.987-1.454 2.216-1.454 3.706v51.534c0 1.506 0.485 2.718 1.454 3.706s2.216 1.438 3.706 1.438c1.507 0 2.753-0.45 3.706-1.438s1.454-2.199 1.454-3.706zM366.385 333.12l-41.196-41.214c-1.178-0.952-2.425-1.454-3.706-1.454s-2.528 0.502-3.723 1.454c-0.969 1.074-1.438 2.303-1.438 3.689 0 1.42 0.467 2.632 1.438 3.723l41.231 41.214c1.074 0.969 2.303 1.454 3.706 1.454 1.385 0 2.615-0.485 3.688-1.454 0.987-1.074 1.454-2.303 1.454-3.706 0-1.386-0.467-2.649-1.454-3.706zM387.009 273.551c0.987-0.969 1.454-2.216 1.454-3.706 0-1.524-0.467-2.736-1.454-3.723-0.987-0.952-2.216-1.42-3.706-1.42h-51.534c-1.507 0-2.719 0.467-3.706 1.42-0.952 0.987-1.438 2.199-1.438 3.723 0 1.489 0.485 2.736 1.438 3.706 0.987 0.97 2.199 1.455 3.706 1.455h51.534c1.489 0 2.719-0.485 3.706-1.455z" />
-<glyph unicode="&#xe64c;" d="M624.604 496h-548.383c-10.186 0-19.225-5.161-24.688-12.947-15.724-1.57-28.264-13.808-30.226-29.426-12.464-5.040-21.308-17.218-21.308-31.463v-341.192c0-18.712 15.241-33.954 33.954-33.954h226.807l-7.998-7.998c-5.794-5.779-7.606-10.594-7.832-14.17l-13.053-13.053c-9.22-9.205-8.375-15.981-7.032-19.18 1.328-3.199 5.493-8.587 18.531-8.587h129.551c13.023 0 17.203 5.387 18.531 8.601 1.313 3.139 2.098 9.703-6.534 18.622h8.888c13.023 0 17.203 5.387 18.531 8.587 0.935 2.233 1.57 6.262-1.252 11.604h4.104c13.762 0 18.682 6.639 13.34 15.589h153.8c17.279 0 31.418 13.023 33.53 29.743 8.783 3.531 15.558 10.729 18.923 19.587 11.62 4.21 19.995 15.272 19.995 28.279v341.178c0 16.599-13.596 30.18-30.181 30.18z" horiz-adv-x="655" />
-<glyph unicode="&#xe64d;" d="M389.341-4.372c-1.009-2.46-5.501-3.988-11.705-3.988h-131.186c-6.204 0-10.681 1.528-11.705 3.988s1.070 6.709 5.456 11.109l8.237 8.236c-1.024 3.575-0.871 9.918 7.503 18.276l22.188 22.203h-243.745c-14.746 0-26.741 11.995-26.741 26.741v345.5c0 9.993 5.562 18.627 13.707 23.212 0.198 3.193 0.825 6.25 1.834 9.153-13.432-4.676-23.181-17.344-23.181-32.365v-345.5c0-18.948 15.434-34.382 34.382-34.382h236.089l-35.666-35.681c-9.337-9.322-8.481-16.183-7.121-19.422 1.345-3.24 5.562-8.695 18.765-8.695h131.186c13.188 0 17.42 5.455 18.765 8.71 0.978 2.353 1.666 6.663-1.604 12.408h-9.474c3.316-3.805 4.921-7.35 4.019-9.505zM589.688 55.453h-201.478l7.64-7.64h193.838c14.99 0 27.659 9.734 32.335 23.151-2.888-1.009-5.96-1.62-9.153-1.818-4.585-8.13-13.202-13.692-23.181-13.692zM255.893 16.747c-1.024 2.46 1.069 6.709 5.456 11.109l48.716 48.716h-254.533c-14.746 0-26.741 11.995-26.741 26.741v345.5c0 1.742 0.198 3.453 0.52 5.119-2.857-0.55-5.486-1.635-7.962-3.026-0.046-0.703-0.214-1.375-0.214-2.093v-345.5c0-18.948 15.433-34.382 34.382-34.382h236.089l-13.478-13.478h10.773l-40.464-40.479c0.122-0.413 0.244-0.81 0.382-1.146 1.345-3.24 5.562-8.695 18.765-8.695h117.709c-0.474 0.535-0.887 1.055-1.421 1.604l-6.036 6.036h-110.267c-6.188-0.015-10.666 1.513-11.674 3.973zM610.837 483.195h-555.306c-14.99 0-27.659-9.734-32.334-23.151 2.904 1.008 5.959 1.62 9.153 1.818 4.599 8.114 13.218 13.692 23.197 13.692h555.306c14.746 0 26.741-11.995 26.741-26.741v-345.5c0-9.993-5.577-18.627-13.707-23.212-0.198-3.193-0.825-6.25-1.833-9.153 13.447 4.676 23.197 17.344 23.197 32.349v345.515c-0.030 18.948-15.464 34.382-34.413 34.382zM356.303 76.572l21.103-21.118h10.803l-13.462 13.478h236.074c0.703 0 1.36 0.168 2.048 0.214 1.39 2.445 2.476 5.089 3.025 7.946-1.635-0.321-3.346-0.505-5.073-0.505h-254.518zM405.019 27.841c4.385-4.385 6.495-8.634 5.455-11.109-1.009-2.46-5.486-3.988-11.705-3.988h-10.116l0.627-0.627c2.536-2.536 4.264-4.86 5.486-7.014h4.003c13.188 0 17.42 5.455 18.765 8.695 1.36 3.255 2.231 10.101-7.121 19.422l-14.563 14.563h-10.803l19.972-19.942zM377.406 55.453l7.64-7.64h10.803l-7.64 7.64zM278.142 55.453l-22.188-22.203c-8.374-8.358-8.542-14.7-7.503-18.276l40.464 40.479h-10.773zM388.668 12.759h-10.803l6.036-6.036c0.535-0.55 0.947-1.070 1.421-1.604h9.474c-1.223 2.154-2.949 4.478-5.486 7.014l-0.642 0.627zM29.308 453.932c0.55 2.857 1.635 5.486 3.025 7.946-3.194-0.199-6.235-0.81-9.138-1.834-1.009-2.888-1.635-5.959-1.834-9.153 2.46 1.406 5.088 2.491 7.946 3.041zM615.909 77.075c-0.55-2.858-1.635-5.486-3.025-7.946 3.193 0.199 6.25 0.81 9.153 1.818 1.009 2.888 1.635 5.959 1.833 9.153-2.476-1.39-5.104-2.476-7.962-3.026zM632.49 496h-555.306c-16.809 0-30.561-13.753-30.561-30.562v-345.5c0-16.809 13.753-30.562 30.561-30.562h245.334l-42.221-42.206c-11.873-11.873-7.87-21.607 8.954-21.607h131.186c16.809 0 20.828 9.734 8.954 21.607l-42.205 42.206h245.303c16.809 0 30.562 13.753 30.562 30.562v345.5c0 16.809-13.768 30.561-30.562 30.561zM611.326 133.584h-512.962v318.209h512.962v-318.209z" horiz-adv-x="663" />
-<glyph unicode="&#xe64e;" d="M637.601 496h-604.35c-18.282 0-33.252-14.988-33.252-33.269v-376.003c0-18.281 14.97-33.269 33.252-33.269h267.010l-45.944-45.925c-12.941-12.941-8.544-23.514 9.737-23.514h142.779c18.281 0 22.642 10.591 9.719 23.514l-45.925 45.925h266.974c18.282 0 33.269 14.988 33.269 33.269v376.003c0 18.281-14.971 33.269-33.269 33.269zM614.567 101.574h-558.264v346.329h558.264v-346.329zM470.507 290.972c-1.281 0-2.527 0.516-3.774 1.548-20.488 17.978-41.778 31.525-63.815 40.603-22.019 9.114-46.103 13.653-72.2 13.653-26.113 0-50.18-4.539-72.217-13.653-22.037-9.096-43.309-22.625-63.815-40.603-1.228-1.033-2.492-1.548-3.774-1.548-1.94 0-7.209 4.29-15.896 12.87-8.633 8.597-12.959 13.92-12.959 15.985 0 1.477 0.57 2.794 1.726 3.952 21.397 21.289 46.869 37.773 76.418 49.45s59.704 17.498 90.499 17.498c30.777 0 60.95-5.821 90.481-17.498 29.549-11.677 55.022-28.161 76.436-49.45 1.139-1.139 1.709-2.475 1.709-3.952 0-2.065-4.308-7.388-12.959-15.985-8.634-8.562-13.92-12.87-15.861-12.87zM423.958 244.441c-1.264 0-2.599 0.463-3.969 1.353-15.54 12.051-29.976 20.88-43.274 26.541-13.297 5.679-28.588 8.508-46.014 8.508-9.737 0-19.491-1.246-29.3-3.774-9.772-2.527-18.299-5.554-25.598-9.114-7.262-3.542-13.76-7.084-19.491-10.645-5.732-3.542-10.253-6.604-13.564-9.114-3.328-2.528-5.109-3.774-5.322-3.774-1.94 0-7.209 4.29-15.825 12.887-8.58 8.597-12.87 13.903-12.87 15.95 0 1.388 0.552 2.635 1.744 3.791 15.095 15.113 33.412 26.861 54.915 35.21 21.521 8.366 43.291 12.514 65.275 12.514 21.966 0 43.736-4.148 65.257-12.514 21.503-8.349 39.82-20.097 54.969-35.21 1.122-1.139 1.673-2.403 1.673-3.791 0-2.047-4.272-7.351-12.87-15.95-8.509-8.58-13.796-12.87-15.736-12.87zM377.089 197.733c-0.249 0-2.527 1.424-6.889 4.29-4.325 2.848-10.128 5.714-17.409 8.58-7.298 2.866-14.65 4.29-22.073 4.29-7.44 0-14.81-1.424-22.055-4.29-7.281-2.866-13.065-5.732-17.356-8.58-4.308-2.866-6.622-4.29-6.978-4.29-2.029 0-7.405 4.29-16.038 12.887s-12.976 13.902-12.976 15.967c0 1.478 0.588 2.795 1.745 3.952 8.918 8.811 20.151 15.753 33.661 20.773 13.493 5.037 26.844 7.565 40.016 7.565 13.154 0 26.488-2.527 40.016-7.565 13.51-5.020 24.725-11.962 33.643-20.773 1.157-1.139 1.726-2.474 1.726-3.952 0-2.065-4.308-7.387-12.959-15.967-8.687-8.598-14.027-12.887-16.074-12.887zM346.703 163.822c-8.366-8.419-13.688-12.639-15.967-12.639s-7.637 4.219-15.95 12.639c-8.384 8.438-12.55 13.76-12.55 16.056 0 3.649 3.56 6.764 10.734 9.274 7.138 2.527 13.084 3.791 17.783 3.791s10.627-1.264 17.783-3.791c7.138-2.51 10.734-5.607 10.734-9.274-0.036-2.296-4.236-7.637-12.567-16.056z" horiz-adv-x="671" />
-<glyph unicode="&#xe64f;" d="M401.766-16h-137.982c-16.531 0-22.106 7.517-23.963 11.973-1.858 4.49-3.234 13.745 8.464 25.442l29.726 29.709h-237.275c-22.466 0-40.736 18.269-40.736 40.753v363.37c0 22.484 18.269 40.753 40.736 40.753h584.044c22.484 0 40.753-18.269 40.753-40.753v-363.37c0-22.484-18.269-40.753-40.753-40.753h-237.24l29.709-29.709c11.697-11.697 10.339-20.952 8.481-25.442-1.841-4.455-7.431-11.973-23.963-11.973zM255.854 2.286c0.395 0 2.804-1.067 7.931-1.067h137.982c5.436 0 7.827 1.204 8.24 1.651-0.241-0.017-1.067 2.529-4.92 6.399l-59.074 59.074h278.768c12.988 0 23.551 10.563 23.551 23.55v363.353c0 12.988-10.563 23.55-23.551 23.55h-584.044c-12.988 0-23.533-10.563-23.533-23.55v-363.37c0-12.988 10.545-23.55 23.533-23.55h278.802l-59.091-59.074c-3.87-3.87-4.679-6.399-4.662-6.984 0.017 0 0.035 0.017 0.069 0.017zM611.121 97.623h-556.71v351.896h556.71v-351.896zM71.615 114.825h522.304v317.49h-522.304v-317.49zM328.208 145.567c-4.49 0-9.255 2.357-21.538 14.76-12.283 12.368-14.622 17.116-14.622 21.572 0 7.587 5.419 13.332 16.136 17.065 15.74 5.556 24.152 5.591 40.065 0 10.683-3.75 16.119-9.496 16.119-17.065 0-4.524-2.253-9.1-14.605-21.572-12.334-12.403-17.082-14.76-21.555-14.76zM310.661 181.416c1.411-1.772 3.888-4.611 8.24-8.962 4.697-4.748 7.62-7.294 9.324-8.618 1.703 1.325 4.611 3.87 9.341 8.618 4.335 4.37 6.812 7.208 8.206 8.962-0.757 0.378-1.789 0.843-3.2 1.325-7.483 2.615-11.921 3.183-14.347 3.183-2.443 0-6.881-0.55-14.329-3.183-1.428-0.481-2.46-0.946-3.234-1.325zM373.021 190.551c-2.907 0-4.043 0.74-11.371 5.556-3.699 2.443-8.825 4.954-15.259 7.5-12.024 4.714-24.479 4.679-36.332 0-6.434-2.529-11.543-5.041-15.156-7.466-6.812-4.524-8.515-5.591-11.509-5.591-4.421 0-8.791 2.236-21.572 14.949-12.833 12.747-15.087 17.099-15.087 21.538 0 3.733 1.445 7.156 4.197 9.891 9.496 9.393 21.469 16.807 35.61 22.054 27.8 10.39 55.341 10.425 83.346 0 14.106-5.264 26.079-12.661 35.541-22.020 2.752-2.701 4.214-6.141 4.214-9.926 0-4.455-2.253-8.825-15.052-21.538-12.851-12.712-17.185-14.949-21.572-14.949zM265.332 226.883c1.479-1.789 4.077-4.662 8.618-9.186 4.611-4.576 7.534-7.173 9.324-8.618 0.62 0.396 1.308 0.877 2.082 1.376 4.697 3.131 10.717 6.124 18.373 9.135 15.895 6.296 32.892 6.313 48.959 0.017 7.534-2.993 13.745-6.055 18.406-9.118 0.757-0.499 1.462-0.981 2.082-1.376 1.789 1.462 4.697 4.043 9.306 8.601 4.541 4.507 7.122 7.397 8.584 9.169-7.38 6.64-16.498 11.99-27.18 15.981-24.169 8.98-47.358 8.98-71.339 0-10.717-3.974-19.852-9.358-27.214-15.981zM418.315 235.691c-2.873 0-5.728 0.911-8.498 2.683-14.914 11.525-28.332 19.766-40.512 24.961-18.166 7.759-42.817 10.391-67.262 4.146-8.894-2.288-16.652-5.058-23.086-8.205-6.76-3.286-12.764-6.572-18.080-9.857-5.281-3.251-9.427-6.055-12.454-8.343-5.436-4.146-7.088-5.385-10.339-5.385-4.404 0-8.532 2.168-21.365 14.966-12.713 12.73-14.949 17.082-14.949 21.503 0 3.716 1.48 7.104 4.284 9.822 15.293 15.31 34.147 27.421 55.96 35.867 43.316 16.841 89.058 16.841 132.357 0 21.779-8.447 40.649-20.54 56.097-35.953 2.718-2.752 4.128-6.107 4.128-9.736 0-4.421-2.236-8.774-14.949-21.503-12.695-12.73-16.996-14.966-21.331-14.966zM328.208 288.072c17.925 0 34.026-2.993 47.841-8.911 12.971-5.522 27.025-14.020 41.802-25.305 1.738 1.376 4.697 4.008 9.651 8.963 4.49 4.507 7.053 7.38 8.515 9.152-13.263 12.627-29.365 22.673-47.841 29.846-39.342 15.258-80.594 15.258-119.937 0-18.493-7.19-34.577-17.22-47.823-29.881 1.462-1.789 4.025-4.662 8.481-9.117 4.232-4.232 7.036-6.761 8.842-8.257 0.103 0.069 0.207 0.155 0.31 0.241 3.371 2.529 7.965 5.66 13.797 9.272 5.729 3.543 12.282 7.122 19.576 10.683 7.483 3.664 16.342 6.812 26.355 9.41 10.081 2.598 20.334 3.905 30.432 3.905zM463.3 280.659c-3.234 0-6.313 1.152-9.083 3.44-19.233 16.841-39.17 29.571-59.504 37.949-40.254 16.635-92.774 16.635-132.976 0-20.316-8.378-40.254-21.091-59.297-37.76-3.63-3.028-7.036-3.63-9.306-3.63-4.352 0-8.481 2.15-21.4 14.914-12.816 12.764-15.070 17.116-15.070 21.572 0 3.733 1.445 7.156 4.18 9.892 21.417 21.314 47.256 38.052 76.775 49.716 58.798 23.258 122.448 23.258 181.212 0 29.519-11.663 55.341-28.367 76.775-49.698 2.735-2.735 4.18-6.159 4.18-9.909 0-4.456-2.253-8.808-15.052-21.555-12.919-12.781-17.048-14.932-21.435-14.932zM328.208 351.791c26.269 0 50.851-4.662 73.060-13.848 21.279-8.791 42.112-21.865 61.912-38.861 1.772 1.428 4.679 4.025 9.427 8.721 4.576 4.558 7.173 7.466 8.618 9.238-19.301 18.596-42.421 33.322-68.725 43.712-54.721 21.641-113.795 21.641-168.585 0-26.303-10.39-49.423-25.098-68.725-43.729 1.462-1.789 4.060-4.679 8.636-9.238 4.714-4.662 7.655-7.26 9.41-8.704 19.714 16.944 40.581 30.070 61.929 38.861 22.174 9.203 46.774 13.848 73.042 13.848z" horiz-adv-x="666" />
-</font></defs></svg> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.ttf b/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.ttf
deleted file mode 100644
index 555148235..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.ttf
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.woff b/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.woff
deleted file mode 100644
index a52429933..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/fonts/next-font.woff
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/images/bd1.svg b/vbd/gui/module/src/main/resources/vpp/assets/images/bd1.svg
deleted file mode 100644
index bfd05671a..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/images/bd1.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="Layer_3" data-name="Layer 3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 50.99 35.43"><defs><style>.cls-1{fill:#ffffff;}.cls-2{fill:#414040;}</style></defs><title>Device Nodes_140507</title><path class="cls-1" d="M11.59,30.62L2,30.6A10,10,0,0,0,10,34.68h2.32V30.62H11.59Z"/><path class="cls-1" d="M12.32,29.66V28.94L1,28.92c0.12,0.26.25,0.51,0.4,0.76l10.2,0h0.75Z"/><path class="cls-1" d="M10.33,22.83a7.66,7.66,0,0,0,2-4.72,1.34,1.34,0,0,1,1.41-1.46,1.21,1.21,0,0,1,1.4,1.18,9.81,9.81,0,0,0,.51,2.29,9.16,9.16,0,0,0,4.83,5.2,11,11,0,0,0,6.81,1.07,10.85,10.85,0,0,0,6.4-3.26A8.09,8.09,0,0,0,36,17.93a1.43,1.43,0,0,1,1.43-1.28,1.33,1.33,0,0,1,1.38,1.19,8.37,8.37,0,0,0,2.57,5.5,10.58,10.58,0,0,0,5.45,2.9c0.23,0,1.81.08,4,.12A10,10,0,0,0,44,15.07,12,12,0,0,0,21.25,7.38,8.51,8.51,0,0,0,6.58,15.22,10,10,0,0,0,.17,26.47c1.91,0,3.28,0,3.43-.06A10.87,10.87,0,0,0,10.33,22.83Z"/><polygon class="cls-1" points="15.16 30.66 15.16 34.68 36.03 34.68 36.05 30.66 15.16 30.66"/><path class="cls-1" d="M38.87,29.66H49.63c0.13-.23.26-0.47,0.37-0.72H38.87v0.72Z"/><path class="cls-1" d="M38.88,30.62v4.06H41a10,10,0,0,0,8-4.06H38.88Z"/><path class="cls-1" d="M15.16,29.63H36V29H15.16v0.65Z"/><polygon class="cls-2" points="12.35 35.4 15.16 35.38 15.16 34.68 12.35 34.68 12.35 35.4"/><polygon class="cls-2" points="36.03 35.43 38.88 35.38 38.88 34.68 36.03 34.68 36.03 35.43"/><path class="cls-2" d="M46.87,26.24a10.58,10.58,0,0,1-5.45-2.9,8.37,8.37,0,0,1-2.57-5.5,1.33,1.33,0,0,0-1.38-1.19A1.43,1.43,0,0,0,36,17.93a8.09,8.09,0,0,1-2.33,5.21,10.85,10.85,0,0,1-6.4,3.26,11,11,0,0,1-6.81-1.07,9.16,9.16,0,0,1-4.83-5.2,9.81,9.81,0,0,1-.51-2.29,1.21,1.21,0,0,0-1.4-1.18,1.34,1.34,0,0,0-1.41,1.46,7.66,7.66,0,0,1-2,4.72A10.87,10.87,0,0,1,3.6,26.41c-0.15,0-1.52,0-3.43.06A10,10,0,0,0,1,28.92l11.35,0v0.72H11.57l-10.2,0A10,10,0,0,0,2,30.6l9.62,0h0.77v4.06h2.8v-4h20.9l0,4h2.85V30.62H49a10,10,0,0,0,.63-1H38.87V28.94H50a9.94,9.94,0,0,0,.82-2.59C48.68,26.33,47.1,26.29,46.87,26.24ZM36,29.63H15.16V29H36v0.65Z"/></svg> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/images/bd2.svg b/vbd/gui/module/src/main/resources/vpp/assets/images/bd2.svg
deleted file mode 100644
index 91131ce34..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/images/bd2.svg
+++ /dev/null
@@ -1,8 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="80px" height="60px" viewBox="0 0 80 60" enable-background="new 0 0 80 60" xml:space="preserve">
-<path fill="#56BDD7" d="M80,55c0,2.833-1.333,5-4.381,5H4.328C1.334,60,0,57.241,0,55V3c0-1.657,1.042-3,2.328-3
- c0,0,11.232,22,37.584,22S77.646,0,77.646,0C78.932,0,80,1.343,80,3V55z"/>
-</svg>
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/images/interf.svg b/vbd/gui/module/src/main/resources/vpp/assets/images/interf.svg
deleted file mode 100644
index 4ddef8038..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/images/interf.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg id="Layer_3" data-name="Layer 3" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21.34 12.6"><defs><style>.cls-1{fill:#414040;}.cls-2{fill:#ffffff;}</style></defs><title>Device Nodes_140507</title><rect class="cls-1" x="1.5" y="1.5" width="18.34" height="9.6" rx="2" ry="2"/><path class="cls-2" d="M17.84,12.6H3.5A3.5,3.5,0,0,1,0,9.1V3.5A3.5,3.5,0,0,1,3.5,0H17.84a3.5,3.5,0,0,1,3.5,3.5V9.1A3.5,3.5,0,0,1,17.84,12.6ZM3.5,3a0.51,0.51,0,0,0-.5.5V9.1a0.51,0.51,0,0,0,.5.5H17.84a0.51,0.51,0,0,0,.5-0.5V3.5a0.51,0.51,0,0,0-.5-0.5H3.5Z"/></svg> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/images/vpp.gif b/vbd/gui/module/src/main/resources/vpp/assets/images/vpp.gif
deleted file mode 100644
index 648ff6109..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/images/vpp.gif
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/js/lodash.min.js b/vbd/gui/module/src/main/resources/vpp/assets/js/lodash.min.js
deleted file mode 100644
index e6c9820b2..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/js/lodash.min.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * @license
- * lodash 3.10.1 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
- * Build: `lodash modern -o ./lodash.js`
- */
-;(function(){function n(n,t){if(n!==t){var r=null===n,e=n===w,u=n===n,o=null===t,i=t===w,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(n<t&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function t(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function r(n,t,r){if(t!==t)return p(n,r);r-=1;for(var e=n.length;++r<e;)if(n[r]===t)return r;return-1}function e(n){return typeof n=="function"||false}function u(n){return null==n?"":n+""}function o(n,t){for(var r=-1,e=n.length;++r<e&&-1<t.indexOf(n.charAt(r)););
-return r}function i(n,t){for(var r=n.length;r--&&-1<t.indexOf(n.charAt(r)););return r}function f(t,r){return n(t.a,r.a)||t.b-r.b}function a(n){return Nn[n]}function c(n){return Tn[n]}function l(n,t,r){return t?n=Bn[n]:r&&(n=Dn[n]),"\\"+n}function s(n){return"\\"+Dn[n]}function p(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function h(n){return!!n&&typeof n=="object"}function _(n){return 160>=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n);
-}function v(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]=z,o[++u]=r);return o}function g(n){for(var t=-1,r=n.length;++t<r&&_(n.charCodeAt(t)););return t}function y(n){for(var t=n.length;t--&&_(n.charCodeAt(t)););return t}function d(n){return Ln[n]}function m(_){function Nn(n){if(h(n)&&!(Oo(n)||n instanceof zn)){if(n instanceof Ln)return n;if(nu.call(n,"__chain__")&&nu.call(n,"__wrapped__"))return Mr(n)}return new Ln(n)}function Tn(){}function Ln(n,t,r){this.__wrapped__=n,this.__actions__=r||[],
-this.__chain__=!!t}function zn(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=Ru,this.__views__=[]}function Bn(){this.__data__={}}function Dn(n){var t=n?n.length:0;for(this.data={hash:gu(null),set:new lu};t--;)this.push(n[t])}function Mn(n,t){var r=n.data;return(typeof t=="string"||ge(t)?r.set.has(t):r.hash[t])?0:-1}function qn(n,t){var r=-1,e=n.length;for(t||(t=Be(e));++r<e;)t[r]=n[r];return t}function Pn(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););
-return n}function Kn(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;return true}function Vn(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function Gn(n,t){for(var r=-1,e=n.length,u=Be(e);++r<e;)u[r]=t(n[r],r,n);return u}function Jn(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function Xn(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function Hn(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;
-return false}function Qn(n,t,r,e){return n!==w&&nu.call(e,r)?n:t}function nt(n,t,r){for(var e=-1,u=zo(t),o=u.length;++e<o;){var i=u[e],f=n[i],a=r(f,t[i],i,n,t);(a===a?a===f:f!==f)&&(f!==w||i in n)||(n[i]=a)}return n}function tt(n,t){return null==t?n:et(t,zo(t),n)}function rt(n,t){for(var r=-1,e=null==n,u=!e&&Er(n),o=u?n.length:0,i=t.length,f=Be(i);++r<i;){var a=t[r];f[r]=u?Cr(a,o)?n[a]:w:e?w:n[a]}return f}function et(n,t,r){r||(r={});for(var e=-1,u=t.length;++e<u;){var o=t[e];r[o]=n[o]}return r}function ut(n,t,r){
-var e=typeof n;return"function"==e?t===w?n:Bt(n,t,r):null==n?Fe:"object"==e?bt(n):t===w?ze(n):xt(n,t)}function ot(n,t,r,e,u,o,i){var f;if(r&&(f=u?r(n,e,u):r(n)),f!==w)return f;if(!ge(n))return n;if(e=Oo(n)){if(f=kr(n),!t)return qn(n,f)}else{var a=ru.call(n),c=a==K;if(a!=Z&&a!=B&&(!c||u))return Fn[a]?Rr(n,a,t):u?n:{};if(f=Ir(c?{}:n),!t)return tt(f,n)}for(o||(o=[]),i||(i=[]),u=o.length;u--;)if(o[u]==n)return i[u];return o.push(n),i.push(f),(e?Pn:_t)(n,function(e,u){f[u]=ot(e,t,r,u,n,o,i)}),f}function it(n,t,r){
-if(typeof n!="function")throw new Ge(L);return su(function(){n.apply(w,r)},t)}function ft(n,t){var e=n?n.length:0,u=[];if(!e)return u;var o=-1,i=xr(),f=i===r,a=f&&t.length>=F&&gu&&lu?new Dn(t):null,c=t.length;a&&(i=Mn,f=false,t=a);n:for(;++o<e;)if(a=n[o],f&&a===a){for(var l=c;l--;)if(t[l]===a)continue n;u.push(a)}else 0>i(t,a,0)&&u.push(a);return u}function at(n,t){var r=true;return Su(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ct(n,t,r,e){var u=e,o=u;return Su(n,function(n,i,f){i=+t(n,i,f),(r(i,u)||i===e&&i===o)&&(u=i,
-o=n)}),o}function lt(n,t){var r=[];return Su(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function st(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function pt(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];h(i)&&Er(i)&&(r||Oo(i)||pe(i))?t?pt(i,t,r,e):Jn(e,i):r||(e[e.length]=i)}return e}function ht(n,t){Nu(n,t,Re)}function _t(n,t){return Nu(n,t,zo)}function vt(n,t){return Tu(n,t,zo)}function gt(n,t){for(var r=-1,e=t.length,u=-1,o=[];++r<e;){var i=t[r];
-ve(n[i])&&(o[++u]=i)}return o}function yt(n,t,r){if(null!=n){r!==w&&r in Br(n)&&(t=[r]),r=0;for(var e=t.length;null!=n&&r<e;)n=n[t[r++]];return r&&r==e?n:w}}function dt(n,t,r,e,u,o){if(n===t)n=true;else if(null==n||null==t||!ge(n)&&!h(t))n=n!==n&&t!==t;else n:{var i=dt,f=Oo(n),a=Oo(t),c=D,l=D;f||(c=ru.call(n),c==B?c=Z:c!=Z&&(f=xe(n))),a||(l=ru.call(t),l==B?l=Z:l!=Z&&xe(t));var s=c==Z,a=l==Z,l=c==l;if(!l||f||s){if(!e&&(c=s&&nu.call(n,"__wrapped__"),a=a&&nu.call(t,"__wrapped__"),c||a)){n=i(c?n.value():n,a?t.value():t,r,e,u,o);
-break n}if(l){for(u||(u=[]),o||(o=[]),c=u.length;c--;)if(u[c]==n){n=o[c]==t;break n}u.push(n),o.push(t),n=(f?yr:mr)(n,t,i,r,e,u,o),u.pop(),o.pop()}else n=false}else n=dr(n,t,c)}return n}function mt(n,t,r){var e=t.length,u=e,o=!r;if(null==n)return!u;for(n=Br(n);e--;){var i=t[e];if(o&&i[2]?i[1]!==n[i[0]]:!(i[0]in n))return false}for(;++e<u;){var i=t[e],f=i[0],a=n[f],c=i[1];if(o&&i[2]){if(a===w&&!(f in n))return false}else if(i=r?r(a,c,f):w,i===w?!dt(c,a,r,true):!i)return false}return true}function wt(n,t){var r=-1,e=Er(n)?Be(n.length):[];
-return Su(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function bt(n){var t=Ar(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==w||r in Br(n))}}return function(n){return mt(n,t)}}function xt(n,t){var r=Oo(n),e=Wr(n)&&t===t&&!ge(t),u=n+"";return n=Dr(n),function(o){if(null==o)return false;var i=u;if(o=Br(o),!(!r&&e||i in o)){if(o=1==n.length?o:yt(o,Et(n,0,-1)),null==o)return false;i=Zr(n),o=Br(o)}return o[i]===t?t!==w||i in o:dt(t,o[i],w,true)}}function At(n,t,r,e,u){
-if(!ge(n))return n;var o=Er(t)&&(Oo(t)||xe(t)),i=o?w:zo(t);return Pn(i||t,function(f,a){if(i&&(a=f,f=t[a]),h(f)){e||(e=[]),u||(u=[]);n:{for(var c=a,l=e,s=u,p=l.length,_=t[c];p--;)if(l[p]==_){n[c]=s[p];break n}var p=n[c],v=r?r(p,_,c,n,t):w,g=v===w;g&&(v=_,Er(_)&&(Oo(_)||xe(_))?v=Oo(p)?p:Er(p)?qn(p):[]:me(_)||pe(_)?v=pe(p)?ke(p):me(p)?p:{}:g=false),l.push(_),s.push(v),g?n[c]=At(v,_,r,l,s):(v===v?v!==p:p===p)&&(n[c]=v)}}else c=n[a],l=r?r(c,f,a,n,t):w,(s=l===w)&&(l=f),l===w&&(!o||a in n)||!s&&(l===l?l===c:c!==c)||(n[a]=l);
-}),n}function jt(n){return function(t){return null==t?w:t[n]}}function kt(n){var t=n+"";return n=Dr(n),function(r){return yt(r,n,t)}}function It(n,t){for(var r=n?t.length:0;r--;){var e=t[r];if(e!=u&&Cr(e)){var u=e;pu.call(n,e,1)}}}function Rt(n,t){return n+yu(ku()*(t-n+1))}function Ot(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function Et(n,t,r){var e=-1,u=n.length;for(t=null==t?0:+t||0,0>t&&(t=-t>u?0:u+t),r=r===w||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Be(u);++e<u;)r[e]=n[e+t];
-return r}function Ct(n,t){var r;return Su(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Ut(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function Wt(t,r,e){var u=wr(),o=-1;return r=Gn(r,function(n){return u(n)}),t=wt(t,function(n){return{a:Gn(r,function(t){return t(n)}),b:++o,c:n}}),Ut(t,function(t,r){var u;n:{for(var o=-1,i=t.a,f=r.a,a=i.length,c=e.length;++o<a;)if(u=n(i[o],f[o])){if(o>=c)break n;o=e[o],u*="asc"===o||true===o?1:-1;break n}u=t.b-r.b}return u})}function $t(n,t){
-var r=0;return Su(n,function(n,e,u){r+=+t(n,e,u)||0}),r}function St(n,t){var e=-1,u=xr(),o=n.length,i=u===r,f=i&&o>=F,a=f&&gu&&lu?new Dn(void 0):null,c=[];a?(u=Mn,i=false):(f=false,a=t?[]:c);n:for(;++e<o;){var l=n[e],s=t?t(l,e,n):l;if(i&&l===l){for(var p=a.length;p--;)if(a[p]===s)continue n;t&&a.push(s),c.push(l)}else 0>u(a,s,0)&&((t||f)&&a.push(s),c.push(l))}return c}function Ft(n,t){for(var r=-1,e=t.length,u=Be(e);++r<e;)u[r]=n[t[r]];return u}function Nt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););
-return r?Et(n,e?0:o,e?o+1:u):Et(n,e?o+1:0,e?u:o)}function Tt(n,t){var r=n;r instanceof zn&&(r=r.value());for(var e=-1,u=t.length;++e<u;)var o=t[e],r=o.func.apply(o.thisArg,Jn([r],o.args));return r}function Lt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&u<=Eu){for(;e<u;){var o=e+u>>>1,i=n[o];(r?i<=t:i<t)&&null!==i?e=o+1:u=o}return u}return zt(n,t,Fe,r)}function zt(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,a=t===w;u<o;){var c=yu((u+o)/2),l=r(n[c]),s=l!==w,p=l===l;
-(i?p||e:f?p&&s&&(e||null!=l):a?p&&(e||s):null==l?0:e?l<=t:l<t)?u=c+1:o=c}return xu(o,Ou)}function Bt(n,t,r){if(typeof n!="function")return Fe;if(t===w)return n;switch(r){case 1:return function(r){return n.call(t,r)};case 3:return function(r,e,u){return n.call(t,r,e,u)};case 4:return function(r,e,u,o){return n.call(t,r,e,u,o)};case 5:return function(r,e,u,o,i){return n.call(t,r,e,u,o,i)}}return function(){return n.apply(t,arguments)}}function Dt(n){var t=new ou(n.byteLength);return new hu(t).set(new hu(n)),
-t}function Mt(n,t,r){for(var e=r.length,u=-1,o=bu(n.length-e,0),i=-1,f=t.length,a=Be(f+o);++i<f;)a[i]=t[i];for(;++u<e;)a[r[u]]=n[u];for(;o--;)a[i++]=n[u++];return a}function qt(n,t,r){for(var e=-1,u=r.length,o=-1,i=bu(n.length-u,0),f=-1,a=t.length,c=Be(i+a);++o<i;)c[o]=n[o];for(i=o;++f<a;)c[i+f]=t[f];for(;++e<u;)c[i+r[e]]=n[o++];return c}function Pt(n,t){return function(r,e,u){var o=t?t():{};if(e=wr(e,u,3),Oo(r)){u=-1;for(var i=r.length;++u<i;){var f=r[u];n(o,f,e(f,u,r),r)}}else Su(r,function(t,r,u){
-n(o,t,e(t,r,u),u)});return o}}function Kt(n){return le(function(t,r){var e=-1,u=null==t?0:r.length,o=2<u?r[u-2]:w,i=2<u?r[2]:w,f=1<u?r[u-1]:w;for(typeof o=="function"?(o=Bt(o,f,5),u-=2):(o=typeof f=="function"?f:w,u-=o?1:0),i&&Ur(r[0],r[1],i)&&(o=3>u?w:o,u=1);++e<u;)(i=r[e])&&n(t,i,o);return t})}function Vt(n,t){return function(r,e){var u=r?Bu(r):0;if(!Sr(u))return n(r,e);for(var o=t?u:-1,i=Br(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function Zt(n){return function(t,r,e){var u=Br(t);e=e(t);for(var o=e.length,i=n?o:-1;n?i--:++i<o;){
-var f=e[i];if(false===r(u[f],f,u))break}return t}}function Yt(n,t){function r(){return(this&&this!==Zn&&this instanceof r?e:n).apply(t,arguments)}var e=Jt(n);return r}function Gt(n){return function(t){var r=-1;t=$e(Ce(t));for(var e=t.length,u="";++r<e;)u=n(u,t[r],r);return u}}function Jt(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:
-return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=$u(n.prototype),t=n.apply(r,t);return ge(t)?t:r}}function Xt(n){function t(r,e,u){return u&&Ur(r,e,u)&&(e=w),r=gr(r,n,w,w,w,w,w,e),r.placeholder=t.placeholder,r}return t}function Ht(n,t){return le(function(r){var e=r[0];return null==e?e:(r.push(t),n.apply(w,r))})}function Qt(n,t){return function(r,e,u){if(u&&Ur(r,e,u)&&(e=w),e=wr(e,u,3),1==e.length){
-u=r=Oo(r)?r:zr(r);for(var o=e,i=-1,f=u.length,a=t,c=a;++i<f;){var l=u[i],s=+o(l);n(s,a)&&(a=s,c=l)}if(u=c,!r.length||u!==t)return u}return ct(r,e,n,t)}}function nr(n,r){return function(e,u,o){return u=wr(u,o,3),Oo(e)?(u=t(e,u,r),-1<u?e[u]:w):st(e,u,n)}}function tr(n){return function(r,e,u){return r&&r.length?(e=wr(e,u,3),t(r,e,n)):-1}}function rr(n){return function(t,r,e){return r=wr(r,e,3),st(t,r,n,true)}}function er(n){return function(){for(var t,r=arguments.length,e=n?r:-1,u=0,o=Be(r);n?e--:++e<r;){
-var i=o[u++]=arguments[e];if(typeof i!="function")throw new Ge(L);!t&&Ln.prototype.thru&&"wrapper"==br(i)&&(t=new Ln([],true))}for(e=t?-1:r;++e<r;){var i=o[e],u=br(i),f="wrapper"==u?zu(i):w;t=f&&$r(f[0])&&f[1]==(E|k|R|C)&&!f[4].length&&1==f[9]?t[br(f[0])].apply(t,f[3]):1==i.length&&$r(i)?t[u]():t.thru(i)}return function(){var n=arguments,e=n[0];if(t&&1==n.length&&Oo(e)&&e.length>=F)return t.plant(e).value();for(var u=0,n=r?o[u].apply(this,n):e;++u<r;)n=o[u].call(this,n);return n}}}function ur(n,t){
-return function(r,e,u){return typeof e=="function"&&u===w&&Oo(r)?n(r,e):t(r,Bt(e,u,3))}}function or(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r,Re)}}function ir(n){return function(t,r,e){return(typeof r!="function"||e!==w)&&(r=Bt(r,e,3)),n(t,r)}}function fr(n){return function(t,r,e){var u={};return r=wr(r,e,3),_t(t,function(t,e,o){o=r(t,e,o),e=n?o:e,t=n?t:o,u[e]=t}),u}}function ar(n){return function(t,r,e){return t=u(t),(n?t:"")+pr(t,r,e)+(n?"":t)}}function cr(n){
-var t=le(function(r,e){var u=v(e,t.placeholder);return gr(r,n,w,e,u)});return t}function lr(n,t){return function(r,e,u,o){var i=3>arguments.length;return typeof e=="function"&&o===w&&Oo(r)?n(r,e,u,i):Ot(r,wr(e,o,4),u,i,t)}}function sr(n,t,r,e,u,o,i,f,a,c){function l(){for(var m=arguments.length,b=m,j=Be(m);b--;)j[b]=arguments[b];if(e&&(j=Mt(j,e,u)),o&&(j=qt(j,o,i)),_||y){var b=l.placeholder,k=v(j,b),m=m-k.length;if(m<c){var I=f?qn(f):w,m=bu(c-m,0),E=_?k:w,k=_?w:k,C=_?j:w,j=_?w:j;return t|=_?R:O,t&=~(_?O:R),
-g||(t&=~(x|A)),j=[n,t,r,C,E,j,k,I,a,m],I=sr.apply(w,j),$r(n)&&Du(I,j),I.placeholder=b,I}}if(b=p?r:this,I=h?b[n]:n,f)for(m=j.length,E=xu(f.length,m),k=qn(j);E--;)C=f[E],j[E]=Cr(C,m)?k[C]:w;return s&&a<j.length&&(j.length=a),this&&this!==Zn&&this instanceof l&&(I=d||Jt(n)),I.apply(b,j)}var s=t&E,p=t&x,h=t&A,_=t&k,g=t&j,y=t&I,d=h?w:Jt(n);return l}function pr(n,t,r){return n=n.length,t=+t,n<t&&mu(t)?(t-=n,r=null==r?" ":r+"",Ue(r,vu(t/r.length)).slice(0,t)):""}function hr(n,t,r,e){function u(){for(var t=-1,f=arguments.length,a=-1,c=e.length,l=Be(c+f);++a<c;)l[a]=e[a];
-for(;f--;)l[a++]=arguments[++t];return(this&&this!==Zn&&this instanceof u?i:n).apply(o?r:this,l)}var o=t&x,i=Jt(n);return u}function _r(n){var t=Pe[n];return function(n,r){return(r=r===w?0:+r||0)?(r=au(10,r),t(n*r)/r):t(n)}}function vr(n){return function(t,r,e,u){var o=wr(e);return null==e&&o===ut?Lt(t,r,n):zt(t,r,o(e,u,1),n)}}function gr(n,t,r,e,u,o,i,f){var a=t&A;if(!a&&typeof n!="function")throw new Ge(L);var c=e?e.length:0;if(c||(t&=~(R|O),e=u=w),c-=u?u.length:0,t&O){var l=e,s=u;e=u=w}var p=a?w:zu(n);
-return r=[n,t,r,e,u,l,s,o,i,f],p&&(e=r[1],t=p[1],f=e|t,u=t==E&&e==k||t==E&&e==C&&r[7].length<=p[8]||t==(E|C)&&e==k,(f<E||u)&&(t&x&&(r[2]=p[2],f|=e&x?0:j),(e=p[3])&&(u=r[3],r[3]=u?Mt(u,e,p[4]):qn(e),r[4]=u?v(r[3],z):qn(p[4])),(e=p[5])&&(u=r[5],r[5]=u?qt(u,e,p[6]):qn(e),r[6]=u?v(r[5],z):qn(p[6])),(e=p[7])&&(r[7]=qn(e)),t&E&&(r[8]=null==r[8]?p[8]:xu(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=f),t=r[1],f=r[9]),r[9]=null==f?a?0:n.length:bu(f-c,0)||0,(p?Lu:Du)(t==x?Yt(r[0],r[2]):t!=R&&t!=(x|R)||r[4].length?sr.apply(w,r):hr.apply(w,r),r);
-}function yr(n,t,r,e,u,o,i){var f=-1,a=n.length,c=t.length;if(a!=c&&(!u||c<=a))return false;for(;++f<a;){var l=n[f],c=t[f],s=e?e(u?c:l,u?l:c,f):w;if(s!==w){if(s)continue;return false}if(u){if(!Hn(t,function(n){return l===n||r(l,n,e,u,o,i)}))return false}else if(l!==c&&!r(l,c,e,u,o,i))return false}return true}function dr(n,t,r){switch(r){case M:case q:return+n==+t;case P:return n.name==t.name&&n.message==t.message;case V:return n!=+n?t!=+t:n==+t;case Y:case G:return n==t+""}return false}function mr(n,t,r,e,u,o,i){var f=zo(n),a=f.length,c=zo(t).length;
-if(a!=c&&!u)return false;for(c=a;c--;){var l=f[c];if(!(u?l in t:nu.call(t,l)))return false}for(var s=u;++c<a;){var l=f[c],p=n[l],h=t[l],_=e?e(u?h:p,u?p:h,l):w;if(_===w?!r(p,h,e,u,o,i):!_)return false;s||(s="constructor"==l)}return s||(r=n.constructor,e=t.constructor,!(r!=e&&"constructor"in n&&"constructor"in t)||typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)?true:false}function wr(n,t,r){var e=Nn.callback||Se,e=e===Se?ut:e;return r?e(n,t,r):e}function br(n){for(var t=n.name+"",r=Wu[t],e=r?r.length:0;e--;){
-var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function xr(n,t,e){var u=Nn.indexOf||Vr,u=u===Vr?r:u;return n?u(n,t,e):u}function Ar(n){n=Oe(n);for(var t=n.length;t--;){var r=n[t][1];n[t][2]=r===r&&!ge(r)}return n}function jr(n,t){var r=null==n?w:n[t];return ye(r)?r:w}function kr(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&nu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ir(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=Ve),
-new n}function Rr(n,t,r){var e=n.constructor;switch(t){case J:return Dt(n);case M:case q:return new e(+n);case X:case H:case Q:case nn:case tn:case rn:case en:case un:case on:return t=n.buffer,new e(r?Dt(t):t,n.byteOffset,n.length);case V:case G:return new e(n);case Y:var u=new e(n.source,kn.exec(n));u.lastIndex=n.lastIndex}return u}function Or(n,t,r){return null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),t=Zr(t)),t=null==n?n:n[t],null==t?w:t.apply(n,r)}function Er(n){return null!=n&&Sr(Bu(n));
-}function Cr(n,t){return n=typeof n=="number"||On.test(n)?+n:-1,t=null==t?Cu:t,-1<n&&0==n%1&&n<t}function Ur(n,t,r){if(!ge(r))return false;var e=typeof t;return("number"==e?Er(r)&&Cr(t,r.length):"string"==e&&t in r)?(t=r[t],n===n?n===t:t!==t):false}function Wr(n,t){var r=typeof n;return"string"==r&&dn.test(n)||"number"==r?true:Oo(n)?false:!yn.test(n)||null!=t&&n in Br(t)}function $r(n){var t=br(n),r=Nn[t];return typeof r=="function"&&t in zn.prototype?n===r?true:(t=zu(r),!!t&&n===t[0]):false}function Sr(n){return typeof n=="number"&&-1<n&&0==n%1&&n<=Cu;
-}function Fr(n,t){return n===w?t:Eo(n,t,Fr)}function Nr(n,t){n=Br(n);for(var r=-1,e=t.length,u={};++r<e;){var o=t[r];o in n&&(u[o]=n[o])}return u}function Tr(n,t){var r={};return ht(n,function(n,e,u){t(n,e,u)&&(r[e]=n)}),r}function Lr(n){for(var t=Re(n),r=t.length,e=r&&n.length,u=!!e&&Sr(e)&&(Oo(n)||pe(n)),o=-1,i=[];++o<r;){var f=t[o];(u&&Cr(f,e)||nu.call(n,f))&&i.push(f)}return i}function zr(n){return null==n?[]:Er(n)?ge(n)?n:Ve(n):Ee(n)}function Br(n){return ge(n)?n:Ve(n)}function Dr(n){if(Oo(n))return n;
-var t=[];return u(n).replace(mn,function(n,r,e,u){t.push(e?u.replace(An,"$1"):r||n)}),t}function Mr(n){return n instanceof zn?n.clone():new Ln(n.__wrapped__,n.__chain__,qn(n.__actions__))}function qr(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0>t?0:t)):[]}function Pr(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0,0>t?0:t)):[]}function Kr(n){return n?n[0]:w}function Vr(n,t,e){var u=n?n.length:0;if(!u)return-1;if(typeof e=="number")e=0>e?bu(u+e,0):e;else if(e)return e=Lt(n,t),
-e<u&&(t===t?t===n[e]:n[e]!==n[e])?e:-1;return r(n,t,e||0)}function Zr(n){var t=n?n.length:0;return t?n[t-1]:w}function Yr(n){return qr(n,1)}function Gr(n,t,e,u){if(!n||!n.length)return[];null!=t&&typeof t!="boolean"&&(u=e,e=Ur(n,t,u)?w:t,t=false);var o=wr();if((null!=e||o!==ut)&&(e=o(e,u,3)),t&&xr()===r){t=e;var i;e=-1,u=n.length;for(var o=-1,f=[];++e<u;){var a=n[e],c=t?t(a,e,n):a;e&&i===c||(i=c,f[++o]=a)}n=f}else n=St(n,e);return n}function Jr(n){if(!n||!n.length)return[];var t=-1,r=0;n=Vn(n,function(n){
-return Er(n)?(r=bu(n.length,r),true):void 0});for(var e=Be(r);++t<r;)e[t]=Gn(n,jt(t));return e}function Xr(n,t,r){return n&&n.length?(n=Jr(n),null==t?n:(t=Bt(t,r,4),Gn(n,function(n){return Xn(n,t,w,true)}))):[]}function Hr(n,t){var r=-1,e=n?n.length:0,u={};for(!e||t||Oo(n[0])||(t=[]);++r<e;){var o=n[r];t?u[o]=t[r]:o&&(u[o[0]]=o[1])}return u}function Qr(n){return n=Nn(n),n.__chain__=true,n}function ne(n,t,r){return t.call(r,n)}function te(n,t,r){var e=Oo(n)?Kn:at;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)),
-e(n,t)}function re(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,t)}function ee(n,t,r,e){var u=n?Bu(n):0;return Sr(u)||(n=Ee(n),u=n.length),r=typeof r!="number"||e&&Ur(t,r,e)?0:0>r?bu(u+r,0):r||0,typeof n=="string"||!Oo(n)&&be(n)?r<=u&&-1<n.indexOf(t,r):!!u&&-1<xr(n,t,r)}function ue(n,t,r){var e=Oo(n)?Gn:wt;return t=wr(t,r,3),e(n,t)}function oe(n,t,r){if(r?Ur(n,t,r):null==t){n=zr(n);var e=n.length;return 0<e?n[Rt(0,e-1)]:w}r=-1,n=je(n);var e=n.length,u=e-1;for(t=xu(0>t?0:+t||0,e);++r<t;){var e=Rt(r,u),o=n[e];
-n[e]=n[r],n[r]=o}return n.length=t,n}function ie(n,t,r){var e=Oo(n)?Hn:Ct;return r&&Ur(n,t,r)&&(t=w),(typeof t!="function"||r!==w)&&(t=wr(t,r,3)),e(n,t)}function fe(n,t){var r;if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var e=n;n=t,t=e}return function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=w),r}}function ae(n,t,r){function e(t,r){r&&iu(r),a=p=h=w,t&&(_=ho(),c=n.apply(s,f),p||a||(f=s=w))}function u(){var n=t-(ho()-l);0>=n||n>t?e(h,a):p=su(u,n)}function o(){e(g,p);
-}function i(){if(f=arguments,l=ho(),s=this,h=g&&(p||!y),false===v)var r=y&&!p;else{a||y||(_=l);var e=v-(l-_),i=0>=e||e>v;i?(a&&(a=iu(a)),_=l,c=n.apply(s,f)):a||(a=su(o,e))}return i&&p?p=iu(p):p||t===v||(p=su(u,t)),r&&(i=true,c=n.apply(s,f)),!i||p||a||(f=s=w),c}var f,a,c,l,s,p,h,_=0,v=false,g=true;if(typeof n!="function")throw new Ge(L);if(t=0>t?0:+t||0,true===r)var y=true,g=false;else ge(r)&&(y=!!r.leading,v="maxWait"in r&&bu(+r.maxWait||0,t),g="trailing"in r?!!r.trailing:g);return i.cancel=function(){p&&iu(p),a&&iu(a),
-_=0,a=p=h=w},i}function ce(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new Ge(L);return r.cache=new ce.Cache,r}function le(n,t){if(typeof n!="function")throw new Ge(L);return t=bu(t===w?n.length-1:+t||0,0),function(){for(var r=arguments,e=-1,u=bu(r.length-t,0),o=Be(u);++e<u;)o[e]=r[t+e];switch(t){case 0:return n.call(this,o);case 1:return n.call(this,r[0],o);
-case 2:return n.call(this,r[0],r[1],o)}for(u=Be(t+1),e=-1;++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function se(n,t){return n>t}function pe(n){return h(n)&&Er(n)&&nu.call(n,"callee")&&!cu.call(n,"callee")}function he(n,t,r,e){return e=(r=typeof r=="function"?Bt(r,e,3):w)?r(n,t):w,e===w?dt(n,t,r):!!e}function _e(n){return h(n)&&typeof n.message=="string"&&ru.call(n)==P}function ve(n){return ge(n)&&ru.call(n)==K}function ge(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function ye(n){
-return null==n?false:ve(n)?uu.test(Qe.call(n)):h(n)&&Rn.test(n)}function de(n){return typeof n=="number"||h(n)&&ru.call(n)==V}function me(n){var t;if(!h(n)||ru.call(n)!=Z||pe(n)||!(nu.call(n,"constructor")||(t=n.constructor,typeof t!="function"||t instanceof t)))return false;var r;return ht(n,function(n,t){r=t}),r===w||nu.call(n,r)}function we(n){return ge(n)&&ru.call(n)==Y}function be(n){return typeof n=="string"||h(n)&&ru.call(n)==G}function xe(n){return h(n)&&Sr(n.length)&&!!Sn[ru.call(n)]}function Ae(n,t){
-return n<t}function je(n){var t=n?Bu(n):0;return Sr(t)?t?qn(n):[]:Ee(n)}function ke(n){return et(n,Re(n))}function Ie(n){return gt(n,Re(n))}function Re(n){if(null==n)return[];ge(n)||(n=Ve(n));for(var t=n.length,t=t&&Sr(t)&&(Oo(n)||pe(n))&&t||0,r=n.constructor,e=-1,r=typeof r=="function"&&r.prototype===n,u=Be(t),o=0<t;++e<t;)u[e]=e+"";for(var i in n)o&&Cr(i,t)||"constructor"==i&&(r||!nu.call(n,i))||u.push(i);return u}function Oe(n){n=Br(n);for(var t=-1,r=zo(n),e=r.length,u=Be(e);++t<e;){var o=r[t];
-u[t]=[o,n[o]]}return u}function Ee(n){return Ft(n,zo(n))}function Ce(n){return(n=u(n))&&n.replace(En,a).replace(xn,"")}function Ue(n,t){var r="";if(n=u(n),t=+t,1>t||!n||!mu(t))return r;do t%2&&(r+=n),t=yu(t/2),n+=n;while(t);return r}function We(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(g(n),y(n)+1):(t+="",n.slice(o(n,t),i(n,t)+1)):n}function $e(n,t,r){return r&&Ur(n,t,r)&&(t=w),n=u(n),n.match(t||Wn)||[]}function Se(n,t,r){return r&&Ur(n,t,r)&&(t=w),h(n)?Ne(n):ut(n,t)}function Fe(n){
-return n}function Ne(n){return bt(ot(n,true))}function Te(n,t,r){if(null==r){var e=ge(t),u=e?zo(t):w;((u=u&&u.length?gt(t,u):w)?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=gt(t,zo(t)));var o=true,e=-1,i=ve(n),f=u.length;false===r?o=false:ge(r)&&"chain"in r&&(o=r.chain);for(;++e<f;){r=u[e];var a=t[r];n[r]=a,i&&(n.prototype[r]=function(t){return function(){var r=this.__chain__;if(o||r){var e=n(this.__wrapped__);return(e.__actions__=qn(this.__actions__)).push({func:t,args:arguments,thisArg:n}),e.__chain__=r,e}return t.apply(n,Jn([this.value()],arguments));
-}}(a))}return n}function Le(){}function ze(n){return Wr(n)?jt(n):kt(n)}_=_?Yn.defaults(Zn.Object(),_,Yn.pick(Zn,$n)):Zn;var Be=_.Array,De=_.Date,Me=_.Error,qe=_.Function,Pe=_.Math,Ke=_.Number,Ve=_.Object,Ze=_.RegExp,Ye=_.String,Ge=_.TypeError,Je=Be.prototype,Xe=Ve.prototype,He=Ye.prototype,Qe=qe.prototype.toString,nu=Xe.hasOwnProperty,tu=0,ru=Xe.toString,eu=Zn._,uu=Ze("^"+Qe.call(nu).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),ou=_.ArrayBuffer,iu=_.clearTimeout,fu=_.parseFloat,au=Pe.pow,cu=Xe.propertyIsEnumerable,lu=jr(_,"Set"),su=_.setTimeout,pu=Je.splice,hu=_.Uint8Array,_u=jr(_,"WeakMap"),vu=Pe.ceil,gu=jr(Ve,"create"),yu=Pe.floor,du=jr(Be,"isArray"),mu=_.isFinite,wu=jr(Ve,"keys"),bu=Pe.max,xu=Pe.min,Au=jr(De,"now"),ju=_.parseInt,ku=Pe.random,Iu=Ke.NEGATIVE_INFINITY,Ru=Ke.POSITIVE_INFINITY,Ou=4294967294,Eu=2147483647,Cu=9007199254740991,Uu=_u&&new _u,Wu={};
-Nn.support={},Nn.templateSettings={escape:_n,evaluate:vn,interpolate:gn,variable:"",imports:{_:Nn}};var $u=function(){function n(){}return function(t){if(ge(t)){n.prototype=t;var r=new n;n.prototype=w}return r||{}}}(),Su=Vt(_t),Fu=Vt(vt,true),Nu=Zt(),Tu=Zt(true),Lu=Uu?function(n,t){return Uu.set(n,t),n}:Fe,zu=Uu?function(n){return Uu.get(n)}:Le,Bu=jt("length"),Du=function(){var n=0,t=0;return function(r,e){var u=ho(),o=S-(u-t);if(t=u,0<o){if(++n>=$)return r}else n=0;return Lu(r,e)}}(),Mu=le(function(n,t){
-return h(n)&&Er(n)?ft(n,pt(t,false,true)):[]}),qu=tr(),Pu=tr(true),Ku=le(function(n){for(var t=n.length,e=t,u=Be(l),o=xr(),i=o===r,f=[];e--;){var a=n[e]=Er(a=n[e])?a:[];u[e]=i&&120<=a.length&&gu&&lu?new Dn(e&&a):null}var i=n[0],c=-1,l=i?i.length:0,s=u[0];n:for(;++c<l;)if(a=i[c],0>(s?Mn(s,a):o(f,a,0))){for(e=t;--e;){var p=u[e];if(0>(p?Mn(p,a):o(n[e],a,0)))continue n}s&&s.push(a),f.push(a)}return f}),Vu=le(function(t,r){r=pt(r);var e=rt(t,r);return It(t,r.sort(n)),e}),Zu=vr(),Yu=vr(true),Gu=le(function(n){return St(pt(n,false,true));
-}),Ju=le(function(n,t){return Er(n)?ft(n,t):[]}),Xu=le(Jr),Hu=le(function(n){var t=n.length,r=2<t?n[t-2]:w,e=1<t?n[t-1]:w;return 2<t&&typeof r=="function"?t-=2:(r=1<t&&typeof e=="function"?(--t,e):w,e=w),n.length=t,Xr(n,r,e)}),Qu=le(function(n){return n=pt(n),this.thru(function(t){t=Oo(t)?t:[Br(t)];for(var r=n,e=-1,u=t.length,o=-1,i=r.length,f=Be(u+i);++e<u;)f[e]=t[e];for(;++o<i;)f[e++]=r[o];return f})}),no=le(function(n,t){return rt(n,pt(t))}),to=Pt(function(n,t,r){nu.call(n,r)?++n[r]:n[r]=1}),ro=nr(Su),eo=nr(Fu,true),uo=ur(Pn,Su),oo=ur(function(n,t){
-for(var r=n.length;r--&&false!==t(n[r],r,n););return n},Fu),io=Pt(function(n,t,r){nu.call(n,r)?n[r].push(t):n[r]=[t]}),fo=Pt(function(n,t,r){n[r]=t}),ao=le(function(n,t,r){var e=-1,u=typeof t=="function",o=Wr(t),i=Er(n)?Be(n.length):[];return Su(n,function(n){var f=u?t:o&&null!=n?n[t]:w;i[++e]=f?f.apply(n,r):Or(n,t,r)}),i}),co=Pt(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),lo=lr(Xn,Su),so=lr(function(n,t,r,e){var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r},Fu),po=le(function(n,t){
-if(null==n)return[];var r=t[2];return r&&Ur(t[0],t[1],r)&&(t.length=1),Wt(n,pt(t),[])}),ho=Au||function(){return(new De).getTime()},_o=le(function(n,t,r){var e=x;if(r.length)var u=v(r,_o.placeholder),e=e|R;return gr(n,e,t,r,u)}),vo=le(function(n,t){t=t.length?pt(t):Ie(n);for(var r=-1,e=t.length;++r<e;){var u=t[r];n[u]=gr(n[u],x,n)}return n}),go=le(function(n,t,r){var e=x|A;if(r.length)var u=v(r,go.placeholder),e=e|R;return gr(t,e,n,r,u)}),yo=Xt(k),mo=Xt(I),wo=le(function(n,t){return it(n,1,t)}),bo=le(function(n,t,r){
-return it(n,t,r)}),xo=er(),Ao=er(true),jo=le(function(n,t){if(t=pt(t),typeof n!="function"||!Kn(t,e))throw new Ge(L);var r=t.length;return le(function(e){for(var u=xu(e.length,r);u--;)e[u]=t[u](e[u]);return n.apply(this,e)})}),ko=cr(R),Io=cr(O),Ro=le(function(n,t){return gr(n,C,w,w,w,pt(t))}),Oo=du||function(n){return h(n)&&Sr(n.length)&&ru.call(n)==D},Eo=Kt(At),Co=Kt(function(n,t,r){return r?nt(n,t,r):tt(n,t)}),Uo=Ht(Co,function(n,t){return n===w?t:n}),Wo=Ht(Eo,Fr),$o=rr(_t),So=rr(vt),Fo=or(Nu),No=or(Tu),To=ir(_t),Lo=ir(vt),zo=wu?function(n){
-var t=null==n?w:n.constructor;return typeof t=="function"&&t.prototype===n||typeof n!="function"&&Er(n)?Lr(n):ge(n)?wu(n):[]}:Lr,Bo=fr(true),Do=fr(),Mo=le(function(n,t){if(null==n)return{};if("function"!=typeof t[0])return t=Gn(pt(t),Ye),Nr(n,ft(Re(n),t));var r=Bt(t[0],t[1],3);return Tr(n,function(n,t,e){return!r(n,t,e)})}),qo=le(function(n,t){return null==n?{}:"function"==typeof t[0]?Tr(n,Bt(t[0],t[1],3)):Nr(n,pt(t))}),Po=Gt(function(n,t,r){return t=t.toLowerCase(),n+(r?t.charAt(0).toUpperCase()+t.slice(1):t);
-}),Ko=Gt(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Vo=ar(),Zo=ar(true),Yo=Gt(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Go=Gt(function(n,t,r){return n+(r?" ":"")+(t.charAt(0).toUpperCase()+t.slice(1))}),Jo=le(function(n,t){try{return n.apply(w,t)}catch(r){return _e(r)?r:new Me(r)}}),Xo=le(function(n,t){return function(r){return Or(r,n,t)}}),Ho=le(function(n,t){return function(r){return Or(n,r,t)}}),Qo=_r("ceil"),ni=_r("floor"),ti=Qt(se,Iu),ri=Qt(Ae,Ru),ei=_r("round");return Nn.prototype=Tn.prototype,
-Ln.prototype=$u(Tn.prototype),Ln.prototype.constructor=Ln,zn.prototype=$u(Tn.prototype),zn.prototype.constructor=zn,Bn.prototype["delete"]=function(n){return this.has(n)&&delete this.__data__[n]},Bn.prototype.get=function(n){return"__proto__"==n?w:this.__data__[n]},Bn.prototype.has=function(n){return"__proto__"!=n&&nu.call(this.__data__,n)},Bn.prototype.set=function(n,t){return"__proto__"!=n&&(this.__data__[n]=t),this},Dn.prototype.push=function(n){var t=this.data;typeof n=="string"||ge(n)?t.set.add(n):t.hash[n]=true;
-},ce.Cache=Bn,Nn.after=function(n,t){if(typeof t!="function"){if(typeof n!="function")throw new Ge(L);var r=n;n=t,t=r}return n=mu(n=+n)?n:0,function(){return 1>--n?t.apply(this,arguments):void 0}},Nn.ary=function(n,t,r){return r&&Ur(n,t,r)&&(t=w),t=n&&null==t?n.length:bu(+t||0,0),gr(n,E,w,w,w,w,t)},Nn.assign=Co,Nn.at=no,Nn.before=fe,Nn.bind=_o,Nn.bindAll=vo,Nn.bindKey=go,Nn.callback=Se,Nn.chain=Qr,Nn.chunk=function(n,t,r){t=(r?Ur(n,t,r):null==t)?1:bu(yu(t)||1,1),r=0;for(var e=n?n.length:0,u=-1,o=Be(vu(e/t));r<e;)o[++u]=Et(n,r,r+=t);
-return o},Nn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},Nn.constant=function(n){return function(){return n}},Nn.countBy=to,Nn.create=function(n,t,r){var e=$u(n);return r&&Ur(n,t,r)&&(t=w),t?tt(e,t):e},Nn.curry=yo,Nn.curryRight=mo,Nn.debounce=ae,Nn.defaults=Uo,Nn.defaultsDeep=Wo,Nn.defer=wo,Nn.delay=bo,Nn.difference=Mu,Nn.drop=qr,Nn.dropRight=Pr,Nn.dropRightWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3),true,true):[]},Nn.dropWhile=function(n,t,r){
-return n&&n.length?Nt(n,wr(t,r,3),true):[]},Nn.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&Ur(n,t,r)&&(r=0,e=u),u=n.length,r=null==r?0:+r||0,0>r&&(r=-r>u?0:u+r),e=e===w||e>u?u:+e||0,0>e&&(e+=u),u=r>e?0:e>>>0,r>>>=0;r<u;)n[r++]=t;return n},Nn.filter=re,Nn.flatten=function(n,t,r){var e=n?n.length:0;return r&&Ur(n,t,r)&&(t=false),e?pt(n,t):[]},Nn.flattenDeep=function(n){return n&&n.length?pt(n,true):[]},Nn.flow=xo,Nn.flowRight=Ao,Nn.forEach=uo,Nn.forEachRight=oo,Nn.forIn=Fo,
-Nn.forInRight=No,Nn.forOwn=To,Nn.forOwnRight=Lo,Nn.functions=Ie,Nn.groupBy=io,Nn.indexBy=fo,Nn.initial=function(n){return Pr(n,1)},Nn.intersection=Ku,Nn.invert=function(n,t,r){r&&Ur(n,t,r)&&(t=w),r=-1;for(var e=zo(n),u=e.length,o={};++r<u;){var i=e[r],f=n[i];t?nu.call(o,f)?o[f].push(i):o[f]=[i]:o[f]=i}return o},Nn.invoke=ao,Nn.keys=zo,Nn.keysIn=Re,Nn.map=ue,Nn.mapKeys=Bo,Nn.mapValues=Do,Nn.matches=Ne,Nn.matchesProperty=function(n,t){return xt(n,ot(t,true))},Nn.memoize=ce,Nn.merge=Eo,Nn.method=Xo,Nn.methodOf=Ho,
-Nn.mixin=Te,Nn.modArgs=jo,Nn.negate=function(n){if(typeof n!="function")throw new Ge(L);return function(){return!n.apply(this,arguments)}},Nn.omit=Mo,Nn.once=function(n){return fe(2,n)},Nn.pairs=Oe,Nn.partial=ko,Nn.partialRight=Io,Nn.partition=co,Nn.pick=qo,Nn.pluck=function(n,t){return ue(n,ze(t))},Nn.property=ze,Nn.propertyOf=function(n){return function(t){return yt(n,Dr(t),t+"")}},Nn.pull=function(){var n=arguments,t=n[0];if(!t||!t.length)return t;for(var r=0,e=xr(),u=n.length;++r<u;)for(var o=0,i=n[r];-1<(o=e(t,i,o));)pu.call(t,o,1);
-return t},Nn.pullAt=Vu,Nn.range=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w),n=+n||0,r=null==r?1:+r||0,null==t?(t=n,n=0):t=+t||0;var e=-1;t=bu(vu((t-n)/(r||1)),0);for(var u=Be(t);++e<t;)u[e]=n,n+=r;return u},Nn.rearg=Ro,Nn.reject=function(n,t,r){var e=Oo(n)?Vn:lt;return t=wr(t,r,3),e(n,function(n,r,e){return!t(n,r,e)})},Nn.remove=function(n,t,r){var e=[];if(!n||!n.length)return e;var u=-1,o=[],i=n.length;for(t=wr(t,r,3);++u<i;)r=n[u],t(r,u,n)&&(e.push(r),o.push(u));return It(n,o),e},Nn.rest=Yr,Nn.restParam=le,
-Nn.set=function(n,t,r){if(null==n)return n;var e=t+"";t=null!=n[e]||Wr(t,n)?[e]:Dr(t);for(var e=-1,u=t.length,o=u-1,i=n;null!=i&&++e<u;){var f=t[e];ge(i)&&(e==o?i[f]=r:null==i[f]&&(i[f]=Cr(t[e+1])?[]:{})),i=i[f]}return n},Nn.shuffle=function(n){return oe(n,Ru)},Nn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&Ur(n,t,r)&&(t=0,r=e),Et(n,t,r)):[]},Nn.sortBy=function(n,t,r){if(null==n)return[];r&&Ur(n,t,r)&&(t=w);var e=-1;return t=wr(t,r,3),n=wt(n,function(n,r,u){return{a:t(n,r,u),
-b:++e,c:n}}),Ut(n,f)},Nn.sortByAll=po,Nn.sortByOrder=function(n,t,r,e){return null==n?[]:(e&&Ur(t,r,e)&&(r=w),Oo(t)||(t=null==t?[]:[t]),Oo(r)||(r=null==r?[]:[r]),Wt(n,t,r))},Nn.spread=function(n){if(typeof n!="function")throw new Ge(L);return function(t){return n.apply(this,t)}},Nn.take=function(n,t,r){return n&&n.length?((r?Ur(n,t,r):null==t)&&(t=1),Et(n,0,0>t?0:t)):[]},Nn.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?Ur(n,t,r):null==t)&&(t=1),t=e-(+t||0),Et(n,0>t?0:t)):[]},Nn.takeRightWhile=function(n,t,r){
-return n&&n.length?Nt(n,wr(t,r,3),false,true):[]},Nn.takeWhile=function(n,t,r){return n&&n.length?Nt(n,wr(t,r,3)):[]},Nn.tap=function(n,t,r){return t.call(r,n),n},Nn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new Ge(L);return false===r?e=false:ge(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),ae(n,t,{leading:e,maxWait:+t,trailing:u})},Nn.thru=ne,Nn.times=function(n,t,r){if(n=yu(n),1>n||!mu(n))return[];var e=-1,u=Be(xu(n,4294967295));for(t=Bt(t,r,1);++e<n;)4294967295>e?u[e]=t(e):t(e);
-return u},Nn.toArray=je,Nn.toPlainObject=ke,Nn.transform=function(n,t,r,e){var u=Oo(n)||xe(n);return t=wr(t,e,4),null==r&&(u||ge(n)?(e=n.constructor,r=u?Oo(n)?new e:[]:$u(ve(e)?e.prototype:w)):r={}),(u?Pn:_t)(n,function(n,e,u){return t(r,n,e,u)}),r},Nn.union=Gu,Nn.uniq=Gr,Nn.unzip=Jr,Nn.unzipWith=Xr,Nn.values=Ee,Nn.valuesIn=function(n){return Ft(n,Re(n))},Nn.where=function(n,t){return re(n,bt(t))},Nn.without=Ju,Nn.wrap=function(n,t){return t=null==t?Fe:t,gr(t,R,w,[n],[])},Nn.xor=function(){for(var n=-1,t=arguments.length;++n<t;){
-var r=arguments[n];if(Er(r))var e=e?Jn(ft(e,r),ft(r,e)):r}return e?St(e):[]},Nn.zip=Xu,Nn.zipObject=Hr,Nn.zipWith=Hu,Nn.backflow=Ao,Nn.collect=ue,Nn.compose=Ao,Nn.each=uo,Nn.eachRight=oo,Nn.extend=Co,Nn.iteratee=Se,Nn.methods=Ie,Nn.object=Hr,Nn.select=re,Nn.tail=Yr,Nn.unique=Gr,Te(Nn,Nn),Nn.add=function(n,t){return(+n||0)+(+t||0)},Nn.attempt=Jo,Nn.camelCase=Po,Nn.capitalize=function(n){return(n=u(n))&&n.charAt(0).toUpperCase()+n.slice(1)},Nn.ceil=Qo,Nn.clone=function(n,t,r,e){return t&&typeof t!="boolean"&&Ur(n,t,r)?t=false:typeof t=="function"&&(e=r,
-r=t,t=false),typeof r=="function"?ot(n,t,Bt(r,e,3)):ot(n,t)},Nn.cloneDeep=function(n,t,r){return typeof t=="function"?ot(n,true,Bt(t,r,3)):ot(n,true)},Nn.deburr=Ce,Nn.endsWith=function(n,t,r){n=u(n),t+="";var e=n.length;return r=r===w?e:xu(0>r?0:+r||0,e),r-=t.length,0<=r&&n.indexOf(t,r)==r},Nn.escape=function(n){return(n=u(n))&&hn.test(n)?n.replace(sn,c):n},Nn.escapeRegExp=function(n){return(n=u(n))&&bn.test(n)?n.replace(wn,l):n||"(?:)"},Nn.every=te,Nn.find=ro,Nn.findIndex=qu,Nn.findKey=$o,Nn.findLast=eo,
-Nn.findLastIndex=Pu,Nn.findLastKey=So,Nn.findWhere=function(n,t){return ro(n,bt(t))},Nn.first=Kr,Nn.floor=ni,Nn.get=function(n,t,r){return n=null==n?w:yt(n,Dr(t),t+""),n===w?r:n},Nn.gt=se,Nn.gte=function(n,t){return n>=t},Nn.has=function(n,t){if(null==n)return false;var r=nu.call(n,t);if(!r&&!Wr(t)){if(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),null==n)return false;t=Zr(t),r=nu.call(n,t)}return r||Sr(n.length)&&Cr(t,n.length)&&(Oo(n)||pe(n))},Nn.identity=Fe,Nn.includes=ee,Nn.indexOf=Vr,Nn.inRange=function(n,t,r){
-return t=+t||0,r===w?(r=t,t=0):r=+r||0,n>=xu(t,r)&&n<bu(t,r)},Nn.isArguments=pe,Nn.isArray=Oo,Nn.isBoolean=function(n){return true===n||false===n||h(n)&&ru.call(n)==M},Nn.isDate=function(n){return h(n)&&ru.call(n)==q},Nn.isElement=function(n){return!!n&&1===n.nodeType&&h(n)&&!me(n)},Nn.isEmpty=function(n){return null==n?true:Er(n)&&(Oo(n)||be(n)||pe(n)||h(n)&&ve(n.splice))?!n.length:!zo(n).length},Nn.isEqual=he,Nn.isError=_e,Nn.isFinite=function(n){return typeof n=="number"&&mu(n)},Nn.isFunction=ve,Nn.isMatch=function(n,t,r,e){
-return r=typeof r=="function"?Bt(r,e,3):w,mt(n,Ar(t),r)},Nn.isNaN=function(n){return de(n)&&n!=+n},Nn.isNative=ye,Nn.isNull=function(n){return null===n},Nn.isNumber=de,Nn.isObject=ge,Nn.isPlainObject=me,Nn.isRegExp=we,Nn.isString=be,Nn.isTypedArray=xe,Nn.isUndefined=function(n){return n===w},Nn.kebabCase=Ko,Nn.last=Zr,Nn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?bu(e+r,0):xu(r||0,e-1))+1;else if(r)return u=Lt(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;
-if(t!==t)return p(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Nn.lt=Ae,Nn.lte=function(n,t){return n<=t},Nn.max=ti,Nn.min=ri,Nn.noConflict=function(){return Zn._=eu,this},Nn.noop=Le,Nn.now=ho,Nn.pad=function(n,t,r){n=u(n),t=+t;var e=n.length;return e<t&&mu(t)?(e=(t-e)/2,t=yu(e),e=vu(e),r=pr("",e,r),r.slice(0,t)+n+r):n},Nn.padLeft=Vo,Nn.padRight=Zo,Nn.parseInt=function(n,t,r){return(r?Ur(n,t,r):null==t)?t=0:t&&(t=+t),n=We(n),ju(n,t||(In.test(n)?16:10))},Nn.random=function(n,t,r){r&&Ur(n,t,r)&&(t=r=w);
-var e=null==n,u=null==t;return null==r&&(u&&typeof n=="boolean"?(r=n,n=1):typeof t=="boolean"&&(r=t,u=true)),e&&u&&(t=1,u=false),n=+n||0,u?(t=n,n=0):t=+t||0,r||n%1||t%1?(r=ku(),xu(n+r*(t-n+fu("1e-"+((r+"").length-1))),t)):Rt(n,t)},Nn.reduce=lo,Nn.reduceRight=so,Nn.repeat=Ue,Nn.result=function(n,t,r){var e=null==n?w:n[t];return e===w&&(null==n||Wr(t,n)||(t=Dr(t),n=1==t.length?n:yt(n,Et(t,0,-1)),e=null==n?w:n[Zr(t)]),e=e===w?r:e),ve(e)?e.call(n):e},Nn.round=ei,Nn.runInContext=m,Nn.size=function(n){var t=n?Bu(n):0;
-return Sr(t)?t:zo(n).length},Nn.snakeCase=Yo,Nn.some=ie,Nn.sortedIndex=Zu,Nn.sortedLastIndex=Yu,Nn.startCase=Go,Nn.startsWith=function(n,t,r){return n=u(n),r=null==r?0:xu(0>r?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Nn.sum=function(n,t,r){if(r&&Ur(n,t,r)&&(t=w),t=wr(t,r,3),1==t.length){n=Oo(n)?n:zr(n),r=n.length;for(var e=0;r--;)e+=+t(n[r])||0;n=e}else n=$t(n,t);return n},Nn.template=function(n,t,r){var e=Nn.templateSettings;r&&Ur(n,t,r)&&(t=r=w),n=u(n),t=nt(tt({},r||t),e,Qn),r=nt(tt({},t.imports),e.imports,Qn);
-var o,i,f=zo(r),a=Ft(r,f),c=0;r=t.interpolate||Cn;var l="__p+='";r=Ze((t.escape||Cn).source+"|"+r.source+"|"+(r===gn?jn:Cn).source+"|"+(t.evaluate||Cn).source+"|$","g");var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,f,a){return e||(e=u),l+=n.slice(c,a).replace(Un,s),r&&(o=true,l+="'+__e("+r+")+'"),f&&(i=true,l+="';"+f+";\n__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),c=a+t.length,t}),l+="';",(t=t.variable)||(l="with(obj){"+l+"}"),l=(i?l.replace(fn,""):l).replace(an,"$1").replace(cn,"$1;"),
-l="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}",t=Jo(function(){return qe(f,p+"return "+l).apply(w,a)}),t.source=l,_e(t))throw t;return t},Nn.trim=We,Nn.trimLeft=function(n,t,r){var e=n;return(n=u(n))?n.slice((r?Ur(e,t,r):null==t)?g(n):o(n,t+"")):n},Nn.trimRight=function(n,t,r){var e=n;return(n=u(n))?(r?Ur(e,t,r):null==t)?n.slice(0,y(n)+1):n.slice(0,i(n,t+"")+1):n;
-},Nn.trunc=function(n,t,r){r&&Ur(n,t,r)&&(t=w);var e=U;if(r=W,null!=t)if(ge(t)){var o="separator"in t?t.separator:o,e="length"in t?+t.length||0:e;r="omission"in t?u(t.omission):r}else e=+t||0;if(n=u(n),e>=n.length)return n;if(e-=r.length,1>e)return r;if(t=n.slice(0,e),null==o)return t+r;if(we(o)){if(n.slice(e).search(o)){var i,f=n.slice(0,e);for(o.global||(o=Ze(o.source,(kn.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(f);)i=n.index;t=t.slice(0,null==i?e:i)}}else n.indexOf(o,e)!=e&&(o=t.lastIndexOf(o),
--1<o&&(t=t.slice(0,o)));return t+r},Nn.unescape=function(n){return(n=u(n))&&pn.test(n)?n.replace(ln,d):n},Nn.uniqueId=function(n){var t=++tu;return u(n)+t},Nn.words=$e,Nn.all=te,Nn.any=ie,Nn.contains=ee,Nn.eq=he,Nn.detect=ro,Nn.foldl=lo,Nn.foldr=so,Nn.head=Kr,Nn.include=ee,Nn.inject=lo,Te(Nn,function(){var n={};return _t(Nn,function(t,r){Nn.prototype[r]||(n[r]=t)}),n}(),false),Nn.sample=oe,Nn.prototype.sample=function(n){return this.__chain__||null!=n?this.thru(function(t){return oe(t,n)}):oe(this.value());
-},Nn.VERSION=b,Pn("bind bindKey curry curryRight partial partialRight".split(" "),function(n){Nn[n].placeholder=Nn}),Pn(["drop","take"],function(n,t){zn.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new zn(this);r=null==r?1:bu(yu(r)||0,0);var u=this.clone();return e?u.__takeCount__=xu(u.__takeCount__,r):u.__views__.push({size:r,type:n+(0>u.__dir__?"Right":"")}),u},zn.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),Pn(["filter","map","takeWhile"],function(n,t){
-var r=t+1,e=r!=T;zn.prototype[n]=function(n,t){var u=this.clone();return u.__iteratees__.push({iteratee:wr(n,t,1),type:r}),u.__filtered__=u.__filtered__||e,u}}),Pn(["first","last"],function(n,t){var r="take"+(t?"Right":"");zn.prototype[n]=function(){return this[r](1).value()[0]}}),Pn(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");zn.prototype[n]=function(){return this.__filtered__?new zn(this):this[r](1)}}),Pn(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?bt:ze;zn.prototype[n]=function(n){
-return this[r](e(n))}}),zn.prototype.compact=function(){return this.filter(Fe)},zn.prototype.reject=function(n,t){return n=wr(n,t,1),this.filter(function(t){return!n(t)})},zn.prototype.slice=function(n,t){n=null==n?0:+n||0;var r=this;return r.__filtered__&&(0<n||0>t)?new zn(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==w&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r)},zn.prototype.takeRightWhile=function(n,t){return this.reverse().takeWhile(n,t).reverse()},zn.prototype.toArray=function(){return this.take(Ru);
-},_t(zn.prototype,function(n,t){var r=/^(?:filter|map|reject)|While$/.test(t),e=/^(?:first|last)$/.test(t),u=Nn[e?"take"+("last"==t?"Right":""):t];u&&(Nn.prototype[t]=function(){function t(n){return e&&i?u(n,1)[0]:u.apply(w,Jn([n],o))}var o=e?[1]:arguments,i=this.__chain__,f=this.__wrapped__,a=!!this.__actions__.length,c=f instanceof zn,l=o[0],s=c||Oo(f);return s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false),l={func:ne,args:[t],thisArg:w},a=c&&!a,e&&!i?a?(f=f.clone(),f.__actions__.push(l),n.call(f)):u.call(w,this.value())[0]:!e&&s?(f=a?f:new zn(this),
-f=n.apply(f,o),f.__actions__.push(l),new Ln(f,i)):this.thru(t)})}),Pn("join pop push replace shift sort splice split unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?He:Je)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|replace|shift)$/.test(n);Nn.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),_t(zn.prototype,function(n,t){var r=Nn[t];if(r){var e=r.name+"";(Wu[e]||(Wu[e]=[])).push({
-name:t,func:r})}}),Wu[sr(w,A).name]=[{name:"wrapper",func:w}],zn.prototype.clone=function(){var n=new zn(this.__wrapped__);return n.__actions__=qn(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=qn(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=qn(this.__views__),n},zn.prototype.reverse=function(){if(this.__filtered__){var n=new zn(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},zn.prototype.value=function(){
-var n,t=this.__wrapped__.value(),r=this.__dir__,e=Oo(t),u=0>r,o=e?t.length:0;n=o;for(var i=this.__views__,f=0,a=-1,c=i.length;++a<c;){var l=i[a],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=xu(n,f+s);break;case"takeRight":f=bu(f,n-s)}}if(n={start:f,end:n},i=n.start,f=n.end,n=f-i,u=u?f:i-1,i=this.__iteratees__,f=i.length,a=0,c=xu(n,this.__takeCount__),!e||o<F||o==n&&c==n)return Tt(t,this.__actions__);e=[];n:for(;n--&&a<c;){for(u+=r,o=-1,l=t[u];++o<f;){var p=i[o],s=p.type,p=p.iteratee(l);
-if(s==T)l=p;else if(!p){if(s==N)continue n;break n}}e[a++]=l}return e},Nn.prototype.chain=function(){return Qr(this)},Nn.prototype.commit=function(){return new Ln(this.value(),this.__chain__)},Nn.prototype.concat=Qu,Nn.prototype.plant=function(n){for(var t,r=this;r instanceof Tn;){var e=Mr(r);t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},Nn.prototype.reverse=function(){function n(n){return n.reverse()}var t=this.__wrapped__;return t instanceof zn?(this.__actions__.length&&(t=new zn(this)),
-t=t.reverse(),t.__actions__.push({func:ne,args:[n],thisArg:w}),new Ln(t,this.__chain__)):this.thru(n)},Nn.prototype.toString=function(){return this.value()+""},Nn.prototype.run=Nn.prototype.toJSON=Nn.prototype.valueOf=Nn.prototype.value=function(){return Tt(this.__wrapped__,this.__actions__)},Nn.prototype.collect=Nn.prototype.map,Nn.prototype.head=Nn.prototype.first,Nn.prototype.select=Nn.prototype.filter,Nn.prototype.tail=Nn.prototype.rest,Nn}var w,b="3.10.1",x=1,A=2,j=4,k=8,I=16,R=32,O=64,E=128,C=256,U=30,W="...",$=150,S=16,F=200,N=1,T=2,L="Expected a function",z="__lodash_placeholder__",B="[object Arguments]",D="[object Array]",M="[object Boolean]",q="[object Date]",P="[object Error]",K="[object Function]",V="[object Number]",Z="[object Object]",Y="[object RegExp]",G="[object String]",J="[object ArrayBuffer]",X="[object Float32Array]",H="[object Float64Array]",Q="[object Int8Array]",nn="[object Int16Array]",tn="[object Int32Array]",rn="[object Uint8Array]",en="[object Uint8ClampedArray]",un="[object Uint16Array]",on="[object Uint32Array]",fn=/\b__p\+='';/g,an=/\b(__p\+=)''\+/g,cn=/(__e\(.*?\)|\b__t\))\+'';/g,ln=/&(?:amp|lt|gt|quot|#39|#96);/g,sn=/[&<>"'`]/g,pn=RegExp(ln.source),hn=RegExp(sn.source),_n=/<%-([\s\S]+?)%>/g,vn=/<%([\s\S]+?)%>/g,gn=/<%=([\s\S]+?)%>/g,yn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\n\\]|\\.)*?\1)\]/,dn=/^\w*$/,mn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g,wn=/^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,bn=RegExp(wn.source),xn=/[\u0300-\u036f\ufe20-\ufe23]/g,An=/\\(\\)?/g,jn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,kn=/\w*$/,In=/^0[xX]/,Rn=/^\[object .+?Constructor\]$/,On=/^\d+$/,En=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,Cn=/($^)/,Un=/['\n\r\u2028\u2029\\]/g,Wn=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),$n="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout isFinite parseFloat parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap".split(" "),Sn={};
-Sn[X]=Sn[H]=Sn[Q]=Sn[nn]=Sn[tn]=Sn[rn]=Sn[en]=Sn[un]=Sn[on]=true,Sn[B]=Sn[D]=Sn[J]=Sn[M]=Sn[q]=Sn[P]=Sn[K]=Sn["[object Map]"]=Sn[V]=Sn[Z]=Sn[Y]=Sn["[object Set]"]=Sn[G]=Sn["[object WeakMap]"]=false;var Fn={};Fn[B]=Fn[D]=Fn[J]=Fn[M]=Fn[q]=Fn[X]=Fn[H]=Fn[Q]=Fn[nn]=Fn[tn]=Fn[V]=Fn[Z]=Fn[Y]=Fn[G]=Fn[rn]=Fn[en]=Fn[un]=Fn[on]=true,Fn[P]=Fn[K]=Fn["[object Map]"]=Fn["[object Set]"]=Fn["[object WeakMap]"]=false;var Nn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a",
-"\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y",
-"\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Tn={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"},Ln={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#96;":"`"},zn={"function":true,object:true},Bn={0:"x30",1:"x31",2:"x32",3:"x33",4:"x34",5:"x35",6:"x36",7:"x37",8:"x38",9:"x39",A:"x41",B:"x42",C:"x43",D:"x44",E:"x45",F:"x46",a:"x61",b:"x62",c:"x63",d:"x64",e:"x65",f:"x66",n:"x6e",r:"x72",t:"x74",u:"x75",v:"x76",x:"x78"},Dn={"\\":"\\",
-"'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Mn=zn[typeof exports]&&exports&&!exports.nodeType&&exports,qn=zn[typeof module]&&module&&!module.nodeType&&module,Pn=zn[typeof self]&&self&&self.Object&&self,Kn=zn[typeof window]&&window&&window.Object&&window,Vn=qn&&qn.exports===Mn&&Mn,Zn=Mn&&qn&&typeof global=="object"&&global&&global.Object&&global||Kn!==(this&&this.window)&&Kn||Pn||this,Yn=m();typeof define=="function"&&typeof define.amd=="object"&&define.amd?(Zn._=Yn, define(function(){
-return Yn})):Mn&&qn?Vn?(qn.exports=Yn)._=Yn:Mn._=Yn:Zn._=Yn}).call(this); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/assets/js/next.js b/vbd/gui/module/src/main/resources/vpp/assets/js/next.js
deleted file mode 100644
index b9af39949..000000000
--- a/vbd/gui/module/src/main/resources/vpp/assets/js/next.js
+++ /dev/null
@@ -1,101 +0,0 @@
-/*Copyright (c) 2015 Cisco and/or its affiliates.
-
-The NeXt SDK is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives (CC BY-NC-ND) 4.0 International License . A copy of the license can be found in the license.txt file accompanying this distribution and at http://creativecommons.org/licenses/by-nc-nd/4.0/
-
-The code, technical concepts, all information contained herein, and related documentation are the property of and are vested in Cisco Technology, Inc. and/or its affiliated entities, under various laws including copyright, international treaties, patent, trade secret and/or contract. All use of the material herein must be in strict accordance with the terms of the license noted above. Any rights not expressly licensed are reserved.*/
-/*Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License
-
-By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
-
-Section 1 – Definitions.
-
-Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
-Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
-Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
-Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
-Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
-Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
-Licensor means the individual(s) or entity(ies) granting rights under this Public License.
-NonCommercial means not primarily intended for or directed towards commercial advantage or monetary compensation. For purposes of this Public License, the exchange of the Licensed Material for other material subject to Copyright and Similar Rights by digital file-sharing or similar means is NonCommercial provided there is no payment of monetary compensation in connection with the exchange.
-Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
-Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
-You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
-Section 2 – Scope.
-
-License grant.
-Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
-reproduce and Share the Licensed Material, in whole or in part, for NonCommercial purposes only; and
-produce and reproduce, but not Share, Adapted Material for NonCommercial purposes only.
-Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
-Term. The term of this Public License is specified in Section 6(a).
-Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
-Downstream recipients.
-Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
-No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
-No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
-Other rights.
-
-Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
-Patent and trademark rights are not licensed under this Public License.
-To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties, including when the Licensed Material is used other than for NonCommercial purposes.
-Section 3 – License Conditions.
-
-Your exercise of the Licensed Rights is expressly made subject to the following conditions.
-
-Attribution.
-
-If You Share the Licensed Material, You must:
-
-retain the following if it is supplied by the Licensor with the Licensed Material:
-identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
-a copyright notice;
-a notice that refers to this Public License;
-a notice that refers to the disclaimer of warranties;
-a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
-indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
-indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
-For the avoidance of doubt, You do not have permission under this Public License to Share Adapted Material.
-You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
-If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
-Section 4 – Sui Generis Database Rights.
-
-Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
-
-for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database for NonCommercial purposes only and provided You do not Share Adapted Material;
-if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
-You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
-For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
-Section 5 – Disclaimer of Warranties and Limitation of Liability.
-
-Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
-To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
-The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
-Section 6 – Term and Termination.
-
-This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
-Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
-
-automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
-upon express reinstatement by the Licensor.
-For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
-For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
-Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
-Section 7 – Other Terms and Conditions.
-
-The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
-Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
-Section 8 – Interpretation.
-
-For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
-To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
-No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
-Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.*/
-var nx={VERSION:"0.8",DEBUG:!1,global:function(){return this}.call(null)};!function(){Function.prototype.bind||(Function.prototype.bind=function(a){var b=this;return function(){return b.apply(a,arguments)}})}(),function(a){var b=Array.isArray||function(a){return a&&a.constructor===Array},c=function(a){var b=Object.prototype.hasOwnProperty;if(!a||"[object Object]"!==Object.prototype.toString(a)||a.nodeType||a===window)return!1;try{if(a.constructor&&!b.call(a,"constructor")&&!b.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return void 0===d||b.call(a,d)};a.extend=function(a){for(var b=1,c=arguments.length;c>b;b++){var d=arguments[b];for(var e in d)d.hasOwnProperty(e)&&(a[e]=d[e])}return a},a.each=function(c,d,e){if(c&&d)if(c.__each__)c.__each__(d,e);else if(b(c)||"[object Arguments]"===Object.prototype.toString.call(c)||a.global.NodeList&&c instanceof NodeList||a.global.HTMLCollection&&c instanceof HTMLCollection)for(var f=0,g=c.length;g>f&&d.call(e,c[f],f)!==!1;f++);else for(var h in c)if(c.hasOwnProperty(h)&&d.call(e,c[h],h)===!1)break},a.clone=function(){var d=function(){var a,d,e,f,g;return a=function(a,b){for(var c=0;c<a.length;c++)if(a[c].key===b)return a[c].value;return null},d=function(a,b,c){var d;for(d=0;d<a.length;d++)if(a[d].key===b)return void(a[d].value=c);a[d]={key:b,value:c}},e=function(a){return 0===a.length?null:a[a.length-1]},f=function(a){var b=[];if("[object Array]"==Object.prototype.toString.call(a))for(var c=0;c<a.length;c++)b.push(c);else for(var d in a)b.push(d);return b},g=function(g){if(window===g||document===g)return null;if(["null","undefined","number","string","boolean","function"].indexOf(typeof g)>=0)return g;if(!b(g)&&!c(g))return g;var h,i,j,k=[],l=[],m=g,n=b(g)?[]:{};for(d(k,m,n),l.push({origin:m,dest:n,keys:f(m),idx:0});;){if(h=e(l),!h)break;if(m=h.origin,n=h.dest,h.keys.length<=h.idx)l.pop();else{if(i=h.keys[h.idx++],b(m[i]))n[i]=[];else{if(!c(m[i])){n[i]=m[i];continue}n[i]={}}j=a(k,m[i]),j?n[i]=j:(d(k,m[i],n[i]),l.push({origin:m[i],dest:n[i],keys:f(m[i]),idx:0}))}}return n}}();return function(b,c){if(b){if(b.__clone__)return b.__clone__(c);if(c)return d(b);if(a.is(b,"Array"))return b.slice(0);var e={};for(var f in b)b.hasOwnProperty(f)&&(e[f]=b[f]);return e}return b}}(),a.is=function(a,d){if(a&&a.__is__)return a.__is__(d);switch(d){case"Undefined":return void 0===a;case"Null":return null===a;case"Object":return a&&"object"==typeof a;case"String":case"Boolean":case"Number":case"Function":return typeof a===d.toLowerCase();case"Array":return b(a);case"POJO":return c(a);default:return a instanceof d}},a.get=function(a,b){return a?a.__get__?a.__get__(b):a[b]:void 0},a.set=function(a,b,c){a&&(a.__set__?a.__set__(b):a[b]=c)},a.gets=function(a){if(a){if(a.__gets__)return a.__gets__();var b={};for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);return b}},a.sets=function(a,b){if(a&&b)if(a.__sets__)a.__sets__(b);else for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c])},a.has=function(a,b){return a?a.__has__?a.__has__(b):b in a:!1},a.compare=function(a,b){return a&&a.__compare__?a.__compare__(b):a===b?0:a>b?1:b>a?-1:1},a.path=function(a,c,d){var e=a;if(c){var f,g,h,i=0;if("string"==typeof c)f=c.split(".");else{if(!b(c))return a;f=c}if(h=f.length,void 0===d)for(;e&&h>i;i++)g=f[i],e=e.__get__?e.__get__(g):e[g];else{for(h-=1;e&&h>i;i++)g=f[i],e=e.__get__?e.__get__(g):e[g]=e[g]||{};g=f[i],e&&(e.__set__?e.__set__(g,d):e[g]=d,e=d)}}return e},a.idle=function(){},a.identity=function(a){return a},a.uuid=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)}).toUpperCase()}}(nx),function(a){function b(){}function c(a,b){var c=j+b,d=a[c]&&"event"==a[c].__type__,e=a[c]=function(a,c){var d=this.__listeners__,e=d[b]=d[b]||[{owner:null,handler:null,context:null}];e[0]={owner:this,handler:a,context:c}};return e.__name__=b,e.__type__="event",d||a.__events__.push(b),e}function d(b,c,d){(a.is(d,a.keyword.internal.Keyword)||!a.is(d,"Object"))&&(d={value:d});var e,f=b[c]&&"property"==b[c].__type__;d.dependencies?(a.is(d.dependencies,"String")&&(d.dependencies=d.dependencies.replace(/\s/g,"").split(",")),e=a.keyword.binding({source:d.dependencies,async:!0,callback:function(){var b=this.owner;d.update&&d.update.apply(b,arguments),a.is(d.value,"Function")?b.set(c,d.value.apply(b,arguments)):d.update||d.value||b.set(c,arguments[0])}})):e=d.value,b[c]&&d.inherits&&(d=a.extend({},b[c].__meta__,d));var g=function(a,b){return void 0===a&&0===arguments.length?g.__getter__.call(this,b):g.__setter__.call(this,a,b)};return g.__name__=c,g.__type__="property",g.__meta__=d,g.__getter__=d.get||function(){return this["_"+c]},g.__setter__=d.set||function(a){this["_"+c]=a},g.getMeta=function(a){return a?g.__meta__[a]:g.__meta__},a.is(b,"Function")&&b.__properties__&&!b.__static__?b.prototype[c]=g:b[c]=g,void 0!==e&&(b.__defaults__[c]=e),f||(a.is(b,"Function")||b.__properties__!==b.constructor.__properties||(b.__properties__=b.__properties__.slice()),b.__properties__.push(c)),g}function e(a,b,c){var d=a[b]&&"method"==a[b].__type__;a[b]&&a[b]!==c&&(c.__super__=a[b]),c.__name__=b,c.__type__="method",c.__meta__={},a[b]=c,d||a.__methods__.push(b)}function f(f,j,m){m||(a.is(j,"Object")?(m=j,j=null,a.is(f,"Function")&&(j=f,f=null)):j||(a.is(f,"Object")?(m=f,f=null):a.is(f,"Function")&&(j=f,f=null))),m=m||{};var n,o,p,q,r,s,t=j||b,u=m.mixins||[],v=m.events||[],w=m.properties||{},x=m.methods||{},y=m.static||!1,z=m.statics||{};if(a.is(u,"Function")&&(u=[u]),t.__static__)throw new Error("Static class cannot be inherited.");if(y){for(r=function(){throw new Error("Cannot instantiate static class.")},r.__classId__=g++,r.__className__=f?f:"Anonymous",r.__static__=!0,r.__events__=[],r.__properties__=[],r.__methods__=[],r.__defaults__={},p=0,q=v.length;q>p;p++)c(r,v[p]);for(o in w)w.hasOwnProperty(o)&&d(r,o,w[o]);for(o in x)x.hasOwnProperty(o)&&e(r,o,x[o]);for(o in z)z.hasOwnProperty(o)&&(r[o]=z[o]);a.each(r.__defaults__,function(b,c){if(a.is(b,"Function"))this["_"+c]=b.call(this);else if(a.is(b,a.keyword.internal.Keyword))switch(b.type){case"binding":b.apply(this,c)}else this["_"+c]=b},r),x.init&&x.init.call(r)}else{r=function(){var b=arguments[0];"[object Arguments]"!==Object.prototype.toString.call(b)&&(b=arguments);var c=this.__mixins__;this.__id__=h++,this.__listeners__={},this.__bindings__=this.__bindings__||{},this.__watchers__=this.__watchers__||{},this.__keyword_bindings__=this.__keyword_bindings__||[],this.__keyword_watchers__=this.__keyword_watchers__||{},this.__keyword_init__=this.__keyword_init__||[],this.__initializing__=!0;for(var d=0,e=c.length;e>d;d++){var f=c[d].__ctor__;f&&f.call(this)}a.each(r.__defaults__,function(b,c){a.is(b,"Function")?this["_"+c]=b.call(this):a.is(b,a.keyword.internal.Keyword)?this.__keyword_bindings__.push({name:c,definition:b}):this["_"+c]=b},this),a.each(r.__properties__,function(b){var c=this[b];if(c&&"property"===c.__type__){var d=c.__meta__,e=d.watcher,f=d.init;e&&this.watch&&(a.is(e,"String")&&(e=this[e]),this.watch(b,e.bind(this)),this.__keyword_watchers__[b]=e),f&&this.__keyword_init__.push(f)}},this),a.each(this.__keyword_bindings__,function(a){a.instance=a.definition.apply(this,a.name)},this),a.each(this.__keyword_init__,function(a){a.apply(this,b)},this),this.__ctor__&&this.__ctor__.apply(this,b),a.each(this.__keyword_watchers__,function(a,b){a.call(this,b,this[b].call(this))},this),a.each(this.__keyword_bindings__,function(a){a.instance.notify()},this),this.__initializing__=!1},s=function(){},s.prototype=t.prototype,n=new s,n.constructor=r,n.__events__=t.__events__.slice(0),n.__properties__=t.__properties__.slice(0),n.__methods__=t.__methods__.slice(0),n.__defaults__=a.clone(t.__defaults__),n.__mixins__=t.__mixins__.concat(u),r.__classId__=g++,r.__className__=n.__className__=f?f:"Anonymous",r.__super__=n.__super__=t,r.prototype=n,x.init&&(n.__ctor__=x.init);for(o in m)m.hasOwnProperty(o)&&(n[i+o]=r[i+o]=m[o]);for(a.each(u,function(b){var f=b.prototype;a.each(b.__events__,function(a){c(n,a)}),a.each(b.__properties__,function(a){d(n,a,f[a].__meta__)}),a.each(b.__methods__,function(a){"init"!==a&&"dispose"!==a&&e(n,a,f[a])})}),p=0,q=v.length;q>p;p++)c(n,v[p]);for(o in w)w.hasOwnProperty(o)&&d(n,o,w[o]);for(o in x)x.hasOwnProperty(o)&&e(n,o,x[o]);for(o in z)z.hasOwnProperty(o)&&(r[o]=z[o]);r.__ctor__=n.__ctor__,r.__events__=n.__events__,r.__properties__=n.__properties__,r.__methods__=n.__methods__,r.__defaults__=n.__defaults__,r.__mixins__=n.__mixins__}return f&&a.path(l,f,r),k[r.__classId__]=r,r}var g=1,h=1,i="@",j="on",k={},l=a.global,m=b.prototype={constructor:b,dispose:function(){this.__listeners__={}},destroy:function(){this.dispose()},inherited:function(){var a=this.inherited.caller.__super__;return a?a.apply(this,arguments):void 0},is:function(b){if("string"==typeof b&&(b=a.path(l,b)),b){if(this instanceof b)return!0;for(var c=this.__mixins__,d=0,e=c.length;e>d;d++){var f=c[d];if(b===f)return!0}}return!1},has:function(a){var b=this[a];return b&&"property"==b.__type__},get:function(a){var b=this[a];return void 0!==b?"property"==b.__type__?b.call(this):b:void 0},set:function(a,b){var c=this[a];if(void 0!==c){if("property"==c.__type__)return c.call(this,b);this[a]=b}else this[a]=b},gets:function(){var b={};return a.each(this.__properties__,function(a){b[a]=this.get(a)},this),b},sets:function(a){if(a)for(var b in a)a.hasOwnProperty(b)&&this.set(b,a[b])},can:function(a){var b=this[j+a];return b&&"event"==b.__type__},on:function(a,b,c){var d=this.__listeners__,e=d[a]=d[a]||[{owner:null,handler:null,context:null}],f={owner:this,handler:b,context:c||this};return e.push(f),{release:function(){var a=e.indexOf(f);a>=0&&e.splice(a,1)}}},off:function(a,b,c){var d,e=this.__listeners__[a];if(e)if(b){c=c||this;for(var f=0,g=e.length;g>f;f++)if(d=e[f],d.handler==b&&d.context==c){e.splice(f,1);break}}else e.length=1},upon:function(a,b,c){var d=this.__listeners__,e=d[a]=d[a]||[{owner:null,handler:null,context:null}];e[0]={owner:this,handler:b,context:c}},fire:function(a,b){var c,d,e,f,g,h=this.__listeners__[a];for(g=h?h.slice():[],c=0,d=g.length;d>c;c++)if(e=g[c],e&&e.handler&&(h[c]===e||h.indexOf(e)>=0)&&(f=e.handler.call(e.context,e.owner,b),f===!1))return!1},__is__:function(a){return this.is(a)},__has__:function(a){return this.has(a)},__get__:function(a){return this.get(a)},__set__:function(a,b){return this.set(a,b)},__gets__:function(){return this.gets()},__sets__:function(a){return this.sets(a)}};b.__classId__=m.__classId__=0,b.__className__=m.__className__="nx.Object",b.__events__=m.__events__=[],b.__properties__=m.__properties__=[],b.__methods__=m.__methods__=[],b.__defaults__=m.__defaults__={},b.__mixins__=m.__mixins__=[],b.extendEvent=c,b.extendProperty=d,b.extendMethod=e,a.Object=b,a.define=f,a.classes=k}(nx),function(a){var b=a.keyword=a.keyword||{binding:function(b,c,d){var e=!1;return"string"!=typeof b&&(e=!!b.context,c=b.callback,d=b.async,b=b.source),new a.keyword.internal.Keyword({type:"binding",context:e,source:b,async:d,callback:c})},internal:{idle:function(){},watch:function(){var c=function(c,d,e,f){function g(i,j){if(i&&j<h.length){var k=h[j];if("*"==k||"%"==k);else{var l=a.path(i,k);if(i.watch){var m=h.slice(j+1).join("."),n=g(l,j+1),o=function(b,h,i){var k=m?a.path(h,m):h,o=m?a.path(i,m):i;e.call(f||c,d,k,o),h!==l&&(n(),l=h,n=g(l,j+1))};return i.watch(k,o,i),function(){n(),i.unwatch(k,o,i)}}if(l)return g(l,j+1)}}return b.internal.idle}var h=d.split("."),i=g(c,0);return{unwatch:i,notify:function(){var b=a.path(c,d);e.call(f||c,d,b,b)}}},d=function(b,d,e,f){var g={collection:null,unlistener:null,listener:function(a,c){e.call(f||b,d,a,c)},update:function(c){g.collection!==c&&(g.unlistener&&g.unlistener(),c&&c.is&&c.is(a.data.ObservableCollection)?(c.on("change",g.listener,b),g.unlistener=function(){c.off("change",g.listener,b)}):g.unlistener=null,g.collection=c)}};g.update(a.path(b,d));var h=c(b,d,function(a,c){g.update(c),e.call(f||b,a,c)},f);return{unwatch:function(){h.unwatch(),g.unlistener&&g.unlistener()},notify:h.notify}};return function(b,c,e){if(b&&c&&e){var f;f=a.is(c,"String")?c.replace(/\s/g,"").split(","):c,a.each(f,function(a,b){/^\d+$/.test(a)&&(f[b]=1*a)});var g=[],h=[],j=function(a,c){var d=h.slice();d.push(a),c&&d.push(c),e.apply(b,d)};for(i=0;i<f.length;i++)!function(c){h[c]=a.path(b,f[c]);var e=d(b,f[c],function(a,b,d){h[c]=b,j(f[c],d)});g.push(e)}(i);return{notify:j,release:function(){for(;g.length;)g.shift().unwatch()}}}}}(),Keyword:function(){var b=function(b){a.sets(this,b)};return b.prototype={apply:function(b,c){var d={owner:b,property:c,set:b&&c&&function(a){return b.set(c,a),b.get(c)}},e=a.keyword.internal.watch(b,this.source,function(){var a;a=this.callback?this.callback.apply(this.context?d.owner:d,arguments):arguments[0],this.async||d.set(a)}.bind(this));return e}},b}()}}}(nx),function(a){var b=a.define("nx.Iterable",{statics:{getIterator:function(c){return a.is(c,b)?function(a,b){c.each(a,b)}:function(b,d){a.each(c,b,d)}},toArray:function(c){if(a.is(c,b))return c.toArray();if(a.is(c,"Array"))return c.slice(0);var d=[];return a.each(c,function(a){d.push(a)}),d}},properties:{count:{get:function(){return this.toArray().length}}},methods:{each:function(){throw new Error("Not Implemented.")},toArray:function(){var a=[];return this.each(function(b){a.push(b)}),a},__each__:function(a,b){return this.each(a,b)}}})}(nx),function(a){var b=a.define("nx.Observable",{statics:{extendProperty:function(b,c,d){var e=a.Object.extendProperty(b,c,d);if(e&&"property"==e.__type__&&!e._watched){var f=e.__setter__;e.__setter__=function(a,b){var d=this.get(c);return d!==a&&f.call(this,a,b)!==!1?this.notify(c,d):!1},e._watched=!0}return e},watch:function(b,c,d,e){var f="string"==typeof c?c.split("."):c,g=function(h,i){if(h&&i<f.length){var j=f[i],k=a.path(h,j);if(h.watch){var l=f.slice(i+1),m=g(k,i+1),n=h.watch(j,function(f,h,j){var n=a.path(h,l),o=a.path(j,l);d.call(e||b,c,n,o),h!==k&&(m&&m.release(),k=h,m=g(k,i+1))});return{release:function(){m&&m.release(),n.release()}}}if(k)return g(k,i+1)}return{release:a.idle}},h=g(b,0);return{release:h.release,affect:function(){var f=a.path(b,c);d.call(e||b,c,f,f)}}},monitor:function(c,d,e){if(c&&d&&e){var f,g,h,i;g="string"==typeof d?d.replace(/\s/g,"").split(","):d,h=[],i=[];var j=function(a,b){var d=i.slice();d.push(a,b),e.apply(c,d)};for(f=0;f<g.length;f++)!function(d){i[d]=a.path(c,g[d]);var e=b.watch(c,g[d],function(a,b){var c=i[d];i[d]=b,j(g[d],c)});h.push(e)}(f);return{affect:j,release:function(){for(;h.length;)h.shift().release()}}}}},methods:{init:function(){this.__bindings__=this.__bindings__||{},this.__watchers__=this.__watchers__||{}},dispose:function(){this.inherited(),a.each(this.__bindings__,function(a){a.dispose()}),this.__bindings__={},this.__watchers__={}},watch:function(b,c,d){var e=[];return a.each("*"==b?this.__properties__:a.is(b,"Array")?b:[b],function(a){e.push(this._watch(a,c,d))},this),{affect:function(){a.each(e,function(a){a.affect()})},release:function(){a.each(e,function(a){a.release()})}}},unwatch:function(b,c,d){a.each("*"==b?this.__properties__:a.is(b,"Array")?b:[b],function(a){this._unwatch(a,c,d)},this)},notify:function(b,c){"*"==b?a.each(this.__watchers__,function(a,b){this._notify(b,c)},this):a.each(a.is(b,"Array")?b:[b],function(a){this._notify(a,c)},this)},getBinding:function(a){return this.__bindings__[a]},setBinding:function(b,d,e){var f=this.__bindings__[b],g={};if(a.is(d,"String")){for(var h=d.split(","),i=h[0],j=1,k=h.length;k>j;j++){var l=h[j].split("=");g[l[0]]=l[1]}g.target=this,g.targetPath=b,g.sourcePath=i,g.source=e,g.converter&&(g.converter=c.converters[g.converter]||a.path(window,g.converter))}else g=a.clone(d),g.target=this,g.targetPath=b,g.source=g.source||this;f&&f.destroy(),this.__bindings__[b]=new c(g)},clearBinding:function(a){var b=this.__bindings__[a];b&&(b.destroy(),this.__bindings__[a]=null)},_watch:function(b,c,d){var e=this.__watchers__,f=e[b]=e[b]||[],g=this[b],h={owner:this,handler:c,context:d};if(f.push(h),g&&"property"==g.__type__&&!g._watched){var i=g.__setter__,j=g.getMeta("dependencies"),k=g.getMeta("equalityCheck");a.each(j,function(a){this.watch(a,function(){this.notify(b)},this)},this),g.__setter__=function(a,c){var d=this.get(b);return(d!==a||c&&c.force||k===!1)&&i.call(this,a,c)!==!1?this.notify(b,d):!1},g._watched=!0}return{affect:function(){var a=h.owner.get(b);h&&h.handler&&h.handler.call(h.context||h.owner,b,a,a,h.owner)},release:function(){var a=f.indexOf(h);a>=0&&f.splice(a,1)}}},_unwatch:function(a,b,c){var d,e=this.__watchers__,f=e[a];if(f)if(b){for(var g=0,h=f.length;h>g;g++)if(d=f[g],d.handler==b&&d.context==c){f.splice(g,1);break}}else f.length=0},_notify:function(a,b){var c,d,e,f=this.__watchers__[a];for(e=f?f.slice():[],c=0;c<e.length;c++)d=e[c],d&&d.handler&&(d===f[c]||f.indexOf(d)>=0)&&d.handler.call(d.context||d.owner,a,this.get(a),b,d.owner)}}}),c=a.define("nx.Binding",b,{statics:{converters:{"boolean":{convert:function(a){return!!a},convertBack:function(a){return!!a}},inverted:{convert:function(a){return!a},convertBack:function(a){return!a}},number:{convert:function(a){return Number(a)},convertBack:function(a){return a}}},format:function(a,b){return a?a.replace("{0}",b):""}},properties:{target:{value:null},targetPath:{value:""},sourcePath:{value:""},source:{get:function(){return this._source},set:function(a){this._initialized&&this._source!==a&&(this._rebind(0,a),"<"==this._direction[0]&&this._updateTarget(),this._source=a)}},bindingType:{value:"auto"},direction:{value:"auto"},trigger:{value:"auto"},format:{value:"auto"},converter:{value:"auto"}},methods:{init:function(b){if(this.sets(b),b.target){var d,e=this.target(),f=this.targetPath(),g=this.sourcePath(),h=this.bindingType(),i=this.direction(),j=this.format(),k=this.converter(),l=e[f],m=this._watchers=[],n=this._keys=g.split("."),o=0,p=n.length,q=this;if(l){var r=l.__meta__.binding;"auto"==h&&(h=l.__type__),"auto"==i&&(i=this._direction=r&&r.direction||"<-"),"auto"==j&&(j=r&&r.format),"auto"==k&&(k=r&&r.converter)}else"auto"==h&&(h=e.can(f)?"event":"property"),"auto"==i&&(i=this._direction="<-"),"auto"==j&&(j=null),"auto"==k&&(k=null);if(k&&a.is(k,"Function")&&(k={convert:k,convertBack:function(a){return a}}),"<"==i[0])for(;p>o;o++)m.push({key:n[o],handler:function(a){return function(b,c){q._rebind(a,c),q._updateTarget()}}(o+1)});"event"==h?(d=m[p-1].key,m.length--,this._updateTarget=function(){var a=this._actualValue;a&&e.upon(f,a[d],a)}):this._updateTarget=function(){var b=this._actualValue;k&&(b=k.convert.call(this,b)),j&&(b=c.format(j,b)),a.path(e,f,b)},">"==i[1]&&e.watch&&"method"===e.watch.__type__&&e.watch(f,this._onTargetChanged=function(b,c){var d=c;k&&(d=k.convertBack.call(this,d)),a.path(this.source(),g,d)},this),this._initialized=!0,this.source(b.source)}},dispose:function(){this._target;this._rebind(0,null)},_rebind:function(a,b){for(var c,d=this._watchers,e=b,f=a,g=d.length;g>f;f++){var h=d[f],i=h.key,j=h.handler;c=h.source,c&&c.unwatch&&"method"===c.unwatch.__type__&&c.unwatch(i,j,this),h.source=e,e&&(e.watch&&"method"===e.watch.__type__&&e.watch(i,j,this),e=e.get?e.get(i):e[i])}this._actualValue=e}}})}(nx),function(a){var b=a.define("nx.data.Counter",{events:["change","increase","decrease"],methods:{init:function(){this._nummap={},this._strmap={},this._objmap=[],this._nxomap={},this._null=0,this._true=0,this._false=0,this._undefined=0},getCount:function(a){if("[object Null]"!==Object.prototype.toString.call(null)){if(null===a)return this._null;if(void 0===a)return this._undefined}switch(Object.prototype.toString.call(a)){case"[object Null]":return this._null;case"[object Boolean]":return a?this._true:this._false;case"[object Undefined]":return this._undefined;case"[object Number]":return this._nummap[a]||0;case"[object String]":return this._strmap[a]||0;default:return a.__id__?this._nxomap[a.__id__]||0:b.getArrayMapValue(this._objmap,a)||0}},setCount:function(a,c){"[object Null]"!==Object.prototype.toString.call(null)&&(null===a?this._null=c:void 0===a&&(this._undefined=c));var d=this.getCount(a);if(d===c)return c;switch(Object.prototype.toString.call(a)){case"[object Null]":this._null=c;break;case"[object Boolean]":a?this._true=c:this._false=c;break;case"[object Undefined]":this._undefined=c;break;case"[object Number]":this._nummap[a]=c;break;case"[object String]":this._strmap[a]=c;break;default:a.__id__?this._nxomap[a.__id__]=c:b.setArrayMapValue(this._objmap,a,c)}var e={item:a,previousCount:d,count:c};return d>c?this.fire("decrease",e):this.fire("increase",e),this.fire("change",e),c},increase:function(a,b){return b=arguments.length>1?Math.floor(1*b||0):1,this.setCount(a,this.getCount(a)+b)},decrease:function(a,b){return b=arguments.length>1?Math.floor(1*b||0):1,this.setCount(a,this.getCount(a)-b)},__addArrayItem:function(a){this._arrcache.push(a)},__removeArrayItem:function(a){var b=this._arrcache.indexOf(a);this._arrcache.splice(b,1)},__getArrayCounter:function(b){var c=0;return a.each(this._arrcache,function(a){b===a&&c++}),c}},statics:{_getArrayMapItem:function(a,b){return a.filter(function(a){return a.key===b})[0]},getArrayMapValue:function(a,c){return(b._getArrayMapItem(a,c)||{}).value},setArrayMapValue:function(a,c,d){var e=b._getArrayMapItem(a,c);return e?e.value=d:a.push({key:c,value:d}),d}}})}(nx),function(a){var b=a.Iterable,c=a.define("nx.data.Collection",b,{properties:{count:{get:function(){return this._data.length},set:function(){throw new Error("Unable to set count of Collection")}},length:{get:function(){return this._data.length},set:function(){throw new Error("Unable to set length of Collection")}},unique:{set:function(a){if(!!this._unique!=!!a&&(this._unique=!!a,a)){var b,c=this._data,d=c.length;for(b=d-1;b>0;b--)this.indexOf(c[b])<b&&this.removeAt(b)}}}},methods:{init:function(c){var d=this._data=[];a.is(c,b)?this._data=c.toArray():b.getIterator(c)(function(a){d.push(a)})},add:function(a){return this._unique&&-1!=this.indexOf(a)?null:(this._data.push(a),a)},addRange:function(a){var c,d=this._data,e=b.toArray(a).slice();if(this._unique)for(c=e.length-1;c>=0;c--)(this.indexOf(e[c])>=0||e.indexOf(e[c])<c)&&e.splice(c,1);return d.splice.apply(d,[d.length,0].concat(e)),e},remove:function(a){var b=this,c=function(a){var c=b.indexOf(a);return c>=0?(b._data.splice(c,1),c):-1};if(arguments.length>1){var d,e=[];for(d=arguments.length-1;d>=0;d--)e.unshift(c(arguments[d]));return e}return c(a)},removeAt:function(a){return this._data.splice(a,1)[0]},insert:function(a,b){return this._unique&&-1!=this.indexOf(a)?null:(this._data.splice(b,0,a),a)},insertRange:function(a,c){var d,e=this._data,f=b.toArray(a).slice();if(this._unique)for(d=f.length-1;d>=0;d--)(this.indexOf(f[d])>=0||f.indexOf(f[d])<d)&&f.splice(d,1);return e.splice.apply(e,[c,0].concat(f)),f},clear:function(){var a=this._data.slice();return this._data.length=0,a},getItem:function(a){return this._data[a]},getRange:function(a,b){return new c(this._data.slice(a,a+b))},indexOf:function(b){var c=this._data;if(c.indexOf)return c.indexOf(b);for(var d=0,e=c.length;e>d;d++)if(0===a.compare(c[d],b))return d;return-1},lastIndexOf:function(b){var c=this._data;if(c.lastIndexOf)return c.lastIndexOf(b);for(var d=c.length-1;d>=0;d--)if(0===a.compare(c[d],b))return d;return-1},contains:function(a){return this.indexOf(a)>=0},toggle:function(a,b){arguments.length<=1?this.contains(a)?this.remove(a):this.add(a):b?this.add(a):this.remove(a)},sort:function(a){return this._data.sort(a)},each:function(b,c){a.each(this._data,b,c)},toArray:function(){return this._data.slice(0)}}})}(nx),function(a){{var b=a.Iterable,c=a.define({properties:{key:{},value:{set:function(a){this._dict?this._dict.setItem(this._key,a):this._value=a}}},methods:{init:function(a,b){this._dict=a,this._key=b}}}),d=a.define(b,{methods:{init:function(a){this._dict=a},each:function(a,b){this._dict.each(function(c){a.call(b,c.key())})}}}),e=a.define(b,{methods:{init:function(a){this._dict=a},each:function(a,b){this._dict.each(function(c){a.call(b,c.value())})}}});a.define("nx.data.Dictionary",b,{properties:{count:{get:function(){return this._items.length}},keys:{get:function(){return this._keys}},values:{get:function(){return this._values}}},methods:{init:function(a){this._map={},this._items=[];this.setItems(a),this._keys=new d(this),this._values=new e(this)},contains:function(a){return a in this._map},getItem:function(a){var b=this._map[a];return b&&b._value},setItem:function(a,b){var d=this._map[a];return d||(d=this._map[a]=new c(this,""+a),this._items.push(d)),d._value=b,d},setItems:function(b){b&&a.each(b,function(a,b){this.setItem(b,a)},this)},removeItem:function(a){var b=this._map;if(a in b){var c=b[a],d=this._items.indexOf(c);return delete b[a],d>=0&&this._items.splice(d,1),c._dict=null,c}},clear:function(){var b=this._items.slice();return this._map={},this._items=[],a.each(b,function(a){a._dict=null}),b},each:function(b,c){c=c||this,a.each(this._map,function(a,d){b.call(c,a,d)})},toArray:function(){return this._items.slice()},toObject:function(){var a={};return this.each(function(b){a[b.key()]=b.value()}),a}}})}}(nx),function(a){a.define("nx.data.ObservableObject",a.Observable,{methods:{init:function(a){this.inherited(),this._data=a||{}},dispose:function(){this.inherited(),this._data=null},has:function(a){var b=this[a];return b&&"property"==b.__type__||a in this._data},get:function(a){var b=this[a];return void 0===b?this._data[a]:"property"==b.__type__?b.call(this):void 0},set:function(a,b){var c=this[a];if(void 0===c){if(this._data[a]!==b)return this._data[a]=b,this.notify(a),!0}else if("property"==c.__type__)return c.call(this,b)},gets:function(){var b=a.clone(this._data);return a.each(this.__properties__,function(a){b[a]=this.get(a)},this),b}}})}(nx),function(a){var b=/^(&&|\|\||&|\||\^|-|\(|\)|[a-zA-Z\_][a-zA-Z\d\_]*|\s)*$/,c=/&&|\|\||&|\||\^|-|\(|\)|[a-zA-Z\_][a-zA-Z\d\_]*/g,d=/[a-zA-Z\_][a-zA-Z\d\_]*/,e=/&&|\|\||&|\||\^|-|\(|\)/,f={"-":"complement","&":"cross","^":"delta","|":"union","&&":"and","||":"or"},g=a.define("nx.data.ObservableCollection",a.data.Collection,{mixins:a.Observable,events:["change"],methods:{add:function(a){return a=this.inherited(a),this._unique&&null===a||(this.notify("count"),this.notify("length"),this.fire("change",{action:"add",items:[a]})),a},addRange:function(a){var b=this.inherited(a);return b.length&&(this.notify("count"),this.notify("length"),this.fire("change",{action:"add",items:b})),b},insert:function(a,b){return a=this.inherited(a,b),this._unique&&null===a||(this.notify("count"),this.notify("length"),this.fire("change",{action:"add",items:[a],index:b})),a},insertRange:function(a,b){var c=this.inherited(a,b);return c.length&&(this.notify("count"),this.notify("length"),this.fire("change",{action:"add",items:c,index:b})),c},remove:function(a){var b;return arguments.length>1?(a=Array.prototype.slice.call(arguments),b=this.inherited.apply(this,a),b.length&&(this.notify("count"),this.notify("length"),this.fire("change",{action:"remove",items:a,indices:b})),b):(b=this.inherited(a),b>=0&&(this.notify("count"),this.notify("length"),this.fire("change",{action:"remove",items:[a],index:b,indices:[b]})),b)},removeAt:function(a){var b=this.inherited(a);return void 0!==b&&(this.notify("count"),this.notify("length"),this.fire("change",{action:"remove",items:[b],index:a})),b},clear:function(){var a=this.inherited();this.notify("count"),this.notify("length"),this.fire("change",{action:"clear",items:a})},sort:function(a){var b=this.inherited(a);return this.notify("count"),this.notify("length"),this.fire("change",{action:"sort",comparator:a||function(a,b){return a>b?1:b>a?-1:0}}),b},monitor:function(b){var c=this,d={objcache:[],idcache:{},findPair:function(a){var b;for(b=0;b<d.objcache.length;b++)if(a===d.objcache[b][0])return b;return-1},get:function(a){if(a.__id__)return d.idcache[a.__id__];var b=d.objcache[d.findPair(a)];return b&&b[1]},set:function(a,b){if(a.__id__)d.idcache[a.__id__]&&d.idcache[a.__id__].call(c),b?d.idcache[a.__id__]=b:delete d.idcache[a.__id__];else{var e=d.findPair(a),f=d.objcache[e];if(f){if(f[1]===b)return;f[1].call(c),b?f[1]=b:d.objcache.splice(e,1)}else b&&(f=[a,b],d.objcache.push(f))}},release:function(){a.each(d.idcache,function(a){a()}),a.each(d.objcache,function(a){a[1]()})}},e=c.on("change",function(c,e){switch(e.action){case"add":a.each(e.items,function(a){var c=b(a);c&&d.set(a,c)});break;case"remove":case"clear":a.each(e.items,function(a){d.set(a,null)})}});return a.each(c,function(a){var c=b(a);c&&d.set(a,c)}),{release:function(){d.release(),e.release()}}},select:function(b,c,d){if(!a.is(b,g))return null;"function"==typeof c&&(d=c,c=null),d||(d=a.identity);var e=this;this.clear();var f=b.monitor(function(b){var f;return c?a.is(b,a.Observable)?(f=a.Observable.monitor(b,c,function(){e.toggle(b,d.apply(e,arguments))}),f.affect()):e.toggle(b,d.call(e,a.path(b,c))):e.toggle(b,d.call(e,b)),function(){f&&f.release(),e.toggle(b,!1)}});return f},calculate:function(a,b){var c=new g.Calculation(b);return c.calculate(this,a)}},statics:{Calculation:a.define({properties:{map:{value:function(){return new a.data.ObservableDictionary}}},methods:{init:function(a){this.map().setItems(a)},calculate:function(a,e){if(!e.match(b))throw new Error("Bad expression.");var f,h,i=this,j=this.map(),k=e.match(c),l=k.filter(RegExp.prototype.test.bind(d)),m=g.buildExpressionTree(k),n={count:0,map:{},sync:function(){f&&(f.release(),f=null),n.count===l.length&&(a.clear(),f="string"==typeof m?i.map().getItem(m).monitor(g.getCollectionSyncMonitor(a)):i._calculate(a,m))},monitor:function(a,b){l.indexOf(a)>=0&&(n.count+=1*!n.map[a]+1*!!b-1,n.map[a]=b,n.sync())}};return h=j.monitor(n.monitor),{release:function(){f&&f.release(),h.release()}}},_calculate:function(b,c){var d,e,h=this,i=c[0];switch(i){case"&&":e=function(d){var f,g,i,j;return"string"==typeof c[d]?f=h.map().getItem(c[d]):(f=new a.data.ObservableCollection,g=h._calculate(f,c[d])),d>=c.length-1?i=f.monitor(function(a){return b.add(a),function(){b.remove(a)}}):(i=f.watch("length",function(a,b){b?j=e(d+1):j&&(j.release(),j=null)}),i.affect()),{release:function(){j&&j.release(),i&&i.release(),g&&g.release()}}},d=e(1);break;case"||":e=function(d){var f,i,j,k;return"string"==typeof c[d]?f=h.map().getItem(c[d]):(f=new a.data.ObservableCollection,i=h._calculate(f,c[d])),d>=c.length-1?j=f.monitor(g.getCollectionSyncMonitor(b)):(j=f.watch("length",function(a,c){k&&k.release(),k=c?f.monitor(g.getCollectionSyncMonitor(b)):e(d+1)}),j.affect()),{release:function(){k&&k.release(),j&&j.release(),i&&i.release()}}},d=e(1);break;default:e=function(){var d,e,j,k=[],l=[];for(d=1;d<c.length;d++)"string"==typeof c[d]?e=h.map().getItem(c[d]):(e=new a.data.ObservableCollection,j=h._calculate(e,c[d])),k.push(e),l.push(j);return j=g[f[i]](b,k),{release:function(){a.each(l,function(a){a&&a.release()}),j.release()}}},d=e()}return d}}}),getCollectionSyncMonitor:function(a,b){return b!==!1?function(b){return a.add(b),function(){a.remove(b)}}:function(b){return a.remove(b),function(){a.add(b)}}},cross:function(b,c){b.clear();var d=new a.data.Counter,e=[],f=d.on("increase",function(a,d){d.count==c.length&&b.add(d.item)}),g=d.on("decrease",function(a,d){d.count==c.length-1&&b.remove(d.item)});return a.each(c,function(a){var b=a.monitor(function(a){return d.increase(a,1),function(){d.decrease(a,1)}});e.push(b)}),{release:function(){f.release(),g.release(),a.each(e,function(a){a.release()})}}},union:function(b,c){b.clear();var d=new a.data.Counter,e=[],f=d.on("increase",function(a,c){1===c.count&&b.add(c.item)}),g=d.on("decrease",function(a,c){0===c.count&&b.remove(c.item)});return a.each(c,function(a){var b=a.monitor(function(a){return d.increase(a,1),function(){d.decrease(a,1)}});e.push(b)}),{release:function(){f.release(),g.release(),a.each(e,function(a){a.release()})}}},complement:function(b,c){b.clear();var d=new a.data.Counter,e=[],f=c.length,g=d.on("change",function(a,c){var d=c.previousCount,e=c.count;
-f>d&&e>=f&&b.add(c.item),d>=f&&f>e&&b.remove(c.item)}),h=c[0].monitor(function(a){return d.increase(a,f),function(){d.decrease(a,f)}});return e.push(h),a.each(c,function(a,b){if(b>0){var c=a.monitor(function(a){return d.decrease(a),function(){d.increase(a)}});e.push(c)}}),{release:function(){g.release(),a.each(e,function(a){a.release()})}}},delta:function(b,c){b.clear();var d=!0,e=[];return a.each(c,function(a){var c=a.monitor(function(a){return b.toggle(a),function(){d&&b.toggle(a)}});e.push(c)}),{release:function(){d=!1,a.each(e,function(a){a.release()})}}},or:function(a,b){a.clear();var c,d=!0,e=function(c){var f,g,h=b[c];return f=h.watch("length",function(f,i){g&&g.release(),g=c<b.length-1&&!i?e(c+1):h.monitor(function(b){return a.add(b),function(){d&&a.remove(b)}})}),f.affect(),{release:function(){g&&g.release(),f&&f.release()}}};return c=e(0),{release:function(){d=!1,c.release()}}},and:function(a,b){a.clear();var c=!0,d=function(e){var f,g,h=b[e];return e===b.length-1?h.monitor(function(b){return a.add(b),function(){c&&a.remove(b)}}):(f=h.watch("length",function(a,b){b?g=d(e+1):g&&(g.release(),g=null)}),f.affect(),{release:function(){g&&g.release(),f.release()}})},e=d(0);return{release:function(){c=!1,e.release()}}},buildExpressionTree:function(){var a=[["-"],["&"],["^"],["|"],["&&"],["||"]],b=function(b){for(var c=0;c<a.length;c++)if(a[c].indexOf(b)>=0)return c},f=function(a,b,c){return"[object Array]"===Object.prototype.toString.call(b)&&b[0]===a?(b.push(c),b):[a,b,c]};return function(a){"string"==typeof a&&(a=a.match(c)),a=a.concat([")"]);for(var g,h,i,j=[],k=[],l=[];a.length;)if(g=a.shift(),")"===g)for(;(h=j.pop())&&"("!==h;)i=k.pop(),k.push(f(h,k.pop(),i));else if("("===g)j.push(g);else if(g.match(d))k.push(g),-1==l.indexOf(g)&&l.push(g);else if(g.match(e)){for(;j.length;){if(h=j.pop(),"("===h||b(h)>b(g)){j.push(h);break}i=k.pop(),k.push(f(h,k.pop(),i))}j.push(g)}return k[0]&&(k[0].operands=l),k[0]}}()}})}(nx),function(a){var b=a.Observable,c=a.data.Dictionary,d=a.define(b,{properties:{key:{},value:{set:function(a){this._dict?this._dict.setItem(this._key,a):this._value=a}}},methods:{init:function(a,b){this._dict=a,this._key=b}}});a.define("nx.data.ObservableDictionary",c,{mixins:b,events:["change"],methods:{setItem:function(a,b){var c,e=this._map,f=this._items,g=e[a];g?(c=g.value,g._value=b,g.notify("value"),this.fire("change",{action:"replace",items:[g],oldValue:c,newValue:b,oldItem:g,newItem:g})):(g=e[a]=new d(this,a),f.push(g),g._dict=this,g._value=b,this.notify("count"),this.fire("change",{action:"add",index:f.length-1,items:[g]}))},removeItem:function(a){var b=this._map;if(a in b){var c=b[a],d=this._items.indexOf(c);return delete b[a],d>=0&&this._items.splice(d,1),c._dict=null,this.notify("count"),this.fire("change",{action:"remove",items:[c]}),c}},clear:function(){var a=this.inherited();this.notify("count"),this.fire("change",{action:"clear",items:a})},monitor:function(a,b){if("string"==typeof a&&a.indexOf(",")>=0||"[object Array]"===Object.prototype.toString.call(a))return"string"==typeof a&&(a=a.replace(/\s/g,"").split(",")),this._monitor(a,b);"function"==typeof a&&(b=a,a=null);var c=this,d={map:{},get:function(a){return d.map[a]},set:function(b,c){if(!a||a===b){var e=d.get(b);e&&e(),c?d.map[b]=c:delete d.map[b]}},release:function(){var a,b=d.map;for(a in b)b[a]()},callback:function(c,d){return a?a===c?b(d):void 0:b(c,d)}},e=c.on("change",function(a,b){var c,e,f,g;switch(b.action){case"replace":case"add":for(c=0;c<b.items.length;c++)e=b.items[c],f=e.key(),g=d.callback(f,e.value()),d.set(f,g);break;case"remove":case"clear":for(c=0;c<b.items.length;c++)d.set(b.items[c].key(),null)}});return c.each(function(a,b){var c=d.callback(b,a.value());d.set(b,c)}),{release:function(){d.release(),e.release()}}},_monitor:function(a,b){var c=this,d={values:a.map(function(a){return c.getItem(a)}),affect:function(){b.apply(c,d.values)}},e=this.on("change",function(b,c){var e,f=!1;for(i=0;i<c.items.length;i++)item=c.items[i],key=item.key(),e=a.indexOf(key),e>=0&&(d.values[e]=item.value(),f=!0);f&&d.affect()});return{affect:d.affect,release:e.release}}}})}(nx),function(a){{var b=a.Iterable,c=Array.prototype,d=c.every,e=c.some,f=c.filter,g=c.map,h=c.reduce;a.define("nx.data.Query",a.Iterable,{methods:{init:function(a){this._iter=a,this.reset()},reset:function(){this._where=null,this._orderBy=null,this._unions=[],this._joins=[],this._begin=0,this._end=null},where:function(a){return this._where=a,this},orderBy:function(b,c){return this._orderBy=a.is(b,"Function")?c?function(a,c){return b(c,a)}:b:c?function(c,d){return a.compare(a.path(d,b),a.path(c,b))}:function(c,d){return a.compare(a.path(c,b),a.path(d,b))},this},groupBy:function(){throw new Error("Not Implemented")},distinct:function(){throw new Error("Not Implemented")},skip:function(a){return this._begin=a,this._end&&(this._end+=a),this},take:function(a){return this._end=this._begin+a,this},join:function(){throw this._join=function(){},new Error("Not Implemented")},select:function(b){var c=this.toArray();return a.is(b,"Function")?g.call(c,b):a.is(b,"String")?g.call(c,function(c){return a.path(c,b)}):a.is(b,"Array")?g.call(c,function(c){var d={};return a.each(b,function(b){a.path(d,b,a.path(c,b))}),d}):c},first:function(a){var b=this.toArray();if(!a)return b[0];for(var c=0,d=b.length;d>c;c++){var e=b[c];if(a(e))return e}},last:function(a){var b=this.toArray();if(!a)return b[b.length-1];for(var c=b.length-1;c>=0;c--){var d=b[c];if(a(d))return d}},all:function(a){return d.call(this.toArray(),a)},any:function(a){return e.call(this.toArray(),a)},max:function(){return h.call(this.toArray(),function(a,b){return a>b?a:b})},min:function(){return h.call(this.toArray(),function(a,b){return b>a?a:b})},sum:function(){return h.call(this.toArray(),function(a,b){return a+b})},average:function(){var a=this.toArray();return h.call(a,function(a,b){return a+b})/a.length},toArray:function(){var c=b.toArray(this._iter);return a.each(this._unions,function(a){c.concat(b.toArray(a))}),this._where&&(c=f.call(c,this._where)),this._orderBy&&(c=c.sort(this._orderBy)),c=this._end>0?c.slice(this._begin,this._end):c.slice(this._begin),this.reset(),c}},statics:{query:function(){var b,c={publics:{select:function(b,c){var d=[];if(a.is(b,"Array")&&a.is(c,"Function")){var e,f;for(e=0;e<b.length;e++)f=b[e],c(f)&&d.push(f)}return d},group:function(b,c){var d;if(a.is(c,"Function")){d={};var e,f,g;for(e=0;e<b.length;e++)f=c(b[e]),f&&"string"==typeof f&&(g=d[f]=d[f]||[],g.push(b[e]))}else d=b;return d},aggregate:function(b,c){var d,e=null;if(a.is(c,"Function"))if(a.is(b,"Array"))e=c(b);else{e=[];for(d in b)e.push(c(b[d],d))}return e}},privates:{aggregate:function(b,d){var e,f=null,g=null;return a.is(d,"Array")?("function"==typeof d[d.length-1]&&(g=d.pop()),f=d.length>1?d:d[0]):(f=d.map,g=d.aggregate),"string"==typeof f&&(f=f.replace(/\s/g,"").split(",")),a.is(f,"Array")&&f[0]&&"string"==typeof f[0]&&(f=function(a){return function(b){var c,d={};for(c=0;c<a.length;c++)d[a[c]]=b[a[c]];return JSON.stringify(d)}}(f)),e=c.publics.aggregate(c.publics.group(b,f),g)},mapping:function(b,c){var d,e;if(c===!0)e=EXPORT.clone(b);else if(a.is(c,"Function"))if(a.is(b,"Array"))for(e=[],d=0;d<b.length;d++)e.push(c(b[d],d));else e=c(b,0);else e=a.is(b,"Array")?b.slice():b;return e},orderby:function(b,c){return"string"==typeof c&&(c=c.replace(/^\s*(.*)$/,"$1").replace(/\s*$/,"").replace(/\s*,\s*/g,",").split(",")),a.is(c,"Array")&&c[0]&&"string"==typeof c[0]&&(c=function(a){return function(b,c){var d,e,f;if(!b&&!c)return 0;for(d=0;d<a.length;d++){if(e=a[d],f=/\sdesc$/.test(e),e=e.replace(/(\s+desc|\s+asc)$/,""),b[e]>c[e])return f?-1:1;if(c[e]>b[e])return f?1:-1}return 0}}(c)),c&&"function"==typeof c&&b.sort(c),b}},query:function(a,b){return 1==arguments.length&&(b=a,a=b.array),a?(b.select&&(a=c.publics.select(a,b.select)),b.aggregate&&(a=c.privates.aggregate(a,b.aggregate)),b.mapping&&(a=c.privates.mapping(a,b.mapping)),b.orderby&&(a=c.privates.orderby(a,b.orderby)),a):a}};for(b in c.publics)c.query[b]=c.publics[b];return c.query}()}})}}(nx),function(a){a.define("nx.data.SortedMap",{mixins:a.Observable,events:["change"],properties:{length:{get:function(){return this._data.length}}},methods:{init:function(b){b=b||[];var c=this.__validateData(b);if(!c)throw Error("init data are invalid!");this._data=b,this._map={};var d=this;a.each(b,function(a){var b=d._map;b[a.key]=a})},__validateData:function(b){var c=!0;return a.is(b,"Array")?a.each(b,function(a){return void 0===a.key||void 0===a.value?(c=!1,!1):void 0}):c=!1,c},add:function(a,b,c){var d={key:a,value:b};return this._map[a]=d,void 0===c&&(c=this._data.length),this._data.splice(c,0,d),this.notify("length"),this.fire("change",{action:"add",index:c,key:a,value:b}),b},remove:function(a){var b,c;if(c=this._map[a],void 0!==c){var d=this._data.indexOf(c);if(!(d>-1))throw'key:"'+a+'" has been found in the _map but not exists in the _data!';b=c.value,this._data.splice(d,1),delete this._map[a],this.notify("length"),this.fire("change",{action:"remove",index:d,key:a,value:b})}return b},removeAt:function(a){var b,c=this.__getItemAt(a);return void 0!==c&&(b=c.value,this._data.splice(a,1),delete this._map[c.key],this.notify("length"),this.fire("change",{action:"remove",index:a,key:c.key,value:b})),b},__getItemAt:function(a){var b=this._data[a>-1?a:this._data.length+a];return b},getKeyAt:function(a){var b,c=this.__getItemAt(a);return c&&(b=c.key),b},indexOf:function(a){var b=this._map[a],c=-1;return void 0!==b&&(c=this._data.indexOf(b)),c},getValue:function(a){var b,c=this._map[a];return void 0!==c&&(b=c.value),b},setValue:function(a,b){var c=this._map[a];if(void 0===c)throw Error('the key:"'+a+'" dos not exists!');var d=c.value,e=this._data.indexOf(c);return c.value=b,this.fire("change",{action:"set",index:e,key:a,value:b,oldValue:d}),b},getValueAt:function(a){var b,c=this.__getItemAt(a);return void 0!==c&&(b=c.value),b},setValueAt:function(a,b){var c=this.__getItemAt(a);if(void 0!==c){var d=c.value;c.value=b,this.fire("change",{action:"set",index:a,key:c.key,value:b,oldValue:d})}return b},setIndex:function(a,b){var c=this.indexOf(a),d=!0;if(-1!=c&&b!==c){var e=this._data.splice(c,1);this._data.splice(b,0,e[0]),this.fire("change",{action:"reorder",index:b,oldIndex:c,key:a})}else d=!1;return d},sort:function(a){this._data.sort(function(b,c){return a.call(null,b.key,b.value,c.key,c.value)})},toArray:function(){for(var b=this._data.slice(0),c=0,d=b.length;d>c;c++)b[c]=a.clone(b[c]);return b},each:function(a){for(var b=this.toArray(),c=0,d=b.length;d>c;c++){var e=b[c];a.call(this,e.key,e.value,c)}},__each__:function(a){for(var b=this.toArray(),c=0,d=b.length;d>c;c++){var e=b[c];a.call(this,e.key,e.value)}}}})}(nx),function(a){function b(a){var b,c=new RegExp(a+"(\\d+\\.\\d+)");return(b=c.exec(j))?parseFloat(b[1]):0}var c,d=a.global,e=d.document,f=e.documentMode||0,g=e.compatMode,h=d.navigator,i=d.location,j=h.userAgent.toLowerCase(),k=i.protocol.toLowerCase(),l=e.createElement("div"),m=l.style,n=(c=j.match(/msie (\d+)\./))&&c[1];m.cssText="opacity:.55";var o={webkit:["webkit","-webkit-"],gecko:["Moz","-moz-"],presto:["O","-o-"],trident:["ms","-ms-"]},p={windows:/windows|win32/,macintosh:/macintosh|mac_powerpc/,linux:/linux/},q={addEventListener:!!e.addEventListener,dispatchEvent:!!e.dispatchEvent,getBoundingClientRect:!!e.documentElement.getBoundingClientRect,onmousewheel:"onmousewheel"in e,XDomainRequest:!!d.XDomainRequest,crossDomain:!(!d.XDomainRequest&&!d.XMLHttpRequest),getComputedStyle:"getComputedStyle"in d,iePropertyChange:!!(n&&9>n),w3cChange:!n||n>8,w3cFocus:!n||n>8,w3cInput:!n||n>9,innerText:"innerText"in l,firstElementChild:"firstElementChild"in l,cssFloat:"cssFloat"in m,opacity:/^0.55$/.test(m.opacity),filter:"filter"in m,classList:!!l.classList,removeProperty:"removeProperty"in m,touch:"ontouchstart"in e.documentElement},r={firefox:function(){return{name:"gecko",version:b("rv:")}},opera:function(){var a=b("presto\\/"),c="presto";return a||(c="webkit",a=b("webkit\\/")),{name:c,version:a}},ie:function(){return{name:"trident",version:b("trident\\/")||4}},"default":function(){return{name:"webkit",version:b("webkit\\/")}}},s=function(){var a;for(a in p)if(p[a].test(j))break;return{name:a}}(),t=function(){var a,c,d,e,f=0;for(a in u)if(c=u[a],d=new RegExp(c.is).test(j),e=new RegExp(c.exclude).test(j),d&&!e){j.indexOf("opr/")>-1&&(a="opera",c.version="\\bopr/"),f=b(c.version);break}return{name:a,version:f}}(),u={ie:{is:"msie",exclude:"opera",version:"msie "},firefox:{is:"gecko",exclude:"webkit",version:"\\bfirefox/"},chrome:{is:"\\bchrome\\b",exclude:null,version:"\\bchrome/"},safari:{is:"safari",exclude:"\\bchrome\\b",version:"version/"},opera:{is:"opera",exclude:null,version:"version/"}},v={BACKSPACE:8,TAB:9,CLEAR:12,ENTER:13,SHIFT:16,CTRL:17,ALT:18,META:"chrome"===t.name||"webkit"===t.name||"safari"===t.name?91:224,PAUSE:19,CAPS_LOCK:20,ESCAPE:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT_ARROW:37,UP_ARROW:38,RIGHT_ARROW:39,DOWN_ARROW:40,INSERT:45,DELETE:46,HELP:47,LEFT_WINDOW:91,RIGHT_WINDOW:92,SELECT:93,NUMPAD_0:96,NUMPAD_1:97,NUMPAD_2:98,NUMPAD_3:99,NUMPAD_4:100,NUMPAD_5:101,NUMPAD_6:102,NUMPAD_7:103,NUMPAD_8:104,NUMPAD_9:105,NUMPAD_MULTIPLY:106,NUMPAD_PLUS:107,NUMPAD_ENTER:108,NUMPAD_MINUS:109,NUMPAD_PERIOD:110,NUMPAD_DIVIDE:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,F13:124,F14:125,F15:126,NUM_LOCK:144,SCROLL_LOCK:145},w=(r[t]||r["default"])();a.define("nx.Env",{"static":!0,properties:{documentMode:{value:f},compatMode:{value:g},userAgent:{value:j},strict:{value:"CSS1Compat"===g},secure:{value:0===k.indexOf("https")},os:{value:s},prefix:{value:o[w.name]},engine:{value:w},browser:{value:t},keyMap:{value:v}},methods:{support:function(a){return q[a]},getSupportMap:function(){return q},registerSupport:function(a,b){a in q||(q[a]=b)}}})}(nx),function(a){var b=a.global,c=b.document,d=a.Env,e=c.createElement("div"),f=e.style,g=/width|height|top|right|bottom|left|size|margin|padding/i,h=/[c-x%]/,i="px",j=/(?:^|-)([a-z])/g,k=/([A-Z])/g,l={lineHeight:!0,zIndex:!0,zoom:!0},m={"float":"cssFloat"},n={},o={};a.ready=function(c){var d;if("string"==typeof c&&(c=a.path(b,c)),"function"==typeof c){if(c.__classId__){var e=a.define(a.ui.Application,{properties:{comp:{value:function(){return new c}}},methods:{start:function(){this.comp().attach(this)},stop:function(){this.comp().detach(this)}}});d=function(){var a=new e;a.start()}}else d=c;window.addEventListener("load",d)}};a.define("nx.Util",{"static":!0,methods:{getCssText:function(b){var c=[""];return a.each(b,function(a,b){c.push(this.getStyleProperty(b,!0)+":"+this.getStyleValue(b,a))},this),c.join(";")},getStyleValue:function(a,b){var c=this.getStyleProperty(a),d=b;return g.test(c)&&(h.test(b)||l[c]||(d+=i)),d},getStyleProperty:function(a,b){if(b){if(a in o)return o[a]}else if(a in n)return n[a];var c=m[a]||this.lowerCamelCase(a);return c in f?b&&(c=this.deCamelCase(a),o[a]=c):b?(c=d.prefix()[1]+a,o[a]=c):(c=d.prefix()[0]+this.upperCamelCase(a),n[a]=c),c},lowerCamelCase:function(a){var b=this.upperCamelCase(a);return b.charAt(0).toLowerCase()+b.substring(1)},upperCamelCase:function(a){return a.replace(j,function(a,b){return b.toUpperCase()})},deCamelCase:function(a){return a.replace(k,function(a,b){return"-"+b.toLowerCase()})},capitalize:function(a){return a.charAt(0).toUpperCase()+a.slice(1)}}})}(nx),function(a){{var b=a.data.Collection;a.define("nx.dom.Node",{methods:{init:function(a){this.$dom=a},compare:function(a){return a&&this.$dom===a.$dom?0:-1},isElement:function(){return 1===this.$dom.nodeType},index:function(){var a,b=0;if(null!==this.parentNode())for(;null!==(a=this.previousSibling());)++b;else b=-1;return b},childAt:function(a){var b=null;if(a>=0)for(b=this.firstChild();b&&--a>=0;){b=b.nextSibling();break}return b},contains:function(a){return this.$dom&&this.$dom.contains(a.$dom)},firstChild:function(){return new this.constructor(this.$dom.firstElementChild)},lastChild:function(){return new this.constructor(this.$dom.lastElementChild)},previousSibling:function(){return new this.constructor(this.$dom.previousElementSibling)},nextSibling:function(){return new this.constructor(this.$dom.nextElementSibling)},parentNode:function(){return new this.constructor(this.$dom.parentNode)},children:function(){var c=new b;return a.each(this.$dom.children,function(a){c.add(new this.constructor(a))},this),c},cloneNode:function(a){return new this.constructor(this.$dom.cloneNode(a))},hasChild:function(a){return a.$dom.parentNode==this.$dom},appendChild:function(a){this.$dom.appendChild(a.$dom)},insertBefore:function(a,b){this.$dom.insertBefore(a.$dom,b.$dom)},removeChild:function(a){this.hasChild(a)&&this.$dom.removeChild(a.$dom)},empty:function(){this.children().each(function(a){this.removeChild(a)},this)}}})}}(nx),function(a){a.define("nx.dom.Text",a.dom.Node)}(nx),function(a){function b(a,b){return(" "+a.className+" ").indexOf(" "+b+" ")}var c=a.global,d=c.document,e=a.Env,f=a.Util,g=/^t(?:able|d|h)$/i,h=/\s+/,i={thin:"2px",medium:"4px",thick:"6px"},j="gecko"===e.engine().name,k="margin",l="padding",m="border",n="position",o="fixed",p=a.data.Collection,q={value:{set:function(a,b){var c=a.type;switch(c){case"checkbox":case"radio":a.checked=!!b;break;default:a.value=b}},get:function(a){var b=a.type,c=a.value;switch(b){case"checkbox":case"radio":c=!!a.checked;break;default:c=a.value}return c}}},r={"class":"className","for":"htmlFor"},s={disabled:"disabled",readonly:"readonly",checked:"checked"};!function(){a.each(r,function(a,b){q[b]={set:function(b,c){b[a]=c},get:function(b){return b[a]}}}),a.each(s,function(a,b){q[b]={set:function(c,d){d?c.setAttribute(b,b):c.removeAttribute(b),c[a]=!!d},get:function(b){return!!b[a]}}})}();var t=a.define("nx.dom.Element",a.dom.Node,{methods:{get:function(a){return"text"===a?this.getText():"html"==a?this.getHtml():this.getAttribute(a)},set:function(a,b){"text"===a?this.setText(b):"html"==a?this.setHtml(b):this.setAttribute(a,b)},select:function(a){var b=this.$dom.querySelector(a);return new t(b)},selectAll:function(a){for(var b=this.$dom.querySelectorAll(a),c=0,d=b[c],e=new p;d;c++)d=b[c],e.add(new t(d));return e},focus:function(){this.$dom.focus()},blur:function(){this.$dom.blur()},show:function(){this.setAttribute("nx-status","")},hide:function(){this.setAttribute("nx-status","hidden")},hasClass:function(c){var d=this.$dom;return a.Env.support("classList")?this.$dom.classList.contains(c):b(d,c)>-1},setClass:function(a,b){b?this.addClass(a):this.removeClass(a)},addClass:function(){var b=this.$dom,c=arguments,d=b.classList;if(d){if(a.Env.support("classList"))return 1===c.length&&c[0].search(h)>-1&&(c=c[0].split(h)),d.add.apply(d,c);if(!this.hasClass(c[0])){var e=b.className;return b.className=e?e+" "+c[0]:c[0]}}},removeClass:function(){var c=this.$dom;if(c)if(a.Env.support("classList")){var d=this.$dom.classList;if(d)return d.remove.apply(d,arguments)}else{var e=c.className,f=b(c,arguments[0]),g=arguments[0];f>-1&&(0===f?e!==g&&(g+=" "):g=" "+g,c.className=e.replace(g,""))}},toggleClass:function(b){this.$dom;return a.Env.support("classList")?this.$dom.classList.toggle(b):void(this.hasClass(b)?this.removeClass(b):this.addClass(b))},getDocument:function(){var a=this.$dom,b=d;return a&&(b=9===a.nodeType?a:a.ownerDocument||a.document),b},getWindow:function(){var a=this.getDocument();return a.defaultView||a.parentWindow||c},getRoot:function(){return e.strict()?d.documentElement:d.body},getBound:function(){var a=this.$dom.getBoundingClientRect(),b=this.getRoot(),c=b.clientTop||0,d=b.clientLeft||0;return{top:a.top-c,right:a.right,bottom:a.bottom,left:a.left-d,width:a.width,height:a.height}},margin:function(a){return this._getBoxWidth(k,a)},padding:function(a){return this._getBoxWidth(l,a)},border:function(a){return this._getBoxWidth(m,a)},getOffset:function(){var a=this.$dom.getBoundingClientRect(),b=this.getRoot(),d=b.clientTop||0,e=b.clientLeft||0;return{top:a.top+(c.pageYOffset||b.scrollTop)-d,left:a.left+(c.pageXOffset||b.scrollLeft)-e}},setOffset:function(a){var b=this.getStyle(n),d=a,e={left:Math.max(c.pageXOffset||0,root.scrollLeft),top:Math.max(c.pageYOffset||0,root.scrollTop)};b===o&&(d={left:parseFloat(d)+e.scrollX,top:parseFloat(d)+e.scrollY}),this.setStyles(d)},hasStyle:function(a){var b=this.$dom.style.cssText;return b.indexOf(a+":")>-1},getStyle:function(a,b){var c=f.getStyleProperty(a);if(b)return this.$dom.style[c];var d=getComputedStyle(this.$dom,null);return d[c]||""},setStyle:function(a,b){var c=f.getStyleProperty(a);this.$dom.style[c]=f.getStyleValue(a,b)},removeStyle:function(a){var b=f.getStyleProperty(a,!0);this.$dom.style.removeProperty(b)},setStyles:function(a){this.$dom.style.cssText+=f.getCssText(a)},getAttribute:function(a){var b=q[a];return b?b.get?b.get(this.$dom):this.$dom.getAttribute(b):this.$dom.getAttribute(a)},setAttribute:function(a,b){if(null!==b&&void 0!==b){var c=q[a];return c?c.set?c.set(this.$dom,b):this.$dom.setAttribute(c,b):this.$dom.setAttribute(a,b)}},removeAttribute:function(a){this.$dom.removeAttribute(r[a]||a)},getAttributes:function(){var b={};return a.each(this.$dom.attributes,function(a){b[a.name]=a.value}),b},setAttributes:function(b){a.each(b,function(a,b){this.setAttribute(b,a)},this)},getText:function(){return this.$dom.textContent},setText:function(a){this.$dom.textContent=a},getHtml:function(){return this.$dom.innerHTML},setHtml:function(a){this.$dom.innerHTML=a},addEventListener:function(a,b,c){this.$dom.addEventListener(a,b,c||!1)},removeEventListener:function(a,b,c){this.$dom.removeEventListener(a,b,c||!1)},_getBoxWidth:function(a,b){var c,d,e=this.$dom;switch(a){case l:case k:d=this.getStyle(a+"-"+b),c=parseFloat(d);break;default:d=this.getStyle("border-"+b+"-width"),j&&g.test(e.tagName)&&(d=0),c=parseFloat(d)||i[d]}return c||0}}})}(nx),function(a){var b=a.data.Collection;a.define("nx.dom.Fragment",a.dom.Node,{methods:{children:function(){var c=new b;return a.each(this.$dom.childNodes,function(a){c.add(new this.constructor(a))},this),c}}})}(nx),function(a){var b=a.dom.Element,c=a.dom.Fragment,d=a.dom.Text,e=a.global,f=e.document,g=a.Util,h={topFrame:null,hasReady:!1,queue:[]},i={setHasReady:function(a){h.hasReady=a},getHasReady:function(){return h.hasReady},addQueue:function(a){h.queue.push(a)},clearQueue:function(){h.queue.length=0},execQueue:function(){for(var a=0,b=h.queue.length;b>a;a++)h.queue[a]()},setTopFrame:function(a){h.topFrame=a},getTopFrame:function(){return h.topFrame}},j={initReady:function(a){return i.addQueue(a),j.isReady()},fireReady:function(){i.execQueue(),i.clearQueue()},setTopFrame:function(){try{i.setTopFrame(null===e.frameElement&&f.documentElement)}catch(a){}},doScrollCheck:function(){var a=i.getTopFrame();if(a&&a.doScroll){try{a.doScroll("left")}catch(b){return setTimeout(j.doScrollCheck,50)}j.fireReady()}},isOnLoad:function(a){return"load"===(a||e.event).type},isReady:function(){return i.getHasReady()||"complete"===f.readyState},detach:function(){f.addEventListener?(f.removeEventListener("DOMContentLoaded",j.completed,!1),e.removeEventListener("load",j.completed,!1)):(f.detachEvent("onreadystatechange",j.completed),e.detachEvent("onload",j.completed))},w3cReady:function(){f.addEventListener("DOMContentLoaded",j.completed,!1),e.addEventListener("load",j.completed,!1)},ieReady:function(){f.attachEvent("onreadystatechange",j.completed),e.attachEvent("onload",j.completed),j.setTopFrame(),j.doScrollCheck()},readyMain:function(){return"complete"===f.readyState?setTimeout(j.readyMain):void(f.addEventListener?j.w3cReady():j.ieReady())},completed:function(a){(j.isReady()||j.isOnLoad(a))&&(i.setHasReady(!0),j.detach(),j.fireReady())}},k={svg:"http://www.w3.org/2000/svg",xlink:"http://www.w3.org/1999/xlink",xhtml:"http://www.w3.org/1999/xhtml"},l=a.define("nx.dom.Document",{"static":!0,properties:{cssStyleSheet:{get:function(){var a=this._cssStyleSheet;if(!a){var b=f.getElementById("nx-style")||this._createStyleNode();a=this._cssStyleSheet=this._getCSSStyleSheetInstance(b)}return a}},root:{get:function(){return f.documentElement}},body:{get:function(){return new b(f.body)}},html:{get:function(){return new b(f.getElementsByTagName("html")[0])}}},methods:{init:function(){this.__listeners__={},this._documentListeners={}},on:function(a,b,c){var d=this.__listeners__,e=d[a]=d[a]||[{owner:null,handler:null,context:null}];e.push({owner:this,handler:b,context:c||this}),this._attachDocumentListeners(a);var f;return{release:function(){f.off(a,b,c)}}},off:function(a,b,c){var d,e=this.__listeners__[a];if(e)if(b){c=c||this;for(var f=0,g=e.length;g>f;f++)if(d=e[f],d.handler==b&&d.context==c){e.splice(f,1);break}}else e.length=1},upon:function(a,b,c){var d=this.__listeners__,e=d[a]=d[a]||[{owner:null,handler:null,context:null}];e[0]={owner:this,handler:b,context:c},this._attachDocumentListeners(a)},fire:function(a,b){var c,d,e=this.__listeners__[a];if(e){e=e.slice();for(var f=0,g=e.length;g>f;f++)if(c=e[f],c&&c.handler&&(d=c.handler.call(c.context,c.owner,b),d===!1))return!1}},registerNS:function(a,b){k[a]=b},resolveNS:function(a){return k[a]},createFragment:function(){return new c(f.createDocumentFragment())},createElement:function(a){return new b(f.createElement(a))},createText:function(a){return new d(f.createTextNode(a))},createElementNS:function(a,c){var d=l.resolveNS(a);if(d)return new b(f.createElementNS(d,c));throw new Error("The namespace "+a+" is not registered.")},wrap:function(b){return a.is(b,Node)?b:void 0},docRect:function(){var a=this.root(),b=e.innerHeight||0,c=e.innerWidth||0,d=a.scrollWidth,f=a.scrollHeight,g={left:Math.max(e.pageXOffset||0,a.scrollLeft),top:Math.max(e.pageYOffset||0,a.scrollTop)};return d=Math.max(d,c),f=Math.max(f,b),{width:c,height:b,scrollWidth:d,scrollHeight:f,scrollX:g.left,scrollY:g.top}},ready:function(a){j.initReady(a)?setTimeout(j.fireReady,1):j.readyMain()},addRule:function(a,b,c){return this._ruleAction("add",[a,b,c])},insertRule:function(a,b){return this._ruleAction("insert",[a,b])},deleteRule:function(a){return this._ruleAction("delete",[a])},removeRule:function(a,b){return this._ruleAction("remove",[a,b])},addRules:function(b){a.each(b,function(a,b){this.addRule(b,g.getCssText(a),null)},this)},deleteRules:function(){for(var a=this.cssStyleSheet().rules.length;a--;)this.deleteRule(0)},_ruleAction:function(a,b){var c=this.cssStyleSheet(),d=b.length-1;return b[d]=this._defRuleIndex(c,b[d]),c[a+"Rule"].apply(c,b),this._defRuleIndex(c,null)},_defRuleIndex:function(a,b){return null===b?a.rules.length:b},_createStyleNode:function(){var a=f.createElement("style");return a.type="text/css",a.id="nx-style",(f.head||f.getElementsByTagName("head")[0]||f.documentElement).appendChild(a),a},_getCSSStyleSheetInstance:function(a){var b,c=f.styleSheets,d=null;for(b in c)if(d=c[b],d.ownerNode===a)break;return d},_attachDocumentListeners:function(a){var b=this._documentListeners;if(!(a in b)){var c=this,d=b[a]=function(b){c.fire(a,b)};f.addEventListener(a,d)}}}})}(nx),function(a){function b(b){if(a.is(b,"String")){var c=b.indexOf("{"),d=b.indexOf("}");if(c>=0&&d>c)return b.slice(c+1,d)}return null}function c(c,d,e,f,h){if(a.is(e,g))c.setBinding(d,a.extend(e.gets(),{bindingType:"property"}));else{var i=b(e);null!==i?"#"===i[0]?c.setBinding(d,i.slice(1)+",bindingType=property",h||c):c.setBinding(d,(i?"model."+i:"model")+",bindingType=property",f||c):c.set(d,e)}}function d(c,d,e,f,h){if(a.is(e,g))c.setBinding(d,e.gets());else{var i=b(e);null!==i?"#"===i[0]?c.setBinding(d,i.slice(1)+",bindingType=event",h||c):c.setBinding(d,(i?"model."+i:"model")+",bindingType=event",f||c):c.on(d,e,h||c)}}function e(b,g){if(b||0===b){var h;if(a.is(b,"Array"))h=new m("fragment"),a.each(b,function(a){e(a,g).attach(h)});else if(a.is(b,"Object")){var i=b.type;if(i){var j=a.is(i,"String")?a.path(f,i):i;if(!a.is(j,"Function"))throw new Error('Component "'+i+'" is not defined.');h=new j}else h=new m(b.tag||"div");var k=b.name,l=b.props,n=b.events,o=b.content;k&&h.register("@name",k),g&&h.owner(g),a.each(n,function(a,b){d(h,b,a,h,g)}),a.each(l,function(b,d){a.is(b,"Array")&&a.each(b,function(b){a.is(b,"Object")&&(b.__owner__=g)}),a.is(b,"Object")&&(b.__owner__=g),c(h,d,b,h,g)}),void 0!==o&&c(h,"content",o,h,g)}else h=new m("text",b);return h}return null}var f=a.global,g=a.Binding,h=a.data.Collection,i=a.dom.Document,j=a.define("nx.ui.AbstractComponent",a.Observable,{"abstract":!0,statics:{createComponent:e},events:["enter","leave","contententer","contentleave"],properties:{content:{get:function(){return this._content},set:function(b){a.each(this._content.toArray(),function(a){a.destroy()}),a.is(b,j)?b.attach(this):a.is(b,"Array")?a.each(b,function(a){e(a,this.owner()).attach(this)},this):(b||0===b)&&e(b,this.owner()).attach(this)}},model:{get:function(){return this._model_was_set?this._model:this._inheritedModel},set:function(b,c){return c&&this._model_was_set?!1:(c?this._inheritedModel=b:(this._model=b,this._model_was_set=!0),void this._content.each(function(c){a.is(c,"String")||c.model(b,!0)}))}},owner:{value:null},parent:{value:null}},methods:{init:function(){this.inherited(),this._resources={},this._content=new h},attach:function(b,c){if(this.detach(),a.is(b,j)){var d=this.resolve("@name"),e=this.owner()||b;d&&e.register(d,this),this.onAttach(b,c),b.onChildAttach(this,c),c>=0?b.content().insert(this,c):b.content().add(this),this.parent(b),this.owner(e),b.fire("contententer",{content:this,owner:e}),this.fire("enter",{parent:b,owner:e}),this._attached=!0}},detach:function(){if(this._attached){var a=this.resolve("@name"),b=this.owner(),c=this.parent();a&&b.unregister(a),this.onDetach(c),c.onChildDetach(this),c.content().remove(this),this.parent(null),this.owner(null),c.fire("contentleave",{content:this,owner:b}),this.fire("leave",{parent:c,owner:b}),this._attached=!1}},register:function(a,b,c){var d=this._resources;(d&&!(a in d)||c)&&(d[a]=b)},unregister:function(a){var b=this._resources;b&&a in b&&delete b[a]},resolve:function(a){var b=this._resources;return b&&a in b?b[a]:void 0},getContainer:function(a){if("fragment"===this.resolve("@tag")){var b=this.parent();if(b)return b.getContainer(a)}return this.resolve("@root")},dispose:function(){this.inherited(),this._content&&this._content.each(function(a){a.dispose()}),this._resources=null,this._content=null,this._model=null,this._inheritedModel=null,this.dispose=function(){}},destroy:function(){this.detach(),this.inherited()},onAttach:function(){},onDetach:function(){},onChildAttach:function(){},onChildDetach:function(){}}}),k=a.define(a.Observable,{methods:{init:function(a){this.inherited(),this._comp=a,this._classList=[]},has:function(a){return a in this._classList},get:function(a){return this._classList[a]},set:function(a,b){this._classList[a]=b,this._comp.resolve("@root").set("class",this._classList.join(" "))},hasClass:function(a){return this._classList.indexOf(a)>=0},addClass:function(a){this.hasClass(a)||(this._classList.push(a),this._comp.resolve("@root").set("class",this._classList.join(" ")))},removeClass:function(a){var b=this._classList.indexOf(a);b>=0&&(this._classList.splice(b,1),this._comp.resolve("@root").set("class",this._classList.join(" ")))},toggleClass:function(a){var b=this._classList.indexOf(a);b>=0?this._classList.splice(b,1):this._classList.push(a),this._comp.resolve("@root").set("class",this._classList.join(" "))},dispose:function(){this.inherited(),this._comp=null,this._classList=null}}}),l=a.define(a.Observable,{methods:{init:function(a){this.inherited(),this._comp=a},get:function(a){return this._comp.resolve("@root").getStyle(a)},set:function(a,b){this._comp.resolve("@root").setStyle(a,b)},dispose:function(){this.inherited(),this._comp=null}}}),m=a.define(j,{"final":!0,events:["generated"],properties:{"class":{get:function(){return this._class},set:function(b){var d=this._class;a.is(b,"Array")?a.each(b,function(a,e){c(d,""+e,a,this,b.__owner__||this.owner())},this):a.is(b,"Object")?(b.add&&this._class.addClass(b.add),b.remove&&this._class.addClass(b.remove),b.toggle&&this._class.addClass(b.toggle)):this.resolve("@root").set("class",b)
-}},style:{get:function(){return this._style},set:function(b){if(a.is(b,"Object")){var d=this._style;a.each(b,function(a,e){c(d,e,a,this,b.__owner__||this.owner())},this)}else this.resolve("@root").set("style",b)}},template:{get:function(){return this._template},set:function(a){this._template=a,this._generateContent()}},items:{get:function(){return this._items},set:function(a){var b=this._items;b&&b.off&&b.off("change",this._onItemsChange,this),b=this._items=a,b&&b.on&&b.on("change",this._onItemsChange,this),this._generateContent()}},value:{get:function(){return this.resolve("@root").get("value")},set:function(a){return this.resolve("@root").set("value",a)},binding:{direction:"<>"}},states:{value:null},dom:{get:function(){return this.resolve("@root")}}},methods:{init:function(a,b){if(this.inherited(),this._domListeners={},this._resources={},this._content=new h,this._class=new k(this),this._style=new l(this),a){var c=a.split(":");if(2===c.length){var d=c[0];a=c[1],this.register("@ns",d),this.register("@root",i.createElementNS(d,a))}else"text"===a?this.register("@root",i.createText(b)):"fragment"===a?this.register("@root",i.createFragment()):this.register("@root",i.createElement(a));this.register("@tag",a)}switch(a){case"input":case"textarea":this.on("change",function(a,b){switch(b.target.type){case"checkbox":case"radio":this.notify("checked");break;default:this.notify("value")}},this),this.on("input",function(){this.notify("value")},this);break;case"select":this.on("change",function(){this.notify("selectedIndex"),this.notify("value")},this)}},get:function(a){return this.has(a)||a.indexOf(":")>=0?this.inherited(a):this.resolve("@root").get(a)},set:function(a,b){this.has(a)||a.indexOf(":")>=0?this.inherited(a,b):(this.resolve("@root").set(a,b),this.notify(a))},on:function(a,b,c){return this._attachDomListener(a),this.inherited(a,b,c)},upon:function(a,b,c){return this._attachDomListener(a),this.inherited(a,b,c)},dispose:function(){var b=this.resolve("@root");b&&a.each(this._domListeners,function(a,c){":"===c.charAt(0)?b.removeEventListener(c.slice(1),a,!0):b.removeEventListener(c,a)}),this.items(null),this._class.dispose(),this._style.dispose(),this.inherited(),this._domListeners=null},onAttach:function(b,c){var d=this.resolve("@root");if(d){var e=b.getContainer(this);if(c>=0){var f=b.content().getItem(c);f&&"fragment"===f.resolve("@tag")&&(f=f.content().getItem(0)),f?e.insertBefore(d,f.resolve("@root")):e.appendChild(d)}else e.appendChild(d);var g=this.states(),h=null;if(g&&(h=g.enter),h){var i=d.$dom.style.cssText,j="all "+(h.duration||500)+"ms";d.setStyles(a.extend({transition:j},h)),this.upon("transitionend",function(){d.removeStyle("transition")}),setTimeout(function(){d.$dom.style.cssText=i+";transition: "+j},10)}}},onDetach:function(b){var c=this.resolve("@root");if(c){var d=this.resolve("@tag"),e=this;if("fragment"===d)a.each(e.content(),function(a){c.appendChild(a.resolve("@root"))});else{var f=this.states(),g=null;if(f&&(g=f.leave),g){var h=c.$dom.style.cssText,i="all "+(g.duration||500)+"ms";c.setStyle("transition",i),setTimeout(function(){c.setStyles(g)},10),this.upon("transitionend",function(){c.$dom.style.cssText=h,b.getContainer(this).removeChild(c)})}else b.getContainer(this).removeChild(c)}}},_attachDomListener:function(a){var b=this._domListeners;if(!(a in b)){var c=this,d=this.resolve("@root"),e=b[a]=function(b){c.fire(a,b)};":"===a.charAt(0)?d.addEventListener(a.slice(1),e,!0):d.addEventListener(a,e)}},_generateContent:function(){var b=this._template,c=this._items;a.each(this._content.toArray(),function(a){a.detach(),setTimeout(function(){a.dispose()},600)}),b&&c&&(a.each(c,function(a){var c=e(b,this.owner());c.model(a),c.attach(this)},this),this.fire("generated"))},_onItemsChange:function(b,c){var d=this._template,f=c.action,g=c.index;if(g=g>=0?g:-1,"add"===f)a.each(c.items,function(a,b){var c=e(d,this.owner());c.model(a),c.attach(this,g+b)},this);else if("remove"===f)a.each(c.items,function(b){a.each(this.content().toArray(),function(a){a.model()===b&&a.detach()},this)},this);else if("replace"===f);else if("sort"===f){var h=c.comparator,i=this.content().toArray().sort(function(a,b){return h(a.model(),b.model())});a.each(i,function(a){a.attach(this)},this)}else this._generateContent()}}})}(nx),function(a){var b=a.ui.AbstractComponent;a.define("nx.ui.Component",b,{properties:{model:{get:function(){return void 0===this._model?this._inheritedModel:this._model},set:function(b,c){c?this._inheritedModel=b:this._model=b;var d=this.view();d&&d.model(b,!0);var e=this._content;e&&e.each(function(c){a.is(c,"String")||c.model(b,!0)})}},"class":{get:function(){return this.view().get("class")},set:function(a){this.view().set("class",a)}},style:{get:function(){return this.view().style()},set:function(a){this.view().style(a)}},dom:{get:function(){return this.resolve("@root")}}},methods:{init:function(){this.inherited();var c=this["@view"];if(a.is(c,"Function")){for(var d,e=this.constructor;e&&(e=e.__super__,!(d=e["@view"])););c=c.call(this,a.clone(d,!0))}if(c){var f=b.createComponent(c,this);this.register("@root",f.resolve("@root")),this.register("@tag",f.resolve("@tag")),this.register("@comp",f)}},view:function(a){return this.resolve(a||"@comp")},get:function(a){return this.has(a)?this.inherited(a):this.view().get(a)},set:function(a,b){this.has(a)?this.inherited(a,b):(this.view().set(a,b),this.notify(a))},onAttach:function(a,b){this.view().onAttach(a,b)},onDetach:function(){this.view().onDetach(this.parent())},on:function(a,b,c){return this.can(a)?this.inherited(a,b,c):this.view().on(a,b,c)},upon:function(a,b,c){this.can(a)?this.inherited(a,b,c):this.view().upon(a,b,c)},off:function(a,b,c){this.can(a)?this.inherited(a,b,c):this.view().off(a,b,c)},dispose:function(){var a=this.view();a&&a.dispose(),this.inherited()}}})}(nx),function(a){var b=(a.global,a.dom.Document);a.define("nx.ui.Application",a.ui.AbstractComponent,{properties:{container:{}},methods:{init:function(){this.inherited();var c=this.start,d=this.stop,e=this;this.start=function(d){return b.ready(function(){a.app=e,c.call(e,d)}),this},this.stop=function(){a.app=null,d.call(e)},this._globalListeners={}},start:function(){throw new Error('Method "start" is not implemented')},stop:function(){throw new Error('Method "stop" is not implemented')},getContainer:function(){return this.container()?new a.dom.Element(this.container()):b.body()},on:function(a,b,c){return this.can(a)||this._attachGlobalListeners(a),this.inherited(a,b,c)},upon:function(a,b,c){this.can(a)||this._attachGlobalListeners(a),this.inherited(a,b,c)},_attachGlobalListeners:function(a){var b=this._globalListeners;if(!(a in b)){var c=this,d=b[a]=function(b){c.fire(a,b)};window.addEventListener(a,d)}}}})}(nx),function(a){a.define("nx.util",{"static":!0,methods:{uuid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(a){var b=16*Math.random()|0,c="x"==a?b:3&b|8;return c.toString(16)}).toUpperCase()},without:function(a,b){for(var c;-1!=(c=a.indexOf(b));)a.splice(c,1);return a},find:function(a,b,c){var d;return a.some(function(a,e,f){return b.call(c||this,a,e,f)?(d=a,!0):void 0}),d},uniq:function(b,c,d){var e=c?b.map(c.bind(d||this)):b,f=[];return a.each(e,function(a,c){-1==f.indexOf(a)&&f.push(b[c])}),f},indexOf:function(a,b){return a.indexOf(b)},setProperty:function(b,c,d,e){void 0!==d&&(a.is(d,"String")?"model"==d.substr(0,5)?b.setBinding(c,d+",direction=<>",b):"{#"==d.substr(0,2)?b.setBinding(c,"owner."+d.substring(2,d.length-1)+",direction=<>",e):"{"==d.substr(0,1)?b.setBinding(c,"owner.model."+d.substring(1,d.length-1),e):b.set(c,d):b.set(c,d))},loadScript:function(a,b){var c=document.createElement("script");c.type="text/javascript",c.readyState?c.onreadystatechange=function(){("loaded"==c.readyState||"complete"==c.readyState)&&(c.onreadystatechange=null,b())}:c.onload=function(){b()},c.src=a,document.getElementsByTagName("head")[0].appendChild(c)},parseURL:function(a){var b=document.createElement("a");return b.href=a,{source:a,protocol:b.protocol.replace(":",""),host:b.hostname,port:b.port,query:b.search,params:function(){for(var a,c={},d=b.search.replace(/^\?/,"").split("&"),e=d.length,f=0;e>f;f++)d[f]&&(a=d[f].split("="),c[a[0]]=a[1]);return c}(),file:(b.pathname.match(/\/([^\/?#]+)$/i)||[,""])[1],hash:b.hash.replace("#",""),path:b.pathname.replace(/^([^\/])/,"/$1"),relative:(b.href.match(/tps?:\/\/[^\/]+(.+)/)||[,""])[1],segments:b.pathname.replace(/^\//,"").split("/")}},keys:function(a){return Object.keys(a)},values:function(a){var b=[];for(var c in a)a.hasOwnProperty(c)&&b.push(a[c]);return b},boundHitTest:function(a,b){var c=b.top>=a.top&&b.top<=a.top+a.height,d=b.left>=a.left&&b.left<=a.left+a.width,e=a.top+a.height>=b.top+b.height&&b.top+b.height>=a.top,f=a.left+a.width>=b.left+b.width&&b.left+b.width>=a.left,g=a.top>=b.top&&a.top+a.height<=b.top+b.height,h=a.left>=b.left&&a.left+a.width<=b.left+b.width;return c&&d||e&&f||c&&f||e&&d||c&&h||e&&h||d&&g||f&&g},isFirefox:function(){return navigator.userAgent.indexOf("Firefox")>0}}})}(nx,nx.global),function(a){a.util.query=function(){var a,b={publics:{select:function(a,b){var c=[];if($.isArray(a)&&$.isFunction(b)){var d,e;for(d=0;d<a.length;d++)e=a[d],b(e)&&c.push(e)}return c},group:function(a,b){var c;if($.isFunction(b)){c={};var d,e,f;for(d=0;d<a.length;d++)e=b(a[d]),e&&"string"==typeof e&&(f=c[e]=c[e]||[],f.push(a[d]))}else c=a;return c},aggregate:function(a,b){var c,d=null;if($.isFunction(b))if($.isArray(a))d=b(a);else{d=[];for(c in a)d.push(b(a[c],c))}return d}},privates:{aggregate:function(a,c){var d,e=null,f=null;return $.isArray(c)?("function"==typeof c[c.length-1]&&(f=c.pop()),e=c.length>1?c:c[0]):(e=c.map,f=c.aggregate),"string"==typeof e&&(e=e.replace(/\s/g,"").split(",")),$.isArray(e)&&e[0]&&"string"==typeof e[0]&&(e=function(a){return function(b){var c,d={};for(c=0;c<a.length;c++)d[a[c]]=b[a[c]];return JSON.stringify(d)}}(e)),d=b.publics.aggregate(b.publics.group(a,e),f)},mapping:function(a,b){var c,d;if(b===!0)d=EXPORT.clone(a);else if($.isFunction(b))if($.isArray(a))for(d=[],c=0;c<a.length;c++)d.push(b(a[c],c));else d=b(a,0);else d=$.isArray(a)?a.slice():a;return d},orderby:function(a,b){return"string"==typeof b&&(b=b.replace(/^\s*(.*)$/,"$1").replace(/\s*$/,"").replace(/\s*,\s*/g,",").split(",")),$.isArray(b)&&b[0]&&"string"==typeof b[0]&&(b=function(a){return function(b,c){var d,e,f;if(!b&&!c)return 0;for(d=0;d<a.length;d++){if(e=a[d],f=/\sdesc$/.test(e),e=e.replace(/(\s+desc|\s+asc)$/,""),b[e]>c[e])return f?-1:1;if(c[e]>b[e])return f?1:-1}return 0}}(b)),b&&"function"==typeof b&&a.sort(b),a}},query:function(a,c){return 1==arguments.length&&(c=a,a=c.array),a?(c.select&&(a=b.publics.select(a,c.select)),c.aggregate&&(a=b.privates.aggregate(a,c.aggregate)),c.mapping&&(a=b.privates.mapping(a,c.mapping)),c.orderby&&(a=b.privates.orderby(a,c.orderby)),a):a}};for(a in b.publics)b.query[a]=b.publics[a];return b.query}()}(nx,nx.global),function(a){var b=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1e3/60)}}(),c=function(){return window.cancelAnimationFrame||window.cancelRequestAnimationFrame||window.webkitCancelAnimationFrame||window.webkitCancelRequestAnimationFrame||window.mozCancelAnimationFrame||window.mozCancelRequestAnimationFrame||window.msCancelAnimationFrame||window.msCancelRequestAnimationFrame||window.oCancelAnimationFrame||window.oCancelRequestAnimationFrame||window.clearTimeout}();a.define("nx.graphic.Animation",{statics:{requestAnimationFrame:b,cancelAnimationFrame:c},events:["complete"],properties:{callback:{set:function(a){this._callback=a,this.createAnimation(),this.autoStart()&&this.start()},get:function(){return this._callback||function(){}}},duration:{value:1e3},interval:{value:1e3/60},autoStart:{value:!1},complete:{value:function(){return function(){}}},context:{value:this}},methods:{init:function(a){this.inherited(arguments),this.sets(a)},createAnimation:function(){var a,c,d,e=this,f=this.callback(),g=this.duration(),h=this.interval(),i=0;this.fn=function(){d=+new Date,a?c=g?(d-a)/g:0:(a=+new Date,c=0),(c>=1||d-i>=h)&&(i=d,c>1&&(c=1),f.call(e.context(),c)===!1&&(g=1,e._completeFN())),1>c?e.ani_id=b(e.fn):1==c&&e._completeFN()}},start:function(){this.ani_id=b(this.fn)},stop:function(){c(this.ani_id)},_completeFN:function(){this.complete().call(this.context()),this.stop(),this.fire("complete")}}})}(nx,nx.util),function(a){var b=1e3;a.define("nx.widget.ZIndexManager",null,{"static":!0,methods:{getIndex:function(){return b++}}})}(nx,nx.global),function(a){var b;!function(){a&&a.ui&&!b&&(b=a.define(a.ui.Component,{view:{props:{"class":"nx n-popupContainer",style:{position:"absolute",top:"0px",left:"0px"}}}}),a.define("nx.ui.PopupContainer",{"static":!0,properties:{container:{value:function(){return new b}}},methods:{addPopup:function(a){this.container().view().dom().appendChild(a.view().dom())}}})),document.body&&a&&a.ui?document.body.firstChild?document.body.insertBefore(a.ui.PopupContainer.container().view().dom().$dom,document.body.firstChild):document.body.appendChild(a.ui.PopupContainer.container().view().dom().$dom):setTimeout(arguments.callee,10)}()}(nx,nx.global),function(a){var b=a.ui.PopupContainer;a.define("nx.ui.Popup",a.ui.Component,{events:["open","close"],view:{props:{style:"position:absolute",tabindex:-1},events:{blur:function(){}}},properties:{target:{value:document},direction:{value:"auto"},width:{value:null},height:{value:null},offset:{value:0},offsetX:{value:0},offsetY:{value:0},align:{value:!1},position:{value:"absolute"},location:{value:"outer"},listenResize:{value:!1},lazyClose:{value:!1},pin:{value:!1},registeredPositionMap:{value:function(){return{}}},scrollClose:{value:!1}},methods:{init:function(a){this.inherited(a),this.sets(a),this._defaultConfig=this.gets()},attach:function(a){this.inherited(a),this.appendToPopupContainer()},appendToPopupContainer:function(){this._appended||(b.addPopup(this),this._delayCloseEvent(),this._listenResizeEvent(),this._appended=!0,this._closed=!1)},open:function(b){this._clearTimeout();var c=0,d=0,e=this.view().dom();this.sets(b||{}),this._resetOffset(b);var f=e.get("data-nx-popup-direction");f&&e.removeClass(f),this.appendToPopupContainer();var g=this.target(),h={width:0,height:0};if(g.resolve&&g.view&&(g=g.view()),void 0!==g.x&&void 0!==g.y)c=g.x,d=g.y;else if(g!=document){var i=g.getOffset();c=i.left,d=i.top,h=g.getBound()}else c=0,d=0;var j=this.width(),k=this.height();this.align()&&(j=h.width||0),j&&(e.setStyle("width",j),e.setStyle("max-width",j),this.width(j)),k&&e.setStyle("height",k),e.setStyle("display","block"),c+=this.offsetX(),d+=this.offsetY();var l=this._popupSize=e.getBound(),m=this.offset(),n={outer:{bottom:{left:c,top:d+h.height+m},top:{left:c,top:d-l.height-m},right:{left:c+h.width+m,top:d},left:{left:c-l.width-m,top:d}},inner:{bottom:{left:c+h.width/2-l.width/2+m,top:d},top:{left:c+h.width/2-l.width/2,top:d+h.height-l.height-m},left:{left:c+h.width-l.width-m,top:d+h.height/2-l.height/2},right:{left:c+m,top:d+h.height/2-l.height/2}},tooltip:{bottom:{left:c+h.width/2-l.width/2,top:d+h.height+m+2},"bottom-left":{left:c-22,top:d+h.height+m+2},"bottom-right":{left:c+h.width-l.width+22,top:d+h.height+m+2},top:{left:c+h.width/2-l.width/2,top:d-l.height-m-2},"top-left":{left:c-22,top:d-l.height-m-2},"top-right":{left:c+h.width/2-l.width/2+22,top:d-l.height-m-2},right:{left:c+h.width+m+2,top:d+h.height/2-l.height/2},"right-top":{left:c+h.width+m+2,top:0>=d?0:d-22},"right-bottom":{left:c+h.width+m+2,top:d+h.height-l.height},left:{left:c-l.width-m-2,top:d+h.height/2-l.height/2},"left-top":{left:c-l.width-m-2,top:0>=d?0:d-22},"left-bottom":{left:c-l.width-m-2,top:d+h.height-l.height}}},o=this.location();this._directionMap=n[o];var p=this.direction();(null==p||"auto"==p)&&(p=this._hitTest()),p||(p="bottom");var q=this._directionMap[p];e.setStyles({top:q.top,left:q.left,position:"position","z-index":a.widget.ZIndexManager.getIndex(),display:"block"}),e.set("data-nx-popup-direction",p),e.addClass("popup"),e.addClass(p),e.addClass("in"),this.fire("open"),this.dom().$dom.focus()},close:function(a){this._clearTimeout();var b=this.view().dom();this.pin()||(a||!this.lazyClose()?(this._closed=!0,b.removeClass("in"),b.setStyle("display","none"),this.fire("close")):this._delayClose())},_clearTimeout:function(){this.timer&&clearTimeout(this.timer)},_delayClose:function(){var a=this;this._clearTimeout(),this.timer=setTimeout(function(){a.close(!0)},500)},_delayCloseEvent:function(){this.lazyClose()&&(this.on("mouseenter",function(){this.timer&&clearTimeout(this.timer)},this),this.on("mouseleave",function(){clearTimeout(this.timer),this.close(!0)},this))},_listenResizeEvent:function(){this.listenResize(),this.scrollClose()},_hitTest:function(){var b=a.dom.Document.docRect(),c=Object.keys(this._directionMap),d=c[0];return c.some(function(a){var c={left:this._directionMap[a].left,top:this._directionMap[a].top,width:this._popupSize.width,height:this._popupSize.height},e=c.left>=b.scrollX&&c.top>=b.scrollY&&c.left+c.width<=b.width+b.scrollX&&c.top+c.height<=b.height+b.scrollY;return e?(d=a,!0):void 0},this),d},_resetOffset:function(a){}}})}(nx,nx.global),function(a){a.define("nx.ui.Popover",a.ui.Popup,{properties:{title:{get:function(){return this._title},set:function(a){return a?this.view("title").dom().setStyle("display","block"):this.view("title").dom().setStyle("display","none"),this._title!=a?(this._title=a,!0):!1}},location:{value:"tooltip"}},view:{props:{"class":"popover fade",style:{outline:"none"},tabindex:-1},events:{blur:function(){}},content:[{props:{"class":"arrow"}},{tag:"h3",name:"title",props:{"class":"popover-title",style:{display:"none"}},content:"{#title}"},{name:"body",props:{"class":"popover-content"}}]},methods:{getContainer:function(){return this.view("body").dom()}}})}(nx,nx.global),function(a){a.define("nx.graphic.DragManager",a.Observable,{"static":!0,properties:{node:{},referrer:{},track:{},dragging:{value:!1}},methods:{init:function(){window.addEventListener("mousedown",this._capture_mousedown.bind(this),!0),window.addEventListener("mousemove",this._capture_mousemove.bind(this),!0),window.addEventListener("mouseup",this._capture_mouseup.bind(this),!0),window.addEventListener("touchstart",this._capture_mousedown.bind(this),!0),window.addEventListener("touchmove",this._capture_mousemove.bind(this),!0),window.addEventListener("touchend",this._capture_mouseup.bind(this),!0)},start:function(a){return function(b,c){if(b&&!this.node()){c=c===window||c===document||c===document.body?document.body:c||b,c="function"==typeof c.dom?c.dom().$dom:c,this.node(b),this.referrer(c);var d,e=[];d=c.getBoundingClientRect(),this.track(e);var f=a.touches&&a.touches.length?a.touches[0].pageX:a.pageX,g=a.touches&&a.touches.length?a.touches[0].pageY:a.pageY,h=[f-document.body.scrollLeft-d.left,g-document.body.scrollTop-d.top];return e.push(h),e[0].time=a.timeStamp,a.dragCapture=function(){},!0}}.bind(this)},move:function(a){var b=this.node();b&&(a.drag=this._makeDragData(a),this.dragging()||(this.dragging(!0),b.fire("dragstart",a)),b.fire("dragmove",a))},end:function(a){var b=this.node();b&&(a.drag=this._makeDragData(a),this.dragging()&&b.fire("dragend",a),this.node(null),this.track(null),this.dragging(!1))},_makeDragData:function(a){var b=this.track(),c=this.referrer().getBoundingClientRect(),d=a.touches&&a.touches.length?a.touches[0].pageX:a.pageX,e=a.touches&&a.touches.length?a.touches[0].pageY:a.pageY,f=[d-document.body.scrollLeft-c.left,e-document.body.scrollTop-c.top],g=b[0],h=b[b.length-1];return f.time=a.timeStamp,b.push(f),b.length>20&&b.splice(1,b.length-20),{target:this.node(),accord:this.referrer(),origin:g,current:f,offset:[f[0]-g[0],f[1]-g[1]],delta:[f[0]-h[0],f[1]-h[1]],track:b}},_capture_mousedown:function(a){a.captureDrag&&(this._lastDragCapture=a.captureDrag),a.captureDrag="mousedown"===a.type||"touchstart"===a.type?this.start(a):function(){}},_capture_mousemove:function(a){this.move(a);var b=this.node();return b?(a.stopPropagation(),a.preventDefault(),!1):void 0},_capture_mouseup:function(a){this.end(a)}}})}(nx,nx.global),function(a){a.Object.delegateEvent=function(b,c,d,e){d.can(e)||(b.on(c,function(a,b){d.fire(e,b)}),a.Object.extendEvent(d,e))};var b={transform:"webkitTransform"};a.define("nx.graphic.Component",a.ui.Component,{events:["dragstart","dragmove","dragend"],properties:{translateX:{set:function(a){this.setTransform(a)}},translateY:{set:function(a){this.setTransform(null,a)}},scale:{set:function(a){this.setTransform(null,null,a)}},translate:{get:function(){return{x:this._translateX||0,y:this._translateY||0}},set:function(a){this.setTransform(a.x,a.y)}},visible:{get:function(){return void 0!==this._visible?this._visible:!0},set:function(a){this.view()&&(a?this.view().dom().removeClass("n-hidden"):this.view().dom().addClass("n-hidden")),this._visible=a}},"class":{get:function(){return void 0!==this._class?this._class:""},set:function(a){return this._class!==a?(this._class=a,this.dom().addClass(a),!0):!1}}},view:{},methods:{init:function(a){this.inherited(a),this.sets(a)},setTransform:function(a,b,c,d){var e=parseFloat(null!=a?a:this._translateX||0),f=parseFloat(null!=b?b:this._translateY||0),g=parseFloat(null!=c?c:this._scale||1);this.setStyle("transform"," matrix("+g+",0,0,"+g+","+e+", "+f+")",d),this.dom().$dom.setAttribute("transform"," translate("+e+", "+f+") scale("+g+")"),this._translateX=e,this._translateY=f,this._scale=g},setStyle:function(a,c,d,e,f){d?this.setTransition(e,f,d):e&&setTimeout(function(){e.call(f||this)},0);var g=this.dom().$dom;g.style[a]=c,b[a]&&(g.style[b[a]]=c)},setTransition:function(a,b,c){var d=this.dom();c?(d.setStyle("transition","all "+c+"s ease"),this.on("transitionend",function e(){a&&a.call(b||this),d.setStyle("transition",""),this.off("transitionend",e,this)},this)):(d.setStyle("transition",""),a&&setTimeout(function(){a.call(b||this)},0))},append:function(a){var b;b=this._parentElement=a?a.view().dom():this._parentElement||this.view().dom().parentNode(),b&&b.$dom&&this._resources&&this.view()&&!b.contains(this.view().dom())&&b.appendChild(this.view().dom())},remove:function(){var a=this._parentElement=this._parentElement||this.view().dom().parentNode();a&&this._resources&&this.view()&&a.removeChild(this.view().dom())},getBound:function(){return this.dom().$dom.getBoundingClientRect()},hide:function(){this.visible(!1)},show:function(){this.visible(!0)},animate:function(b){var c=this,d=[],e=this.view();a.each(b.to,function(a,b){var c=this.has(b)?this.get(b):e.getStyle(b);d.push({key:b,oldValue:c,newValue:a})},this),this._ani&&(this._ani.stop(),this._ani.dispose(),delete this._ani);var f=this._ani=new a.graphic.Animation({duration:b.duration||1e3,context:b.context||this});f.callback(function(b){a.each(d,function(a){var d=a.oldValue+(a.newValue-a.oldValue)*b;c.set(a.key,d)})}),b.complete&&f.complete(b.complete),f.on("complete",function(){this.fire("animationCompleted"),f.dispose(),delete this._ani},this),f.start()},_processPropertyValue:function(b){var c=b;return a.is(b,"Function")&&(c=b.call(this,this.model(),this)),c},dispose:function(){this._resources&&this._resources["@root"]&&this.view().dom().$dom.remove(),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Group",a.graphic.Component,{properties:{"data-id":{set:function(b){a.each(this.content(),function(a){a.set("data-id",b)}),this.view().set("data-id",b),this["_data-id"]=b}}},view:{tag:"svg:g"},methods:{move:function(a,b){var c=this.translate();this.setTransform(a+c.x,b+c.y)}}})}(nx,nx.global),function(a){var b="http://www.w3.org/1999/xlink";a.define("nx.graphic.Icon",a.graphic.Component,{view:{tag:"svg:g",content:[{name:"bgtext",tag:"svg:text"},{name:"text",tag:"svg:text"},{tag:"svg:g",name:"image",content:{name:"use",tag:"svg:use"}}]},properties:{imageType:{value:"font"},iconType:{get:function(){return this._iconType},set:function(c){var d=a.graphic.Icons.get(c.toLowerCase()),e=d.size,f=this.view("image").dom(),g=this.view("text").dom(),h=this.view("bgtext").dom(),i=this.view("use").dom();d.font?(g.setStyle("display","block"),i.setStyle("display","none"),g.$dom.firstChild&&g.$dom.removeChild(g.$dom.firstChild),g.$dom.appendChild(document.createTextNode(d.font[0])),g.addClass("fontIcon iconShape"),h.$dom.firstChild&&h.$dom.removeChild(h.$dom.firstChild),h.$dom.appendChild(document.createTextNode(d.font[1])),h.addClass("fontIcon iconBG"),this.imageType("font")):(g.setStyle("display","none"),i.setStyle("display","block"),h.$dom.firstChild&&h.$dom.removeChild(h.$dom.firstChild),h.$dom.appendChild(document.createTextNode("\ue61d")),h.addClass("fontIcon iconBG"),i.$dom.setAttributeNS(b,"xlink:href","#"+c),f.setStyle("transform","translate("+e.width/-2+"px, "+e.height/-2+"px)"),this.imageType("image")),this.view().set("iconType",c),this.view().dom().addClass("n-topology-icon"),this.size(e),this._iconType=d.name}},size:{value:function(){return{width:36,height:36}}},color:{set:function(a){"font"==this.imageType()&&this.view("text").dom().setStyle("fill",a),this.view("bgtext").dom().setStyle("fill",this.showIcon()?"":a),this.view("image").dom().set("color",a),this._color=a}},scale:{set:function(b){var c=this.view("text").dom(),d=this.view("bgtext").dom(),e=this.view("image").dom(),f=this.size(),g=Math.max(f.width,f.height),h=this.showIcon()?g*b:4+8*b;c.setStyle("font-size",h),d.setStyle("font-size",h),"image"==this.imageType()&&b&&e.setStyle("transform","translate("+f.width/-2+"px, "+f.height/-2+"px) scale("+b+")"),a.util.isFirefox()&&(c.$dom.setAttribute("transform"," translate(0, "+h/2+")"),d.$dom.setAttribute("transform"," translate(0, "+h/2+")")),this._scale=b}},showIcon:{get:function(){return void 0!==this._showIcon?this._showIcon:!0},set:function(a){var b=this.view("text").dom(),c=this.view("bgtext").dom(),d=this.view("image").dom();a?("font"==this.imageType()?(b.setStyle("display","block"),c.setStyle("display","block")):(d.setStyle("display","block"),c.setStyle("display","none")),c.removeClass("iconBGActive"),this.view().dom().addClass("showIcon")):("font"==this.imageType()?b.setStyle("display","none"):d.setStyle("display","none"),c.setStyle("display","block"),c.addClass("iconBGActive"),this.view().dom().removeClass("showIcon")),this._showIcon=a,this._color&&this.color(this._color,{force:!0}),this._scale&&this.scale(this._scale,{force:!0})}}}})}(nx,nx.global),function(a){var b=a.define("nx.graphic.Icons",{"static":!0,statics:{icons:{}},methods:{get:function(a){return b.icons[a]||b.icons.switch},getSVGString:function(a){return e[a].icon},getTypeList:function(){return Object.keys(e)},registerIcon:function(a,e,f,g){var h=document.createElementNS(d,"image");h.setAttributeNS(c,"href",e),b.icons[a]={size:{width:f,height:g},icon:h.cloneNode(!0),name:a}},__each__:function(b,c){var d=b||function(){};a.each(e,function(a,b){var f=a.icon;d.call(c||this,f,b,e)})}}}),c="http://www.w3.org/1999/xlink",d="http://www.w3.org/2000/svg",e={"switch":{width:32,height:32,name:"Switch",font:["\ue618","\ue619"]},router:{width:32,height:32,name:"Router",font:["\ue61c","\ue61d"]},wlc:{width:32,height:32,font:["\ue60f","\ue610"]},unknown:{width:32,height:32,font:["\ue612","\ue611"]},server:{width:32,height:32,font:["\ue61b","\ue61a"]},phone:{width:32,height:32,font:["\ue61e","\ue61f"]},nexus5000:{width:32,height:32,font:["\ue620","\ue621"]},ipphone:{width:32,height:32,font:["\ue622","\ue623"]},host:{width:32,height:32,font:["\ue624","\ue625"]},camera:{width:32,height:32,font:["\ue626","\ue627"]},accesspoint:{width:32,height:32,font:["\ue628","\ue629"]},groups:{width:32,height:32,font:["\ue615","\ue62f"]},groupm:{width:32,height:32,font:["\ue616","\ue630"]},groupl:{width:32,height:32,font:["\ue617","\ue631"]},collapse:{width:16,height:16,font:["\ue62e","\ue61d"]},expand:{width:14,height:14,font:["\ue62d","\ue61d"]},cloud:{width:48,height:48,font:["\ue633","\ue633"]},unlinked:{width:32,height:32,font:["\ue646","\ue61d"]},firewall:{width:32,height:32,font:["\ue647","\ue648"]},hostgroup:{width:32,height:32,font:["\ue64d","\ue64c"]},wirelesshost:{width:32,height:32,font:["\ue64e","\ue64c"]}};a.each(e,function(a,c){var d=b.icons[c]={size:{width:a.width,height:a.height},name:c};a.font?d.font=a.font:a.icon&&(d.icon=(new DOMParser).parseFromString(a.icon,"text/xml").documentElement.cloneNode(!0))})}(nx,nx.global),function(a){a.define("nx.graphic.Circle",a.graphic.Component,{view:{tag:"svg:circle"}})}(nx,nx.global),function(a){var b="http://www.w3.org/1999/xlink";a.define("nx.graphic.Image",a.graphic.Component,{properties:{src:{get:function(){return void 0!==this._src?this._src:0},set:function(a){if(this._src!==a){if(this._src=a,this.view()&&void 0!==a){var c=this.view().dom().$dom;c.setAttributeNS(b,"href",a)}return!0}return!1}}},view:{tag:"svg:image"}})}(nx,nx.global),function(a){a.define("nx.graphic.Line",a.graphic.Component,{view:{tag:"svg:line"}})}(nx,nx.global),function(a){a.define("nx.graphic.Path",a.graphic.Component,{view:{tag:"svg:path"}})}(nx,nx.global),function(a){a.define("nx.graphic.Polygon",a.graphic.Path,{properties:{nodes:{get:function(){return this._nodes||[]},set:function(b){this._nodes=b;var c=b;if(0!==c.length){if(1==c.length){var d=c[0];c.push({x:d.x-1,y:d.y-1}),c.push({x:d.x+1,y:d.y-1})}else 2==c.length&&(c.push([c[0].x+1,c[0].y+1]),c.push(c[1]));var e=a.data.Convex.process(c),f=[];f.push("M ",e[0].x," ",e[0].y);for(var g=1;g<e.length;g++)a.is(e[g],"Array")||f.push(" L ",e[g].x," ",e[g].y);f.push(" Z"),this.set("d",f.join(""))}}}}})}(nx,nx.global),function(a){a.define("nx.graphic.Rect",a.graphic.Component,{view:{tag:"svg:rect"}})}(nx,nx.global),function(a){a.define("nx.graphic.Stage",a.ui.Component,{events:["dragStageStart","dragStage","dragStageEnd","stageTransitionEnd"],view:{tag:"svg:svg",props:{"class":"n-svg",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",style:{width:"{#width}",height:"{#height}"}},content:[{name:"defs",tag:"svg:defs"},{name:"scalingLayer",type:"nx.graphic.Group",props:{"class":"stage"},events:{transitionend:"{#_transitionend}"}},{name:"staticLayer",type:"nx.graphic.Group"}],events:{mousedown:"{#_mousedown}",touchstart:"{#_mousedown}",dragstart:"{#_dragstart}",dragmove:"{#_drag}",dragend:"{#_dragend}"}},properties:{animating:{},scalable:{value:!0},viewbox:{dependencies:"width, height, matrix",value:function(b,c,d){var e=a.geometry.Matrix.inverse(d);return[a.geometry.Vector.transform([0,0],e),a.geometry.Vector.transform([b,c],e)]}},width:{value:300},height:{value:300},stageScale:{value:1},padding:{value:0},maxZoomLevel:{value:12},minZoomLevel:{value:.25},zoomLevel:{value:1},disableUpdateStageScale:{value:!1},matrix:{get:function(){return this._matrix||a.geometry.Matrix.I},set:function(b){var c=this.matrixObject(),d=this.scalingLayer().dom().$dom,e="matrix("+a.geometry.Matrix.stringify(b)+")";d.style.transform=e,d.setAttribute("transform"," translate("+c.x()+", "+c.y()+") scale("+c.scale()+")"),this._matrix=b}},matrixObject:{},stage:{get:function(){return this.view("scalingLayer")}},staticLayer:{get:function(){return this.view("staticLayer")}},scalingLayer:{get:function(){return this.view("scalingLayer")}},fitMatrixObject:{set:function(a){a&&this.zoomLevel(this.stage().scale()/a.scale()),this._fitMatrixObject=a}}},methods:{getContainer:function(){return this.view("scalingLayer").view().dom()},addDef:function(a){this.view("defs").dom().$dom.appendChild(a)},addDefString:function(a){this.view("defs").dom().$dom.appendChild((new DOMParser).parseFromString(a,"text/xml").documentElement)},getContentBound:function(){var a=this.scalingLayer().getBound(),b=this.view().dom().getBound();if(0===a.left&&0===a.top&&0===a.width&&0===a.height){var c=this.padding();return{left:c,top:c,height:this.height()-2*c,width:this.width()-2*c}}var d={left:a.left-b.left,top:a.top-b.top,width:a.width,height:a.height};
-return d.width<300&&(d.left-=(300-d.width)/2,d.width=300),d.height<300&&(d.top-=(300-d.height)/2,d.height=300),d},fit:function(b,c,d){var e=a.keyword.internal.watch(this,"animating",function(f){if(!f)if(e.release(),d){this.scalingLayer().on("transitionend",function i(){this.scalingLayer().dom().removeClass("n-topology-fit"),this.scalingLayer().off("transitionend",i,this),b&&b.call(c||this),this.animating(!1)},this);var g=this.matrix(),h=this.fitMatrixObject().matrix();a.geometry.Matrix.approximate(g,h)?b&&b.call(c||this):(this.animating(!0),this.scalingLayer().dom().addClass("n-topology-fit"),this._setStageMatrix(this.fitMatrixObject().matrix())),this.zoomLevel(1)}else this._setStageMatrix(this.fitMatrixObject().matrix()),this.zoomLevel(1),b&&b.call(c||this)}.bind(this));e.notify()},actualSize:function(){this.scalingLayer().setTransition(null,null,.6),this._setStageMatrix(a.geometry.Matrix.I)},zoom:function(a,b,c){this.scalingLayer().setTransition(b,c,.6),this.applyStageScale(a)},zoomByBound:function(a,b,c,d){var e=this.padding(),f={left:e,top:e,height:this.height()-2*e,width:this.width()-2*e};this.scalingLayer().setTransition(b,c,d),this.applyStageMatrix(this.calcRectZoomMatrix(f,a))},calcRectZoomMatrix:function(a,b){var c=b.width||b.height?Math.min(a.height/Math.abs(b.height),a.width/Math.abs(b.width)):1,d=a.left+a.width/2-c*(b.left+b.width/2),e=a.top+a.height/2-c*(b.top+b.height/2);return[[c,0,0],[0,c,0],[d,e,1]]},applyTranslate:function(a,b,c){var d=this.matrixObject();return d.applyTranslate(a,b),c&&this.scalingLayer().setTransition(null,null,c),this.matrix(d.matrix()),this.matrixObject(d),d},applyStageMatrix:function(b,c){return this._setStageMatrix(a.geometry.Matrix.multiply(this.matrix(),b),c)},applyStageScale:function(b,c){var d=b||1,e=c||[this.width()/2,this.height()/2],f=a.geometry.Matrix.multiply([[1,0,0],[0,1,0],[-e[0],-e[1],1]],[[d,0,0],[0,d,0],[0,0,1]],[[1,0,0],[0,1,0],[e[0],e[1],1]]);return this.applyStageMatrix(f,e)},resetStageMatrix:function(){var b=new a.geometry.Matrix(this.matrix());this.disableUpdateStageScale(!1),this.matrix(b.matrix()),this.matrixObject(b),this.stageScale(1/b.scale())},resetFitMatrix:function(){var b=a.keyword.internal.watch(this,"animating",function(c){if(!c){b.release();var d,e,f,g;d=this.getContentBound(),e=this.padding(),f={left:e,top:e,height:this.height()-2*e,width:this.width()-2*e},g=new a.geometry.Matrix(this.calcRectZoomMatrix(f,d)),g.matrix(a.geometry.Matrix.multiply(this.matrix(),g.matrix())),this.fitMatrixObject(g)}}.bind(this));b.notify()},_setStageMatrix:function(b,c){c=c||[this.width()/2,this.height()/2];var d=new a.geometry.Matrix(b),e=this.fitMatrixObject(),f=e.scale(),g=this.maxZoomLevel(),h=this.minZoomLevel();return d.scale()/f>g&&d.applyScale(g*f/d.scale(),c),d.scale()/f<h&&d.applyScale(h*f/d.scale(),c),a.geometry.Matrix.approximate(this.matrix(),d.matrix())?this.matrixObject():(this.matrixObject(d),this.matrix(d.matrix()),this.disableUpdateStageScale()||this.stageScale(1/d.scale()),this.zoomLevel(d.scale()/f),d)},hide:function(){this.view("scalingLayer").dom().setStyle("opacity",0),this.view("staticLayer").dom().setStyle("opacity",0)},show:function(){this.view("scalingLayer").dom().setStyle("opacity",1),this.view("staticLayer").dom().setStyle("opacity",1)},_transitionend:function(a,b){this.fire("stageTransitionEnd",b)},_mousedown:function(a,b){b.captureDrag(a)},_dragstart:function(a,b){this.view("scalingLayer").dom().setStyle("pointer-events","none"),this.fire("dragStageStart",b)},_drag:function(a,b){this.fire("dragStage",b)},_dragend:function(a,b){this.fire("dragStageEnd",b),this.view("scalingLayer").dom().setStyle("pointer-events","all")}}})}(nx,nx.global),function(a){a.define("nx.graphic.Text",a.graphic.Component,{properties:{text:{get:function(){return void 0!==this._text?this._text:0},set:function(a){if(this._text!==a&&void 0!==a){this._text=a;var b=this.view().dom().$dom;return b.firstChild&&b.removeChild(b.firstChild),b.appendChild(document.createTextNode(a)),!0}return!1}}},view:{tag:"svg:text"}})}(nx,nx.global),function(a){a.define("nx.graphic.Triangle",a.graphic.Path,{properties:{width:{get:function(){return void 0!==this._width?this._width:0},set:function(a){return this._width!==a?(this._width=a,this._draw(),!0):!1}},height:{get:function(){return void 0!==this._height?this._height:0},set:function(a){return this._height!==a?(this._height=a,this._draw(),!0):!1}}},methods:{_draw:function(){if(this._width&&this._height){var a=[];a.push("M ",this._width/2," ",0),a.push(" L ",this._width," ",this._height),a.push(" L ",0," ",this._height),a.push(" Z"),this.set("d",a.join(""))}}}})}(nx,nx.global),function(a){a.define("nx.graphic.BezierCurves",a.graphic.Path,{properties:{x1:{set:function(a){this._x1=a,this._buildPath()},get:function(){return this._x1||0}},y1:{set:function(a){this._y1=a,this._buildPath()},get:function(){return this._y1||0}},x2:{set:function(a){this._x2=a,this._buildPath()},get:function(){return this._x2||0}},y2:{set:function(a){this._y2=a,this._buildPath()},get:function(){return this._y2||0}},isClockwise:{value:!0},straight:{value:!1}},methods:{_buildPath:function(){var a,b=this.x1(),c=this.x2(),d=this.y1(),e=this.y2();if(null!==b&&null!==c&&null!==d&&null!==e){var f=b-c,g=e-d,h=Math.sqrt(f*f+g*g);return a=this.straight()?"M"+b+","+d+" "+c+","+e:this.isClockwise()?"M"+c+","+e+"A "+h+" "+h+", 0, 0, 1, "+b+","+d+"A "+(h-0)+" "+(h-0)+", 0, 0, 0, "+c+","+e:"M"+c+","+e+"A "+h+" "+h+", 0, 0, 0, "+b+","+d+"A "+(h-0)+" "+(h-0)+", 0, 0, 1, "+c+","+e,this.set("d",a)}return null}}})}(nx,nx.global),function(a){a.define("nx.geometry.MatrixSupport",{properties:{matrix:{value:function(){return a.geometry.Matrix.I}},matrixInversion:{dependencies:["matrix"],value:function(b){return b?a.geometry.Matrix.inverse(b):null}},transform_internal_:{dependencies:["matrix"],value:function(b){if(b){var c=0/0,d=0/0;return a.geometry.Matrix.isometric(b)&&(c=Math.sqrt(b[0][0]*b[0][0]+b[0][1]*b[0][1]),d=b[0][1]>0?Math.acos(b[0][0]/c):-Math.acos(b[0][0]/c)),{x:b[2][0],y:b[2][1],scale:c,rotate:d}}return{x:0,y:0,scale:1,rotate:0}}},x:{get:function(){return void 0!==this._x?this._x:this.transform_internal_().x},set:function(a){return this._applyTransform("x",a),isNaN(this.transform_internal_().x)||this._x===this.transform_internal_().x?!1:(this._x=this.transform_internal_().x,!0)}},y:{get:function(){return void 0!==this._y?this._y:this.transform_internal_().y},set:function(a){return this._applyTransform("y",a),isNaN(this.transform_internal_().y)||this._y===this.transform_internal_().y?!1:(this._y=this.transform_internal_().y,!0)}},scale:{get:function(){return void 0!==this._scale?this._scale:this.transform_internal_().scale},set:function(a){return this._applyTransform("scale",a),isNaN(this.transform_internal_().scale)||this._scale===this.transform_internal_().scale?!1:(this._scale=this.transform_internal_().scale,!0)}},rotate:{get:function(){return void 0!==this._rotate?this._rotate:this.transform_internal_().rotate},set:function(a){return this._applyTransform("rotate",a),isNaN(this.transform_internal_().rotate)||this._rotate===this.transform_internal_().rotate?!1:(this._rotate=this.transform_internal_().rotate,!0)}}},methods:{applyTranslate:function(b,c){this.matrix(a.geometry.Matrix.multiply(this.matrix(),[[1,0,0],[0,1,0],[b,c,1]]))},applyScale:function(b,c){this.matrix(c?a.geometry.Matrix.multiply(this.matrix(),[[1,0,0],[0,1,0],[-c[0],-c[1],1]],[[b,0,0],[0,b,0],[0,0,1]],[[1,0,0],[0,1,0],[c[0],c[1],1]]):a.geometry.Matrix.multiply(this.matrix(),[[b,0,0],[0,b,0],[0,0,1]]))},applyRotate:function(b,c){this.x(),this.y(),sin(b),cos(b);this.matrix(c?a.geometry.Matrix.multiply(this.matrix(),[[1,0,0],[0,1,0],[-c[0],-c[1],1]],[[cos,sin,0],[-sin,cos,0],[0,0,1]],[[1,0,0],[0,1,0],[c[0],c[1],1]]):a.geometry.Matrix.multiply(this.matrix(),[[cos,sin,0],[-sin,cos,0],[0,0,1]]))},applyMatrix:function(){var b=Array.prototype.slice.call(arguments);b=a.util.query({array:b,mapping:function(b){return a.is(b,a.geometry.Matrix)?b.matrix():b}}),b.unshift(this.matrix()),this.matrix(a.geometry.Matrix.multiply.apply(this,b))},_applyTransform:function(a,b){if(this["_"+a]!==b&&!isNaN(b))if(b===this.transform_internal_()[a])this["_"+a]=b,this.notify(a);else switch(a){case"x":this.applyTranslate(b-this.transform_internal_().x,0);break;case"y":this.applyTranslate(0,b-this.transform_internal_().y);break;case"scale":this.applyScale(b/this.transform_internal_().scale,[this.transform_internal_().x,this.transform_internal_().y]);break;case"rotate":this.applyRotate(b-this.transform_internal_().rotate,[this.transform_internal_().x,this.transform_internal_().y])}},toString:function(){return a.geometry.Matrix.stringify(this.matrix())}}})}(nx,nx.ui,window),function(a){var b=a.define("nx.geometry.Matrix",a.Observable,{mixins:[a.geometry.MatrixSupport],methods:{init:function(a){this.inherited(),this.matrix(a)},equal:function(c){return b.equal(this.matrix(),a.is(c,b)?c.matrix():c)}},statics:{I:[[1,0,0],[0,1,0],[0,0,1]],isometric:function(a){return a&&(a[0][0]||a[0][1])&&a[0][0]===a[1][1]&&a[0][1]===-a[1][0]},approximate:function(b,c){if(!b||!c||b.length!=c.length)return!1;var d;for(d=0;d<b.length;d++)if(!a.geometry.Vector.approximate(b[d],c[d]))return!1;return!0},equal:function(b,c){if(!b||!c||b.length!=c.length)return!1;var d;for(d=0;d<b.length;d++)if(!a.geometry.Vector.equal(b[d],c[d]))return!1;return!0},multiply:function(){for(var a,b,c,d,e,f,g,h,i,j,k,l=Array.prototype.slice.call(arguments);l.length>1;){if(a=l[0],b=l[1],a[0].length!=b.length)return null;for(i=a.length,j=b[0].length,k=b.length,c=[],f=0;i>f;f++){for(d=[],g=0;j>g;g++){for(e=0,h=0;k>h;h++)e+=a[f][h]*b[h][g];d.push(e)}c.push(d)}l.splice(0,2,c)}return l[0]},transpose:function(a){var b,c,d=[],e=a.length,f=a[0].length;for(c=0;f>c;c++)for(d[c]=[],b=0;e>b;b++)d[c].push(a[b][c]);return d},inverse:function(a){var b=a[0][0],c=a[0][1],d=a[1][0],e=a[1][1],f=a[2][0],g=a[2][1],h=b*e-c*d;return 0===h?null:[[e/h,-c/h,0],[-d/h,b/h,0],[(d*g-e*f)/h,(c*f-b*g)/h,1]]},stringify:function(a){return[a[0][0],a[0][1],a[1][0],a[1][1],a[2][0],a[2][1]].join(",").replace(/-?\d+e[+-]?\d+/g,"0")}}})}(nx,nx.ui,window),function(a){var b=a.define("nx.geometry.Math",a.Observable,{statics:function(){function a(a){return function(c){var d=a(c);return b.approximate(d,0)?0:d}}return{approximate:function(a,b){var c=a-b;return 1e-10>c&&c>-1e-10},sin:a(Math.sin),cos:a(Math.cos),tan:a(Math.tan),cot:function(a){var b=Math.tan(a);return b>1e10||-1e10>b?0:1/b}}}()})}(nx,nx.ui,window),function(a){var b=a.define("nx.geometry.BezierCurve",a.Observable,{statics:function(){function a(a){var b,c=[];for(b=0;b<a.length-1;b++)c.push([a[b],a[b+1]]);return c}function c(a){var b,c=[a[0][0]];for(b=0;b<a.length;b++)c.push(a[b][1]);return c}function d(a){var b=0,c=0,d=[];for(b=0;b<a.length;b++){if("number"!=typeof a[b]||a[b]<=c||a[b]>1)throw"Invalid bread point list: "+a.join(",");d.push((a[b]-c)/(1-c)),c=a[b]}return d}function e(a,b,c,d,e){return b*(1-a)*(1-a)*(1-a)+3*c*(1-a)*(1-a)*a+3*d*(1-a)*a*a+e*a*a*a}return{slice:function(a,c,d){return 0===c?0===d?null:b.breakdown(a,d).beziers[0]:d?b.breakdown(a,c,d).beziers[1]:b.breakdown(a,c).beziers[1]},breakdown:function(e){var f=Array.prototype.slice.call(arguments,1);if(!f.length)throw"Invalid argument length: "+arguments.length;f=d(f);var g,h,i,j=[e[0]],k=[];for(h=a(e);f.length;)g=f.shift(),i=b.separate(h,g),j.push(i.point),k.push(c(i.left)),h=i.right;return j.push(e[e.length-1]),k.push(c(h)),{points:j,beziers:k}},separate:function(a,b){for(var c,d,e=1-b,f=function(a){return[a[0][0]*e+a[1][0]*b,a[0][1]*e+a[1][1]*b]},g=function(a,b){return[f([a[0],b[0]]),f([a[1],b[1]])]},h=function(a){var b,c=[];for(b=0;b<a.length-1;b++)c.push(g(a[b],a[b+1]));return c},i=[],j=[],k=a;k.length;)d=k[0],i.push([d[0],f(d)]),d=k[k.length-1],j.unshift([f(d),d[1]]),1==k.length&&(c=f(k[0])),k=h(k);return{point:c,left:i,right:j}},through:function(a,b){if(void 0===b&&(b=a.length-1),2>b)return null;var c=[];if(2===b){var d=a[0],e=a[2],f=a[1],g=[(d[0]+e[0])/2,(d[1]+e[1])/2],h=[2*f[0]-g[0],2*f[1]-g[1]];c.push(d,h,e)}return c},locationAlongCurve:function(a,b){var c,d=1e3,f=0,g=[],h=a[0];if(!b)return 0;for(var i=0;d>=i;i++){c=i/d;var j=e(c,h[0],a[1][0],a[2][0],a[3][0]),k=e(c,h[1],a[1][1],a[2][1],a[3][1]);if(i>0){var l=j-g[0],m=k-g[1],n=Math.sqrt(l*l+m*m);if(b>f&&f+n>b)return i/d;f+=n}g=[j,k]}return 0/0},getLength:function(a){for(var b,c=1e3,d=0,f=[],g=a[0],h=0;c>=h;h++){b=h/c;var i=e(b,g[0],a[1][0],a[2][0],a[3][0]),j=e(b,g[1],a[1][1],a[2][1],a[3][1]);if(h>0){var k=i-f[0],l=j-f[1];d+=Math.sqrt(k*k+l*l)}f=[i,j]}return d}}}()})}(nx,nx.ui,window),function(a){var b=a.define("nx.geometry.Vector",a.Observable,{statics:{approximate:function(b,c){if(!b||!c||b.length!=c.length)return!1;var d;for(d=0;d<b.length;d++)if(!a.geometry.Math.approximate(b[d],c[d]))return!1;return!0},equal:function(a,b){if(!a||!b||a.length!=b.length)return!1;var c;for(c=0;c<a.length;c++)if(a[c]!==b[c])return!1;return!0},plus:function(a,b){return[a[0]+b[0],a[1]+b[1]]},transform:function(b){var c=[[b.concat([1])]].concat(Array.prototype.slice.call(arguments,1));return a.geometry.Matrix.multiply.apply(a.geometry.Matrix,c)[0].slice(0,2)},multiply:function(a,c){return b.transform(a,[[c,0,0],[0,c,0],[0,0,1]])},abs:function(a,c){if(1==arguments.length)return Math.sqrt(a[0]*a[0]+a[1]*a[1]);var d=c/b.abs(a);return b.transform(a,[[d,0,0],[0,d,0],[0,0,1]])},reverse:function(a){return b.transform(a,[[-1,0,0],[0,-1,0],[0,0,1]])},rotate:function(c,d){var e=a.geometry.Math.sin(d),f=a.geometry.Math.cos(d);return b.transform(c,[[f,e,0],[-e,f,0],[0,0,1]])},length:function(a){return Math.sqrt(a[0]*a[0]+a[1]*a[1])},angleCosine:function(a,c){return(a[0]*c[0]+a[1]*c[1])/b.length(a)/b.length(c)}},methods:{init:function(a,b){this.x=a||0,this.y=b||0},equals:function(a){return this.x===a.x&&this.y===a.y},length:function(){return Math.sqrt(this.squaredLength())},squaredLength:function(){var a=this.x,b=this.y;return a*a+b*b},angle:function(){var a=this.length(),b=a&&Math.acos(this.x/a);return b=180*b/Math.PI,b=this.y>0?b:-b},circumferentialAngle:function(){var a=this.angle();return 0>a&&(a+=360),a},slope:function(){return this.y/this.x},add:function(a){return new b(this.x+a.x,this.y+a.y)},subtract:function(a){return new b(this.x-a.x,this.y-a.y)},multiply:function(a){return new b(this.x*a,this.y*a)},divide:function(a){return new b(this.x/a,this.y/a)},rotate:function(a){var c=this.x,d=this.y,e=Math.sin(a/180*Math.PI),f=Math.cos(a/180*Math.PI);return new b(c*f-d*e,c*e+d*f)},negate:function(){return new b(-this.x,-this.y)},normal:function(){var a=this.length()||1;return new b(-this.y/a,this.x/a)},normalize:function(){var a=this.length()||1;return new b(this.x/a,this.y/a)},clone:function(){return new b(this.x,this.y)}}})}(nx,window),function(a){var b=a.geometry.Vector,c=a.define("nx.geometry.Line",a.Observable,{methods:{init:function(a,c){this.start=a||new b,this.end=c||new b,this.dir=this.end.subtract(this.start)},length:function(){return this.dir.length()},squaredLength:function(){return this.dir.squaredLength()},angle:function(){return this.dir.angle()},circumferentialAngle:function(){var a=this.angle();return 0>a&&(a+=360),a},center:function(){return this.start.add(this.end).divide(2)},slope:function(){return this.dir.slope()},general:function(){var a=this.slope(),b=this.start;return isFinite(a)?[a,-1,b.y-a*b.x]:[1,0,-b.x]},intersection:function(a){var c=this.general(),d=a.general();return new b((c[1]*d[2]-d[1]*c[2])/(c[0]*d[1]-d[0]*c[1]),(c[0]*d[2]-d[0]*c[2])/(d[0]*c[1]-c[0]*d[1]))},pedal:function(a){var c=this.dir,d=this.general(),e=[c.x,c.y,-a.x*c.x-a.y*c.y];return new b((d[1]*e[2]-e[1]*d[2])/(d[0]*e[1]-e[0]*d[1]),(d[0]*e[2]-e[0]*d[2])/(e[0]*d[1]-d[0]*e[1]))},translate:function(a){return a=a.rotate(this.angle()),new c(this.start.add(a),this.end.add(a))},rotate:function(a){return new c(this.start.rotate(a),this.end.rotate(a))},negate:function(){return new c(this.end,this.start)},normal:function(){var a=this.dir,c=this.dir.length();return new b(-a.y/c,a.x/c)},pad:function(a,b){var d=this.dir.normalize();return new c(this.start.add(d.multiply(a)),this.end.add(d.multiply(-b)))},clone:function(){return new c(this.start,this.end)}}})}(nx),function(a){a.data.QuadTree=function(a,c,d,e){var f=c||800,g=d||600,h=a,i=0,j=0,k=0,l=0;if(this.root=null,this.alpha=0,h){for(var m,n,o,p=0,q=h.length;q>p;p++)m=h[p],m.dx=0,m.dy=0,n=m.x,o=m.y,isNaN(n)&&(n=m.x=Math.random()*f),isNaN(o)&&(o=m.y=Math.random()*g),i>n?i=n:n>k&&(k=n),j>o?j=o:o>l&&(l=o);var r=k-i,s=l-j;r>s?l=j+r:k=i+s;var t=this.root=new b(this,i,j,k,l);for(p=0;q>p;p++)t.insert(h[p])}};var b=function(a,c,d,e,f){var g=this.x1=c,h=this.y1=d,i=this.x2=e,j=this.y2=f,k=.5*(g+i),l=.5*(h+j),m=.5*(e-c),n=.5*(f-d);this.point=null,this.nodes=null,this.insert=function(a){var b=this.point,c=this.nodes;return b||c?void(b?Math.abs(b.x-a.x)+Math.abs(b.y-a.y)<.01?this._insert(a):(this.point=null,this._insert(b),this._insert(a)):this._insert(a)):void(this.point=a)},this._insert=function(c){var d=c.x>=k,e=c.y>=l,f=(e<<1)+d,i=g+m*d,j=h+n*e,o=this.nodes||(this.nodes=[]),p=o[f]||(o[f]=new b(a,i,j,i+m,j+n));p.insert(c)}}}(nx,nx.global),function(a){a.data.NextForce=function(b,c){var d=b||800,e=c||800,f=4,g=100,h=.1;this.charge=1200,this.alpha=1,this.totalEnergy=1/0,this.maxEnergy=1/0;var i=2,j=.8;this.nodes=null,this.links=null,this.quadTree=null,this.setTopoData=function(a){for(var b,c,d,e,f=this.nodes=a.nodes,g=this.links=a.links,h=this.nodeMap={},i=this.weightMap={},j=this.maxWeight=1,k=0,l=f.length; l>k; k++)b=f[k],d=b.id,h[d]=b,i[d]=0;if(g)for(l=g.length,k=0; l>k; ++k)c=g[k],d=c.source,e=++i[d],e>j&&(this.maxWeight=e),d=c.target,e=++i[d],e>j&&(this.maxWeight=e)},this.start=function(){for(var a=i*this.nodes.length;;)if(this.tick(),this.maxEnergy<5*i&&this.totalEnergy<a)break},this.tick=function(){var b=this.nodes,c=this.quadTree=new a.data.QuadTree(b,d,e);this._calculateLinkEffect(),this._calculateCenterGravitation();var f=c.root;this._calculateQuadTreeCharge(f);var g,h,i=b.length;for(g=0;i>g;g++)h=b[g],this._calculateChargeEffect(f,h);this._changePosition()},this._changePosition=function(){var a,b,c,d,e,f,g,h=0,i=0,j=this.nodes,k=j.length,l=0,m=0,n=0,o=0,p=!0;for(a=0;k>a;a++)b=j[a],f=.5*b.dx,g=.5*b.dy,e=Math.abs(f)+Math.abs(g),b.fixed||(h+=e,e>i&&(i=e)),b.fixed?(c=b.x,d=b.y):(c=b.x+=f,d=b.y+=g,p=!1),l>c?l=c:c>n&&(n=c),m>d?m=d:d>o&&(o=d);this.totalEnergy=p?0:h,this.maxEnergy=p?0:i,this.x1=l,this.y1=m,this.x2=n,this.y2=o},this._calculateCenterGravitation=function(){var a,b,c,f=this.nodes,g=f.length,i=.5*h;b=d/2,c=e/2;for(var j=0;g>j;j++)a=f[j],a.dx+=(b-a.x)*i,a.dy+=(c-a.y)*i},this._calculateLinkEffect=function(){var a,b,c,d,e,h,i,j,k,l,m,n,o,p,q=this.links,r=this.nodeMap,s=this.weightMap;if(q)for(b=q.length,a=0;b>a;++a)if(c=q[a],d=r[c.source],e=r[c.target],h=e.x-d.x,i=e.y-d.y,0===h&&0===i&&(e.x+=5*Math.random(),e.y+=5*Math.random(),h=e.x-d.x,i=e.y-d.y),j=h*h+i*i,k=Math.sqrt(j),j){var t=this.maxWeight;l=f*(k-g)/k,h*=l,i*=l,n=s[d.id],o=s[e.id],p=n+o,m=n/p,e.dx-=h*m/t,e.dy-=i*m/t,m=1-m,d.dx+=h*m/t,d.dy+=i*m/t}},this._calculateQuadTreeCharge=function(a){if(!a.fixed){var b=a.nodes,c=a.point,d=0,e=0,f=0;if(!b)return a.charge=a.pointCharge=this.charge,a.chargeX=c.x,void(a.chargeY=c.y);if(b)for(var g,h,i=0,j=b.length;j>i;i++)g=b[i],g&&(this._calculateQuadTreeCharge(g),h=g.charge,f+=h,d+=h*g.chargeX,e+=h*g.chargeY);if(c){var k=this.charge;f+=k,d+=k*c.x,e+=k*c.y}a.charge=f,a.chargeX=d/f,a.chargeY=e/f}},this._calculateChargeEffect=function(a,b){if(this.__calculateChargeEffect(a,b)){var c=a.nodes;if(c)for(var d,e=0,f=c.length;f>e;e++)d=c[e],d&&this._calculateChargeEffect(d,b)}},this.__calculateChargeEffect=function(a,b){if(a.point!=b){var c,d=a.chargeX-b.x,e=a.chargeY-b.y,f=d*d+e*e,g=Math.sqrt(f),h=1/g;if((a.x2-a.x1)*h<j)return c=a.charge*h*h,b.dx-=d*c,b.dy-=e*c,!1;a.point&&(isFinite(h)?a.pointCharge&&(c=a.pointCharge*h*h,b.dx-=d*c,b.dy-=e*c):(b.dx-=10*Math.random(),b.dy-=10*Math.random()))}return!0}}}(nx,nx.global),function(a){a.data.Force=function(){function a(a){return function(b,c,d,e){if(b.point!==a){var f,g=b.cx-a.x,h=b.cy-a.y,i=1/Math.sqrt(g*g+h*h);if(o>(e-c)*i)return f=b.charge*i*i,a.px-=g*f,a.py-=h*f,!0;b.point&&isFinite(i)&&(f=b.pointCharge*i*i,a.px-=g*f,a.py-=h*f)}return!b.charge}}var d,e,f,g={},h=[100,100],i=0,j=.9,k=function(){return 100},l=function(){return 1},m=-1200,n=.1,o=.8,p=[],q=[];return g.tick=function(){if((i*=.99)<.005)return i=0,!0;var g,k,l,o,r,s,t,u,v,w=p.length,x=q.length;for(k=0;x>k;++k)l=q[k],o=l.source,r=l.target,u=r.x-o.x,v=r.y-o.y,(s=u*u+v*v)&&(s=i*e[k]*((s=Math.sqrt(s))-d[k])/s,u*=s,v*=s,r.x-=u*(t=o.weight/(r.weight+o.weight)),r.y-=v*t,o.x+=u*(t=1-t),o.y+=v*t);if((t=i*n)&&(u=h[0]/2,v=h[1]/2,k=-1,t))for(;++k<w;)l=p[k],l.x+=(u-l.x)*t,l.y+=(v-l.y)*t;if(m)for(b(g=c(p),i,f),k=-1;++k<w;)(l=p[k]).fixed||g.visit(a(l));for(k=-1;++k<w;)l=p[k],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*j,l.y-=(l.py-(l.py=l.y))*j)},g.nodes=function(a){return arguments.length?(p=a,g):p},g.links=function(a){return arguments.length?(q=a,g):q},g.distance=k,g.charge=function(a){return arguments.length?(m="function"==typeof a?a:+a,g):m},g.size=function(a){return arguments.length?(h=a,g):h},g.alpha=function(a){return arguments.length?(i?i=a>0?a:0:a>0&&(i=a,g.tick()),g):i},g.start=function(){function a(a,d){for(var e,f=b(c),g=-1,h=f.length;++g<h;)if(!isNaN(e=f[g][a]))return e;return Math.random()*d}function b(){if(!j){for(j=[],i=0;o>i;++i)j[i]=[];for(i=0;r>i;++i){var a=q[i];j[a.source.index].push(a.target),j[a.target.index].push(a.source)}}return j[c]}var c,i,j,n,o=p.length,r=q.length,s=h[0],t=h[1];for(c=0;o>c;++c)(n=p[c]).index=c,n.weight=0;for(d=[],e=[],c=0;r>c;++c)n=q[c],"number"==typeof n.source&&(n.source=p[n.source]),"number"==typeof n.target&&(n.target=p[n.target]),d[c]=k.call(this,n,c),e[c]=l.call(this,n,c),++n.source.weight,++n.target.weight;for(c=0;o>c;++c)n=p[c],isNaN(n.x)&&(n.x=a("x",s)),isNaN(n.y)&&(n.y=a("y",t)),isNaN(n.px)&&(n.px=n.x),isNaN(n.py)&&(n.py=n.y);if(f=[],"function"==typeof m)for(c=0;o>c;++c)f[c]=+m.call(this,p[c],c);else for(c=0;o>c;++c)f[c]=m;return g.resume()},g.resume=function(){return g.alpha(.1)},g.stop=function(){return g.alpha(0)},g};var b=function(a,c,d){var e=0,f=0;if(a.charge=0,!a.leaf)for(var g,h=a.nodes,i=h.length,j=-1;++j<i;)g=h[j],null!=g&&(b(g,c,d),a.charge+=g.charge,e+=g.charge*g.cx,f+=g.charge*g.cy);if(a.point){a.leaf||(a.point.x+=Math.random()-.5,a.point.y+=Math.random()-.5);var k=c*d[a.point.index];a.charge+=a.pointCharge=k,e+=k*a.point.x,f+=k*a.point.y}a.cx=e/a.charge,a.cy=f/a.charge},c=function(a,b,c,f,g){function h(a,b,c,d,e,f){if(!isNaN(b.x)&&!isNaN(b.y))if(a.leaf){var g=a.point;g?Math.abs(g.x-b.x)+Math.abs(g.y-b.y)<.01?i(a,b,c,d,e,f):(a.point=null,i(a,g,c,d,e,f),i(a,b,c,d,e,f)):a.point=b}else i(a,b,c,d,e,f)}function i(a,b,c,e,f,g){var i=.5*c+.5*f,j=.5*e+.5*g,k=b.x>=i,l=b.y>=j,m=(l<<1)+k;a.leaf=!1,a=a.nodes[m]||(a.nodes[m]=d()),k?c=i:f=i,l?e=j:g=j,h(a,b,c,e,f,g)}var j,k=-1,l=a.length;if(arguments.length<5)if(3===arguments.length)g=c,f=b,c=b=0;else for(b=c=1/0,f=g=-1/0;++k<l;)j=a[k],j.x<b&&(b=j.x),j.y<c&&(c=j.y),j.x>f&&(f=j.x),j.y>g&&(g=j.y);var m=f-b,n=g-c;m>n?g=c+m:f=b+n;var o=d();return o.add=function(a){h(o,a,b,c,f,g)},o.visit=function(a){e(a,o,b,c,f,g)},a.forEach(o.add),o},d=function(){return{leaf:!0,nodes:[],point:null}},e=function(a,b,c,d,f,g){if(!a(b,c,d,f,g)){var h=.5*(c+f),i=.5*(d+g),j=b.nodes;j[0]&&e(a,j[0],c,d,h,i),j[1]&&e(a,j[1],h,d,f,i),j[2]&&e(a,j[2],c,i,h,g),j[3]&&e(a,j[3],h,i,f,g)}}}(nx,nx.global),function(a){a.define("nx.data.Convex",{"static":!0,methods:{multiply:function(a,b,c){return(a.x-c.x)*(b.y-c.y)-(b.x-c.x)*(a.y-c.y)},dis:function(a,b){return Math.sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y))},process:function(a){var b,c,d,e=[],f=a.length,g=0,h=2;for(b=1;f>b;b++)(a[b].y<a[g].y||a[b].y===a[g].y&&a[b].x<a[g].x)&&(g=b);for(d=a[0],a[0]=a[g],a[g]=d,b=1;f-1>b;b++){for(g=b,c=b+1;f>c;c++)(this.multiply(a[c],a[g],a[0])>0||0===this.multiply(a[c],a[g],a[0])&&this.dis(a[0],a[c])<this.dis(a[0],a[g]))&&(g=c);d=a[b],a[b]=a[g],a[g]=d}for(e[0]=a[0],e[1]=a[1],e[2]=a[2],b=3;f>b;b++){for(;h>0&&this.multiply(a[b],e[h],e[h-1])>=0;)h--,e.pop();e[++h]=a[b]}return e}}})}(nx,nx.global),function(a){var b=a.geometry.Vector;a.define("nx.data.Vertex",a.data.ObservableObject,{events:["updateCoordinate"],properties:{id:{},positionGetter:{value:function(){return function(){return{x:a.path(this._data,"x")||0,y:a.path(this._data,"y")||0}}}},positionSetter:{value:function(){return function(b){if(this._data){var c=a.path(this._data,"x"),d=a.path(this._data,"y");return b.x!==c||b.y!==d?(a.path(this._data,"x",b.x),a.path(this._data,"y",b.y),!0):!1}}}},position:{get:function(){return{x:this._x||0,y:this._y||0}},set:function(a){var b=!1,c={x:this._x,y:this._y};void 0!==a.x&&this._x!==a.x&&(this._x=a.x,b=!0),void 0!==a.y&&this._y!==a.y&&(this._y=a.y,b=!0),b&&(this.positionSetter().call(this,{x:this._x,y:this._y}),this.fire("updateCoordinate",{oldPosition:c,newPosition:{x:this._x,y:this._y}}),this.notify("vector"))}},x:{get:function(){return this._x||0},set:function(a){this.position({x:parseFloat(a)})}},y:{get:function(){return this._y||0},set:function(a){this.position({y:parseFloat(a)})}},vector:{get:function(){var a=this.position();return new b(a.x,a.y)}},restricted:{value:!1},visible:{get:function(){return void 0!==this._visible?this._visible:!0},set:function(b){this._visible=b;var c=this.graph();b===!1?this.generated()&&(a.each(this.edgeSetCollections(),function(a,b){c.deleteEdgeSetCollection(b)},this),c.removeVertex(this.id())):this.restricted()||this.generated()||(c.generateVertex(this),a.each(this.edgeSets(),function(a){c._generateConnection(a)}));var d=this.parentVertexSet();d&&c.updateVertexSet(d)}},generated:{value:!1},updated:{value:!1},type:{value:"vertex"},edgeSets:{value:function(){return{}}},edgeSetCollections:{value:function(){return{}}},edges:{get:function(){var b={};return a.each(this.edgeSets(),function(c){a.extend(b,c.edges())}),b}},connectedVertices:{get:function(){var a={};return this.eachConnectedVertex(function(b,c){a[c]=b},this),a}},graph:{},parentVertexSet:{},rootVertexSet:{get:function(){for(var a=this.parentVertexSet();a&&a.parentVertexSet();)a=a.parentVertexSet();return a}},generatedRootVertexSet:{get:function(){for(var a,b=this.parentVertexSet();b;)b.generated()&&b.activated()&&(a=b),b=b.parentVertexSet();return a}},selected:{value:!1}},methods:{set:function(b,c){this.has(b)?this[b].call(this,c):(a.path(this._data,b,c),this.notify(b))},get:function(b){return this.has(b)?this[b].call(this):a.path(this._data,b)},has:function(a){var b=this[a];return b&&"property"==b.__type__},getData:function(){return this._data},addEdgeSet:function(a,b){var c=this.edgeSets();c[b]=a},removeEdgeSet:function(a){var b=this.edgeSets();delete b[a]},addEdgeSetCollection:function(a,b){var c=this.edgeSetCollections();c[b]=a},removeEdgeSetCollection:function(a){var b=this.edgeSetCollections();delete b[a]},eachConnectedVertex:function(b,c){var d=this.id();a.each(this.edgeSets(),function(a){var e=a.sourceID()==d?a.target():a.source();e.visible()&&!e.restricted()&&b.call(c||this,e,e.id())},this),a.each(this.edgeSetCollections(),function(a){var e=a.sourceID()==d?a.target():a.source();e.visible()&&!e.restricted()&&b.call(c||this,e,e.id())},this)},translate:function(a,b){var c=this.position();null!=a&&(c.x+=a),null!=b&&(c.y+=b),this.position(c)}}})}(nx,nx.global),function(a){var b=a.geometry.Line;a.define("nx.data.Edge",a.data.ObservableObject,{events:["updateCoordinate"],properties:{source:{value:null},target:{value:null},sourceID:{value:null},targetID:{value:null},linkKey:{},reverseLinkKey:{},generated:{value:!1},updated:{value:!1},type:{value:"edge"},id:{},parentEdgeSet:{},line:{get:function(){return new b(this.source().vector(),this.target().vector())}},position:{get:function(){return{x1:this.source().get("x"),y1:this.source().get("y"),x2:this.target().get("x"),y2:this.target().get("y")}}},reverse:{value:!1},graph:{}},methods:{getData:function(){return this._data},attachEvent:function(){this.source().on("updateCoordinate",this._updateCoordinate,this),this.target().on("updateCoordinate",this._updateCoordinate,this)},_updateCoordinate:function(){this.fire("updateCoordinate")},dispose:function(){this.source().off("updateCoordinate",this._updateCoordinate,this),this.target().off("updateCoordinate",this._updateCoordinate,this),this.inherited()}}})}(nx,nx.global),function(a){a.util;a.define("nx.data.VertexSet",a.data.Vertex,{properties:{position:{get:function(){return{x:this._x||0,y:this._y||0}},set:function(b){var c=!1,d={x:this._x,y:this._y};if(void 0!==b.x&&this._x!==b.x&&(this._x=b.x,c=!0),void 0!==b.y&&this._y!==b.y&&(this._y=b.y,c=!0),c){this.positionSetter().call(this,{x:this._x,y:this._y});var e=this._x-d.x,f=this._y-d.y;a.each(this.vertices(),function(a){a.translate(e,f)}),a.each(this.vertexSet(),function(a){a.translate(e,f)}),this.fire("updateCoordinate",{oldPosition:d,newPosition:{x:this._x,y:this._y}}),this.notify("vector")}}},vertices:{value:function(){return{}}},vertexSet:{value:function(){return{}}},subVertices:{get:function(){var a={};return this.eachSubVertex(function(b,c){a[c]=b}),a}},subVertexSet:{get:function(){var a={};return this.eachSubVertexSet(function(b,c){a[c]=b}),a}},visible:{value:!0},inheritedVisible:{get:function(){var b=!0;return a.each(this.vertices(),function(a){a.visible()&&(b=!1)}),a.each(this.vertexSet(),function(a){a.visible()&&(b=!1)},this),!b}},type:{value:"vertexSet"},activated:{get:function(){return void 0!==this._activated?this._activated:!0},set:function(a){return this._activated!==a?(a?this._collapse():this._expand(),!0):!1}}},methods:{initNodes:function(){var b=this.graph(),c=this.get("nodes");a.each(c,function(a){var c=b.vertices().getItem(a)||b.vertexSets().getItem(a);if(c&&!c.restricted()){var d="vertex"==c.type()?this.vertices():this.vertexSet();d[a]=c,c.restricted(!0),c.parentVertexSet(this)}else console&&console.warn("NodeSet data error",this.id(),a)},this)},addVertex:function(a){var b=this.get("nodes");if(a){var c=a.id(),d="vertex"==a.type()?this.vertices():this.vertexSet();d[c]=a,a.restricted(!0);var e=a.parentVertexSet();e&&(e.removeVertex(c),e.updated(!0)),a.parentVertexSet(this),b.push(a.id()),this.updated(!0)}},removeVertex:function(a){var b=this.get("nodes"),c=this.vertices()[a]||this.vertexSet()[a];c&&(c.parentVertexSet(null),delete this.vertices()[a],delete this.vertexSet()[a],b.splice(b.indexOf(a),1),this.updated(!0))},eachSubVertex:function(b,c){a.each(this.vertices(),b,c||this),a.each(this.vertexSet(),function(a){a.eachSubVertex(b,c)},this)},eachSubVertexSet:function(b,c){a.each(this.vertexSet(),b,c||this),a.each(this.vertexSet(),function(a){a.eachSubVertexSet(b,c)},this)},getSubEdgeSets:function(){var b={};return this.eachSubVertex(function(c){a.each(c.edgeSets(),function(a,c){b[c]=a})},this),b},_expand:function(){var b=this.graph(),c=this.parentVertexSet();c&&c.activated(!1),this._activated=!1,a.each(this.edgeSetCollections(),function(a,c){b.deleteEdgeSetCollection(c)},this),a.each(this.vertices(),function(a){a.restricted(!1),a.visible()&&b.generateVertex(a)},this),a.each(this.vertexSet(),function(a){a.restricted(!1),a.visible()&&b.generateVertexSet(a)},this),this.visible(!1),this._generateConnection()},_collapse:function(){var b=this.graph();this._activated=!0,this.eachSubVertex(function(c){c.restricted(!0),c.generated()&&a.each(c.edgeSetCollections(),function(a,c){b.deleteEdgeSetCollection(c)})},this),a.each(this.vertexSet(),function(a,c){a.restricted(!0),a.generated()&&b.removeVertexSet(c,!1)},this),a.each(this.vertices(),function(a,c){a.restricted(!0),a.generated()&&b.removeVertex(c)},this),this.visible(!0),this._generateConnection()},_generateConnection:function(){var b=this.graph();a.each(this.getSubEdgeSets(),function(a){b._generateConnection(a)},this)}}})}(nx,nx.global),function(a){a.define("nx.data.EdgeSet",a.data.Edge,{properties:{edges:{value:function(){return{}}},type:{value:"edgeSet"},activated:{get:function(){return void 0!==this._activated?this._activated:!0
-},set:function(b){var c=this.graph();a.each(this.edges(),function(a,d){b?c.removeEdge(d,!1):c.generateEdge(a)},this),this._activated=b}}},methods:{addEdge:function(a){var b=this.edges();b[a.id()]=a},removeEdge:function(a){var b=this.edges();delete b[a]}}})}(nx,nx.global),function(a){a.define("nx.data.EdgeSetCollection",a.data.Edge,{properties:{edgeSets:{value:function(){return{}}},edges:{get:function(){var b={};return a.each(this.edgeSets(),function(c){a.extend(b,c.edges())}),b}},type:{value:"edgeSetCollection"},activated:{get:function(){return void 0!==this._activated?this._activated:!0},set:function(b){this.graph();a.each(this.edgeSets(),function(a){a.activated(b,{force:!0})}),this._activated=b}}},methods:{addEdgeSet:function(a){var b=this.edgeSets();b[a.linkKey()]=a},removeEdgeSet:function(a){var b=this.edgeSets();delete b[a]}}})}(nx,nx.global),function(a){a.util;a.define("nx.data.ObservableGraph.Vertices",a.data.ObservableObject,{events:["addVertex","removeVertex","deleteVertex","updateVertex","updateVertexCoordinate"],properties:{nodes:{get:function(){return this._nodes||[]},set:function(b){this._nodes&&a.is(this._nodes,a.data.ObservableCollection)&&this._nodes.off("change",this._nodesCollectionProcessor,this),this.vertices().clear(),a.is(b,a.data.ObservableCollection)?(b.on("change",this._nodesCollectionProcessor,this),b.each(function(a){this._addVertex(a)},this),this._nodes=b):b&&(a.each(b,this._addVertex,this),this._nodes=b.slice())}},vertexFilter:{},vertices:{value:function(){var b=new a.data.ObservableDictionary;return b.on("change",function(b,c){var d=c.action,e=c.items;"clear"==d&&a.each(e,function(a){this.deleteVertex(a.key())},this)},this),b}},visibleVertices:{get:function(){var a={};return this.eachVertex(function(b,c){b.visible()&&(a[c]=b)}),a}},vertexPositionGetter:{},vertexPositionSetter:{}},methods:{addVertex:function(b,c){{var d,e=this.nodes(),f=this.vertices();this.identityKey()}return a.is(e,a.data.ObservableCollection)?(e.add(b),d=f.getItem(f.count()-1)):(d=this._addVertex(b,c),d&&e.push(b)),d?(c&&d.sets(c),this.generateVertex(d),d):null},_addVertex:function(b){var c=this.vertices(),d=this.identityKey();("string"==typeof b||"number"==typeof b)&&(b={data:b});var e=a.path(b,d);if(e=void 0!==e?e:this.vertexSets().count()+this.vertices().count(),c.getItem(e))return null;var f=new a.data.Vertex(b),g=this.vertexPositionGetter(),h=this.vertexPositionSetter();if(g&&h&&(f.positionGetter(g),f.positionSetter(h)),f.sets({graph:this,id:e}),a.is(b,a.data.ObservableObject)){var i=b.set;b.set=function(a,c){i.call(b,a,c),-1==f.__properties__.indexOf(a)&&(f.has(a)?f[a].call(f,c):f.notify(a))}}f.position(f.positionGetter().call(f)),c.setItem(e,f);var j=this.vertexFilter();if(j&&a.is(j,Function)){var k=j.call(this,b,f);f.visible(k===!1)}return f},generateVertex:function(a){!a.visible()||a.generated()||a.restricted()||(a.on("updateCoordinate",this._updateVertexCoordinateFN,this),this.fire("addVertex",a),a.generated(!0))},_updateVertexCoordinateFN:function(a){this.fire("updateVertexCoordinate",a)},removeVertex:function(b){var c=this.vertices().getItem(b);return c?(a.each(c.edgeSets(),function(a,b){this.removeEdgeSet(b)},this),a.each(c.edgeSetCollections(),function(a,b){this.deleteEdgeSetCollection(b)},this),c.off("updateCoordinate",this._updateVertexCoordinateFN,this),c.generated(!1),this.fire("removeVertex",c),c):!1},deleteVertex:function(b){var c=this.nodes(),d=this.getVertex(b);if(d)if(a.is(c,a.data.ObservableCollection)){var e=d.getData();c.remove(e)}else{var f=this.nodes().indexOf(d.getData());-1!=f&&this.nodes().splice(f,1),this._deleteVertex(b)}},_deleteVertex:function(b){var c=this.vertices().getItem(b);if(!c)return!1;a.each(c.edgeSets(),function(a){this.deleteEdgeSet(a.linkKey())},this),a.each(c.edgeSetCollections(),function(a){this.deleteEdgeSetCollection(a.linkKey())},this);var d=c.parentVertexSet();d&&d.removeVertex(b),c.off("updateCoordinate",this._updateVertexCoordinateFN,this),c.generated(!1),this.fire("deleteVertex",c),this.vertices().removeItem(b),c.dispose()},eachVertex:function(a,b){this.vertices().each(function(c,d){a.call(b||this,c.value(),d)})},getVertex:function(a){return this.vertices().getItem(a)},_nodesCollectionProcessor:function(b,c){var d=c.items,e=c.action,f=this.identityKey();"add"==e?a.each(d,function(a){var b=this._addVertex(a);this.generateVertex(b)},this):"remove"==e?a.each(d,function(b){var c=a.path(b,f);this._deleteVertex(c)},this):"clear"==e&&this.vertices().clear()}}})}(nx,nx.global),function(a){a.define("nx.data.ObservableGraph.VertexSets",a.data.ObservableObject,{events:["addVertexSet","removeVertexSet","updateVertexSet","updateVertexSetCoordinate"],properties:{nodeSet:{get:function(){return this._nodeSet||[]},set:function(b){this._nodeSet&&a.is(this._nodeSet,a.data.ObservableCollection)&&this._nodeSet.off("change",this._nodeSetCollectionProcessor,this),this.vertexSets().clear(),a.is(b,a.data.ObservableCollection)?(b.on("change",this._nodeSetCollectionProcessor,this),b.each(function(a){this._addVertexSet(a)},this),this._nodeSet=b):b&&(a.each(b,this._addVertexSet,this),this._nodeSet=b.slice()),this.eachVertexSet(this.initVertexSet,this)}},vertexSets:{value:function(){var b=new a.data.ObservableDictionary;return b.on("change",function(b,c){var d=c.action,e=c.items;"clear"==d&&a.each(e,function(a){this.removeVertexSet(a.key())},this)},this),b}},visibleVertexSets:{get:function(){var a={};return this.eachVertexSet(function(b,c){b.visible()&&(a[c]=b)}),a}}},methods:{addVertexSet:function(b,c){var d,e=this.nodeSet(),f=this.vertexSets();if(a.is(e,a.data.ObservableCollection)?(e.add(b),d=f.getItem(f.count()-1)):(e.push(b),d=this._addVertexSet(b)),!d)return null;if(c&&d.sets(c),null!=c.parentVertexSetID){var g=this.getVertexSet(c.parentVertexSetID);g&&g.addVertex(d)}return this.initVertexSet(d),this.generateVertexSet(d),d.activated(!0,{force:!0}),this.updateVertexSet(d),d},_addVertexSet:function(b){var c=this.identityKey(),d=this.vertexSets();("string"==typeof b||"number"==typeof b)&&(b={data:b});var e=a.path(b,c);if(e=void 0!==e?e:this.vertexSets().count()+this.vertices().count(),d.getItem(e))return null;var f=new a.data.VertexSet(b),g=this.vertexPositionGetter(),h=this.vertexPositionSetter();if(g&&h&&(f.positionGetter(g),f.positionSetter(h)),f.sets({graph:this,type:"vertexSet",id:e}),a.is(b,a.data.ObservableObject)){var i=b.set;b.set=function(a,c){i.call(b,a,c),-1==f.__properties__.indexOf(a)&&(f.has(a)?f[a].call(f,c):f.notify(a))}}return f.position(f.positionGetter().call(f)),this.vertexSets().setItem(e,f),f},initVertexSet:function(a){a.initNodes()},generateVertexSet:function(a){a.visible()&&!a.generated()&&(a.generated(!0),a.on("updateCoordinate",this._updateVertexSetCoordinateFN,this),this.fire("addVertexSet",a))},_updateVertexSetCoordinateFN:function(a){this.fire("updateVertexSetCoordinate",a)},updateVertexSet:function(a){a.generated()&&(a.updated(!1),this.fire("updateVertexSet",a))},removeVertexSet:function(b){var c=this.vertexSets().getItem(b);return c?(c.activated(!0),a.each(c.edgeSets(),function(a,b){this.removeEdgeSet(b)},this),a.each(c.edgeSetCollections(),function(a,b){this.deleteEdgeSetCollection(b)},this),c.generated(!1),c.off("updateCoordinate",this._updateVertexSetCoordinateFN,this),void this.fire("removeVertexSet",c)):!1},deleteVertexSet:function(b){var c=this.nodeSet(),d=this.getVertexSet(b);if(d)if(a.is(c,a.data.ObservableCollection)){var e=d.getData();c.remove(e)}else{var f=this.nodeSet().indexOf(d.getData());-1!=f&&this.nodeSet().splice(f,1),this._deleteVertexSet(b)}},_deleteVertexSet:function(b){var c=this.vertexSets().getItem(b);if(!c)return!1;c.generated()&&c.activated(!1);var d=c.parentVertexSet();d&&d.removeVertex(b),a.each(c.vertices(),function(a){d?d.addVertex(a):a.parentVertexSet(null)}),a.each(c.vertexSet(),function(a){d?d.addVertex(a):a.parentVertexSet(null)}),c.off("updateCoordinate",this._updateVertexCoordinateFN,this),c.generated(!1),this.vertexSets().removeItem(b),this.fire("deleteVertexSet",c),c.dispose()},eachVertexSet:function(a,b){this.vertexSets().each(function(c,d){a.call(b||this,c.value(),d)})},getVertexSet:function(a){return this.vertexSets().getItem(a)},_nodeSetCollectionProcessor:function(b,c){var d=c.items,e=c.action,f=this.identityKey();"add"==e?a.each(d,function(a){var b=this._addVertexSet(a);this.generateVertexSet(b)},this):"remove"==e?a.each(d,function(b){var c=a.path(b,f);this._deleteVertexSet(c)},this):"clear"==e&&this.vertexSets().clear()}}})}(nx,nx.global),function(a){a.define("nx.data.ObservableGraph.Edges",a.data.ObservableObject,{events:["addEdge","removeEdge","deleteEdge","updateEdge","updateEdgeCoordinate"],properties:{links:{get:function(){return this._links||[]},set:function(b){this._links&&a.is(this._links,a.data.ObservableCollection)&&this._links.off("change",this._linksCollectionProcessor,this),this.edgeSetCollections().clear(),this.edgeSets().clear(),this.edges().clear(),a.is(b,a.data.ObservableCollection)?(b.on("change",this._linksCollectionProcessor,this),b.each(function(a){this._addEdge(a)},this),this._links=b):b&&(a.each(b,this._addEdge,this),this._links=b.slice())}},edgeFilter:{},edges:{value:function(){var b=new a.data.ObservableDictionary;return b.on("change",function(b,c){var d=c.action,e=c.items;"clear"==d&&a.each(e,function(a){this.deleteEdge(a.key())},this)},this),b}}},methods:{addEdge:function(b,c){var d,e=this.links(),f=this.edges();if(null==b.source||null==b.target)return void 0;if(a.is(e,a.data.ObservableCollection)?(e.add(b),d=f.getItem(f.count()-1)):(d=this._addEdge(b),d&&e.push(b)),!d)return null;c&&d.sets(c);var g=d.parentEdgeSet();return g.generated()?this.updateEdgeSet(g):this.generateEdgeSet(g),d},_addEdge:function(b){{var c,d,e,f,g=this.edges();this.identityKey()}if(null==b.source||null==b.target)return void 0;if(e=null!=a.path(b,"source")?a.path(b,"source"):b.source,c=this.vertices().getItem(e),f=null!=a.path(b,"target")?a.path(b,"target"):b.source,d=this.vertices().getItem(f),c&&d){var h=new a.data.Edge(b),i=null!=a.path(b,"id")?a.path(b,"id"):h.__id__;if(g.getItem(i))return null;h.sets({id:i,source:c,target:d,sourceID:e,targetID:f,graph:this}),h.attachEvent(),g.setItem(i,h);var j=this.getEdgeSetBySourceAndTarget(e,f);j?j.updated(!0):j=this._addEdgeSet({source:c,target:d,sourceID:e,targetID:f}),h.sets({linkKey:j.linkKey(),reverseLinkKey:j.reverseLinkKey()}),j.addEdge(h),h.parentEdgeSet(j),h.reverse(e!==j.sourceID());var k=this.edgeFilter();if(k&&a.is(k,Function)){var l=k.call(this,b,h);h.visible(l===!1)}return h}return void(console&&console.warn("source node or target node is not defined, or linkMappingKey value error",b,c,d))},generateEdge:function(a){a.generated()||(a.on("updateCoordinate",this._updateEdgeCoordinate,this),this.fire("addEdge",a),a.generated(!0))},removeEdge:function(a,b){var c=this.edges().getItem(a);if(!c)return!1;if(c.generated(!1),c.off("updateCoordinate",this._updateEdgeCoordinate,this),this.fire("removeEdge",c),b!==!1){var d=c.parentEdgeSet();this.updateEdgeSet(d)}},deleteEdge:function(b,c){var d=this.getEdge(b);if(!d)return!1;var e=this.links();if(a.is(e,a.data.ObservableCollection))e.removeAt(d.getData());else{var f=e.indexOf(d.getData());-1!=f&&e.splice(f,1),this._deleteEdge(b,c)}},_deleteEdge:function(a,b){var c=this.getEdge(a);if(!c)return!1;if(c.off("updateCoordinate",this._updateEdgeCoordinate,this),b!==!1){var d=c.parentEdgeSet();d.removeEdge(a),this.updateEdgeSet(d)}this.fire("deleteEdge",c),this.edges().removeItem(a),c.dispose()},_updateEdgeCoordinate:function(a){this.fire("updateEdgeCoordinate",a)},getEdge:function(a){return this.edges().getItem(a)},getEdgesBySourceAndTarget:function(a,b){var c=this.getEdgeSetBySourceAndTarget(a,b);return c&&c.getEdges()},getEdgesByVertices:function(){},getInternalEdgesByVertices:function(){},getExternalEdgesByVertices:function(){},_linksCollectionProcessor:function(b,c){var d=c.items,e=c.action;if("add"==e)a.each(d,function(a){var b=this._addEdge(a),c=b.parentEdgeSet();c.generated()?this.updateEdgeSet(c):this.generateEdgeSet(c)},this);else if("remove"==e){var f=[];this.edges().each(function(a){var b=a.value();-1!=d.indexOf(b.getData())&&f.push(b.id())},this),a.each(f,function(a){this._deleteEdge(a)},this)}else"clear"==e&&this.edges().clear()}}})}(nx,nx.global),function(a){a.define("nx.data.ObservableGraph.EdgeSets",a.data.ObservableObject,{events:["addEdgeSet","updateEdgeSet","removeEdgeSet","deleteEdgeSet","updateEdgeSetCoordinate"],properties:{edgeSets:{value:function(){var b=new a.data.ObservableDictionary;return b.on("change",function(b,c){var d=c.action,e=c.items;"clear"==d&&a.each(e,function(a){this.deleteEdgeSet(a.key())},this)},this),b}}},methods:{_addEdgeSet:function(b){var c=new a.data.EdgeSet,d=c.__id__,e=b.sourceID+"_"+b.targetID,f=b.targetID+"_"+b.sourceID;return c.sets(b),c.sets({graph:this,linkKey:e,reverseLinkKey:f,id:d}),c.source().addEdgeSet(c,e),c.target().addEdgeSet(c,e),c.attachEvent(),this.edgeSets().setItem(e,c),c},generateEdgeSet:function(a){!a.generated()&&a.source().generated()&&a.target().generated()&&(a.generated(!0),a.on("updateCoordinate",this._updateEdgeSetCoordinate,this),this.fire("addEdgeSet",a))},updateEdgeSet:function(a){a.generated()&&a.source().generated()&&a.target().generated()&&(a.updated(!1),this.fire("updateEdgeSet",a))},removeEdgeSet:function(b){var c=this.edgeSets().getItem(b);return c?(c.off("updateCoordinate",this._updateEdgeSetCoordinate,this),a.each(c.edges(),function(a,b){this.removeEdge(b,!1)},this),c.generated(!1),c._activated=!0,void this.fire("removeEdgeSet",c)):!1},deleteEdgeSet:function(b){var c=this.edgeSets().getItem(b);return c?(c.off("updateCoordinate",this._updateEdgeSetCoordinate,this),a.each(c.edges(),function(a,b){this.deleteEdge(b,!1)},this),c.source().removeEdgeSet(b),c.target().removeEdgeSet(b),this.fire("deleteEdgeSet",c),this.edgeSets().removeItem(b),void c.dispose()):!1},_updateEdgeSetCoordinate:function(a){this.fire("updateEdgeSetCoordinate",a)},getEdgeSetBySourceAndTarget:function(b,c){var d=this.edgeSets(),e=a.is(b,a.data.Vertex)?b.id():b,f=a.is(c,a.data.Vertex)?c.id():c,g=e+"_"+f,h=f+"_"+e;return d.getItem(g)||d.getItem(h)},eachEdgeSet:function(a,b){this.edgeSets().each(function(c,d){a.call(b||this,c.value(),d)})}}})}(nx,nx.global),function(a){a.define("nx.data.ObservableGraph.EdgeSetCollections",a.data.ObservableObject,{events:["addEdgeSetCollection","removeEdgeSetCollection","deleteEdgeSetCollection","updateEdgeSetCollection","updateEdgeSetCollectionCoordinate"],properties:{edgeSetCollections:{value:function(){var b=new a.data.ObservableDictionary;return b.on("change",function(b,c){var d=c.action,e=c.items;"clear"==d&&a.each(e,function(a){a.value()&&this.deleteEdgeSetCollection(a.value().linkKey())},this)},this),b}}},methods:{_addEdgeSetCollection:function(b){var c=new a.data.EdgeSetCollection,d=c.__id__,e=b.sourceID+"_"+b.targetID,f=b.targetID+"_"+b.sourceID;return c.sets(b),c.sets({graph:this,linkKey:e,reverseLinkKey:f,id:d}),c.source().addEdgeSetCollection(c,e),c.target().addEdgeSetCollection(c,e),c.attachEvent(),this.edgeSetCollections().setItem(e,c),c},generateEdgeSetCollection:function(a){a.generated(!0),a.on("updateCoordinate",this._updateEdgeSetCollectionCoordinate,this),this.fire("addEdgeSetCollection",a)},updateEdgeSetCollection:function(a){a.updated(!0),this.fire("updateEdgeSetCollection",a)},removeEdgeSetCollection:function(a){var b=this.edgeSetCollections().getItem(a);return b?(b.generated(!1),b.off("updateCoordinate",this._updateEdgeSetCollectionCoordinate,this),void this.fire("removeEdgeSetCollection",b)):!1},deleteEdgeSetCollection:function(a){var b=this.edgeSetCollections().getItem(a);return b?(b.off("updateCoordinate",this._updateEdgeSetCollectionCoordinate,this),b.source().removeEdgeSetCollection(a),b.target().removeEdgeSetCollection(a),this.fire("deleteEdgeSetCollection",b),this.edgeSetCollections().removeItem(a),void b.dispose()):!1},getEdgeSetCollectionBySourceAndTarget:function(b,c){var d=this.edgeSetCollections(),e=a.is(b,a.data.Vertex)?b.id():b,f=a.is(c,a.data.Vertex)?c.id():c,g=e+"_"+f,h=f+"_"+e;return d.getItem(g)||d.getItem(h)},_updateEdgeSetCollectionCoordinate:function(a){this.fire("updateEdgeSetCollectionCoordinate",a)},eachEdgeCollections:function(a,b){this.edgeSetCollections().each(function(c,d){a.call(b||this,c.value(),d)})},_generateConnection:function(a){if(a.source().visible()&&a.target().visible()){var b=this._getGeneratedRootVertexSetOfEdgeSet(a);if(b.source&&b.target&&b.source!=b.target&&b.source.visible()&&b.target.visible())if(b.source.id()==a.sourceID()&&b.target.id()==a.targetID())this.generateEdgeSet(a);else{var c=this.getEdgeSetCollectionBySourceAndTarget(b.source.id(),b.target.id());c||(c=this._addEdgeSetCollection({source:b.source,target:b.target,sourceID:b.source.id(),targetID:b.target.id()}),this.generateEdgeSetCollection(c)),c.addEdgeSet(a),this.updateEdgeSetCollection(c)}}},_getGeneratedRootVertexSetOfEdgeSet:function(a){var b=a.source();b.generated()||(b=b.generatedRootVertexSet());var c=a.target();return c.generated()||(c=c.generatedRootVertexSet()),{source:b,target:c}}}})}(nx,nx.global),function(a){a.define("nx.data.ObservableGraph.NeXtForceProcessor",{methods:{process:function(b,c){var d=(new Date,{nodes:b.nodes,links:[]}),e={};a.each(b.nodes,function(a,b){e[a[c]]=b}),d.links=[],a.each(b.links,function(b){a.is(b.source,"Object")||void 0===e[b.source]||a.is(b.target,"Object")||void 0===e[b.target]||d.links.push({source:e[b.source],target:e[b.target]})});var f=new a.data.NextForce;if(f.setTopoData(b),console.log(d.nodes.length),d.nodes.length<50){for(;;)if(f.tick(),f.maxEnergy<.1*d.nodes.length)break}else for(var g=0; ++g<900;)f.tick();return console.log(f.maxEnergy),b}}})}(nx,nx.global,nx.logger),function(a){a.define("nx.data.ObservableGraph.ForceProcessor",{methods:{process:function(b, c){{var d;new Date}d={nodes:b.nodes,links:[]};var e={};a.each(b.nodes,function(a, b){e[a[c]]=b}),a.each(b.links,function(b){a.is(b.source,"Object")||void 0===e[b.source]||a.is(b.target,"Object")||void 0===e[b.target]||d.links.push("ixd"==c?{source:b.source,target:b.target}:{source:e[b.source],target:e[b.target]})});var f=new a.data.Force;for(f.nodes(d.nodes),f.links(d.links),f.start();f.alpha();)f.tick();return f.stop(),b}}})}(nx,nx.global,nx.logger),function(a){a.define("nx.data.ObservableGraph.QuickProcessor",{methods:{process:function(b,c,d){return a.each(b.nodes,function(a){a.x=Math.floor(Math.random()*d.width()),a.y=Math.floor(Math.random()*d.height())}),b}}})}(nx,nx.global),function(a){var b=a.define("nx.data.ObservableGraph.DataProcessor",{statics:{dataProcessor:{nextforce:new a.data.ObservableGraph.NeXtForceProcessor,force:new a.data.ObservableGraph.ForceProcessor,quick:new a.data.ObservableGraph.QuickProcessor},registerDataProcessor:function(a,b){GRAPH.dataProcessor[a]=b}},properties:{dataProcessor:{},width:{value:100},height:{value:100}},methods:{processData:function(a){var c=this._identityKey,d=this._dataProcessor;if(d){var e=b.dataProcessor[d];return e?e.process(a,c,this):a}return a}}})}(nx,nx.global),function(a){a.define("nx.data.ObservableGraph",a.data.ObservableObject,{mixins:[a.data.ObservableGraph.DataProcessor,a.data.ObservableGraph.Vertices,a.data.ObservableGraph.VertexSets,a.data.ObservableGraph.Edges,a.data.ObservableGraph.EdgeSets,a.data.ObservableGraph.EdgeSetCollections],event:["setTopoData","insertData","clear","startGenerate","endGenerate"],properties:{identityKey:{value:"index"},filter:{},groupBy:{}},methods:{init:function(a){this.inherited(a),this.nodeSet([]),this.nodes([]),this.links([]),this.sets(a),a&&a.data&&this.setTopoData(a.data)},setTopoData:function(a){this.processData(this.getJSON(a));this.clear(),this._generate(a),this.fire("setTopoData",a)},subordinates:function(b, c){"function"==typeof b&&(c=b,b=null);var d;return b?d=a.util.values(b.vertices()).concat(a.util.values(b.vertexSet())):(d=[],a.each(this.vertices(),function(a){var b=a.value();b.parentVertexSet()||d.push(b)}.bind(this)),a.each(this.vertexSets(),function(a){var b=a.value();b.parentVertexSet()||d.push(b)}.bind(this))),c&&a.each(d,c),d},insertData:function(b){var c=b;a.each(b.nodes,function(a){this.addVertex(a)},this),a.each(b.links,function(a){this.addEdge(a)},this),a.each(b.nodeSet,function(a){this.addVertexSet(a)},this),this.fire("insertData",c)},_generate:function(a){this.nodes(a.nodes),this.links(a.links),this.nodeSet(a.nodeSet);var b=this.filter();b&&b.call(this,this),this.fire("startGenerate"),this.eachVertex(this.generateVertex,this),this.eachVertexSet(this.generateVertexSet,this),this.eachEdgeSet(this.generateEdgeSet,this),this.eachVertexSet(function(a){a.activated(!0,{force:!0}),this.updateVertexSet(a)},this),this.fire("endGenerate")},getData:function(){return{nodes:this.nodes(),links:this.links(),nodeSet:this.nodeSet()}},getJSON:function(b){var c=b||this.getData(),d={nodes:[],links:[]};return a.is(c.nodes,a.data.ObservableCollection)?a.each(c.nodes,function(b){d.nodes.push(a.is(b,a.data.ObservableObject)?b.gets():b)}):d.nodes=c.nodes,a.is(c.links,a.data.ObservableCollection)?a.each(c.links,function(b){d.links.push(a.is(b,a.data.ObservableObject)?b.gets():b)}):d.links=c.links,c.nodeSet&&(a.is(c.nodeSet,a.data.ObservableCollection)?(d.nodeSet=[],a.each(c.nodeSet,function(b){d.nodeSet.push(a.is(b,a.data.ObservableObject)?b.gets():b)})):d.nodeSet=c.nodeSet),d},getBound:function(b){var c,d,e,f,g,h,i=b||a.util.values(this.visibleVertices()).concat(a.util.values(this.visibleVertexSets())),j=i[0];return j?(g=j.get?j.get("x"):j.x,h=j.get?j.get("y"):j.y,c=d=g||0,e=f=h||0):(c=d=0,e=f=0),a.each(i,function(a){g=a.get?a.get("x"):a.x,h=a.get?a.get("y"):a.y,c=Math.min(c,g||0),d=Math.max(d,g||0),e=Math.min(e,h||0),f=Math.max(f,h||0)}),{x:c,y:e,left:c,top:e,width:d-c,height:f-e,maxX:d,maxY:f}},getHierarchicalStructure:function(){var b=this.getJSON(),c={},d=[],e=this.identityKey();return a.each(b.nodes,function(b){var f=a.path(b,e),g={id:f,children:[]};d.push(g),c[f]=g}),a.each(b.nodeSet,function(b,f){var g=a.path(b,e),h={id:g,children:[]};b.nodes.forEach(function(a){c[a]?(~(f=d.indexOf(c[a]))&&d.splice(f,1),h.children.push(c[a])):h.children.push({id:a,children:[]})}),d.push(h),c[g]=h}),d},clear:function(){this.nodeSet([]),this.links([]),this.nodes([]),this.fire("clear")},dispose:function(){this.clear(),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.data.UniqObservableCollection",a.data.ObservableCollection,{methods:{add:function(a){return null==a||this.contains(a)?!1:this.inherited(a)},addRange:function(b){if(a.is(b,Array)){for(var c=a.util.uniq(b.slice()),d=0;d<c.length;){var e=c[d];(null==e||this.contains(e))&&c.splice(d,1),d++}return this.inherited(c)}return this.inherited(b)},insert:function(a,b){return null==a||this.contains(a)?!1:this.inherited(a,b)},insertRange:function(b){if(a.is(b,Array)){for(var c=b.slice(),d=0;d<c.length;){var e=c[d];(null==e||this.contains(e))&&c.splice(d,1),d++}return this.inherited(c)}return this.inherited(b)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Config",{events:[],properties:{status:{value:"initializing",binding:{direction:"<>"}},theme:{get:function(){return this._theme||"blue"},set:function(a){this._theme=a,this.notify("themeClass")}},themeClass:{get:function(){return"n-topology-"+this.theme()}},showNavigation:{value:!0},showThumbnail:{value:!1},viewSettingPanel:{get:function(){return this.view("nav").view("customize")}},viewSettingPopover:{get:function(){return this.view("nav").view("settingPopover")}}},methods:{}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Graph",{events:["beforeSetData","afterSetData","insertData","topologyGenerated"],properties:{identityKey:{get:function(){return this._identiyKey||"index"},set:function(a){this._identiyKey=a,this.graph().set("identityKey",a)}},data:{get:function(){return this.graph().getData()},set:function(b){if(null!=b&&a.is(b,Object)&&null!=b.nodes){var c=function(a){this.fire("beforeSetData",a),this.clear(),this.graph().sets({width:this.width(),height:this.height()}),this.graph().setTopoData(a),this.fire("afterSetData",a)};"appended"===this.status()||"generated"==this.status()?c.call(this,b):this.on("ready",function(){c.call(this,b)},this)}}},autoLayout:{get:function(){return this._autoLayout||!1},set:function(a){this._autoLayout=a,this.graph().dataProcessor(a?"force":"")}},vertexPositionGetter:{get:function(){return this._vertexPositionGetter},set:function(a){this._vertexPositionGetter=a,this.graph().set("vertexPositionGetter",a)}},vertexPositionSetter:{get:function(){return this._vertexPositionSetter},set:function(a){this._vertexPositionSetter=a,this.graph().set("vertexPositionSetter",a)}},dataProcessor:{get:function(){return this._dataProcessor},set:function(a){this._dataProcessor=a,this.graph().set("dataProcessor",a)}},graph:{value:function(){return new a.data.ObservableGraph}}},methods:{initGraph:function(){var a=this.graph();a.sets({vertexPositionGetter:this.vertexPositionGetter(),vertexPositionSetter:this.vertexPositionSetter(),identityKey:this.identityKey(),dataProcessor:this.dataProcessor()}),this.autoLayout()&&a.dataProcessor("force");var b=this.getLayer("nodes"),c=this.getLayer("links"),d=this.getLayer("nodeSet"),e=this.getLayer("linkSet");a.on("addVertex",function(a,c){b.addNode(c)},this),a.on("removeVertex",function(a,c){b.removeNode(c.id())},this),a.on("deleteVertex",function(a,c){b.removeNode(c.id())},this),a.on("updateVertex",function(a,c){b.updateNode(c.id())},this),a.on("updateVertexCoordinate",function(){},this),a.on("addEdge",function(a,b){c.addLink(b)},this),a.on("removeEdge",function(a,b){c.removeLink(b.id())},this),a.on("deleteEdge",function(a,b){c.removeLink(b.id())},this),a.on("updateEdge",function(a,b){c.updateLink(b.id())},this),a.on("updateEdgeCoordinate",function(a,b){c.updateLink(b.id())},this),a.on("addEdgeSet",function(a,b){this.supportMultipleLink()?e.addLinkSet(b):b.activated(!1)},this),a.on("removeEdgeSet",function(a,b){e.removeLinkSet(b.linkKey())},this),a.on("deleteEdgeSet",function(a,b){e.removeLinkSet(b.linkKey())},this),a.on("updateEdgeSet",function(a,b){e.updateLinkSet(b.linkKey())},this),a.on("updateEdgeSetCoordinate",function(a,b){this.supportMultipleLink()&&e.updateLinkSet(b.linkKey())},this),a.on("addVertexSet",function(a,b){d.addNodeSet(b)},this),a.on("removeVertexSet",function(a,b){d.removeNodeSet(b.id())},this),a.on("deleteVertexSet",function(a,b){d.removeNodeSet(b.id())},this),a.on("updateVertexSet",function(a, b){d.updateNodeSet(b.id())},this),a.on("updateVertexSetCoordinate",function(){},this),a.on("addEdgeSetCollection",function(a, b){e.addLinkSet(b)},this),a.on("removeEdgeSetCollection",function(a, b){e.removeLinkSet(b.linkKey())},this),a.on("deleteEdgeSetCollection",function(a, b){e.removeLinkSet(b.linkKey())},this),a.on("updateEdgeSetCollection",function(a, b){e.updateLinkSet(b.linkKey())},this),a.on("updateEdgeSetCollectionCoordinate",function(a, b){e.updateLinkSet(b.linkKey())},this),a.on("setTopoData",function(){},this),a.on("insertData",function(){},this),a.on("clear",function(){},this),a.on("startGenerate",function(){this.showLoading(),this.stage().hide()},this),a.on("endGenerate",function(){this._endGenerate()},this)},setTopoData:function(b, c, d){c&&this.on("topologyGenerated",function e(){c.call(d||this,this),this.off("topologyGenerated",e,this)},this),null!=b&&a.is(b,Object)&&null!=b.nodes&&this.data(b)},insertData:function(b){null!=b&&a.is(b,Object)&&(this.graph().insertData(b),this.fire("insertData",b))},getData:function(){return this.data()},_saveData:function(){var a=this.graph().getData();"[object Storage]"===Object.prototype.toString.call(window.localStorage)&&localStorage.setItem("topologyData",JSON.stringify(a))},_loadLastData:function(){if("[object Storage]"===Object.prototype.toString.call(window.localStorage)){var a=JSON.parse(localStorage.getItem("topologyData"));this.setTopoData(a)}},start:function(){},_endGenerate:function(){this.stage().resetFitMatrix();var a=this.layoutType();a?this.activateLayout(a,null,function(){this.__fit(),this.status("generated"),this.fire("topologyGenerated")}):(this.__fit(),this.status("generated"),this.fire("topologyGenerated"))},__fit:function(){this.stage().show(),this.autoFit()&&(this.stage().fit(null,null,!1),this.stage().resetFitMatrix(),this.stage().fit(null,null,!1),this.stage().resetFitMatrix(),this.stage().fit(null,null,!1)),this.hideLoading()}}})}(nx,nx.global),function(a){function b(a){return a.wheelDelta?a.wheelDelta:a.detail?-40*a.detail:void 0}a.define("nx.graphic.Topology.Event",{events:["clickStage","pressStage","dragStageStart","dragStage","dragStageEnd","stageTransitionEnd","zoomstart","zooming","zoomend","resetzooming","fitStage","up","down","left","right","esc","space","enter","pressA","pressS","pressF","pressM","pressR"],properties:{enableGradualScaling:{value:!0}},methods:{_mousewheel:function(a,c){if(this.scalable()){var d=8e3,e=b(c),f=this.stage(),g=e/d;null==this._zoomWheelDelta&&(this._zoomWheelDelta=0,this.fire("zoomstart")),this._zoomWheelDelta+=e/d,this._enableGradualScaling?Math.abs(this._zoomWheelDelta)<.3?f.disableUpdateStageScale(!0):(this._zoomWheelDelta=0,f.disableUpdateStageScale(!1)):f.disableUpdateStageScale(!0),f.applyStageScale(1+g,[void 0===c.offsetX?c.layerX:c.offsetX,void 0===c.offsetY?c.layerY:c.offsetY]),this._zooomEventTimer&&clearTimeout(this._zooomEventTimer),this._zooomEventTimer=setTimeout(function(){f.resetStageMatrix(),delete this._zoomWheelDelta,this.fire("zoomend")}.bind(this),200),this.fire("zooming")}return c.preventDefault(),!1},_contextmenu:function(a,b){b.preventDefault()},_clickStage:function(a,b){this.fire("clickStage",b)},_pressStage:function(a,b){this.fire("pressStage",b)},_dragStageStart:function(a,b){this.fire("dragStageStart",b)},_dragStage:function(a,b){this.fire("dragStage",b)},_dragStageEnd:function(a,b){this.fire("dragStageEnd",b)},_stageTransitionEnd:function(a,b){window.event=b,this.fire("stageTransitionEnd",b)},_key:function(a,b){var c=b.keyCode;switch(c){case 38:this.fire("up",b),b.preventDefault();break;case 40:this.fire("down",b),b.preventDefault();break;case 37:this.fire("left",b),b.preventDefault();break;case 39:this.fire("right",b),b.preventDefault();break;case 13:this.fire("enter",b),b.preventDefault();break;case 27:this.fire("esc",b),b.preventDefault();break;case 65:this.fire("pressA",b);break;case 70:this.fire("pressF",b);break;case 77:this.fire("pressM",b);break;case 82:this.fire("pressR",b);break;case 83:this.fire("pressS",b);break;case 32:this.fire("space",b),b.preventDefault()}return!1},blockEvent:function(b){b?a.dom.Document.body().addClass("n-userselect n-blockEvent"):(a.dom.Document.body().removeClass("n-userselect"),a.dom.Document.body().removeClass("n-blockEvent"))}}})}(nx,nx.global),function(a){var b=a.util;a.define("nx.graphic.Topology.NodeMixin",{events:["addNode","deleteNode","addNodeSet","deleteNodeSet","expandAll"],properties:{nodeInstanceClass:{value:"nx.graphic.Topology.Node"},nodeSetInstanceClass:{value:"nx.graphic.Topology.NodeSet"},nodeDraggable:{value:!0},enableSmartLabel:{value:!0},showIcon:{get:function(){return void 0!==this._showIcon?this._showIcon:!1},set:function(a){return this._showIcon!==a?(this._showIcon=a,"initializing"!==this.status()&&this.eachNode(function(b){b.showIcon(a)}),!0):!1}},nodeConfig:{},nodeSetConfig:{},selectedNodes:{value:function(){return new a.data.UniqObservableCollection}},activeNodes:{set:function(b){var c=this.getLayer("nodes"),d=this.getLayer("nodeSet"),e=this._activeNodesWatcher;e||(e=this._activeNodesWatcher=new a.graphic.Topology.NodeWatcher,e.topology(this),e.updater(function(){var b=e.getNodes();a.each(b,function(a){"vertex"==a.model().type()?c.activeElements().add(a):d.activeElements().add(a)},this)}.bind(this))),c.activeElements().clear(),d.activeElements().clear(),e.nodes(b),this._activeNodes=b}},highlightedNodes:{set:function(b){var c=this.getLayer("nodes"),d=this.getLayer("nodeSet"),e=this._highlightedNodesWatcher;e||(e=this._highlightedNodesWatcher=new a.graphic.Topology.NodeWatcher,e.topology(this),e.updater(function(){a.each(e.getNodes(),function(a){"vertex"==a.model().type()?c.highlightedElements().add(a):d.highlightedElements().add(a)
-},this)}.bind(this))),c.highlightedElements().clear(),d.highlightedElements().clear(),e.nodes(b),this._highlightedNodes=b}},enableNodeSetAnimation:{value:!0},aggregationRule:{}},methods:{initNode:function(){var b=this.selectedNodes();b.on("change",function(c,d){"add"==d.action?a.each(d.items,function(a){a.selected(!0),a.on("remove",this._removeSelectedNode=function(){b.remove(a)},this)},this):"remove"==d.action?a.each(d.items,function(a){a.selected(!1),a.off("remove",this._removeSelectedNode,this)},this):"clear"==d.action&&a.each(d.items,function(a){a.selected(!1),a.off("remove",this._removeSelectedNode,this)},this)})},addNode:function(a,b){var c=this.graph().addVertex(a,b);if(c){var d=this.getNode(c.id());return this.fire("addNode",d),d}return null},removeNode:function(a){this.deleteNode(a)},deleteNode:function(b,c,d){var e=b;a.is(b,a.graphic.Topology.AbstractNode)&&(e=b.id());var f=this.graph().getVertex(e);if(f){var g=this.getNode(e);this.fire("deleteNode",g),this.graph().deleteVertex(e),c&&c.call(d||this)}},_getAggregationTargets:function(b){var c,d,e,f,g,h,i,j=this.graph(),k={},l=a.util.uuid(),m=b.slice();do for(i=!1,e=m.length-1;e>=0;e--){if(f=m[e],g=f.parentVertexSet(),h=g?g.id():l,k.hasOwnProperty(h)||(k[h]={vertex:g||j,finding:j.subordinates(g),found:[]}),c=k[h],c===!1||c.found.indexOf(f)>=0)throw"wrong input";c.found.push(f),m.splice(e,1),i=!0,c.finding.length===c.found.length&&c.vertex!==j&&(m.push(c.vertex),k[h]=!1)}while(i);for(c in k)k[c]||delete k[c];if(d=a.util.values(k),1!==d.length)throw a.graphic.Topology.i18n.cantAggregateNodesInDifferentNodeSet;return c=d[0],c.found},aggregationNodes:function(b,c){var d=[],e=[];a.each(b,function(b){if(a.is(b,a.graphic.Topology.AbstractNode)||(b=this.getNode(b)),!a.is(b,a.graphic.Topology.AbstractNode))throw"wrong input";d.push(b),e.push(b.model())}.bind(this));var f,g;if(f=this._getAggregationTargets(e),f.length<2)throw"wrong input. unable to aggregate.";g=[],a.each(f,function(a){g.push(a.id())});var h=this.aggregationRule();if(h&&a.is(h,"Function")){var i=h.call(this,d,c);if(i===!1)return}var j,k,l=null,m={};j={nodes:g,x:c&&"number"==typeof c.x?c.x:f[0].x(),y:c&&"number"==typeof c.y?c.y:f[0].y(),label:c&&c.label||[d[0].label(),d[d.length-1].label()].sort().join("-")},k=f[0].parentVertexSet(),k&&(m.parentVertexSetID=k.id(),l=this.getNode(k.id()));var n=this.addNodeSet(j,m,l);return this.stage().resetFitMatrix(),n},addNodeSet:function(a,b,c){var d=this.graph().addVertexSet(a,b);if(d){var e=this.getNode(d.id());return c&&e.parentNodeSet(c),this.fire("addNodeSet",e),e}return null},removeNodeSet:function(a){this.deleteNodeSet(a)},deleteNodeSet:function(b,c,d){if(b){var e=b;a.is(b,a.graphic.Topology.AbstractNode)&&(e=b.id());var f=this.getLayer("nodeSet").getNodeSet(e);f?f.collapsed()?(f.activated(!1),f.expandNodes(function(){this.fire("deleteNodeSet",f),this.graph().deleteVertexSet(e),c&&c.call(d||this)},this)):(this.fire("deleteNodeSet",f),this.graph().deleteVertexSet(e),c&&c.call(d||this)):(this.graph().deleteVertexSet(e),c&&c.call(d||this))}},eachNode:function(a,b){this.getLayer("nodes").eachNode(a,b||this),this.getLayer("nodeSet").eachNodeSet(a,b||this)},getNode:function(a){return this.getLayer("nodes").getNode(a)||this.getLayer("nodeSet").getNodeSet(a)},getNodes:function(){var a=this.getLayer("nodes").nodes(),b=this.getLayer("nodeSet").nodeSets();return b&&0!==b.length?a.concat(b):a},registerIcon:function(b,c,d,e){var f="http://www.w3.org/1999/xlink",g="http://www.w3.org/2000/svg",h=document.createElementNS(g,"image");h.setAttributeNS(f,"href",c),a.graphic.Icons.icons[b]={size:{width:d,height:e},icon:h.cloneNode(!0),name:b};var i=h.cloneNode(!0);i.setAttribute("height",e),i.setAttribute("width",d),i.setAttribute("data-device-type",b),i.setAttribute("id",b),i.setAttribute("class","deviceIcon"),this.stage().addDef(i)},highlightRelatedNode:function(c){var d;if(null!=c&&(d=a.is(c,a.graphic.Topology.AbstractNode)?c:this.getNode(c))){var e=this.getLayer("nodeSet"),f=this.getLayer("nodes");a.is(d,"nx.graphic.Topology.NodeSet")?e.highlightedElements().add(d):f.highlightedElements().add(d),d.eachConnectedNode(function(b){a.is(b,"nx.graphic.Topology.NodeSet")?e.highlightedElements().add(b):f.highlightedElements().add(b)},this),this.getLayer("linkSet").highlightLinkSets(b.values(d.linkSets())),this.getLayer("links").highlightLinks(b.values(d.links())),this.fadeOut(!0)}},activeRelatedNode:function(c){var d;if(c&&(d=a.is(c,a.graphic.Topology.AbstractNode)?c:this.getNode(c))){var e=this.getLayer("nodeSet"),f=this.getLayer("nodes");a.is(d,"nx.graphic.Topology.NodeSet")?e.activeElements().add(d):f.activeElements().add(d),d.eachConnectedNode(function(b){a.is(b,"nx.graphic.Topology.NodeSet")?e.activeElements().add(b):f.activeElements().add(b)},this),this.getLayer("linkSet").activeLinkSets(b.values(d.linkSets())),this.getLayer("links").activeLinks(b.values(d.links())),this.fadeOut()}},zoomByNodes:function(b,c,d,e){a.is(b,Array)||(b=[b]);var f,g,h,i,j=this.stage(),k=this.getModelBoundByNodes(b),l=j.maxZoomLevel()*j.fitMatrixObject().scale();k&&(k.width*l<1&&k.height*l<1?(h=a.geometry.Vector.transform(k.center,j.matrix()),i=[j.width()/2-h[0],j.height()/2-h[1]],j.scalingLayer().setTransition(function(){this.adjustLayout(),c&&c.call(d||this),this.fire("zoomend")},this,.6),j.applyTranslate(i[0],i[1]),j.applyStageScale(j.maxZoomLevel()/j.zoomLevel()*e)):(f=a.geometry.Vector.transform([k.left,k.top],j.matrix()),g=a.geometry.Vector.transform([k.right,k.bottom],j.matrix()),k={left:f[0],top:f[1],width:Math.max(1,g[0]-f[0]),height:Math.max(1,g[1]-f[1])},e=1/(e||1),k.left+=k.width*(1-e)/2,k.top+=k.height*(1-e)/2,k.height*=e,k.width*=e,this.zoomByBound(k,function(){this.adjustLayout(),c&&c.call(d||this),this.fire("zoomend")},this)))},getModelBoundByNodes:function(b,c){var d,e,f,g;return a.each(b,function(b){var h;if(a.is(b,a.graphic.Topology.AbstractNode))h=b.model();else if(c)h=this.graph().getVertex(b)||this.graph().getVertexSet(b);else{var i=this.getNode(b);h=i&&i.model()}if(h){var j=h.x(),k=h.y();d=j>d?d:j,f=k>f?f:k,e=e>j?e:j,g=g>k?g:k}},this),void 0===d||void 0===f?void 0:{left:d,top:f,right:e,bottom:g,center:[(e+d)/2,(g+f)/2],width:e-d,height:g-f}},getBoundByNodes:function(b,c){(null==b||0===b.length)&&(b=this.getNodes());var d={left:0,top:0,x:0,y:0,width:0,height:0,maxX:0,maxY:0},e=[];a.each(b,function(b){var d;d=a.is(b,a.graphic.Topology.AbstractNode)?b:this.getNode(b),d&&d.visible()&&e.push(c?this.getInsideBound(d.getBound(!0)):this.getInsideBound(d.getBound()))},this);var f=e.length-1;return e.sort(function(a,b){return a.left-b.left}),d.x=d.left=e[0].left,d.maxX=e[f].left,e.sort(function(a,b){return a.left+a.width-(b.left+b.width)}),d.width=e[f].left+e[f].width-d.x,e.sort(function(a,b){return a.top-b.top}),d.y=d.top=e[0].top,d.maxY=e[f].top,e.sort(function(a,b){return a.top+a.height-(b.top+b.height)}),d.height=e[f].top+e[f].height-d.y,d},_moveSelectionNodes:function(b,c){if(this.nodeDraggable()){var d=this.selectedNodes().toArray(),e=this.stageScale();-1===d.indexOf(c)?c.move(b.drag.delta[0]*e,b.drag.delta[1]*e):a.each(d,function(a){a.move(b.drag.delta[0]*e,b.drag.delta[1]*e)})}},expandNodes:function(b,c,d,e,f){var g=a.is(b,Array)?b.length:a.util.keys(b).length;if(d=d||function(){},g>150||0===g||f===!1)d.call(e||this,this);else{var h=[];a.each(b,function(a){h.push({id:a.id(),position:a.position(),node:a}),a.position(c)},this),this._nodesAnimation&&this._nodesAnimation.stop();var i=this._nodesAnimation=new a.graphic.Animation({duration:600});i.callback(function(b){a.each(h,function(a){var d=a.position,e=a.node;e&&e.model()&&e.position({x:c.x+(d.x-c.x)*b,y:c.y+(d.y-c.y)*b})})}.bind(this)),i.complete(function(){d.call(e||this,this)}.bind(this)),i.start()}},collapseNodes:function(b,c,d,e,f){var g=a.is(b,Array)?b.length:a.util.keys(b).length;if(d=d||function(){},g>150||0===g||f===!1)d.call(e||this,this);else{var h=[];a.each(b,function(a){h.push({id:a.id(),position:a.position(),node:a,vertex:a.model(),vertexPosition:a.model().position()})},this),this._nodesAnimation&&this._nodesAnimation.stop();var i=this._nodesAnimation=new a.graphic.Animation({duration:600});i.callback(function(b){a.each(h,function(a){var d=a.position,e=a.node;e&&e.model()&&e.position({x:d.x-(d.x-c.x)*b,y:d.y-(d.y-c.y)*b})})}.bind(this)),i.complete(function(){a.each(h,function(a){a.vertex.position(a.vertexPosition)}),d.call(e||this,this)}.bind(this)),i.start()}},expandAll:function(){var a=this.getLayer("nodeSet"),b=function(c){var d=!0;a.eachNodeSet(function(a){a.visible()&&(a.animation(!1),a.collapsed(!1),d=!1)}),d?c():b(c)};this.showLoading(),setTimeout(function(){b(function(){a.eachNodeSet(function(a){a.animation(!0)}),this.stage().resetFitMatrix(),this.hideLoading(),this.fit(function(){this.blockEvent(!1),this.fire("expandAll")},this)}.bind(this))}.bind(this),100)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.LinkMixin",{events:["addLink","deleteLink"],properties:{linkInstanceClass:{value:"nx.graphic.Topology.Link"},linkSetInstanceClass:{value:"nx.graphic.Topology.LinkSet"},supportMultipleLink:{value:!0},linkConfig:{},linkSetConfig:{}},methods:{addLink:function(a,b){if(null==a.source||null==a.target)return void 0;var c=this.graph().addEdge(a,b);if(c){var d=this.getLink(c.id());return this.fire("addLink",d),d}return null},removeLink:function(a){this.deleteLink(a)},deleteLink:function(b){var c=b;a.is(b,a.graphic.Topology.AbstractLink)&&(c=b.id()),this.fire("deleteLink",this.getLink(c)),this.graph().deleteEdge(c)},eachLink:function(a,b){this.getLayer("links").eachLink(a,b||this)},getLink:function(a){return this.getLayer("links").getLink(a)},getLinkSet:function(a,b){return this.getLayer("linkSet").getLinkSet(a,b)},getLinkSetByLinkKey:function(a){return this.getLayer("linkSet").getLinkSetByLinkKey(a)},getLinksByNode:function(a,b){var c=this.getLinkSet(a,b);return c?c.links():void 0}}})}(nx,nx.global),function(a,b){a.define("nx.graphic.Topology.LayerMixin",{events:[],properties:{layersMap:{value:function(){return{}}},layers:{value:function(){return[]}},fade:{dependencies:"forceFade",value:function(a){return a===!0||a===!1?a:this._fade}},fadeActivePriority:{value:!1,set:function(a){this.dom().addClass(a?"fade-active-priority":"fade-active-priority"),this._fadeActivePriority=!!a}},fadeUpdater_internal_:{dependencies:"fade",update:function(a){a?this.dom().addClass("fade-all"):this.dom().removeClass("fade-all")}},forceFade:{},layerResource_internal_:{value:function(){return{}}}},methods:{initLayer:function(){this.layersMap({}),this.layers([]),this.attachLayer("links","nx.graphic.Topology.LinksLayer"),this.attachLayer("linkSet","nx.graphic.Topology.LinkSetLayer"),this.attachLayer("groups","nx.graphic.Topology.GroupsLayer"),this.attachLayer("nodes","nx.graphic.Topology.NodesLayer"),this.attachLayer("nodeSet","nx.graphic.Topology.NodeSetLayer"),this.attachLayer("paths","nx.graphic.Topology.PathLayer")},_generateLayer:function(c,d){var e;if(c&&d){if(a.is(d,"String")){var f=a.path(b,d);f&&(e=new f)}else e=d;e.topology(this),e.draw(),a.each(e.__events__,function(b){a.Object.delegateEvent(e,b,this,b)},this)}return e},getLayer:function(a){var b=this.layersMap();return b[a]},appendLayer:function(a,b){return this.attachLayer(a,b)},attachLayer:function(b,c,d){var e,f=this.layersMap(),g=this.layers(),h=this._generateLayer(b,c),i={};return h&&(d>=0?(h.attach(this.stage(),d),g.splice(d,0,h)):(h.attach(this.stage()),g.push(h)),f[b]=h,e=this.layerResource_internal_(),e[b]=i,i.activeElementsChangeListener=function(){i.activeCount=h.activeElements().count();var b=0;a.each(e,function(a){b+=a.activeCount}),this.dom().setClass("fade-active-occur",b>0)},h.activeElements().on("change",i.activeElementsChangeListener,this)),h},prependLayer:function(a,b){return this.attachLayer(a,b,0)},insertLayerAfter:function(a,b,c){var d=this.layersMap()[c];if(d){var e=this.layers().indexOf(d);if(e>=0)return this.attachLayer(a,b,e+1)}},eachLayer:function(b,c){a.each(this.layersMap(),b,c)},fadeOut:function(a){a?this.forceFade(!0):this.forceFade()||this.fade(!0)},fadeIn:function(a){this.forceFade()===!0?a&&(this.forceFade(null),this.fade(!1)):this.fade(!1)},recoverActive:function(){a.each(this.layers(),function(a){a.activeElements&&a.activeElements().clear()},this),this.activeNodes([]),this.fadeIn()},recoverHighlight:function(){a.each(this.layers(),function(a){a.highlightedElements&&a.highlightedElements().clear()},this),this.highlightedNodes([]),this.fadeIn(!0)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.StageMixin",{events:["fitStage","ready","resizeStage","afterFitStage"],properties:{width:{get:function(){return this._width||300+2*this.padding()},set:function(a){return this.resize(a)}},height:{get:function(){return this._height||300+2*this.padding()},set:function(a){this.resize(null,a)}},padding:{value:100},scalable:{value:!0},stageScale:{value:1},revisionScale:{value:1},matrix:{value:function(){return new a.geometry.Matrix(a.geometry.Matrix.I)}},adaptive:{value:!1},stage:{get:function(){return this.view("stage")}},enableSmartNode:{value:!0},autoFit:{value:!0}},methods:{initStage:function(){a.each(a.graphic.Icons.icons,function(a,b){if(a.icon){var c=a.icon.cloneNode(!0);c.setAttribute("height",a.size.height),c.setAttribute("width",a.size.width),c.setAttribute("data-device-type",b),c.setAttribute("id",b),c.setAttribute("class","deviceIcon"),this.stage().addDef(c)}},this)},_adaptiveTimer:function(){var b=this;if(this.adaptive()||0===this.width()||0===this.height())var c=setInterval(function(){a.dom.Document.body().contains(b.view().dom())&&(clearInterval(c),this._adaptToContainer(),this.status("appended"),this.fire("ready"))}.bind(this),10);else this.status("appended"),setTimeout(function(){this.fire("ready")}.bind(this),0)},_adaptToContainer:function(){var a=this.view().dom().parentNode().getBound();return 0===a.width||0===a.height?void(console&&console.warn("Please set height*width to topology's parent container")):void((this._width!==a.width||this._height!==a.height)&&this.resize(a.width,a.height))},adaptToContainer:function(){this.adaptive()&&(this._adaptToContainer(),this.fit())},getInsideBound:function(a){var b=a||this.stage().view("stage").getBound(),c=this.view().dom().getBound();return{left:b.left-c.left,top:b.top-c.top,width:b.width,height:b.height}},getAbsolutePosition:function(a){var b=this.matrix(),c=b.scale(),d=this.view().dom().getOffset();return{x:a.x*c+b.x()+d.left,y:a.y*c+b.y()+d.top}},fit:function(a,b,c){this.stage().fit(function(){this.adjustLayout(),a&&a.call(b||this),this.fire("afterFitStage")},this,null==c?!0:c),this.fire("fitStage")},zoom:function(){},zoomByBound:function(a,b,c,d){this.stage().zoomByBound(a,function(){this.adjustLayout(),b&&b.call(c||this),this.fire("zoomend")},this,void 0!==d?d:.9)},move:function(a,b,c){var d=this.stage();d.applyTranslate(a||0,b||0,c)},resize:function(a,b){var c=!1;if(null!=a&&a!=this._width){var d=Math.max(a,300+2*this.padding());d!=this._width&&(this._width=d,c=!0)}if(null!=b){var e=Math.max(b,300+2*this.padding());e!=this._height&&(this._height=e)}return c&&(this.notify("width"),this.notify("height"),this.stage().resetFitMatrix(),this.fire("resizeStage")),c},adjustLayout:function(){this.enableSmartNode()&&(this._adjustLayoutTimer&&clearTimeout(this._adjustLayoutTimer),this._adjustLayoutTimer=setTimeout(function(){var a=this.graph();if(a){var b=(new Date,this.matrix()),c=b.scale(),d=[];this.eachNode(function(a){if(!a.activated||a.activated()){var e=a.position();d[d.length]={x:e.x*c+b.x(),y:e.y*c+b.y()}}});var e=function(a){for(var b=a.length,c=1296,d=1024,e=function(a,b){var e=Math.pow(Math.abs(a.x-b.x),2)+Math.pow(Math.abs(a.y-b.y),2);return{iconOverlap:c>e,dotOverlap:d>e}},f=0,g=0,h=0;b>h;h++){for(var i=a[h],j=!1,k=!1,l=0;b>l;l++){var m=a[l];if(h!==l){var n=e(i,m);n.iconOverlap&&(j=!0),n.dotOverlap&&(k=!0)}}j&&f++,k&&g++}var o=1;return f/b>.2&&(o=.8,g/b>.8?o=.2:g/b>.5?o=.4:g/b>.15&&(o=.6)),o};if(window.Blob&&window.Worker){var f="onmessage = function(e) { self.postMessage(calc(e.data)); };";if(f+="var calc = "+e.toString(),!this.adjustWorker){var g=new Blob([f]),h=window.URL.createObjectURL(g),i=this.adjustWorker=new Worker(h);i.onmessage=function(a){var b=a.data;this.revisionScale(b)}.bind(this)}this.adjustWorker.postMessage(d)}}}.bind(this),200))}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.TooltipMixin",{events:[],properties:{tooltipManagerConfig:{get:function(){return this._tooltipManagerConfig||{}},set:function(a){var b=this.tooltipManager();b&&b.sets(a),this._tooltipManagerConfig=a}},tooltipManager:{value:function(){var b=this.tooltipManagerConfig();return new a.graphic.Topology.TooltipManager(a.extend({},{topology:this},b))}}},methods:{}})}(nx,nx.global),function(a,b){a.define("nx.graphic.Topology.SceneMixin",{events:[],properties:{scenesMap:{value:function(){return{}}},scenes:{value:function(){return[]}},currentScene:{},currentSceneName:{},sceneEnabled:{value:!0}},methods:{initScene:function(){this.registerScene("default","nx.graphic.Topology.DefaultScene"),this.registerScene("selection","nx.graphic.Topology.SelectionNodeScene"),this.registerScene("zoomBySelection","nx.graphic.Topology.ZoomBySelection"),this.activateScene("default"),this._registerEvents()},registerScene:function(c,d){var e;if(c&&d){var f,g=this.scenesMap(),h=this.scenes();a.is(d,"String")?(e=a.path(b,d),e&&(f=new e)):f=d,f&&(f.topology(this),g[c]=f,h.push(f))}},activateScene:function(a){var b=this.scenesMap(),c=a||"default",d=b[c]||b["default"];return this.deactivateScene(),this.currentScene(d),this.currentSceneName(c),d.activate(),this.fire("switchScene",{name:a,scene:d}),d},deactivateScene:function(){this.currentScene()&&this.currentScene().deactivate&&this.currentScene().deactivate(),this.currentScene(null)},disableCurrentScene:function(a){this.sceneEnabled(!a)},_registerEvents:function(){a.each(this.__events__,this._aop=function(a){this.upon(a,function(b,c){this.dispatchEvent(a,b,c)},this)},this)},dispatchEvent:function(a,b,c){if(this.sceneEnabled()){var d=this.currentScene();d.dispatch&&d.dispatch(a,b,c),d[a]&&d[a].call(d,b,c)}}}})}(nx,nx.global),function(a,b){{var c={USMap:"nx.graphic.Topology.USMapLayout",hierarchicalLayout:"nx.graphic.Topology.HierarchicalLayout"};a.define("nx.graphic.Topology.LayoutMixin",{events:[],properties:{layoutMap:{value:function(){return{}}},layoutType:{value:null},layoutConfig:{value:null}},methods:{initLayout:function(){var d=a.extend({},c,a.graphic.Topology.layouts);a.each(d,function(c,d){var e;if(a.is(c,"Function"))e=new c;else{var f=a.path(b,c);if(!f)throw"Error on instance node class";e=new f}this.registerLayout(d,e)},this)},registerLayout:function(a,b){var c=this.layoutMap();c[a]=b,b.topology&&b.topology(this)},getLayout:function(a){var b=this.layoutMap();return b[a]},activateLayout:function(a,b,c){var d=this.layoutMap(),e=a||this.layoutType(),f=b||this.layoutConfig();d[e]&&d[e].process&&(d[e].process(this.graph(),f,c),this.layoutType(e))},deactivateLayout:function(){}}})}}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Categories",{events:[],properties:{},methods:{showLoading:function(){a.dom.Document.html().addClass("n-waitCursor"),this.view().dom().addClass("n-topology-loading"),this.view("loading").dom().setStyle("display","block")},hideLoading:function(){a.dom.Document.html().removeClass("n-waitCursor"),this.view().dom().removeClass("n-topology-loading"),this.view("loading").dom().setStyle("display","none")},exportPNG:function(){this.fit();var b=new XMLSerializer,c=this.stageScale(),d=topo.matrix().x(),e=topo.matrix().y(),f=this.stage().view().dom().$dom.querySelector(".stage").cloneNode(!0);a.each(f.querySelectorAll(".fontIcon"),function(a){a.remove()}),a.each(f.querySelectorAll(".link"),function(a){a.style.stroke="#26A1C5",a.style.fill="none",a.style.background="transparent"}),a.each(f.querySelectorAll("line.link-set-bg"),function(a){a.style.stroke="#26A1C5"}),a.each(f.querySelectorAll("text.node-label"),function(a){a.style.fontSize="12px",a.style.fontFamily="Tahoma"}),a.each(f.querySelectorAll(".n-hidden"),function(a){a.remove()}),a.each(f.querySelectorAll(".selectedBG"),function(a){a.remove()}),a.each(f.querySelectorAll('[data-nx-type="nx.graphic.Topology.GroupsLayer"]'),function(a){a.remove()});var g=b.serializeToString(f),h='<svg width="'+this.width()+'" height="'+this.height()+'" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" >'+g+"</svg>",i=window.btoa(h),j=this.view("img").dom().$dom;j.setAttribute("width",this.width()),j.setAttribute("height",this.height()),j.setAttribute("src","data:image/svg+xml;base64,"+i);var k=this.view("canvas").dom().$dom,l=k.getContext("2d"),m=this.revisionScale(),n=32*m;l.fillStyle="#fff",l.fillRect(0,0,this.width(),this.height()),l.drawImage(j,0,0),l.font=n+"px next-font",this.eachNode(function(b){var f=b.iconType(),g=a.graphic.Icons.get(f);l.fillStyle="#fff",l.fillText(g.font[1],b.x()/c+d-16*m,b.y()/c+e+16*m),l.fillStyle=b.color()||"#26A1C5",l.fillText(g.font[0],b.x()/c+d-16*m,b.y()/c+e+16*m)});var o=document.createElement("a");o.setAttribute("href",k.toDataURL()),o.setAttribute("download",(new Date).getTime()+".png");var p=document.createEvent("MouseEvents");p.initMouseEvent("click",!0,!0,window,1,0,0,0,0,!1,!1,!1,!1,0,null),o.dispatchEvent(p)},__drawBG:function(a){var b=a||this.stage().getContentBound(),c=this.stage().view("bg");c.sets({x:b.left,y:b.top,width:b.width,height:b.height,visible:!0}),c.set("visible",!0)}}})}(nx,nx.global),function(a){var b=a.Object.extendEvent,c=a.Object.extendProperty,d=a.Object.extendMethod,e=a.define("nx.graphic.Topology",a.ui.Component,{statics:{i18n:{cantAggregateExtraNode:"Can't aggregate extra node",cantAggregateNodesInDifferentNodeSet:"Can't aggregate nodes in different nodeSet"},extensions:[],registerExtension:function(f){var g=e.prototype,h=f.prototype;e.extensions.push(f),a.each(f.__events__,function(a){b(g,a)}),a.each(f.__properties__,function(a){c(g,a,h[a].__meta__)}),a.each(f.__methods__,function(a){"init"!==a&&d(g,a,h[a])})},layouts:{}},mixins:[a.graphic.Topology.Config,a.graphic.Topology.Graph,a.graphic.Topology.Event,a.graphic.Topology.StageMixin,a.graphic.Topology.NodeMixin,a.graphic.Topology.LinkMixin,a.graphic.Topology.LayerMixin,a.graphic.Topology.LayoutMixin,a.graphic.Topology.TooltipMixin,a.graphic.Topology.SceneMixin,a.graphic.Topology.Categories],events:["clear"],view:{props:{"class":["n-topology","{#themeClass}"],tabindex:"0",style:{width:"{#width}",height:"{#height}"}},content:[{name:"stage",type:"nx.graphic.Stage",props:{width:"{#width}",height:"{#height}",padding:"{#padding}",matrixObject:"{#matrix,direction=<>}",stageScale:"{#stageScale,direction=<>}"},events:{":mousedown":"{#_pressStage}",":touchstart":"{#_pressStage}",click:"{#_clickStage}",touchend:"{#_clickStage}",mousewheel:"{#_mousewheel}",DOMMouseScroll:"{#_mousewheel}",dragStageStart:"{#_dragStageStart}",dragStage:"{#_dragStage}",dragStageEnd:"{#_dragStageEnd}",stageTransitionEnd:"{#_stageTransitionEnd}"}},{name:"nav",type:"nx.graphic.Topology.Nav",props:{visible:"{#showNavigation}",showIcon:"{#showIcon,direction=<>}"}},{name:"loading",props:{"class":"n-topology-loading"},content:{tag:"ul",props:{items:new Array(10),template:{tag:"li"}}}},{name:"img",tag:"img",props:{style:{display:"none"}}},{name:"canvas",tag:"canvas",props:{width:"{#width}",height:"{#height}",style:{display:"none"}}}],events:{contextmenu:"{#_contextmenu}",keydown:"{#_key}"}},properties:{},methods:{init:function(b){this.inherited(b),this.sets(b),this.initStage(),this.initLayer(),this.initGraph(),this.initNode(),this.initScene(),this.initLayout(),a.each(e.extensions,function(a){var b=a.__ctor__;b&&b.call(this)},this)},attach:function(a){this.inherited(a),this._adaptiveTimer()},clear:function(){this.status("cleared"),this._nodesAnimation&&this._nodesAnimation.stop(),this.graph().clear(),this.tooltipManager().closeAll(),a.each(this.layers(),function(a){a.clear()}),this.blockEvent(!1),this.fire("clear"),this.width()&&this.height()&&this.status("appended")},dispose:function(){this.status("disposed"),this.tooltipManager().dispose(),this.graph().dispose(),a.each(this.layers(),function(a){a.dispose()}),this.blockEvent(!1),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Layer",a.graphic.Group,{view:{type:"nx.graphic.Group",props:{"class":"layer"}},properties:{topology:{value:null},highlightedElements:{value:function(){return new a.data.UniqObservableCollection}},activeElements:{value:function(){return new a.data.UniqObservableCollection}},fade:{dependencies:"forceFade",value:function(a){return a===!0||a===!1?a:this._fade}},fadeUpdater_internal_:{dependencies:"fade",update:function(a){a?this.dom().addClass("fade-layer"):this.dom().removeClass("fade-layer")}},forceFade:{}},methods:{init:function(b){this.inherited(b),this.view().set("data-nx-type",this.__className__);var c=this.highlightedElements(),d=this.activeElements();c.on("change",function(b,e){"add"==e.action?a.each(e.items,function(a){a.dom().addClass("fade-highlight-item")}):("remove"==e.action||"clear"==e.action)&&a.each(e.items,function(a){a.dom()&&a.dom().removeClass("fade-highlight-item")}),0===c.count()&&0===d.count()?this.fadeIn():this.fadeOut()},this),d.on("change",function(b,e){"add"==e.action?a.each(e.items,function(a){a.dom().addClass("fade-active-item")}):("remove"==e.action||"clear"==e.action)&&a.each(e.items,function(a){a.dom()&&a.dom().removeClass("fade-active-item")}),0===c.count()&&0===d.count()?this.fadeIn():this.fadeOut()},this)},draw:function(){},show:function(){this.visible(!0)},hide:function(){this.visible(!1)},fadeOut:function(a){a?this.forceFade(!0):this.forceFade()||this.fade(!0)},fadeIn:function(a){this.forceFade()===!0?a&&(this.forceFade(null),this.fade(!1)):this.fade(!1)},recover:function(a,b,c){this.fadeIn(a,b,c)},clear:function(){this.highlightedElements().clear(),this.activeElements().clear(),this.view().dom().empty()},dispose:function(){this.clear(),this.highlightedElements().clear(),this.activeElements().clear(),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.NodeWatcher",a.Observable,{properties:{nodes:{get:function(){return this._nodes||[]},set:function(b){var c=this.updater(),d=this.vertices();if(0!==d.length&&(a.each(d,function(a){a.unwatch("generated",c,this)},this),d.length=0),b){var e=b;a.is(e,Array)||a.is(e,a.data.ObservableCollection)||(e=[e]),a.each(e,function(a){var b=this._getVertex(a);b&&-1==d.indexOf(b)&&d.push(b)},this),a.is(e,a.data.ObservableCollection)&&e.on("change",function(a,b){b.action,b.items});var f=this.observePosition();a.each(d,function(a){a.watch("generated",c,this),f&&a.on("updateCoordinate",c,this)},this),c(),this._nodes=e}}},updater:{value:function(){return function(){}}},topology:{set:function(a){if(a&&a.graph()){var b=a.graph();b.on("addVertexSet",this.update,this),b.on("removeVertexSet",this.update,this),b.on("deleteVertexSet",this.update,this),b.on("updateVertexSet",this.update,this)}this._topology=a}},vertices:{value:function(){return[]}},observePosition:{value:!1}},methods:{_getVertex:function(b){var c,d=this.topology();if(d&&d.graph()){var e=d.graph();a.is(b,a.graphic.Topology.AbstractNode)?c=b.model():e.getVertex(b)&&(c=e.getVertex(b))}return c},getNodes:function(b){var c=[],d=this.topology(),e=this.vertices();return a.each(e,function(a){var e=a.id(),f=d.getNode(e);if(b!==!1&&(!f||a.generated()===!1)){var g=a.generatedRootVertexSet();g&&(f=d.getNode(g.id()))}f&&c.indexOf(f)&&c.push(f)}),c},update:function(){var a=this.updater(),b=this.vertices();0!==b.length&&a()},dispose:function(){var a=this.topology();if(a&&a.graph()){var b=a.graph();b.off("addVertexSet",this.update,this),b.off("removeVertexSet",this.update,this),b.off("deleteVertexSet",this.update,this),b.off("updateVertexSet",this.update,this)}this.inherited()}}})}(nx,nx.global),function(a){var b=a.geometry.Vector;a.define("nx.graphic.Topology.AbstractNode",a.graphic.Group,{events:["updateNodeCoordinate","selectNode","remove"],properties:{position:{get:function(){return{x:this._x||0,y:this._y||0}},set:function(a){var b=!1;if(null==a.x||a.x===this._x||this._lockXAxle||(this._x=a.x,this.notify("x"),b=!0),null==a.y||a.y===this._y||this._lockYAxle||(this._y=a.y,this.notify("y"),b=!0),b){var c=this.model();c.position({x:this._x,y:this._y}),this.view().setTransform(this._x,this._y)}}},absolutePosition:{get:function(){var a=this.position(),b=this.topology().matrix(),c=b.scale();return{x:a.x*c+b.x(),y:a.y*c+b.y()}},set:function(a){if(null==a||null==a.x||null==a.y)return!1;var b=this.topology().matrix(),c=b.scale();this.position({x:(a.x-b.x())/c,y:(a.y-b.y())/c})}},matrix:{get:function(){var a=this.position(),b=this.stageScale();return[[b,0,0],[0,b,0],[a.x,a.y,1]]}},vector:{get:function(){return new b(this.x(),this.y())}},x:{get:function(){return this._x||0},set:function(a){return this.position({x:parseFloat(a)})}},y:{get:function(){return this._y||0},set:function(a){return this.position({y:parseFloat(a)})}},lockXAxle:{value:!1},lockYAxle:{value:!1},stageScale:{set:function(a){this.view().setTransform(null,null,a)}},topology:{},id:{get:function(){return this.model().id()}},selected:{value:!1},enable:{value:!0},node:{get:function(){return this}},showIcon:{value:!0},links:{get:function(){var a={};return this.eachLink(function(b,c){a[c]=b}),a}},linkSets:{get:function(){var a={};return this.eachLinkSet(function(b,c){a[c]=b}),a}},connectedNodes:{get:function(){var a={};return this.eachConnectedNode(function(b,c){a[c]=b}),a}}},view:{type:"nx.graphic.Group"},methods:{init:function(a){this.inherited(a),this.watch("selected",function(a,b){this.fire("selectNode",b)},this)},setModel:function(a){this.model(a),a.upon("updateCoordinate",function(a,b){this.position({x:b.newPosition.x,y:b.newPosition.y}),this.fire("updateNodeCoordinate")},this),this.setBinding("visible","model.visible,direction=<>",this),this.setBinding("selected","model.selected,direction=<>",this),this.position(a.position())},update:function(){},move:function(a,b){var c=this.position();this.position({x:c.x+a||0,y:c.y+b||0})},moveTo:function(a,b,c,d,e){if(d!==!1){var f={to:{},duration:e||400};f.to.x=a,f.to.y=b,c&&(f.complete=c),this.animate(f)}else this.position({x:a,y:b})},translateTo:function(){},eachLink:function(a,b){this.model(),this.topology();this.eachLinkSet(function(c){c.eachLink(a,b||this)})},eachLinkSet:function(b,c){var d=this.model(),e=this.topology();a.each(d.edgeSets(),function(a,d){var f=e.getLinkSetByLinkKey(d);f&&b.call(c||this,f,d)},this),a.each(d.edgeSetCollections(),function(a,d){var f=e.getLinkSetByLinkKey(d);f&&b.call(c||this,f,d)},this)},eachConnectedNode:function(a,b){var c=this.topology();this.model().eachConnectedVertex(function(d,e){var f=c.getNode(e);f&&a.call(b||this,f,e)})},dispose:function(){var a=this.model();a&&a.upon("updateCoordinate",null),this.fire("remove"),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Node",a.graphic.Topology.AbstractNode,{events:["pressNode","clickNode","enterNode","leaveNode","dragNodeStart","dragNode","dragNodeEnd","selectNode"],properties:{label:{set:function(a){var b=this._processPropertyValue(a),c=this.view("label");c.set("text",b),null!=b&&this.calcLabelPosition(),this._label=b}},iconType:{get:function(){return this.view("icon").get("iconType")},set:function(a){var b=this._processPropertyValue(a);return b&&this._iconType!==b?(this._iconType=b,this.view("icon").set("iconType",b),!0):!1}},showIcon:{set:function(a){var b=this._processPropertyValue(a);this._showIcon=b,this.view("icon").set("showIcon",b),null!=this._label&&this.calcLabelPosition(),this._selected&&this.view("selectedBG").set("r",this.selectedRingRadius())}},enableSmartLabel:{value:!0},labelAngle:{value:90},labelVisibility:{value:!0,set:function(a){var b=this._processPropertyValue(a),c=this.view("label");c.visible(b),this._labelVisibility=b}},revisionScale:{set:function(a){var b=this.topology(),c=this.view("icon");
-c.set("scale",a),c.showIcon(b.showIcon()?a>.2:!1),a>.4?this.view("label").set("visible",null==this._labelVisibility?!0:this._labelVisibility):this.view("label").set("visible",!1),null!=this._label&&this.calcLabelPosition(),this._selected&&this.view("selectedBG").set("r",this.selectedRingRadius())}},color:{set:function(a){var b=this._processPropertyValue(a);this.view("label").dom().setStyle("fill",b),this.view("icon").set("color",b),this._color=b}},scale:{get:function(){return this.view("graphic").scale()},set:function(a){var b=this._processPropertyValue(a);this.view("graphic").setTransform(null,null,b),this.calcLabelPosition(!0)}},selectedRingRadius:{get:function(){var a=this.getBound(!0),b=Math.max(a.height,a.width)/2;return b+(this.selected()?10:-4)}},selected:{get:function(){return this._selected||!1},set:function(a){var b=this._processPropertyValue(a);return this._selected==b?!1:(this._selected=b,this.dom().setClass("node-selected",!!b),b&&this.view("selectedBG").set("r",this.selectedRingRadius()),!0)}},enable:{get:function(){return null!=this._enable?this._enable:!0},set:function(a){var b=this._processPropertyValue(a);this._enable=b,b?this.dom().removeClass("disable"):this.dom().addClass("disable")}},parentNodeSet:{get:function(){var a=this.model().parentVertexSet();return a?this.topology().getNode(a.id()):null}},rootNodeSet:{get:function(){var a=this.model();return a.rootVertexSet()?this.topology().getNode(a.rootVertexSet().id()):null}}},view:{type:"nx.graphic.Group",props:{"class":"node"},content:[{name:"label",type:"nx.graphic.Text",props:{"class":"node-label","alignment-baseline":"central",y:12}},{name:"selectedBG",type:"nx.graphic.Circle",props:{"class":"selectedBG",r:26}},{type:"nx.graphic.Group",name:"graphic",content:[{name:"icon",type:"nx.graphic.Icon",props:{"class":"icon",iconType:"unknown",showIcon:!1,scale:1}}],events:{mousedown:"{#_mousedown}",touchstart:"{#_mousedown}",mouseup:"{#_mouseup}",mouseenter:"{#_mouseenter}",mouseleave:"{#_mouseleave}",dragstart:"{#_dragstart}",dragmove:"{#_drag}",dragend:"{#_dragend}"}}]},methods:{translateTo:function(a,b,c,d){var e=this.view(),f=this.position();e.setTransition(function(){this.position({x:a,y:b}),this.calcLabelPosition(!0),c&&c.call(d||this)},this,.5),f.x==a&&f.y==b&&c?c.call(d||this):e.setTransform(a,b,null,.9)},getBound:function(a){return a?this.view("graphic").getBound():this.view().getBound()},_mousedown:function(a,b){this.enable()&&(this._prevPosition=this.position(),b.captureDrag(this.view("graphic"),this.topology().stage()),this.fire("pressNode",b))},_mouseup:function(a,b){if(this.enable()){var c=this.position();this._prevPosition&&c.x===this._prevPosition.x&&c.y===this._prevPosition.y&&this.fire("clickNode",b)}},_mouseenter:function(a,b){this.enable()&&(this.__enter||this._nodeDragging||(this.fire("enterNode",b),this.__enter=!0))},_mouseleave:function(a,b){this.enable()&&this.__enter&&!this._nodeDragging&&(this.fire("leaveNode",b),this.__enter=!1)},_dragstart:function(a,b){window.event=b,this._nodeDragging=!0,this.enable()&&this.fire("dragNodeStart",b)},_drag:function(a,b){window.event=b,this.enable()&&this.fire("dragNode",b)},_dragend:function(a,b){window.event=b,this._nodeDragging=!1,this.enable()&&(this.fire("dragNodeEnd",b),this.updateConnectedNodeLabelPosition())},updateConnectedNodeLabelPosition:function(){this.calcLabelPosition(!0),this.eachConnectedNode(function(a){a.calcLabelPosition()},this)},calcLabelPosition:function(a){this.enableSmartLabel()?(a,this._centralizedText()):this.updateByMaxObtuseAngle(this.labelAngle())},_centralizedText:function(){var b=this.model();if(void 0!==b){var c=b.id(),d=[];a.each(b.edgeSets(),function(a){d.push(a.sourceID()!==c?a.line().dir.negate():a.line().dir)},this),a.each(b.edgeSetCollections(),function(a){d.push(a.sourceID()!==c?a.line().dir.negate():a.line().dir)},this),d=d.sort(function(a,b){return a.circumferentialAngle()-b.circumferentialAngle()});var e,f=new a.geometry.Vector(1,0),g=0;if(0===d.length)e=90;else{d.push(d[0].rotate(359.9));for(var h=0;h<d.length-1;h++){var i=d[h+1].circumferentialAngle()-d[h].circumferentialAngle();0>i&&(i+=360),i>g&&(g=i,f=d[h])}e=g/2+f.circumferentialAngle(),e%=360}this.updateByMaxObtuseAngle(e)}},updateByMaxObtuseAngle:function(b){var c=this.view("label"),d=Math.floor(b/60),e="middle";5===d||0===d?e="start":(2===d||3===d)&&(e="end");var f=this.getBound(!0),g=Math.max(f.width/2,f.height/2)+(this.showIcon()?12:8),h=new a.geometry.Vector(g,0).rotate(b);c.set("x",h.x),c.set("y",h.y),c.set("text-anchor",e),this._labelAngle=b},dispose:function(){clearTimeout(this._centralizedTextTimer),this.inherited()}}})}(nx,nx.global),function(a,b){var c=a.util,d=a.define("nx.graphic.Topology.NodesLayer",a.graphic.Topology.Layer,{statics:{defaultConfig:{}},events:["clickNode","enterNode","leaveNode","dragNodeStart","dragNode","dragNodeEnd","hideNode","pressNode","selectNode","updateNodeCoordinate"],properties:{nodes:{get:function(){return this.nodeDictionary().values().toArray()}},nodesMap:{get:function(){return this.nodeDictionary().toObject()}},nodeDictionary:{value:function(){return new a.data.ObservableDictionary}}},methods:{attach:function(a){this.inherited(a);var b=this.topology();b.watch("stageScale",this.__watchStageScaleFN=function(a,b){this.nodeDictionary().each(function(a){a.value().stageScale(b)})},this),b.watch("revisionScale",this.__watchRevisionScale=function(a,b){this.nodeDictionary().each(function(a){a.value().revisionScale(b)},this)},this)},addNode:function(a){var b=a.id(),c=this._generateNode(a);return this.nodeDictionary().setItem(b,c),c},removeNode:function(a){var b=this.nodeDictionary(),c=b.getItem(a);c&&(c.dispose(),b.removeItem(a))},updateNode:function(a){var b=this.nodeDictionary(),c=b.getItem(a);c&&c.update()},_getNodeInstanceClass:function(c){var d,e=this.topology(),f=e.nodeInstanceClass();if(a.is(f,"Function")?(d=f.call(this,c),a.is(d,"String")&&(d=a.path(b,d))):d=a.path(b,f),!d)throw"Error on instance node class";return d},_generateNode:function(a){var b=a.id(),c=this.topology(),d=c.stageScale(),e=this._getNodeInstanceClass(a),f=new e({topology:c});return f.setModel(a),f.attach(this.view()),f.sets({"class":"node","data-id":b,stageScale:d}),this.updateDefaultSetting(f),f},updateDefaultSetting:function(b){var e=this.topology(),f=a.graphic.Component.__events__;a.each(b.__events__,function(a){-1==f.indexOf(a)&&b.on(a,function(c,d){d instanceof MouseEvent&&(window.event=d),this.fire(a,b)},this)},this);var g=this.nodeConfig=a.extend({enableSmartLabel:e.enableSmartLabel()},d.defaultConfig,e.nodeConfig());delete g.__owner__,a.each(g,function(a,d){c.setProperty(b,d,a,e)},this),c.setProperty(b,"showIcon",e.showIcon()),1!==e.revisionScale()&&b.revisionScale(e.revisionScale())},eachNode:function(a,b){this.nodeDictionary().each(function(c,d){a.call(b||this,c.value(),d)})},getNode:function(a){return this.nodeDictionary().getItem(a)},clear:function(){this.eachNode(function(a){a.dispose()}),this.nodeDictionary().clear(),this.inherited()},dispose:function(){this.clear();var a=this.topology();a&&(this.topology().unwatch("stageScale",this.__watchStageScaleFN,this),this.topology().unwatch("revisionScale",this.__watchRevisionScale,this),a._activeNodesWatcher&&a._activeNodesWatcher.dispose(),a._highlightedNodesWatcher&&a._highlightedNodesWatcher.dispose()),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.NodeSet",a.graphic.Topology.Node,{events:["expandNode","collapseNode","beforeExpandNode","beforeCollapseNode"],properties:{nodes:{get:function(){var b={},c=this.topology(),d=this.model();return this.model().activated()?void 0:(a.each(d.vertices(),function(a,d){var e=c.getNode(d);e&&(b[d]=e)}),a.each(d.vertexSet(),function(d,e){var f=c.getNode(e);f&&(f.activated()?b[e]=f:a.extend(b,f.nodes()))}),b)}},nodeSets:{get:function(){var a={},b=this.topology(),c=this.model();return c.eachSubVertexSet(function(c,d){var e=b.getNode(d);e&&(a[d]=e)},this),a}},collapsed:{get:function(){return void 0!==this._collapsed?this._collapsed:!0},set:function(a){var b=this._processPropertyValue(a);return this._collapsed!==b?(this._collapsed=b,b?this.collapse(this._animation):this.expand(this._animation),!0):!1}},activated:{value:!0},showIcon:{set:function(a){var b=this._processPropertyValue(a);this._showIcon=b,this.view("icon").set("showIcon",b),this.view("icon").set("visible",b),null!=this._label&&this.calcLabelPosition(),this._selected&&this.view("selectedBG").set("r",this.selectedRingRadius()),this._updateMinusIcon()}},revisionScale:{set:function(a){var b=this.topology(),c=this.view("icon");c.set("scale",a),b.showIcon()?(c.showIcon(a>.2),c.set("visible",a>.2)):(c.showIcon(!1),c.set("visible",!1)),this._updateMinusIcon(a),this._labelVisibility&&this.view("label").set("visible",a>.4)}},animation:{value:!0},expandable:{value:!0},collapsible:{value:!0}},view:{type:"nx.graphic.Group",props:{"class":"node"},content:[{name:"label",type:"nx.graphic.Text",props:{"class":"node-label","alignment-baseline":"central",y:12}},{name:"selectedBG",type:"nx.graphic.Circle",props:{"class":"selectedBG",r:26}},{type:"nx.graphic.Group",name:"graphic",content:[{name:"icon",type:"nx.graphic.Icon",props:{"class":"icon",iconType:"unknown",showIcon:!1,scale:1}},{name:"minus",type:"nx.graphic.Icon",props:{"class":"indicator",iconType:"expand",scale:1}}],events:{mousedown:"{#_mousedown}",touchstart:"{#_mousedown}",mouseup:"{#_mouseup}",mouseenter:"{#_mouseenter}",mouseleave:"{#_mouseleave}",dragstart:"{#_dragstart}",dragmove:"{#_drag}",dragend:"{#_dragend}"}}]},methods:{setModel:function(a){this.inherited(a),this.setBinding("activated","model.activated,direction=<>",this)},update:function(){},expand:function(a,b,c){if(this.fire("beforeExpandNode",this),this.expandable()){var d=this.animation();this.animation("boolean"==typeof a?a:d),this._collapsed=!1,this.selected(!1),this.model().activated(!1),this.topology().expandNodes(this.nodes(),this.position(),function(){this.fire("expandNode",this),b&&b.call(c,this,this)},this,this.animation()),this.animation(d)}},collapse:function(a,b,c){if(this.fire("beforeCollapseNode"),this.collapsible()){var d=this.animation();this.animation("boolean"==typeof a?a:d),this._collapsed=!0,this.selected(!1),this.model().activated(!1),this.topology().collapseNodes(this.nodes(),this.position(),function(){this.model().activated(!0),this.fire("collapseNode",this),b&&b.call(c,this,this)},this,this.animation()),this.animation(d)}},expandNodes:function(a,b){this.model().activated()||this.topology().expandNodes(this.nodes(),this.position(),a,b)},collapseNodes:function(a,b){this.topology().collapseNodes(this.nodes(),this.position(),a,b)},_updateMinusIcon:function(a){var b=this.view("icon"),c=this.view("minus");if(b.showIcon()){c.scale(.4==a?.8:1);var d=b.size(),e=b.scale();c.setTransform(d.width*e/2,d.height*e/2)}else c.setTransform(0,0)}}})}(nx,nx.global),function(a,b){var c=a.util,d=a.define("nx.graphic.Topology.NodeSetLayer",a.graphic.Topology.Layer,{statics:{defaultConfig:{iconType:"nodeSet",label:"model.label"}},events:["clickNodeSet","enterNodeSet","leaveNodeSet","dragNodeSetStart","dragNodeSet","dragNodeSetEnd","hideNodeSet","pressNodeSet","selectNodeSet","updateNodeSetCoordinate","expandNodeSet","collapseNodeSet","beforeExpandNodeSet","beforeCollapseNodeSet","updateNodeSet","removeNodeSet"],properties:{nodeSets:{get:function(){return this.nodeSetDictionary().values().toArray()}},nodeSetMap:{get:function(){return this.nodeSetDictionary().toObject()}},nodeSetDictionary:{value:function(){return new a.data.ObservableDictionary}}},methods:{attach:function(a,b){this.inherited(a,b);var c=this.topology();c.watch("stageScale",this.__watchStageScaleFN=function(a,b){this.eachNodeSet(function(a){a.stageScale(b)})},this),c.watch("revisionScale",this.__watchRevisionScale=function(a,b){this.eachNodeSet(function(a){a.revisionScale(b)},this)},this)},addNodeSet:function(a){var b=a.id(),c=this._generateNodeSet(a);return this.nodeSetDictionary().setItem(b,c),c},removeNodeSet:function(a){var b=this.nodeSetDictionary(),c=b.getItem(a);c&&(this.fire("removeNodeSet",c),c.dispose(),b.removeItem(a))},updateNodeSet:function(a){var b=this.nodeSetDictionary(),c=b.getItem(a);c&&(c.update(),this.fire("updateNodeSet",c))},_getNodeSetInstanceClass:function(c){var d,e=this.topology(),f=e.nodeSetInstanceClass();if(a.is(f,"Function")?(d=f.call(this,c),a.is(d,"String")&&(d=a.path(b,d))):d=a.path(b,f),!d)throw"Error on instance node set class";return d},_generateNodeSet:function(a){var b=a.id(),c=this.topology(),d=c.stageScale(),e=this._getNodeSetInstanceClass(a),f=new e({topology:c});return f.setModel(a),f.attach(this.view()),f.sets({"data-id":b,"class":"node nodeset",stageScale:d},c),this.updateDefaultSetting(f),f},updateDefaultSetting:function(b){var e=this.topology(),f=a.graphic.Component.__events__;a.each(b.__events__,function(a){-1==f.indexOf(a)&&b.on(a,function(c,d){d instanceof MouseEvent&&(window.event=d),this.fire(a.replace("Node","NodeSet"),b)},this)},this);var g=a.extend({enableSmartLabel:e.enableSmartLabel()},d.defaultConfig,e.nodeSetConfig());delete g.__owner__,a.each(g,function(a,d){c.setProperty(b,d,a,e)},this),c.setProperty(b,"showIcon",e.showIcon()),1!==e.revisionScale()&&b.revisionScale(e.revisionScale())},getNodeSet:function(a){return this.nodeSetDictionary().getItem(a)},eachNodeSet:function(a,b){this.nodeSetDictionary().each(function(c,d){var e=c.value();a.call(b||this,e,d)},this)},clear:function(){this.eachNodeSet(function(a){a.dispose()}),this.nodeSetDictionary().clear(),this.inherited()},dispose:function(){this.clear(),this.topology().unwatch("stageScale",this.__watchStageScaleFN,this),this.topology().unwatch("revisionScale",this.__watchRevisionScale,this),this.inherited()}}})}(nx,nx.global),function(a){var b=(a.geometry.Vector,a.geometry.Line);a.define("nx.graphic.Topology.AbstractLink",a.graphic.Group,{events:["hide","show","remove"],properties:{sourceNode:{get:function(){var a=this.topology(),b=this.model().source().id();return a.getNode(b)}},targetNode:{get:function(){var a=this.topology(),b=this.model().target().id();return a.getNode(b)}},sourcePosition:{get:function(){return this.sourceNode().position()}},targetPosition:{get:function(){return this.targetNode().position()}},sourceNodeID:{get:function(){return this.model().source().id()}},targetNodeID:{get:function(){return this.model().target().id()}},sourceX:{get:function(){return this.sourceNode().x()}},sourceY:{get:function(){return this.sourceNode().y()}},targetX:{get:function(){return this.targetNode().x()}},targetY:{get:function(){return this.targetNode().y()}},sourceVector:{get:function(){return this.sourceNode().vector()}},targetVector:{get:function(){return this.targetNode()?this.targetNode().vector():void 0}},position:{get:function(){var a=this.sourceNode().position(),b=this.targetNode().position();return{x1:a.x||0,x2:a.y||0,y1:b.x||0,y2:b.y||0}}},line:{get:function(){return new b(this.sourceVector(),this.targetVector())}},topology:{value:null},id:{get:function(){return this.model().id()}},linkKey:{get:function(){return this.model().linkKey()}},reverse:{get:function(){return this.model().reverse()}},centerPoint:{get:function(){return this.line().center()}},enable:{value:!0}},methods:{setModel:function(a,b){this.model(a),this.setBinding("visible","model.visible,direction=<>",this),b!==!1&&this.update()},update:function(){},dispose:function(){this.fire("remove"),this.inherited()}}})}(nx,nx.global),function(a){var b=a.geometry.Vector,c=(a.geometry.Line,5);a.define("nx.graphic.Topology.Link",a.graphic.Topology.AbstractLink,{events:["pressLink","clickLink","enterLink","leaveLink"],properties:{linkType:{get:function(){return void 0!==this._linkType?this._linkType:"parallel"},set:function(a){var b=this._processPropertyValue(a);return this._linkType!==b?(this._linkType=b,!0):!1}},offsetPercentage:{value:0},offsetRadix:{value:5},label:{set:function(a){var b=this._processPropertyValue(a),c=this.view("label");null!=b?c.append():c.remove(),this._label=b}},color:{set:function(a){var b=this._processPropertyValue(a);this.view("line").dom().setStyle("stroke",b),this.view("path").dom().setStyle("stroke",b),this._color=b}},width:{set:function(a){var b=this._processPropertyValue(a),c=(this._stageScale||1)*b;this.view("line").dom().setStyle("stroke-width",c),this.view("path").dom().setStyle("stroke-width",c),this._width=b}},stageScale:{set:function(a){var b=(this._width||1)*a;this.view("line").dom().setStyle("stroke-width",b),this.view("path").dom().setStyle("stroke-width",b),this._stageScale=a,this.update()}},dotted:{set:function(a){var b=this._processPropertyValue(a);b?this.view("path").dom().setStyle("stroke-dasharray","2, 5"):this.view("path").dom().setStyle("stroke-dasharray",""),this._dotted=b}},style:{set:function(a){var b=this._processPropertyValue(a);this.view("line").dom().setStyles(b),this.view("path").dom().setStyles(b)}},parentLinkSet:{},enable:{get:function(){return null!=this._enable?this._enable:!0},set:function(a){var b=this._processPropertyValue(a);this._enable=b,this.dom().setClass("disable",!b),this.update()}},drawMethod:{},revisionScale:{}},view:{type:"nx.graphic.Group",props:{"class":"link"},content:[{type:"nx.graphic.Group",content:[{name:"path",type:"nx.graphic.Path",props:{"class":"link"}},{name:"line_bg",type:"nx.graphic.Line",props:{"class":"link_bg"}},{name:"line",type:"nx.graphic.Line",props:{"class":"link"}}],events:{mouseenter:"{#_mouseenter}",mouseleave:"{#_mouseleave}",mousedown:"{#_mousedown}",touchstart:"{#_mousedown}",mouseup:"{#_mouseup}",touchend:"{#_mouseup}"}},{name:"label",type:"nx.graphic.Group",content:{name:"labelText",type:"nx.graphic.Text",props:{"alignment-baseline":"text-before-edge","text-anchor":"middle","class":"link-label"}}}]},methods:{update:function(){this.inherited();var a,c=this.getOffset(),d=new b(0,c),e=(this._width||1)*(this._stageScale||1),f=this.reverse()?this.line().negate():this.line(),g=this.view("path"),h=this.view("line"),i=this.view("line_bg");if(this.drawMethod())a=this.drawMethod().call(this,this.model(),this),g.setStyle("display","block"),g.set("d",a),g.dom().setStyle("stroke-width",e),h.setStyle("display","none"),i.setStyle("display","none");else if("curve"==this.linkType()){var j,k,l=[];j=f.normal().multiply(3*c),k=f.center().add(j),l.push("M",f.start.x,f.start.y),l.push("Q",k.x,k.y,f.end.x,f.end.y),a=l.join(" "),g.setStyle("display","block"),g.set("d",a),g.dom().setStyle("stroke-width",e),h.setStyle("display","none"),i.setStyle("display","none")}else{var m=f.translate(d);h.sets({x1:m.start.x,y1:m.start.y,x2:m.end.x,y2:m.end.y}),i.sets({x1:m.start.x,y1:m.start.y,x2:m.end.x,y2:m.end.y}),g.setStyle("display","none"),h.setStyle("display","block"),i.setStyle("display","block"),h.setStyle("stroke-width",e),i.setStyle("stroke-width",4*e)}this._updateLabel()},getPaddingLine:function(){var a=this.offset()*c,b=this.sourceNode().getBound(!0),d=Math.max(b.width,b.height)/1.3,e=this.targetNode().getBound(!0),f=Math.max(e.width,e.height)/1.3,g=this.line().pad(d,f),h=g.normal().multiply(a);return g.translate(h)},getOffset:function(){return"parallel"==this.linkType()?this.offsetPercentage()*this.offsetRadix()*this._stageScale:this.offsetPercentage()*this.offsetRadix()},_updateLabel:function(){var a,b,c=this.getOffset(),d=this.line(),e=d.normal().multiply(c);null!=this._label&&(a=this.view("label"),b=d.center().add(e),a.setTransform(b.x,b.y,this.stageScale()),this.view("labelText").set("text",this._label))},_mousedown:function(){this.enable()&&this.fire("pressLink")},_mouseup:function(){this.enable()&&this.fire("clickLink")},_mouseleave:function(){this.enable()&&this.fire("leaveLink")},_mouseenter:function(){this.enable()&&this.fire("enterLink")}}})}(nx,nx.global),function(a,b){var c=a.util,d=a.define("nx.graphic.Topology.LinksLayer",a.graphic.Topology.Layer,{statics:{defaultConfig:{linkType:"parallel",label:null,color:null,width:null,enable:!0}},events:["pressLink","clickLink","enterLink","leaveLink"],properties:{links:{get:function(){return this.linkDictionary().values().toArray()}},linkMap:{get:function(){return this.linkDictionary().toObject()}},linkDictionary:{value:function(){return new a.data.ObservableDictionary}}},methods:{attach:function(a){this.inherited(a);var b=this.topology();b.watch("stageScale",this.__watchStageScaleFN=function(a,b){this.eachLink(function(a){a.stageScale(b)})},this),b.watch("revisionScale",this.__watchRevisionScale=function(a,b){this.eachLink(function(a){a.revisionScale(b)})},this)},addLink:function(a){var b=a.id(),c=this._generateLink(a);return this.linkDictionary().setItem(b,c),c},removeLink:function(a){var b=this.linkDictionary(),c=b.getItem(a);c&&(c.dispose(),b.removeItem(a))},updateLink:function(a){this.linkDictionary().getItem(a).update()},_getLinkInstanceClass:function(c){var d,e=this.topology(),f=e.linkInstanceClass();if(a.is(f,"Function")?(d=f.call(this,c),a.is(d,"String")&&(d=a.path(b,d))):d=a.path(b,f),!d)throw"Error on instance link class";return d},_generateLink:function(a){var b=a.id(),c=this.topology(),d=this._getLinkInstanceClass(a),e=new d({topology:c});return e.setModel(a,!1),e.attach(this.view()),e.view().sets({"class":"link","data-id":b}),this.updateDefaultSetting(e),e},updateDefaultSetting:function(b){var e=this.topology(),f=a.graphic.Component.__events__;a.each(b.__events__,function(a){-1==f.indexOf(a)&&b.on(a,function(){this.fire(a,b)},this)},this);var g=a.extend({},d.defaultConfig,e.linkConfig());if(delete g.__owner__,a.each(g,function(a,d){c.setProperty(b,d,a,e)},this),a.DEBUG){var h=b.model();b.view().sets({"data-linkKey":h.linkKey(),"data-source-node-id":h.source().id(),"data-target-node-id":h.target().id()})}b.stageScale(e.stageScale()),b.update()},eachLink:function(a,b){this.linkDictionary().each(function(c,d){a.call(b||this,c.value(),d)})},getLink:function(a){return this.linkDictionary().getItem(a)},highlightLinks:function(a){this.highlightedElements().addRange(a)},activeLinks:function(a){this.activeElements().addRange(a)},clear:function(){this.eachLink(function(a){a.dispose()}),this.linkDictionary().clear(),this.inherited()},dispose:function(){this.clear(),this.topology().unwatch("stageScale",this.__watchStageScaleFN,this),this.inherited()}}})}(nx,nx.global),function(a){a.geometry.Vector,a.geometry.Line;a.define("nx.graphic.Topology.LinkSet",a.graphic.Topology.AbstractLink,{events:["pressLinkSetNumber","clickLinkSetNumber","enterLinkSetNumber","leaveLinkSetNumber","collapseLinkSet","expandLinkSet"],properties:{linkType:{get:function(){return this._linkType||"parallel"},set:function(a){var b=this._processPropertyValue(a);return this._linkType!==b?(this._linkType=b,!0):!1}},links:{get:function(){var a={};return this.eachLink(function(b,c){a[c]=b},this),a}},color:{set:function(a){var b=this._processPropertyValue(a);this.view("numBg").dom().setStyle("fill",b),this.view("path").dom().setStyle("stroke",b),this._color=b}},stageScale:{set:function(a){this.view("path").dom().setStyle("stroke-width",a),this.view("number").setTransform(null,null,a),this.model()&&this._updateLinksOffset(),this._stageScale=a}},enable:{get:function(){return void 0===this._enable?!0:this._enable},set:function(a){var b=this._processPropertyValue(a);this.dom().setClass("disable",!b),this._enable=b,this.eachLink(function(a){a.enable(b)})}},collapsedRule:{value:!1},activated:{value:!0},revisionScale:{set:function(a){var b=.6>a?8:12;this.view("numBg").dom().setStyle("stroke-width",b);var c=.6>a?8:10;this.view("num").dom().setStyle("font-size",c),this.view("number").visible(.2!==a)}}},view:{type:"nx.graphic.Group",props:{"data-type":"links-sum","class":"link-set"},content:[{name:"path",type:"nx.graphic.Line",props:{"class":"link-set-bg"}},{name:"number",type:"nx.graphic.Group",content:[{name:"numBg",type:"nx.graphic.Rect",props:{"class":"link-set-circle",height:1},events:{mousedown:"{#_number_mouseup}",touchstart:"{#_number_mouseup}",mouseenter:"{#_number_mouseenter}",mouseleave:"{#_number_mouseleave}"}},{name:"num",type:"nx.graphic.Text",props:{"class":"link-set-text",y:1}}]}]},methods:{setModel:function(a,b){this.inherited(a,b),this.setBinding("activated","model.activated,direction=<>",this)},update:function(){if(this._activated){var a=this.line();this.view("path").sets({x1:a.start.x,y1:a.start.y,x2:a.end.x,y2:a.end.y});var b=this.centerPoint();this.view("number").setTransform(b.x,b.y)}},updateLinkSet:function(){var a=this._processPropertyValue(this.collapsedRule());this.model().activated(a,{force:!0}),a?(this.append(),this.update(),this._updateLinkNumber(),this.fire("collapseLinkSet")):(this.parent()&&this.remove(),this._updateLinksOffset(),this.fire("expandLinkSet"))},eachLink:function(b,c){var d=this.topology(),e=this.model();a.each(e.edges(),function(a,e){var f=d.getLink(e);f&&b.call(c||this,f,e)})},_updateLinkNumber:function(){var a=Object.keys(this.model().edges()),b=this.view("num"),c=this.view("numBg");if(1==a.length)b.visible(!1),c.visible(!1);else{b.sets({text:a.length,visible:!0});var d=b.getBound(),e=Math.max(d.width-6,1);c.sets({width:e,visible:!0}),c.setTransform(e/-2)}},_updateLinksOffset:function(){if(!this._activated){var b=this.links(),c=(Object.keys(b).length-1)/2,d=0;a.each(b,function(a){a.offsetPercentage(-1*d++ +c),a.update()},this)}},_number_mousedown:function(a,b){this.enable()&&this.fire("pressLinkSetNumber",b)},_number_mouseup:function(a,b){this.enable()&&this.fire("clickLinkSetNumber",b)},_number_mouseleave:function(a,b){this.enable()&&this.fire("numberleave",b)},_number_mouseenter:function(a,b){this.enable()&&this.fire("numberenter",b)}}})}(nx,nx.global),function(a,b){var c=a.util,d=a.define("nx.graphic.Topology.LinkSetLayer",a.graphic.Topology.Layer,{statics:{defaultConfig:{label:null,sourceLabel:null,targetLabel:null,color:null,width:null,dotted:!1,style:null,enable:!0,collapsedRule:function(a){if("edgeSetCollection"==a.type())return!0;var b=this.linkType(),c=Object.keys(a.edges()),d="curve"===b?9:5;return c.length>d}}},events:["pressLinkSetNumber","clickLinkSetNumber","enterLinkSetNumber","leaveLinkSetNumber","collapseLinkSet","expandLinkSet"],properties:{linkSets:{get:function(){return this.linkSetDictionary().values().toArray()}},linkSetMap:{get:function(){return this.linkSetDictionary().toObject()}},linkSetDictionary:{value:function(){return new a.data.ObservableDictionary}}},methods:{attach:function(a){this.inherited(a);var b=this.topology();b.watch("stageScale",this.__watchStageScaleFN=function(a,b){this.eachLinkSet(function(a){a.stageScale(b)})},this),b.watch("revisionScale",this.__watchRevisionScale=function(a,b){this.eachLinkSet(function(a){a.revisionScale(b)})},this)},addLinkSet:function(a){var b=this.linkSetDictionary(),c=this._generateLinkSet(a);return b.setItem(a.linkKey(),c),c},updateLinkSet:function(a){this.linkSetDictionary().getItem(a).updateLinkSet()},removeLinkSet:function(a){var b=this.linkSetDictionary(),c=b.getItem(a);return c?(c.dispose(),b.removeItem(a),!0):!1},_getLinkSetInstanceClass:function(c){var d,e=this.topology(),f=e.linkSetInstanceClass();if(a.is(f,"Function")?(d=f.call(this,c),a.is(d,"String")&&(d=a.path(b,d))):d=a.path(b,f),!d)throw"Error on instance linkSet class";return d},_generateLinkSet:function(a){var b=this.topology(),c=this._getLinkSetInstanceClass(a),d=new c({topology:b});return d.setModel(a,!1),d.attach(this.view()),this.updateDefaultSetting(d),d},updateDefaultSetting:function(b){var e=this.topology(),f=a.graphic.Component.__events__;a.each(b.__events__,function(a){-1==f.indexOf(a)&&b.on(a,function(){this.fire(a,b)},this)},this);var g=a.extend({},d.defaultConfig,e.linkSetConfig());if(delete g.__owner__,g.linkType=e.linkConfig()&&e.linkConfig().linkType||a.graphic.Topology.LinksLayer.defaultConfig.linkType,a.each(g,function(a,d){c.setProperty(b,d,a,e)},this),b.stageScale(e.stageScale()),a.DEBUG){var h=b.model();b.view().sets({"data-nx-type":"nx.graphic.Topology.LinkSet","data-linkKey":h.linkKey(),"data-source-node-id":h.source().id(),"data-target-node-id":h.target().id()})}return b.updateLinkSet(),b},eachLinkSet:function(a,b){this.linkSetDictionary().each(function(c,d){a.call(b||this,c.value(),d)})},getLinkSet:function(a,b){var c=this.topology(),d=c.graph(),e=d.getEdgeSetBySourceAndTarget(a,b)||d.getEdgeSetCollectionBySourceAndTarget(a,b);return e?this.getLinkSetByLinkKey(e.linkKey()):null},getLinkSetByLinkKey:function(a){return this.linkSetDictionary().getItem(a)},highlightLinkSets:function(a){this.highlightedElements().addRange(a)},activeLinkSets:function(a){this.activeElements().addRange(a)},clear:function(){this.eachLinkSet(function(a){a.dispose()}),this.linkSetDictionary().clear(),this.inherited()},dispose:function(){this.clear(),this.topology().unwatch("stageScale",this.__watchStageScaleFN,this),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.HierarchicalLayout",{properties:{topology:{},levelBy:{value:function(){return function(a){return a.model().get("role")}}},sortOrder:{value:function(){return[]}},direction:{value:"vertical"},order:{},nodesPositionObject:{},groups:{}},methods:{process:function(a,b,c){var d=this._group(a,b||{}),e=this._calc(d,b||{});this._layout(e,c)},_group:function(b,c){var d={__other__:[]},e=this.topology(),f=c.levelBy||this.levelBy();return e.eachNode(function(b){var c;if(c=a.is(f,"String")&&"model"==f.substr(5)?b.model().get(f.substring(6)):f.call(e,b,b.model())){var g=d[c]=d[c]||[];g.push(b)}else d.__other__.push(b)}),d},_calc:function(b,c){var d={},e=Object.keys(b),f=this.topology(),g=c.sortOrder||this.sortOrder()||[],h=[];a.each(g,function(a){var b=e.indexOf(a);-1!==b&&(h.push(a),e.splice(b,1))}),e.splice(e.indexOf("__other__"),1),h=h.concat(e,["__other__"]),b=this._sort(b,h);var i=f.padding(),j=f.width()-2*i,k=f.height()-2*i,l=this.direction(),m=k/(h.length+1),n=j/(h.length+1),o=n,p=m;return a.each(h,function(c){b[c]&&("vertical"==l?(n=j/(b[c].length+1),a.each(b[c],function(a,b){d[a.id()]={x:n*(b+1),y:p}}),p+=m):(m=k/(b[c].length+1),a.each(b[c],function(a,b){d[a.id()]={x:o,y:m*(b+1)}}),o+=n),delete b[c])}),this.order(h),d},_sort:function(b,c){var d=this.topology(),e=d.graph();b[c[0]].sort(function(a,b){return Object.keys(b.model().edgeSets()).length-Object.keys(a.model().edgeSets()).length});for(var f=0;f<c.length-1;f++){var g=b[c[f]],h=b[c[f+1]],i=[],j=[];a.each(g,function(b){var c=[];a.each(h,function(a,d){null!=e.getEdgesBySourceAndTarget(b,a)&&-1!=c.indexOf(a)&&(c.push(a),j.push(d))}),c.sort(function(a,b){return Object.keys(b.model().edgeSets()).length-Object.keys(a.model().edgeSets()).length}),i=i.concat(c)}),a.each(i,function(a){var b=h.indexOf(a);-1!==b&&h.splice(b,1)}),b[c[f+1]]=i.concat(h)}return this.groups(a.extend({},b)),b},_layout:function(b,c){var d=this.topology(),e=0,f=0,g=function(){e==f&&setTimeout(function(){d.getLayer("links").show(),d.getLayer("linkSet").show(),d.stage().resetFitMatrix(),d.fit(function(){c&&c.call(d)})},0)}.bind(this);d.getLayer("links").hide(),d.getLayer("linkSet").hide(),a.each(b,function(a,b){var c=d.getNode(b);c&&(c.translateTo(a.x,a.y,function(){e++,g()}),f++)})}}})}(nx,nx.global),function(a){var b='<g><path class="mapPath" d="M208.06990887396233,23.37527332433217L215.7868911700379,25.2405505103427L225.05484477500715,27.39663922308216L229.847604433539,28.509843055527313L229.22916419201368,31.258620846761232L225.86435701445737,45.67883911946808L225.57787706626675,46.910367281593494L223.1197704131015,57.976081469960945L222.68460344524175,59.909549559706875L222.15030859693576,62.30432265597199L219.75922708815938,72.928201855628L219.28120986792777,75.03099342974065L218.74847416345648,76.44733270437735L219.71542917729977,80.02811393668435L218.96102207931347,81.20333223790806L219.08988445400314,83.20793071669561L211.9641592482314,81.54754118082383L210.4146876286881,81.16965419238284L205.68170476410637,80.03014429996495L205.4368471187458,79.97143714886977L192.93105504145097,76.97294676283104L190.8690634099026,77.750624908742L186.9491805917645,77.05071385502788L185.22126106592475,76.47604626026339L183.66609371151264,77.40151861060986L181.06996678663228,77.1407305158449L179.3033969233402,77.13948848635175L176.17720225183587,78.029393295673L172.6589729914919,77.67265485964685L170.70085395554645,76.33985636891919L166.93087846420985,77.1850630220805L163.27130420651633,76.67196745095964L163.30707548281362,75.7174402245829L160.58686474814118,74.38458187241952L159.6931984439962,73.6067567839483L156.01712844007614,72.9491420558337L154.291478857127,73.57201357263762L149.6645731342456,74.23623404685475L145.14987197234086,71.8109836175048L143.88072253430482,70.6444043917536L144.1466243526918,69.15159960337223L144.49377571869974,66.87511129520897L144.22699689495965,62.270541172467006L142.07895655500704,59.66634003277056L140.85677270395087,59.553438388152586L140.85894015205616,59.496675451252145L139.916136210513,59.70098217421935L138.33232436334237,56.94648031040356L135.08279344552,55.544277284497184L132.97015963237226,55.891652737784625L131.59923780927363,54.010360471860395L130.58223304356972,54.59448265414676L133.0048520029564,49.238346610522626L132.05281795859673,53.01134664545202L132.7597153345692,53.15668450864064L134.4037748980134,50.31309495214532L133.95969829624335,48.92407759080925L136.0066263306689,47.512726175072885L133.97353612506322,47.14414763713114L133.23217019478432,45.192238821039155L133.35016218806908,43.08409814782601L134.39996162871267,43.61570559604036L137.4876241065142,43.30227124798762L133.8151844120623,40.94574015730416L134.22124021020812,36.01180575065757L133.56641733468462,34.390173977836525L134.12768356191526,31.088633186663174L134.36579641680657,26.977904502305705L132.92554248890553,23.991565216123263L133.05583193368733,18.445048375297006L135.3814012336142,14.928934713321382L137.7828105832524,17.609239021771145L139.35978948127587,18.533292265251134L142.04943780235283,21.288866211198865L145.36097824965577,22.228574647463006L148.8314813233198,24.297190737430128L152.38815017481363,24.61835376383908L154.23369912697444,26.833920861763545L155.77194052908123,25.941911447387724L156.97145289125484,31.02771558775612L156.0399903700427,31.167465296663067L154.11153102600076,33.754590371062704L154.33634204049497,31.249841159051016L152.3664473577677,34.028052207357746L151.11328058475527,34.78459562062528L150.24266411223732,36.190288333375975L152.05914720209643,34.77486956083385L154.2883223587657,34.51704635482088L155.80366912855868,32.42856596702018L158.3031487251667,30.95243800826836L157.89052530622024,34.08992066881717L157.06285573742474,33.698398515392796L155.54884913441987,36.79560413655042L156.61449162797066,38.23449624855266L155.38191432290972,39.936637919970394L154.2089803399425,42.482447345570336L153.308918744116,41.59129761072995L154.46561260391582,39.671311129209016L154.37761074260976,39.647024678286925L152.90932514241405,40.48668924932974L151.61086119807345,43.41364520640036L151.14148558067978,41.80883362931729L152.1008247287545,39.84583766977141L150.16849918289859,40.7968137300079L149.52319582496818,42.1124512069656L147.4021455267702,43.52337594871972L149.42119202527243,42.69178061157413L148.18293208762083,44.21968748182542L149.3795334368529,44.556982790263646L151.00279488754285,43.043302198224296L152.03868051296655,44.888777072586436L153.871518676589,43.723593804341704L155.16626558763522,41.550237292459315L156.60530111779883,41.887109177414004L157.88741282559704,41.705777749248455L157.86384951391113,37.31049385918254L158.99338017309117,37.08321676535968L158.10211483381772,35.73010033671983L159.2088323387424,33.8047208917485L161.16357230459977,31.058688412981382L162.9113142228988,29.90166071978399L161.4539214747631,28.268346296378127L161.50200813601606,25.760799749944113L160.2165301685198,26.436794636975037L160.97080744538914,28.348974231989814L159.60407934913098,27.068134799049517L159.95572460120331,24.940449393438485L161.4910301623285,25.355638807110267L161.97896818770016,24.59676520156131L159.33797227822907,21.648376187312465L159.14240820603703,20.040764536799657L160.36543488805205,19.799012295581747L161.58588974582761,21.43710083420649L162.4858998398068,18.04698631290296L162.95134674943927,16.322885588815097L161.24381018256219,15.20848145955324L160.04585728433227,11.701769628478132L161.08798618415113,10.793553936506783L172.9773901748378,14.256236175137701L183.85631949544694,17.16574961388676L193.36455246139394,19.684155644557336ZM157.3646647636349,18.3415758502814L157.34284738032505,20.75133763190172L156.08774814160597,19.66263139380999ZM154.46762458407255,16.128433844761275L155.73085629870945,17.69805736017429L154.95868420552517,19.460325961718468L153.99155689241917,18.386541536807158ZM157.91803934757735,15.395189160717791L159.51952149155017,16.893443147657194L156.73641125363145,17.308058662100052L156.27828862317824,16.079755903933915ZM159.97862419135782,22.119978709645807L160.5388166572277,24.11512500927563L158.6496279090536,23.89203620744513L157.41059269642705,24.627900887097212L158.8325681275246,25.390478779148225L158.6485163670892,29.0579416406066L159.2553615685493,27.67885436540155L160.7428639901633,29.297522077190706L160.08050572656498,31.573089598805154L157.92666518805885,28.55779741045035L158.4883562476747,26.29383056885888L156.95030906124583,24.548615164702596L159.14762292373314,21.77338886358382ZM157.08352912790554,34.73001210024188L157.1759175768123,36.9346558159408L156.08763757549252,36.370879315301295ZM156.8058229824382,40.26951380705077L155.3821884903527,41.06225419219936L156.89214708421144,38.2911274506497ZM376.46496066911186,51.914213348189946L388.93197131840293,53.028215935570756L388.3653425480326,59.75639881567736L388.00079375570965,64.26380312722256L387.4125084134096,71.51663029909503L386.4649145128003,82.57738610114552L386.35927173246466,83.82242535685998L385.27679748716855,96.57978486985769L385.1186324667765,98.44381815867769L384.698809701747,103.28174782558551L384.1801981419255,109.50361391223487L384.08954713282026,110.68246992216439L383.09449592564863,123.13613914515076L382.5182680680963,127.13048972108277L369.6389242958943,125.91249949176836L368.9747358505291,125.84694661151434L356.6882715225784,124.73652767214708L353.55857284827596,124.39717696805678L331.98615298476255,121.72753712686426L327.5636074981978,121.19679246374426L322.7034944039235,120.54306880803813L307.32805093497205,118.35668167037636L295.4823031517515,116.75285043280724L291.0901143861885,115.88793193239883L289.9562597753677,122.0556696752052L289.4689868456089,125.62012859285994L287.4568148016434,123.35869766512769L287.6825859935117,122.52844891749362L285.9967047793439,119.79631799185256L284.62553865120094,120.37642738457419L283.63911744806023,123.50012310962188L282.24506664110555,122.99154824117818L279.45160339657673,123.31131213949618L279.01599190955295,122.19483447332425L275.89448841092565,122.44418119987643L273.52887993136903,121.18523623256601L271.8359282255869,123.1593031011571L270.8228473855571,122.3871727350346L266.80856836848363,121.58471180717879L265.9949603898795,123.50639731787282L263.77462955842327,121.68960979633823L263.977746776462,120.29858868418546L263.1813009705801,115.44268319643095L261.86586062034564,114.26940639162785L260.5145756577628,114.74014314941417L259.2867093056136,112.97783949256996L260.0027879734803,109.43364067414507L258.85470273876206,108.18806700170046L257.5946468220387,105.09974668812652L257.01916146448184,102.232571328988L257.2968606453165,98.59546836564834L256.11116255210834,98.0015580753576L255.9381347145067,96.5578279292647L250.82866246261025,99.63742938265455L249.8616655743001,99.8566053963151L248.6288976700609,97.62456394237472L247.40940015127347,97.52498249631265L248.6450132911754,95.65002996841542L248.15557764179596,93.56071034158663L249.29361357747968,92.33582636140443L250.43741607596934,92.52603915166321L250.86759772404912,90.21200153517611L249.84304093587244,88.99468681278847L250.67850261619338,87.91088262946107L251.62648928707796,84.70375440843793L253.69592836814797,80.48174077325643L254.32676550058454,77.92767884597913L250.91412373547573,77.7646348184818L250.28691395008548,75.68750982323854L247.29264305822483,72.7655582272755L247.4284684951822,71.39691923913654L246.42961726324572,70.49446229094463L245.7409617814514,67.8498234956237L243.87932910544887,64.41474469284196L241.6618414496704,63.26213028851612L241.5807522724896,62.285496757092915L239.75970315000308,60.46935497364461L241.11335354837047,59.72684924015812L239.8132352586303,58.092912916067576L240.7924876436294,57.48546203837623L240.74289861654768,55.578505820732516L239.71064413664865,54.26741202566666L237.8145383960838,49.57121847887811L238.7311769311309,45.290681111313006L239.85094763996943,40.10441442315971L241.77949842516085,31.098096321664116L257.8109971771737,34.42181309289015L265.85841819186174,36.02968631311114L288.7289166054043,40.20119165249355L300.0164981878418,42.1129949965964L306.48909015808385,43.11850331624498L321.87157047260183,45.38810731219701L337.27637717155096,47.4998043472425L350.286852068656,49.102693249056756L363.44950934656947,50.59421078393302ZM247.4284684951822,71.39691923913654L247.29264305822483,72.7655582272755L250.28691395008548,75.68750982323854L250.91412373547573,77.7646348184818L254.32676550058454,77.92767884597913L253.69592836814797,80.48174077325643L251.62648928707796,84.70375440843793L250.67850261619338,87.91088262946107L249.84304093587244,88.99468681278847L250.86759772404912,90.21200153517611L250.43741607596934,92.52603915166321L249.29361357747968,92.33582636140443L248.15557764179596,93.56071034158663L248.6450132911754,95.65002996841542L247.40940015127347,97.52498249631265L248.6288976700609,97.62456394237472L249.8616655743001,99.8566053963151L250.82866246261025,99.63742938265455L255.9381347145067,96.5578279292647L256.11116255210834,98.0015580753576L257.2968606453165,98.59546836564834L257.01916146448184,102.232571328988L257.5946468220387,105.09974668812652L258.85470273876206,108.18806700170046L260.0027879734803,109.43364067414507L259.2867093056136,112.97783949256996L260.5145756577628,114.74014314941417L261.86586062034564,114.26940639162785L263.1813009705801,115.44268319643095L263.977746776462,120.29858868418546L263.77462955842327,121.68960979633823L265.9949603898795,123.50639731787282L266.80856836848363,121.58471180717879L270.8228473855571,122.3871727350346L271.8359282255869,123.1593031011571L273.52887993136903,121.18523623256601L275.89448841092565,122.44418119987643L279.01599190955295,122.19483447332425L279.45160339657673,123.31131213949618L282.24506664110555,122.99154824117818L283.63911744806023,123.50012310962188L284.62553865120094,120.37642738457419L285.9967047793439,119.79631799185256L287.6825859935117,122.52844891749362L287.4568148016434,123.35869766512769L289.4689868456089,125.62012859285994L288.0481456605741,134.7011241381732L286.64589863202497,143.63758020028786L286.1069653617815,147.07516485894723L285.2416691847088,152.5577038120432L283.7018105789312,161.95553979865701L282.18542063437525,171.4536805154121L275.90534585979714,170.47636550018183L267.7145145618956,169.13708142644555L266.95905635804127,169.00653436610048L255.62126287079596,166.99664084530787L241.51437533212479,164.45244088140396L238.25747411672734,163.81312146165828L228.03746052948316,161.74634177601865L213.10504367718886,158.58241564320986L201.38062018260996,155.98327886854509L201.26264186741616,155.9443229041574L208.194181064414,125.14850783660768L208.86402650464748,122.21419380962902L209.57920284148855,121.62240854995684L210.6538548756982,119.7963758007586L210.54418128371157,117.8487345424237L211.81579328068358,116.88850385738431L211.17154004208896,115.00859304864105L208.23889015674638,113.22338110630164L208.95496606883313,109.87569152074218L210.23244261076775,108.98457178120213L212.43614614381693,105.59541221923064L214.60227681915546,104.31180404784618L215.84816155062708,102.79960483052491L216.00646043659947,101.15325075851445L217.06593304506316,100.29020745611103L219.0736289368876,97.12363308474767L221.7007890101118,93.14158334465435L223.31296627836173,91.42091252914474L222.7826118046106,88.67603183461142L220.0676041385243,86.09394041764699L219.08988445400314,83.20793071669561L218.96102207931347,81.20333223790806L219.71542917729977,80.02811393668435L218.74847416345648,76.44733270437735L219.28120986792777,75.03099342974065L219.75922708815938,72.928201855628L222.15030859693576,62.30432265597199L222.68460344524175,59.909549559706875L223.1197704131015,57.976081469960945L225.57787706626675,46.910367281593494L225.86435701445737,45.67883911946808L229.22916419201368,31.258620846761232L229.847604433539,28.509843055527313L241.77949842516085,31.098096321664116L239.85094763996943,40.10441442315971L238.7311769311309,45.290681111313006L237.8145383960838,49.57121847887811L239.71064413664865,54.26741202566666L240.74289861654768,55.578505820732516L240.7924876436294,57.48546203837623L239.8132352586303,58.092912916067576L241.11335354837047,59.72684924015812L239.75970315000308,60.46935497364461L241.5807522724896,62.285496757092915L241.6618414496704,63.26213028851612L243.87932910544887,64.41474469284196L245.7409617814514,67.8498234956237L246.42961726324572,70.49446229094463ZM436.7850623119907,56.12254905436134L444.9270268368669,56.450940572261516L451.45126502562414,56.66509911997218L464.47126846280105,56.99430355546326L473.41103521315995,57.14383674142323L474.27827867930756,61.63139829266288L475.00518458707495,62.94145392016651L474.1359062827915,65.59674866215403L474.67142122429385,69.6443658545013L474.32283574541606,72.06528845987373L474.25981192256774,72.43038912999873L475.7739057529861,78.02851452654033L477.30261444897445,81.7073166626783L477.85535964951083,84.9548260185195L478.0542701584073,89.82709334249148L477.93020055795586,91.43754350637619L477.93433121570223,94.08596043714181L478.8968333657801,95.46218445618229L478.3696792600468,98.00425127424717L478.3942100922412,101.11886777915083L478.5835565859736,101.12144236331119L479.14957246362434,103.77094672233966L480.88986058390105,106.71155229829856L481.39520136269044,110.71276945680313L481.1750235261709,112.47910769447333L481.32859592812264,114.09388839138433L472.6894668170374,114.01344496045203L462.9267425227518,113.83668387545765L462.5487838151503,113.82775271136381L453.2416104525768,113.54488670776652L449.5848166079546,113.413578172205L440.3271259743346,113.06493224590258L438.219695887975,112.9706204942155L430.01574882132275,112.56506143351021L410.71630930571513,111.47977315759601L410.69289523937334,111.48030090625946L398.4808653624099,110.63850011367265L397.7782197575811,110.58487729373064L384.1801981419255,109.50361391223487L384.698809701747,103.28174782558551L385.1186324667765,98.44381815867769L385.27679748716855,96.57978486985769L386.35927173246466,83.82242535685998L386.4649145128003,82.57738610114552L387.4125084134096,71.51663029909503L388.00079375570965,64.26380312722256L388.3653425480326,59.75639881567736L388.93197131840293,53.028215935570756L402.6562295553884,54.1234680261241L414.0106375189442,54.905754646948935L420.50038280677256,55.289564618688246ZM497.0724296163263,57.240184603279545L499.16519306690066,57.224387203866854L499.1018843294923,50.118643322843354L501.5212474529504,50.35866816045029L503.16308524740845,51.73537463554669L505.0228675005861,59.27450918106217L504.9561812852384,61.234672578723575L506.25500207289974,62.33194729680076L508.22323187598863,62.60861195551297L509.73648212008436,62.41002270179433L510.80396825299766,63.51475574499318L515.507315653214,63.76195197025777L516.2414458455145,65.8607272286057L520.2990490484116,65.2024656892263L520.2992067119503,64.36744137304595L523.4878179466417,63.33696458752297L524.9865946630081,63.565965205058546L529.5325304889936,65.05152253913627L530.6957740941614,64.9512971875289L529.7785693908694,66.45565902618875L532.3555743995976,66.6429132695049L534.2295758516718,70.75425685496998L535.4715249814342,70.2197602230683L535.4839382366914,68.24339256017822L538.0691766911979,68.05832814798839L538.753241137994,69.76806235996548L541.4186643914794,70.8090773789337L542.5845884879974,72.34330721738525L544.4997075190729,72.41755202252966L544.4519849592948,73.62249060818658L548.4142537905718,72.68312483470777L551.050456562152,70.59685371255921L552.8268123996222,69.45341871021753L554.790193068741,72.1518969652368L562.4214965396618,71.39490189646847L565.8236355008087,73.49709168966888L567.1203931893796,72.74172116507748L569.7105329122621,73.11618218184628L564.689287808705,76.47859844911522L558.9718661649567,78.67083338550458L555.3790210284246,80.80920906322513L551.8609038194646,83.99200184097879L546.3994267065746,90.57298241180843L542.5084707577508,94.19682105859363L538.7948812950353,97.19601750509446L537.4859173907628,99.63367403524956L536.3305136638659,99.62328979702238L536.5044572332245,104.19907907433799L536.6840062964787,109.03872197123269L536.0504440303799,111.69298033039854L531.4888595963635,114.12627078137359L529.8594136445661,117.26024990128963L529.3129177956712,118.88132001719805L529.3874240168569,120.15214001431775L530.8369725955193,120.2502714037189L532.5808580454741,122.5566454181452L531.3815408552465,125.31742923247896L531.2718117895793,126.93823491762339L530.9015072253347,129.39513762798674L531.3417587497429,133.4388266339189L530.9588384428881,135.59955892921437L531.9344459682603,136.18186060524044L534.4565531844748,138.82889894638663L537.5611753424346,139.22248316748494L538.6111595318871,140.80677179571308L540.7501573164056,141.6011896731378L542.4541615052505,142.44501555268346L543.9164274902628,145.4839561179383L548.0543979257922,148.44267429535864L549.8854230381448,149.12480375403504L551.8992440925799,151.60217715753356L552.3757742166812,153.80719228308737L552.3163512998807,155.91031442053315L553.1158397794857,158.0496171850674L547.8178027509169,158.30341978214722L546.2030349524372,158.3760117388582L541.5034359595513,158.57961523899598L536.5275337096691,158.77831434889458L535.1251672412604,158.83399750263027L528.7747932765471,159.05872033598155L528.4506988339296,159.06882914456287L522.4038221652997,159.24641899337848L520.3621030604634,159.29554517132988L516.0124931774124,159.3967973138192L512.2817224191687,159.4609293511014L509.6541614986644,159.50163515697477L504.089167326057,159.57266358175025L503.29562401568535,159.58902763130334L496.91257148098595,159.65006150853173L496.0075644799285,159.65053067100985L490.53411359204085,159.67929300893695L487.9449507680171,159.67844755503347L482.5537363807226,159.65905853109064L482.5801360632289,153.10859383763488L482.6207267500289,146.60618350501124L482.62073633344295,146.60417080131992L482.66119562073874,140.10873527005708L482.67376532957,138.46584387091127L482.6893208025142,135.1910994238483L482.69978629049353,131.9910657203003L482.7115488817173,126.54162520010243L482.48587388706335,125.46357245489003L479.5406278697855,123.69340639571476L477.733445808825,120.5821215089577L477.71552444471286,119.42167900193124L480.13274903378544,117.6229285245521L481.32859592812264,114.09388839138433L481.1750235261709,112.47910769447333L481.39520136269044,110.71276945680313L480.88986058390105,106.71155229829856L479.14957246362434,103.77094672233966L478.5835565859736,101.12144236331119L478.3942100922412,101.11886777915083L478.3696792600468,98.00425127424717L478.8968333657801,95.46218445618229L477.93433121570223,94.08596043714181L477.93020055795586,91.43754350637619L478.0542701584073,89.82709334249148L477.85535964951083,84.9548260185195L477.30261444897445,81.7073166626783L475.7739057529861,78.02851452654033L474.25981192256774,72.43038912999873L474.32283574541606,72.06528845987373L474.67142122429385,69.6443658545013L474.1359062827915,65.59674866215403L475.00518458707495,62.94145392016651L474.27827867930756,61.63139829266288L473.41103521315995,57.14383674142323L483.62955753369573,57.23964573515832ZM855.448121505269,86.46230166436465L855.4814977116182,89.76515857448203L854.1551171207543,87.37622389655905L851.020511654358,87.10356712015471L852.0678007094234,88.03877322632911L850.3266694128191,89.96175057232733L849.9617886576746,88.22224034189446L848.6124842771196,90.41327674638694L850.0919554288375,93.41099068333415L845.3409697157404,91.30649433935957L845.6218384873501,89.21919039095565L843.9338112746235,87.48232731922599L843.9928238125862,86.3165510502148L843.9642895188817,86.33751663053135L843.7711289948861,88.04354869006102L844.7708643348188,88.40474665879469L845.0132936131847,90.3104092042056L842.7842067445711,91.57959228280686L843.9985582130518,92.7212724025353L843.5253080269174,94.93908334046546L843.462796241472,98.28965279258057L844.0081429374577,98.73800161772294L842.7997860134521,101.3659139718144L840.6739797813616,101.31719692338424L840.5979749488436,100.35842956037254L839.8720879638361,99.36369008314455L839.5707466763474,104.11783083795854L838.5547932408931,103.24357632506565L837.4153509199546,104.40814785069881L836.7049001874934,101.43612073811391L836.2127254255124,103.06225918945381L835.7835962351619,104.08818695670527L836.9977875255985,105.08799494477694L836.5619321028435,106.39463509731274L836.4156718961412,106.42663271202287L834.6507478093808,102.71549374973574L834.7204311750081,101.84939213262498L834.7746578793799,99.60988272728741L834.7398994426107,99.61031652525219L834.5673111913034,102.29651570537351L833.7616944428255,104.1504867007277L834.3349053528149,103.4365867660257L834.6630237870462,102.90035116054196L836.4967481418553,106.8014985167249L835.723673673875,107.80829839061528L834.4217281601361,104.4708943506264L834.7647839315322,106.43344851458494L833.7047451621837,105.22726669694725L831.466081281899,107.14487250246634L830.6668523360638,109.7952423112896L831.9831972592419,111.57209364408823L830.1032293776472,112.66472321749461L829.8985938113141,116.23661806735174L828.5990037452425,117.1638136332906L828.2556874427623,122.22576572016578L825.8888016331712,121.62909655945896L825.7034947849771,119.90623688704534L822.6312305262305,117.71145009642078L822.1632746181314,114.72897748174785L820.6021984355774,110.31028938630084L817.9180711210325,101.43207261006364L815.0043092034302,92.17761995479475L812.0118058083826,83.24162199143984L812.803055588406,82.24747270407306L815.3210786992328,82.8968417380346L814.8395608729678,80.65352782874118L817.2811934958688,80.3422479369193L815.58344191997,78.31795014719228L816.9655504433947,74.90427078307403L818.7379457742829,73.1186245105788L818.0520960689287,72.16408987004183L819.5173351531246,69.9056094681265L818.1849190355945,67.75502658276355L818.5326199416374,65.19339341396608L817.6227998715619,64.57626986039429L818.1125571043724,61.37783760460172L819.4394456585281,59.71720570081766L819.0631115114076,56.778290926628074L818.7723064980307,54.51019752369723L824.377046223786,38.14362426718105L826.7607593298255,38.09180002497658L827.730990826108,41.32228489658871L829.8082835256314,42.01653362686386L833.0234808762302,39.72893422142033L833.1448330615547,38.915667888370535L835.6149138113001,38.17453589085676L835.4362251540445,36.923559062467234L836.9990605137054,36.44221142839467L841.2791909638095,38.22551019870093L843.9754476284247,39.917999820793625L850.2064725749368,59.89227498945979L851.3272511854419,64.67664156238277L854.2049748985191,65.24957709234445L856.6438441943787,65.03761234552906L856.1766802961866,66.9105554536601L857.6126999990204,68.36907476959402L857.4873393017099,70.55948283170596L860.1932014963925,72.78419331003488L860.506778867109,71.48777942673166L862.2391002548591,71.50735318686031L864.9752098945453,74.66654071214646L866.5313988443708,77.06704753870042L864.7492419748146,80.78391696480185L860.7921168316659,82.1615878126006L860.6345607445742,84.29905655711775L859.2986680259581,84.04119225603563L859.0193735996102,85.55127999352726L857.4837343603122,83.82472988818301L856.8902081377853,84.83244330248351L857.1607234134926,88.02620365653956ZM848.1023066287959,93.2003337968033L848.974198550045,95.08320943467368L847.4752174681985,94.3215278589355ZM851.804772537761,88.82234753990895L853.6280787723226,89.5462154581096L852.502591259621,92.81538491564402L850.8437754567367,91.54387190717205ZM579.5026707348381,107.743484562748L578.1420425714307,107.07319270901553L567.1196896286117,104.81489408734637L567.1382493012693,105.03232717478738L564.6076704107227,104.27915906814133L562.9861266175213,101.15233119573486L560.528205455113,100.2624128861014L565.4380900510599,97.90220467317818L567.0854876188071,96.12088003436418L568.3130387136472,95.04589201334431L573.0374047514795,94.27377472462331L575.2169717190327,92.9298662826759L576.6370421802743,91.21077637727251L578.9540680267928,90.34966945114479L579.4423849517992,89.00380395831394L582.5432304454529,86.41114684997387L582.7338028345371,88.21293645604044L584.2130332895538,88.48848998468713L585.2368865595192,91.58622623906513L585.3019553943928,95.07662398470359L587.9425849460013,91.50913205397615L590.4700194583902,91.66450015888142L593.4088259507928,91.80735441762238L595.8693611681325,93.05267367721262L596.8060699219014,94.69520165510755L600.2835502692411,98.5857625403811L603.0354878649053,98.33896925684314L604.1927383917482,97.50161733491393L607.003238342778,99.02578197114542L607.7676769298462,98.17957323756207L609.3418704414204,99.28136498606659L611.3334238599559,96.44210311382938L615.247266163615,93.80210455478573L618.7155574207878,93.11525899783908L623.6245876609092,92.75371891748682L626.585524968476,91.01684352732127L630.1659947043031,90.35984033470527L629.3892802751668,91.94433116849007L629.7603066979333,95.66686396350087L632.4671254984713,96.17098889138572L634.9400355750007,95.1269221599257L635.5700426603742,96.36892845401769L638.598201569345,94.34604960079866L639.7992933759077,95.53188885025133L641.204121262432,98.74104181071414L640.8985071322211,100.42154671862977L642.1505320628323,99.97636218260982L642.9953833800071,101.47158250864447L645.4603095973698,103.23516291288479L642.7130869849237,103.59375393565142L641.4062837582865,103.70584488319264L641.184376293913,103.73550099553154L635.5601799394008,103.13611698804812L634.7347274723522,105.26751448819823L634.8051346874564,107.24298433683975L631.1571504488584,104.52026278496817L625.5319169933349,103.38415633019645L624.3750135349027,103.68109980927045L622.8702882875773,106.19949348757802L620.1371375384498,106.48302828181215L619.6156937962619,107.44550941610464L617.6122017681357,106.82823031352484L614.4621181733421,107.98863597374282L613.984981121562,110.54150990060566L612.8384296997535,111.20158228418131L609.8252266603695,113.51405626917858L611.745552945932,109.58471631003454L608.479176398894,109.69941800983156L607.5851671953193,112.60156794721911L605.3474435538923,112.16964224015669L603.8048342666291,113.82791351917649L602.7535998202841,116.05641634481822L600.9401077677198,121.02771469568609L598.9009315795531,124.82547426939561L597.1059061914219,123.1717740660464L598.1086811029412,120.41077399454048L594.9631676909044,120.43914575237852L595.9588839486712,117.58308910806954L595.3157939377758,116.52210758561807L595.8258609445455,114.3622929643019L594.8979274260745,113.52567287867294L592.0639643469322,112.67769994492551L591.0004668836596,111.96778127510356L591.0767668558368,110.12034158277902L587.1070096977993,109.43888157257993L585.5286878819634,108.70696829268036L583.600989560048,108.99081190831032L580.2876228285753,108.12709355073764ZM653.9760035884009,116.7282617960085L655.3279410220006,119.42136100013965L653.8487585195417,119.49243427546378L654.1487789559067,121.962502180966L655.7221374111566,123.07001037208772L656.7337351810479,125.6759305895547L656.6183837870226,129.49768329321557L656.776346155069,132.9026670614851L654.6896936957444,134.26336598218734L654.2125932748207,136.39592674573873L654.3251633659281,138.539497276053L653.1509207996479,139.78165958083036L650.953906562408,140.02555929238372L650.2849836825064,141.68787334943931L650.7805794311683,146.05682858176078L653.8332687872291,147.29555879999828L655.9158444226483,144.27593019086135L656.593135846944,144.32040918635323L658.7086294388553,139.36257263468826L661.3857596499081,138.36764802663265L662.8809198643695,137.01238566589575L665.5718285547689,138.09079585076938L667.403891662981,140.85177819919784L668.1458155045377,143.44160700596126L669.7202288272633,148.02182167766375L670.9116356511884,152.93254390709L672.5657817172057,156.37055293222033L672.0375431668813,158.08219658513292L672.144587339187,163.04568157040603L670.4201242428063,163.20818792886985L669.4550153754784,162.29450095138395L668.1044039310943,163.81284735592487L667.8428235906899,166.9865290722197L667.6246417916232,168.2747300533632L665.3799601357658,169.93863749238017L664.5329199942445,172.77457782595764L664.4496754857757,175.35679111154366L661.4557907612617,180.45486078975932L661.3108262078879,181.5139124541589L657.4867513232497,182.17782211571466L655.8847878557889,182.45147199223732L649.3280861578296,183.52994831032402L648.7925891557405,183.61102091484133L643.2269044558229,184.46488911652682L642.8246020824271,183.30344711107136L637.722848177819,183.9020690962427L636.4106645434063,184.04713163046915L631.3611721856475,184.62279196715303L629.6391691160964,184.80973360799726L625.8165591942744,185.19009499550168L623.5657963455466,185.42635807845534L619.4690152710396,185.8568673294916L615.3288082505193,186.2522119352327L617.9406632598559,183.41742605920797L619.3050874083694,179.25674710867827L620.7509108239667,176.58687490910745L621.648253517631,173.16674047100003L621.8653112498109,166.56576131739132L621.1968782477744,162.47107894379417L620.3259397768063,160.09984824410867L617.1184632896603,153.74880732899305L615.7187839223549,150.4519391397622L616.8638979929725,147.23085507774692L615.3639100673872,143.22638123676427L616.7591750924742,140.4736148200543L618.1282200497184,136.73810676966207L618.1421014361194,133.93788896558544L617.7291717872619,130.48936719358926L619.7495829522851,128.87678112846254L619.5648206645967,126.7046606930295L621.1797168895018,125.21183301869144L622.9687319469895,125.23765093437146L624.9146888223914,120.6480211656758L625.8544271268161,122.92672324943442L625.1732865235743,126.35556420845603L625.4558097854214,128.32720635581916L626.0720701989043,128.41330368122624L627.2289139525216,124.11854724099123L627.0181268671109,128.67096936831422L627.9000701573833,126.46277297024812L628.4059562094028,121.66262114009623L627.8823534411471,119.91893908598877L628.0297437761803,118.610445226916L629.9941060032527,116.78207079073275L631.3606045845706,116.54962077455502L633.5015898924449,115.24227963708972L631.9976156515372,115.17604545162703L630.626532719427,112.84418179446834L632.6035979627209,109.62604291896287L635.1655222231584,108.17408205280151L638.9625866526284,110.24984847035455L642.3644922715137,110.33230548918254L643.8574389155009,112.39531379547236L646.5306037965413,112.44862639521193L648.4756184859983,113.67528890546453L651.2111769432313,114.4509062563767L652.2062676506738,114.14554947511647L653.9108658891676,115.56319154205198ZM583.9458647432638,85.22058497625494L584.939701739761,83.59291512756806L587.4402925076481,81.90298139738411L592.0497275350154,81.04458539791904L593.9242085969231,82.2260134418093L590.845947107735,82.76635278364449L591.1429997142201,83.51173857176423L587.6952431352852,86.52134352660767L585.6916425830307,90.81460640997432L585.2317196988857,88.68900466507591L582.8664008006857,88.26268464581449L582.5952004804788,86.43012398489975ZM580.9697288866781,69.71449481621619L583.7551396852255,68.42226844662218L580.678752926159,72.10611382490697L576.8772001036917,74.17392846646874L577.5591834455602,74.6733223146141L575.0034037955188,75.8953884167862L574.1370447248121,74.33297641020283ZM649.8910364371853,103.80174955968403L646.177350563448,103.50880041164748L648.2714355534132,101.88819959873797L647.5529628596338,100.73547538243201L649.3078569289027,100.72529122784306L650.9648104926182,102.45236756232282ZM640.3419846801108,93.52105695779608L641.2381178361636,93.52982812540222L640.7288101859078,95.75991378251854L639.3487179229784,94.53245114320077ZM637.2843388360741,107.38175949867559L640.0756008611276,107.89742466960752L638.360280126744,108.79206661005708ZM624.8366875951527,110.06129316389809L625.7058213099477,112.63014900821611L624.0900862276836,113.30078220253449ZM620.6519200425896,123.42247548132082L619.3277686584015,122.85730722280357L620.1163851053834,121.82008325125719ZM661.6928734880224,181.44897378667702L661.5657041966797,181.47196826076242L661.6928734880224,181.44897378667702ZM661.3402254964878,181.5089982153188L661.4870870757741,181.4834152095135L661.3402254964878,181.5089982153188ZM580.2876228285753,108.12709355073764L583.600989560048,108.99081190831032L585.5286878819634,108.70696829268036L587.1070096977993,109.43888157257993L591.0767668558368,110.12034158277902L591.0004668836596,111.96778127510356L592.0639643469322,112.67769994492551L594.8979274260745,113.52567287867294L595.8258609445455,114.3622929643019L595.3157939377758,116.52210758561807L595.9588839486712,117.58308910806954L594.9631676909044,120.43914575237852L598.1086811029412,120.41077399454048L597.1059061914219,123.1717740660464L598.9009315795531,124.82547426939561L598.9276639609204,127.00900967418772L597.2126566412188,127.50812247552244L595.6170565986471,130.25138513303864L594.7086798269055,133.14079073693244L594.6709343356006,133.14599741143513L594.6236253006718,133.1510016278845L594.0799019258261,135.31855328534937L595.7060422734987,135.71701411000902L597.7338941939122,133.50710984886462L598.0268866652797,132.86808408584466L599.398691945611,129.75412356335687L601.9758208148528,128.22498433981332L603.7588470488286,123.15612275206581L605.2643961914315,122.52190941570939L605.7576841501945,120.56291707897503L606.8594584229638,120.45051493495123L604.741291120271,126.78671993092621L604.6954358219199,128.54760324442088L603.3395236237523,130.3296118016175L602.7951883267517,132.46956546492675L601.6406360835626,135.67127237771672L601.1477409333991,139.1611186141747L601.4711810901006,142.30143495645837L600.2038915053521,143.37175490117193L599.3513087410746,147.50832450109283L600.0873298428222,151.28202888115652L599.1154870739779,154.10142632814825L597.986919189389,159.59187016879707L598.3323082963402,160.78081678677825L599.7876919737563,167.248660596965L600.7824527556687,168.25437590728927L600.3518371392831,170.48478662120147L600.650389159307,173.76805916941748L595.302749353417,174.17259016126616L593.8351297072173,174.3016332090557L588.3438118907263,174.7557713519916L587.4009091915134,174.8562676866061L585.1635956780729,174.968002090852L579.3427307783395,175.28987172531504L578.8624607612287,175.32032226017748L572.8983959256284,175.62213743323696L571.6929538006291,175.69882751865168L564.8596835342204,176.0927638976691L561.9319647671487,176.2380765454633L560.9606321447934,173.98844694975867L558.2634157902353,173.30122951469616L555.8942735503023,171.97620767925162L554.4225065859346,167.61277808100965L554.0621707500688,165.90103142132682L555.4937787192492,162.49118158862223L553.4372736766019,160.86430609849106L553.3535624237751,159.4948615147856L553.1158397794857,158.0496171850674L552.3163512998807,155.91031442053315L552.3757742166812,153.80719228308737L551.8992440925799,151.60217715753356L549.8854230381448,149.12480375403504L548.0543979257922,148.44267429535864L543.9164274902628,145.4839561179383L542.4541615052505,142.44501555268346L540.7501573164056,141.6011896731378L538.6111595318871,140.80677179571308L537.5611753424346,139.22248316748494L534.4565531844748,138.82889894638663L531.9344459682603,136.18186060524044L530.9588384428881,135.59955892921437L531.3417587497429,133.4388266339189L530.9015072253347,129.39513762798674L531.2718117895793,126.93823491762339L531.3815408552465,125.31742923247896L532.5808580454741,122.5566454181452L530.8369725955193,120.2502714037189L529.3874240168569,120.15214001431775L529.3129177956712,118.88132001719805L529.8594136445661,117.26024990128963L531.4888595963635,114.12627078137359L536.0504440303799,111.69298033039854L536.6840062964787,109.03872197123269L536.5044572332245,104.19907907433799L536.3305136638659,99.62328979702238L537.4859173907628,99.63367403524956L538.6310779790587,98.03784562212627L540.0426414414985,99.12159842895505L542.382838101651,98.86978977938804L545.7737367804478,97.49420328504573L549.5268504507858,95.75395646246739L551.3764549361385,95.32597599336032L554.359634039534,93.21209290615252L555.8484783390392,94.33698437640976L554.3184569657427,97.06095041313483L554.7943009057753,98.08915084116006L553.9445858252799,100.25929080843162L556.7695043961288,98.62318477775386L558.8015545242373,100.0312128212098L560.528205455113,100.2624128861014L562.9861266175213,101.15233119573486L564.6076704107227,104.27915906814133L567.1382493012693,105.03232717478738L567.1196896286117,104.81489408734637L578.1420425714307,107.07319270901553L579.5026707348381,107.743484562748ZM557.7012371648973,94.67342763794807L558.2759362815832,95.13197018472954L555.6107354716931,97.05370451154022ZM144.49377571869974,66.87511129520897L144.1466243526918,69.15159960337223L143.88072253430482,70.6444043917536L145.14987197234086,71.8109836175048L149.6645731342456,74.23623404685475L154.291478857127,73.57201357263762L156.01712844007614,72.9491420558337L159.6931984439962,73.6067567839483L160.58686474814118,74.38458187241952L163.30707548281362,75.7174402245829L163.27130420651633,76.67196745095964L166.93087846420985,77.1850630220805L170.70085395554645,76.33985636891919L172.6589729914919,77.67265485964685L176.17720225183587,78.029393295673L179.3033969233402,77.13948848635175L181.06996678663228,77.1407305158449L183.66609371151264,77.40151861060986L185.22126106592475,76.47604626026339L186.9491805917645,77.05071385502788L190.8690634099026,77.750624908742L192.93105504145097,76.97294676283104L205.4368471187458,79.97143714886977L205.68170476410637,80.03014429996495L210.4146876286881,81.16965419238284L211.9641592482314,81.54754118082383L219.08988445400314,83.20793071669561L220.0676041385243,86.09394041764699L222.7826118046106,88.67603183461142L223.31296627836173,91.42091252914474L221.7007890101118,93.14158334465435L219.0736289368876,97.12363308474767L217.06593304506316,100.29020745611103L216.00646043659947,101.15325075851445L215.84816155062708,102.79960483052491L214.60227681915546,104.31180404784618L212.43614614381693,105.59541221923064L210.23244261076775,108.98457178120213L208.95496606883313,109.87569152074218L208.23889015674638,113.22338110630164L211.17154004208896,115.00859304864105L211.81579328068358,116.88850385738431L210.54418128371157,117.8487345424237L210.6538548756982,119.7963758007586L209.57920284148855,121.62240854995684L208.86402650464748,122.21419380962902L208.194181064414,125.14850783660768L201.26264186741616,155.9443229041574L185.5467390853404,152.36064280589312L170.44474996095113,148.73365908597668L169.962119533568,148.60435335545844L161.4316944556187,146.42455346316547L149.69255507738967,143.35642899581512L142.15843383035974,141.24153201410024L131.02987181580335,137.9351810796403L118.56224690877832,134.40582758589494L114.74776051071007,133.33478297475176L110.71013504890601,132.23147645533004L105.58225398350447,130.61436534891652L104.29900921266687,128.15718493746874L104.59753586091693,123.70288306605244L106.42044305433654,119.53901421171065L106.56737398145304,117.89650691361521L105.73158380442618,116.20512274784141L105.80913643730202,114.0858433115593L107.36196105762002,112.35374080407632L110.36300171854361,107.06506164399264L114.35032373817234,101.63388120581396L116.50836322524134,97.32799569366125L119.31550636003254,90.09844835187812L120.49362061091239,87.69037166400346L122.92279577814838,80.42696960993464L124.15286394815689,79.15200899175954L124.95769046041812,76.77713865644932L127.77371280158616,70.57529534858963L129.3773045037674,63.710326714024745L129.9565660718991,60.70474857381714L131.12098575701867,59.82133699083022L131.14698337413557,55.54766430189761L132.26141934736336,56.806900882206264L134.13333411663513,56.928065173590994L136.22351297755029,57.921428797408566L137.63937790486085,57.402441290582715L138.80760924695642,59.5611850025997L140.85677270395087,59.553438388152586L142.07895655500704,59.66634003277056L144.22699689495965,62.270541172467006ZM430.01574882132275,112.56506143351021L438.219695887975,112.9706204942155L440.3271259743346,113.06493224590258L449.5848166079546,113.413578172205L453.2416104525768,113.54488670776652L462.5487838151503,113.82775271136381L462.9267425227518,113.83668387545765L472.6894668170374,114.01344496045203L481.32859592812264,114.09388839138433L480.13274903378544,117.6229285245521L477.71552444471286,119.42167900193124L477.733445808825,120.5821215089577L479.5406278697855,123.69340639571476L482.48587388706335,125.46357245489003L482.7115488817173,126.54162520010243L482.69978629049353,131.9910657203003L482.6893208025142,135.1910994238483L482.67376532957,138.46584387091127L482.66119562073874,140.10873527005708L482.62073633344295,146.60417080131992L482.6207267500289,146.60618350501124L482.5801360632289,153.10859383763488L482.5537363807226,159.65905853109064L480.5840766143545,159.64815889657882L481.584463953287,161.65984611536453L481.1481146446363,164.16666559517898L482.2273565040618,164.92471804097636L482.50182896831353,167.48656943714525L481.7340279148238,168.1090301275641L481.33903878682554,170.75893222628793L480.06673691929205,173.4320892886567L480.1475142292529,174.53971091455196L481.7015285711891,175.98723563132705L481.8416755571844,177.30022037824222L482.54188071047054,178.63728835048767L480.02678610622075,177.97387361453718L479.131165538962,175.60047374789042L477.664945114325,174.5775501632977L474.8075730925722,173.47028150230346L472.85477822982955,172.73241848722807L470.85813292677193,171.43199675745223L468.45020780764264,171.72052788148505L466.3989043383803,171.66465101387905L463.24151111442046,171.45306254561058L462.0392339993743,173.13250262048848L460.93203508280243,173.20212876342327L459.3451755116696,171.7581607163553L457.2351923446432,170.88909939156986L454.72956609397414,168.6449233548094L444.4523427559967,168.34484417212468L440.666702059618,168.21158691641529L431.6556944506987,167.8327098881456L417.68551510100167,167.15350471704357L406.1000961505806,166.43604148111456L396.4851047317584,165.77167206950378L393.66114515100406,165.55325227538958L386.8512122160674,165.03261520074784L379.41376385508755,164.35170699829507L380.1464461858333,155.49686418337524L380.19162040283027,155.02228252639577L380.7381108603348,148.47543006493777L381.2038890199145,143.10621068944624L381.2663335260095,142.37113582108464L381.8664673020142,135.0814536645256L382.5182680680963,127.13048972108277L383.09449592564863,123.13613914515076L384.08954713282026,110.68246992216439L384.1801981419255,109.50361391223487L397.7782197575811,110.58487729373064L398.4808653624099,110.63850011367265L410.69289523937334,111.48030090625946L410.71630930571513,111.47977315759601ZM822.1632746181314,114.72897748174785L822.6312305262305,117.71145009642078L825.7034947849771,119.90623688704534L825.8888016331712,121.62909655945896L825.376948914666,122.7739630219545L826.092225361069,121.89576162734568L827.8741210130879,122.86302953550694L827.3291595066999,126.34302072549247L824.590755915964,127.33147651750039L824.4048049040041,128.40954493630102L822.3372439080026,130.20051904534557L822.2318156594835,130.3560245378103L821.914381164178,131.1997570155262L813.8708943849057,133.03094040631152L813.4690157193054,133.1193855093353L808.7507541111854,134.15094505601837L806.4058202313613,134.64108929202723L804.5402952590761,132.64430355768388L805.2865305028381,129.4197885968258L804.4954848215265,126.71005089968605L804.4040748148698,125.33832194646016L803.5492250875336,119.00693840327824L804.0683991636124,118.32194852540852L803.9675081791252,116.49604461892602L804.8938735519389,114.80106987225497L805.2475782146521,107.26541259807618L804.5713738698187,104.25677282653317L806.959765100391,103.10566638739465L807.6349468211608,101.81147303514842L809.5646305400105,99.38410871462293L809.7020344935304,97.80808243784452L807.707618671557,95.15876184635783L808.6890757613621,91.74412265146964L808.1174958140454,89.92927180940296L808.6752664558751,84.86922930926642L809.4895892832483,84.00592344811218L811.5381599917373,84.62488608241574L812.0118058083826,83.24162199143984L815.0043092034302,92.17761995479475L817.9180711210325,101.43207261006364L820.6021984355774,110.31028938630084ZM803.0883700110327,91.34978790995865L808.1174958140454,89.92927180940296L808.6890757613621,91.74412265146964L807.707618671557,95.15876184635783L809.7020344935304,97.80808243784452L809.5646305400105,99.38410871462293L807.6349468211608,101.81147303514842L806.959765100391,103.10566638739465L804.5713738698187,104.25677282653317L805.2475782146521,107.26541259807618L804.8938735519389,114.80106987225497L803.9675081791252,116.49604461892602L804.0683991636124,118.32194852540852L803.5492250875336,119.00693840327824L804.4040748148698,125.33832194646016L804.4954848215265,126.71005089968605L805.2865305028381,129.4197885968258L804.5402952590761,132.64430355768388L806.4058202313613,134.64108929202723L800.1114576611533,135.9780149864323L798.8725903088762,136.24774907938183L795.6480893663786,136.94600403447714L794.6495913494559,133.3665473431903L793.2539321516861,126.5349888751698L792.2760967586667,122.18053973937742L791.2422585482559,121.02100167054721L789.5440196555932,121.08905766162854L789.8997354643353,118.89022968506652L789.4337244031377,117.93056316420541L787.639414982001,113.83347973466277L787.6002087715935,110.98253044835553L788.2761680717663,109.42447127144601L787.7716527971666,106.38204887572545L786.6959190671039,104.36150953055403L786.3201839920303,104.12682757998118L785.7421464635315,103.25935017814925L785.597572983779,99.66172997357728L784.905737155072,99.20617721958058L784.5862751969141,95.94238978094882L786.5144406553004,95.4194816194265L794.7011041714047,93.49164496027572ZM788.2761680717663,109.42447127144601L787.6002087715935,110.98253044835553L787.639414982001,113.83347973466277L789.4337244031377,117.93056316420541L789.8997354643353,118.89022968506652L789.5440196555932,121.08905766162854L791.2422585482559,121.02100167054721L792.2760967586667,122.18053973937742L793.2539321516861,126.5349888751698L794.6495913494559,133.3665473431903L795.6480893663786,136.94600403447714L795.5346643235753,141.53712796635727L795.3333446816546,149.77016275313633L795.6464165458101,150.41478172699226L795.7715708903058,150.3856154389922L797.045541156398,157.48441660244737L797.50166067882,160.07782496459004L798.011677443702,163.06842593759166L799.5298192704724,165.67718946806883L796.6977431887512,168.5266635046961L798.1246901686674,170.29029221045607L798.183080412036,170.59873612689648L796.7473593940508,172.716721792503L796.9835094085373,173.96971764013517L795.4746547754689,174.69270837806062L794.5667847862192,176.7854882260409L794.9875745323402,173.22366266034703L795.021271600101,172.51506411346236L794.9240514536139,169.4279803852204L794.3043658275594,167.4223711737044L792.3191749469187,165.2837316585909L792.2358592009285,165.32208444633955L794.0792256856226,168.33935588266525L794.7575653381782,170.96527293814017L789.9604978558002,169.46113005869688L789.6720680976211,169.34874558406057L787.6122270197291,168.73208277363585L782.4142693041183,166.95295062867228L781.3905607508093,165.82762304277242L778.0814269003027,165.52266455413394L776.3865255561202,163.53977795403216L775.9964359245491,160.7291392553925L774.4052757652613,159.15883232320903L772.7732351261042,159.33134923865805L770.8116575178385,157.11097145095232L769.2030225286655,157.48755037502997L760.8053368423134,159.27751255564374L760.2489368681175,159.39558169508177L754.7063515491359,160.55795536800974L749.7307323710914,161.58014130922595L749.2024163313147,161.68749744029856L740.4960770582953,163.42512427364193L738.6119229952343,163.84124728241625L732.4241308533104,164.97943774622502L731.0584545202172,165.23739020249263L722.7799735423563,166.81928159275412L720.8437950089931,167.11923940816087L713.4053012486581,168.48419591601362L711.3391806226343,168.8146839857959L710.4744853321191,163.8029025959479L713.0910592461072,161.5475541584284L715.7052264536906,158.4524379791011L717.9366193195715,156.76350952183577L718.7169595761476,154.31781085373007L721.0074190099759,152.056345296392L719.6554180571549,149.07514512933858L719.8159513247399,147.75098597521185L717.1251625771991,147.0522222323982L716.5915758016009,143.75983187088616L719.8236221804357,142.0235336457605L724.1890381396328,140.31588401580655L730.4514140589908,139.24613489282478L733.6649305302668,139.0817154857939L736.5402970623476,140.4574559851278L739.0086372800924,139.26918474596675L741.9820185613012,138.4161254896744L744.1287590256808,138.5238282535928L747.4113764404644,136.33172878857602L748.5159748656622,134.6310590810798L750.8396408061428,132.1312148152033L753.13031083878,131.52856280863557L753.2398155832179,128.63419959957457L753.0958516708843,128.65332438413668L753.0143203250761,128.6643844020706L752.0233114092772,126.1423502443755L751.0994324599455,126.03232573936339L753.1049921087232,124.51040760084356L751.7466251367883,123.22533562723083L752.2886405949394,121.33343560354729L750.6420543670746,122.83062425595449L748.7197360221844,121.28895533362459L749.5216369297021,119.46107683969171L754.6248590852256,114.46305362687986L755.3957756128178,112.15261040522319L760.3031314858026,104.69889504095863L763.776748668445,101.33366891646676L766.9028442836196,100.41206783515247L775.8728689637173,98.31473671444019L784.5862751969141,95.94238978094882L784.905737155072,99.20617721958058L785.597572983779,99.66172997357728L785.7421464635315,103.25935017814925L786.3201839920303,104.12682757998118L786.6959190671039,104.36150953055403L787.7716527971666,106.38204887572545ZM718.1587976204266,147.26848931656866L719.6554834166544,147.74020762252508L719.2860794280045,149.0889047261195ZM802.93362534571,176.2716638906145L802.9935266617267,176.4976470287544L802.93362534571,176.2716638906145ZM798.2694244040379,177.45650092940605L798.5029395463409,177.06588885141434L796.9003459525147,177.19235605507527L796.9290653175445,178.4719024305722L794.5988001196424,178.50552899213085L795.1120378060016,175.9375573166933L795.5602062553105,174.79201712943984L797.8449193390361,174.45921170877978L797.8934352034307,172.71280892996197L799.6949749761152,171.39055782981393L801.3452221440058,172.08217915983028L800.607704529395,171.01877147265384L804.4341688499203,170.40710633209517L805.0114141522411,169.09013200949164L810.2461662229011,167.84400652146064L812.0040097426107,167.09468792382404L815.6526917800268,163.05778171947168L814.2161455948742,166.38540851836115L812.7530462710804,168.20194045900666L814.2674877906129,168.20863243054805L815.6338278334335,165.85202851484917L817.9949031516436,164.31262762656218L819.2476953715227,165.0584769015635L821.4828654812798,162.6423510982521L822.0396087148924,163.15207163235334L815.3948250004687,168.64882173334297L814.3421838901328,168.42243594929448L812.7636248543654,170.49491510262396L811.5512773644512,170.43756308644163L809.7874194762996,172.2686116473293L807.8622549817676,172.64269725088923L806.3737808182764,173.99325903813508L805.1242377998703,173.93134353622827L802.7824427536561,175.64720436939706L798.7674132882103,177.8266536397341ZM797.3263033093278,177.54567917040367L797.3754178413249,177.79608825720265L797.3263033093278,177.54567917040367ZM793.8784826519427,177.93167272923336L793.9245815532516,179.78438069060712L792.1943908107955,181.28095562237468L792.4476349722876,178.38945036725522ZM331.98615298476255,121.72753712686426L353.55857284827596,124.39717696805678L356.6882715225784,124.73652767214708L368.9747358505291,125.84694661151434L369.6389242958943,125.91249949176836L382.5182680680963,127.13048972108277L381.8664673020142,135.0814536645256L381.2663335260095,142.37113582108464L381.2038890199145,143.10621068944624L380.7381108603348,148.47543006493777L380.19162040283027,155.02228252639577L380.1464461858333,155.49686418337524L379.41376385508755,164.35170699829507L378.7990039767548,171.70527086323125L377.8286180635955,183.13087211319112L377.3450404154846,188.82465363431743L377.1320533832179,191.33242386169934L376.86968216714445,194.5395666554042L376.2254413381485,201.8885658770621L363.8325312316832,200.8373946984501L359.1880722668508,200.3898252632266L346.48067215588253,199.0899109762978L344.6872867695132,198.87427868472867L337.2110195526866,197.96963670734635L330.83369486412107,197.2171167539791L322.5059884565578,196.2113387566966L306.8205688604494,194.16458121615165L293.65660893418203,192.33570507513207L293.0015330486693,192.23833440601436L279.20767358584493,190.10525532134045L279.96597643609255,185.38721877092212L280.94918641123934,179.2917078136013L282.18542063437525,171.4536805154121L283.7018105789312,161.95553979865701L285.2416691847088,152.5577038120432L286.1069653617815,147.07516485894723L286.64589863202497,143.63758020028786L288.0481456605741,134.7011241381732L289.4689868456089,125.62012859285994L289.9562597753677,122.0556696752052L291.0901143861885,115.88793193239883L295.4823031517515,116.75285043280724L307.32805093497205,118.35668167037636L322.7034944039235,120.54306880803813L327.5636074981978,121.19679246374426ZM528.7747932765471,159.05872033598155L535.1251672412604,158.83399750263027L536.5275337096691,158.77831434889458L541.5034359595513,158.57961523899598L546.2030349524372,158.3760117388582L547.8178027509169,158.30341978214722L553.1158397794857,158.0496171850674L553.3535624237751,159.4948615147856L553.4372736766019,160.86430609849106L555.4937787192492,162.49118158862223L554.0621707500688,165.90103142132682L554.4225065859346,167.61277808100965L555.8942735503023,171.97620767925162L558.2634157902353,173.30122951469616L560.9606321447934,173.98844694975867L561.9319647671487,176.2380765454633L561.7820857480557,176.8077232591337L564.3498414403705,178.48713278879995L565.62569049015,181.31759132538605L566.6966685657056,181.88323334794177L568.9124398941098,183.2009000898836L569.1335160187468,184.78235025279457L569.2774683302606,186.7169534934328L568.1983477791068,189.53350785196005L567.2440492722833,190.61256914892692L567.0251175688162,193.28252547717182L562.8318553207873,195.8949216157231L561.034915840996,196.16898673869184L557.549423178835,197.00368175945437L557.189000742115,198.62310750546442L557.1892103579065,198.6271465259814L556.7061649162121,200.41388763318332L558.5023839401475,201.90809632206845L559.1552653097549,203.43823954861944L559.1573605097602,203.47762834753303L559.1165904629249,206.20955409986482L557.4295514306782,208.20738578011594L557.2423185841045,210.63620097556918L556.2766484051201,211.78981849354489L553.9381853945392,212.49490073173047L553.2521970258172,213.5585535285977L553.9709015668082,216.37360916783166L553.228266255452,216.83518992294046L548.8501661352943,212.88703761332715L545.6685742276856,212.88796453487623L542.3456589449022,213.1249891961553L539.9482414933166,213.28101336729696L535.91872510881,213.55121472454334L534.845495437237,213.61610020878186L529.4671144561868,213.89350930005514L525.5746260666759,214.0745698564533L523.0117642543827,214.14495201763032L519.9554455424772,214.27064675660347L516.5660851338519,214.41556748858306L513.5187497668454,214.5121644034965L510.15794600668653,214.59069397568067L507.89674853406007,214.61503422408362L503.91882323429127,214.59654649788672L499.8756289351788,214.57385439495738L497.4629525527541,214.55246030260935L491.95663922123725,214.48935341112747L490.2925742146339,211.4287285040249L490.9862221337207,210.75188421224254L491.27373887865,208.52981967897222L490.34569059692075,205.67587327007357L490.3231217513893,203.67037222157728L489.72697539133736,203.087472701328L490.164507787729,200.64803102203575L489.5243747475092,199.32407730634623L488.7110394311819,197.13760603381797L487.43133268553817,196.69324950963244L486.9619989230219,193.8240975367097L487.7584380923766,191.6712406173524L486.74345495063494,190.3746793809812L486.84043140341737,188.34292017655798L484.9048326699773,186.9668521720762L484.98232743659975,185.7740525520876L483.7601003324395,183.8095128995028L483.76937043896567,182.6521535048505L483.01597646846324,181.435268880752L483.21923144427643,178.73318021345506L482.54188071047054,178.63728835048767L481.8416755571844,177.30022037824222L481.7015285711891,175.98723563132705L480.1475142292529,174.53971091455196L480.06673691929205,173.4320892886567L481.33903878682554,170.75893222628793L481.7340279148238,168.1090301275641L482.50182896831353,167.48656943714525L482.2273565040618,164.92471804097636L481.1481146446363,164.16666559517898L481.584463953287,161.65984611536453L480.5840766143545,159.64815889657882L482.5537363807226,159.65905853109064L487.9449507680171,159.67844755503347L490.53411359204085,159.67929300893695L496.0075644799285,159.65053067100985L496.91257148098595,159.65006150853173L503.29562401568535,159.58902763130334L504.089167326057,159.57266358175025L509.6541614986644,159.50163515697477L512.2817224191687,159.4609293511014L516.0124931774124,159.3967973138192L520.3621030604634,159.29554517132988L522.4038221652997,159.24641899337848L528.4506988339296,159.06882914456287ZM377.8286180635955,183.13087211319112L378.7990039767548,171.70527086323125L379.41376385508755,164.35170699829507L386.8512122160674,165.03261520074784L393.66114515100406,165.55325227538958L396.4851047317584,165.77167206950378L406.1000961505806,166.43604148111456L417.68551510100167,167.15350471704357L431.6556944506987,167.8327098881456L440.666702059618,168.21158691641529L444.4523427559967,168.34484417212468L454.72956609397414,168.6449233548094L457.2351923446432,170.88909939156986L459.3451755116696,171.7581607163553L460.93203508280243,173.20212876342327L462.0392339993743,173.13250262048848L463.24151111442046,171.45306254561058L466.3989043383803,171.66465101387905L468.45020780764264,171.72052788148505L470.85813292677193,171.43199675745223L472.85477822982955,172.73241848722807L474.8075730925722,173.47028150230346L477.664945114325,174.5775501632977L479.131165538962,175.60047374789042L480.02678610622075,177.97387361453718L482.54188071047054,178.63728835048767L483.21923144427643,178.73318021345506L483.01597646846324,181.435268880752L483.76937043896567,182.6521535048505L483.7601003324395,183.8095128995028L484.98232743659975,185.7740525520876L484.9048326699773,186.9668521720762L486.84043140341737,188.34292017655798L486.74345495063494,190.3746793809812L487.7584380923766,191.6712406173524L486.9619989230219,193.8240975367097L487.43133268553817,196.69324950963244L488.7110394311819,197.13760603381797L489.5243747475092,199.32407730634623L490.164507787729,200.64803102203575L489.72697539133736,203.087472701328L490.3231217513893,203.67037222157728L490.34569059692075,205.67587327007357L491.27373887865,208.52981967897222L490.9862221337207,210.75188421224254L490.2925742146339,211.4287285040249L491.95663922123725,214.48935341112747L492.74238559017573,215.6447863972843L494.11207010755163,219.58773908978299L494.94722035705007,220.5152268791726L494.9829628564618,220.56971406780042L497.1944125191193,223.1365410557803L496.8619807962244,224.43126986943776L498.4661134873296,225.48347173441198L498.0183636427602,225.48665604860128L491.6632626551577,225.5077095168324L488.5086035915571,225.50699812677055L485.26746631181135,225.49868542011382L482.0874198996993,225.48388747486626L477.23861857261886,225.44340823265543L475.6715604211994,225.42819949576915L469.2509801544212,225.3428988068166L462.8358885976191,225.23317048076137L461.27924896363703,225.20242855798904L456.42670650919524,225.08390808796935L453.1610517196427,225.00888357351425L450.0178956325814,224.92034221988354L445.18648497062895,224.7740529448845L443.5997411298828,224.72594214828757L437.27912606649727,224.50565723218085L437.2384511483539,224.50410431334296L429.45501808521885,224.18834097579372L429.23144875453113,224.17646199951002L421.5065246526028,223.8050672082329L421.22718339336507,223.7880569459428L413.204945814373,223.35394655851496L411.99067951271013,223.28832694796392L402.93075716125554,222.73217519551065L403.3508426957093,216.22321151491587L403.4597290871345,214.51535756686621L403.7684430273883,209.6732619222305L403.83075686655195,208.6958860092193L404.1186366830899,203.94402312802413L396.1896961177674,203.41256982941934L395.73913598527236,203.38308238839068L385.57254678805646,202.63202793113578L382.9010113981078,202.43152877435728L376.2254413381485,201.8885658770621L376.86968216714445,194.5395666554042L377.1320533832179,191.33242386169934L377.3450404154846,188.82465363431743ZM826.6142827668622,135.8597110593156L826.3070433599537,135.98613851320556L826.544012783266,136.337576470003L826.535557495807,136.34402923230448L827.2870367501846,137.83186108190648L828.9033098114193,138.0730875751127L830.2131109424415,137.38588372460083L830.8828048192178,137.6708072358631L833.556946357458,139.92042799710703L833.021393893935,141.6373653726605L835.6924103414404,142.49366990856413L836.2918938864789,144.58405891022414L838.1460388404053,145.31907031262017L840.1980111187952,145.13940417822232L843.439506177101,142.64964537082506L840.5694982276325,138.65909261280513L843.0616251513391,140.20331794347692L844.4579774322463,143.21168778708955L843.9370377431109,145.21393987365423L839.1078910785047,147.45988841905762L838.1744921493755,149.11052760824282L835.8722536222672,150.1657961720224L835.4894180989411,146.04878173456166L834.2030158301782,146.61470472296094L834.1431688922257,148.22942216731087L833.1068945610039,148.98525211569722L832.4156251861507,150.92628699760076L830.0568687562238,152.37629490872985L829.0903374107634,149.46022616523942L828.1733141921268,149.41670135350353L827.5712189299434,148.83678529926556L826.0528672420522,148.01528345862118L824.1977161644843,144.44297959192488L822.4887640215092,144.26770800576276L818.5140136694832,145.4865167557158L814.3759761209915,146.15372759983632L813.9241016460314,146.2426009224797L808.9181582932212,147.43901311484888L802.2249516584172,149.01750358366837L801.6208991622026,149.14870586913503L795.7715708903058,150.3856154389922L795.6464165458101,150.41478172699226L795.3333446816546,149.77016275313633L795.5346643235753,141.53712796635727L795.6480893663786,136.94600403447714L798.8725903088762,136.24774907938183L800.1114576611533,135.9780149864323L806.4058202313613,134.64108929202723L808.7507541111854,134.15094505601837L813.4690157193054,133.1193855093353L813.8708943849057,133.03094040631152L821.914381164178,131.1997570155262L822.2318156594835,130.3560245378103L822.3372439080026,130.20051904534557L824.4048049040041,128.40954493630102L824.590755915964,127.33147651750039L827.3291595066999,126.34302072549247L828.734506222808,129.11080177304052L831.4587812418577,129.71697786949585L830.8894342881699,130.83127404637128L828.0513621916516,132.6594137458519L828.3351024660179,134.0844839902461L827.3029451819406,134.91843260286123ZM837.266162968395,151.29702159976466L839.5747476050144,152.6961030462171L835.923038256092,153.9735925427923L835.977551331546,152.0285064337736ZM845.6597828558461,150.93261367821435L846.7465337240253,152.56731373229525L844.7593443358783,153.3318922435992ZM578.8624607612287,175.32032226017748L579.3427307783395,175.28987172531504L585.1635956780729,174.968002090852L587.4009091915134,174.8562676866061L588.3438118907263,174.7557713519916L593.8351297072173,174.3016332090557L595.302749353417,174.17259016126616L600.650389159307,173.76805916941748L600.5551973226577,177.35581475166566L601.8207215117578,180.08680334194685L603.020272168881,181.4492575022532L604.4030546018366,185.69577994646284L605.7959540994759,188.13770801315684L606.1749020243237,192.65542029076596L606.4421246970711,195.81282385496513L606.6636046462647,198.29056121009899L606.9346412204344,201.21001327092927L607.3931120183339,206.3385744940515L607.7951362234774,210.94921526696623L607.8188315914413,211.21429975231854L608.3051790963442,217.3965659940767L608.7243333463354,222.3746929199615L609.2017915683873,227.54768258291017L609.4252882852799,229.99197592833082L609.6419008063282,232.4167060629186L608.7560208074397,234.17100654026547L608.5718409048089,236.11797285629257L610.5179654873069,240.77171355941005L610.4835236365191,241.7215107673254L611.1762269032213,243.7726522323594L609.2235412646177,247.21554803307208L609.4006227375949,248.2198486295673L607.890774306741,249.32307795549798L608.1514534989667,250.219555972811L605.9817351639001,253.17714877713934L604.8677799362779,253.48725591204197L604.9614418584313,253.9764482768378L606.1399537933723,255.15425518513894L603.9398361994334,260.4857746103878L605.0139625955627,262.1320639920207L603.3171301374751,264.8422211580711L603.8332711751381,266.4877765080215L604.9956610587705,267.69706951717626L604.7153767616634,268.3273456010876L601.8949586572696,268.9369710675812L600.8079023639843,269.94575534080343L599.9438392745092,269.65843230121834L599.1090924553887,270.40167850668524L598.7817598156905,272.82252209988405L600.2115613690383,274.79806016040334L599.3692956871074,276.42776934661197L598.2369628767286,276.2843028665369L592.7091514052946,273.9428399654431L592.6373879863382,273.9756120443085L590.4747956040551,275.353730899738L589.4065095927631,277.2387714734217L590.0122738989003,278.78429161751933L588.0650258700881,277.34284766165354L587.3176174833465,278.4172140681453L586.3435504066612,277.93722980930283L584.4418132592832,274.0634274092753L584.3962050300985,272.47354390116686L585.2135915377692,271.2139738621197L583.5524758430722,268.17355772545716L583.5448867431772,268.06239039081765L583.5407452772457,265.9193084928313L581.1743424700902,264.69734698011064L581.0242411580199,263.8657304607549L578.4240454517646,262.1038286635909L577.0912407141466,262.7641492145002L576.1234817163705,261.1589784377891L572.9243607041647,258.9959933005765L572.2170391244764,258.29205753844576L570.5240687523803,256.47257584076203L570.6231916569752,253.49040576342293L571.5698736762156,250.86828530283128L571.689134722768,250.68957884333406L572.6393468597521,248.19824341522406L572.7271657311857,246.07802083740432L573.3858901726915,245.41123964459211L573.368010520412,244.5375875877778L570.9802813384515,243.33399524044557L568.4005296609076,242.65822030922243L567.11688975836,244.52424178097135L565.3643000031118,243.45917870693006L564.2513813870788,238.04586858368145L563.507713298081,236.70256224697687L561.0038924392323,234.90733614175042L559.6666970252712,234.19515094781275L557.3708825761544,231.35083478159686L555.4819628508865,229.82645346230515L554.5506040870141,228.46112903228402L553.4895717766926,226.90998509371263L553.392524758255,224.99702511522605L552.4709720013379,223.30192252769336L552.1733059162246,220.23946465601296L552.2468311216096,219.32605343051227L553.228266255452,216.83518992294046L553.9709015668082,216.37360916783166L553.2521970258172,213.5585535285977L553.9381853945392,212.49490073173047L556.2766484051201,211.78981849354489L557.2423185841045,210.63620097556918L557.4295514306782,208.20738578011594L559.1165904629249,206.20955409986482L559.1573605097602,203.47762834753303L559.1552653097549,203.43823954861944L558.5023839401475,201.90809632206845L556.7061649162121,200.41388763318332L557.1892103579065,198.6271465259814L557.189000742115,198.62310750546442L557.549423178835,197.00368175945437L561.034915840996,196.16898673869184L562.8318553207873,195.8949216157231L567.0251175688162,193.28252547717182L567.2440492722833,190.61256914892692L568.1983477791068,189.53350785196005L569.2774683302606,186.7169534934328L569.1335160187468,184.78235025279457L568.9124398941098,183.2009000898836L566.6966685657056,181.88323334794177L565.62569049015,181.31759132538605L564.3498414403705,178.48713278879995L561.7820857480557,176.8077232591337L561.9319647671487,176.2380765454633L564.8596835342204,176.0927638976691L571.6929538006291,175.69882751865168L572.8983959256284,175.62213743323696ZM722.7799735423563,166.81928159275412L731.0584545202172,165.23739020249263L732.4241308533104,164.97943774622502L738.6119229952343,163.84124728241625L740.4960770582953,163.42512427364193L749.2024163313147,161.68749744029856L749.7307323710914,161.58014130922595L754.7063515491359,160.55795536800974L760.2489368681175,159.39558169508177L760.8053368423134,159.27751255564374L769.2030225286655,157.48755037502997L770.8116575178385,157.11097145095232L772.7732351261042,159.33134923865805L774.4052757652613,159.15883232320903L775.9964359245491,160.7291392553925L776.3865255561202,163.53977795403216L778.0814269003027,165.52266455413394L781.3905607508093,165.82762304277242L782.4142693041183,166.95295062867228L780.8658707828777,168.79471558540774L779.548115489443,172.663318591647L779.8763164185709,172.54702167332846L778.3015604130723,175.33479535334516L779.6641485394393,176.91653071026076L778.3703393984293,178.9915735796767L778.7294024981193,182.1818806931833L778.8962447302617,182.46713942956683L780.7785065050548,183.02159211040612L781.3482626393313,185.19616647573878L783.3194491957329,186.30516107633252L787.1403136680071,189.19554836403665L784.1018362101593,191.79168677136317L783.1536559423519,193.07205314938312L782.4145729326642,195.25171552105894L781.4667266360104,195.82573911865802L778.8549148856002,197.61937821778463L776.5652733736182,197.51260080657323L776.3808992714296,197.57665369280505L776.3711496164428,197.57981593910517L774.1330555571669,200.28665511635472L769.3072240601116,201.34013973309334L767.9470874140502,201.62375699012875L767.8521255385493,201.64379305691455L763.2628809365754,202.6067059828672L760.2325768573534,203.238614036562L757.272114490093,203.85534302978772L754.2485569720343,204.46955273525805L750.8562122322699,205.14125326582564L750.715896068541,205.16897050936348L741.9028856545759,206.83879332125753L738.4995316043982,207.47986076946881L737.9712848059348,207.57285321471613L731.9835253103518,208.6766771227783L730.2650937394131,208.9908256079957L723.8081994321573,210.17052465040922L722.6326097268131,210.3867764861186L718.6077419244951,211.0935474856576L716.4630815467181,211.46175323170007L709.3792197792243,212.6445196231349L707.9972732600256,212.86619824844513L707.2658251657296,208.38382639908718L707.1058643014585,207.3790923198494L706.6628954568756,204.71499013500204L705.94734822188,200.26726844499024L705.6924466672776,198.8097947873016L705.2000132677053,195.8133302119669L704.5547934937329,191.85615478134503L704.3980562924131,190.964392471118L703.7109884809666,186.78347592800253L703.6893621591496,186.62099570255236L702.5984790605796,180.01367975566313L702.5666763796825,179.82015540120585L701.4990611662114,173.32354759434872L701.108616984983,170.94763286036573L703.4954579527189,169.43680725392778L710.4744853321191,163.8029025959479L711.3391806226343,168.8146839857959L713.4053012486581,168.48419591601362L720.8437950089931,167.11923940816087ZM808.9181582932212,147.43901311484888L813.9241016460314,146.2426009224797L814.3759761209915,146.15372759983632L818.5140136694832,145.4865167557158L819.9873676422712,150.61497540211224L820.4173540534616,152.1479431947198L820.5973153773532,152.93771440538603L821.3414558411207,156.25073971086647L821.0771916194574,158.0108020914713L819.0755258278034,158.96761243809874L816.6713804428344,159.28481920798868L814.8674712736516,160.6207185963326L812.7821630970083,158.3094376556203L814.5009647124994,160.8829027062685L811.9560043292042,161.64453109678072L812.0154367364366,161.69629785409631L812.1367477851284,161.7481128622162L806.7293022551078,163.03728483080738L804.8196792584778,165.17466306299445L804.514009431785,164.09804604006388L803.8281170325083,165.50217388858903L800.8967902505856,168.39113914458676L798.1246901686674,170.29029221045607L796.6977431887512,168.5266635046961L799.5298192704724,165.67718946806883L798.011677443702,163.06842593759166L797.50166067882,160.07782496459004L797.045541156398,157.48441660244737L795.7715708903058,150.3856154389922L801.6208991622026,149.14870586913503L802.2249516584172,149.01750358366837ZM827.5712189299434,148.83678529926556L827.4603666204575,150.23448189488272L825.7087094855765,148.55626962552344L825.1273882801271,148.4939510729572L825.1544115689776,150.6927224827715L826.1545856829107,153.94874903463221L825.7645708788916,155.9675015672434L821.0495762567873,158.50060887147617L821.0771916194574,158.0108020914713L821.3414558411207,156.25073971086647L820.5973153773532,152.93771440538603L820.4173540534616,152.1479431947198L819.9873676422712,150.61497540211224L818.5140136694832,145.4865167557158L822.4887640215092,144.26770800576276L824.1977161644843,144.44297959192488L826.0528672420522,148.01528345862118ZM828.068293845705,150.16028604630503L828.3867098076266,152.99627615285897L827.2447893750038,152.77287028035198ZM830.0568687562238,152.37629490872985L829.251000542491,153.37464863118612L828.1733141921268,149.41670135350353L829.0903374107634,149.46022616523942ZM149.69255507738967,143.35642899581512L161.4316944556187,146.42455346316547L157.60978744985096,161.19727160964794L150.71615055150994,187.853153306369L149.3888859867542,192.85324911719226L148.7124581516968,195.24829201287093L148.04865237130286,198.0054927728478L147.8091000530519,198.97496622588562L147.61098970412195,199.80453533952436L147.3128734059569,201.04239369548122L148.3443584300877,202.6048534436618L151.81835564835848,207.83863075027182L154.53726681530276,211.90690059454175L156.40922377696114,214.72931916597258L164.384173890831,226.74557133760857L170.98245148321678,236.66903154150282L178.47042302161105,247.94941362816712L193.02461238573687,269.8683717034909L195.84920341105197,274.1211640931841L207.8332295109568,292.14191615883067L207.3662502366762,294.5771591370558L209.17599031899857,297.92004405876844L209.30841427511012,300.1941894553777L210.21242738736572,303.1588020734322L212.71880949917983,306.4886730092187L210.4941283788787,308.54647330661794L207.51600223187444,309.6041722481739L207.2439186164143,310.7034073345426L205.38423113501085,312.2942928807024L205.12546348076904,316.63302738634013L204.18046256550167,319.2186917456378L202.21803256694614,321.0420345061083L200.6245766937734,321.3056778697137L200.12688386348265,323.2022029711667L200.83264865562478,323.96075035297997L199.71578894362978,327.22738340991236L200.05540306729745,328.2081098148615L202.40895108055997,328.94209049363735L202.77865612479076,331.2865735457641L201.2475103264273,333.8732328144773L198.16011706908756,333.99702027836133L176.5521175264435,331.4469171567233L160.6416792319974,329.55529851299707L161.3084989791539,327.0373997858618L159.73881760240283,325.818891097749L159.4648657689533,323.7395219821159L160.13005447238777,322.8848224495305L160.01448148630237,318.2109448007633L158.08116792399443,313.4083112521122L157.07026867370365,312.29918643916494L154.87631871625626,308.8093801798466L152.08490218019722,305.9497160902109L150.81463355063357,303.9104972709197L149.31451841711203,303.0680884828412L148.00973473247234,304.0303789132864L146.33128443385203,302.9352333725516L147.05743887400138,301.21411114313094L146.61881559646287,298.6681382876212L145.67341361955653,297.01355252144594L142.79792778739392,296.42667831017934L141.57663040872654,296.7557501454771L139.68802728794282,295.42941774694293L136.1707773049696,292.60659312882615L135.74614100456176,290.1510104775417L133.292345325609,287.45114503551554L132.15565421344644,286.37237306283885L127.50714843332202,285.3523168571338L125.8561924006587,283.889542790462L121.64138138288138,282.58387055455455L118.9363441037143,282.3081327172032L118.68132653869674,280.7810422743115L116.97927052997926,279.2282236579083L118.255928247827,277.0585882216992L118.76886593502127,274.6098740732442L118.16575967164096,273.2463561418923L118.82348946286959,272.0215255553014L119.63877145048525,268.86411146623743L118.14203772469608,268.23466902582777L116.54376899667102,265.95136547977836L117.97750717491675,264.7271797311495L117.58280640238564,262.7451974924877L116.0122110785818,261.7908700379893L114.53481697692763,258.0376865847412L112.91492994486771,256.9795449010371L112.69393880421865,254.36849303465544L111.46785734374521,252.20012202912142L111.53406457677363,250.3957155834172L110.54895168625569,249.29809741842087L109.35405113513502,245.64806581420987L107.31168651487832,242.9205836890378L107.5684551982867,237.62318026612252L110.31043488818807,236.5618235408216L111.44879156597551,233.28648435887771L110.12478622723347,230.52780123686102L107.63902826141583,230.25678999382274L105.77175310020459,226.75291354831575L104.62865117153694,224.68053377545993L105.53463846134878,221.7347557697343L104.74621146629437,218.3752363412657L105.90962097256454,215.0194499563646L106.1173621086208,213.6648788183403L107.71872193554105,213.5400202429745L107.44013534124866,215.4545930109117L107.32728694614207,217.69224958256598L108.59529781009911,218.44531355072183L110.12142939448262,220.96214282476376L111.92612293236124,221.53165360399203L110.39860945333555,220.30883627587957L110.49891802661028,217.06698563792395L108.82472252995757,214.06039565351296L109.57216307084491,212.3509217128685L108.86323037626403,210.8442726387467L111.07735716885043,209.73078229576606L112.50421532201676,210.73664001296618L114.56484494816237,210.61271749222783L118.31463448169137,212.40413703130275L120.5198146535206,211.43169727323004L120.53693768094035,212.607074233596L121.01652776584086,211.41848791494021L119.33408998683234,211.40750670369312L120.20301854743013,209.75612547310868L117.54761334755989,211.3571782993613L115.71434161311532,211.04325841593152L114.36448208025558,209.0664828180004L112.81726210134019,210.41659295205375L111.52694692217563,209.52444042304762L111.17275579174617,207.72983498300766L111.05363676721578,207.6907439265516L111.37760450816944,209.32314271712164L109.58695835029516,207.29542950104508L109.57910592654167,207.24684150429312L108.15726663007842,207.73820888823707L107.6340223959491,206.6831470315757L108.17626591150974,207.86165351985346L107.0452312361478,211.01500237116647L107.71350200559777,212.106907837089L106.11908583106612,212.89719428679894L104.73936344623382,210.67838593793408L104.0719233939787,210.83805047569115L102.34887277222725,207.79437752668503L100.38591584374615,207.5211408361414L102.02796045604856,204.970685025055L103.20566635577336,206.84907928750567L102.00118682230277,202.34389977284388L101.0476080532826,199.0440332724114L98.8282089828117,196.11874677176945L97.14962946516715,191.62951304320393L95.28322286640173,188.10879073734498L96.43132124994855,186.24010342146232L96.25214538855323,179.91939812880833L97.99421001651962,176.81979413825263L98.47301909276075,174.6069354627623L98.51333999666758,171.05761794626983L97.13807564672754,167.3549124841112L96.51547736233965,165.15624268172348L93.96788464417699,161.28955981152808L94.36423052007592,157.79957879390588L97.6442488674897,153.75927539202803L98.19727580496817,154.22493023725156L101.56313998262289,148.52136775682595L101.18322300137544,147.48131644376372L104.58484685902226,140.81063431324242L104.80733015780595,135.50727799342553L103.80385368905587,134.3422572832153L105.58225398350447,130.61436534891652L110.71013504890601,132.23147645533004L114.74776051071007,133.33478297475176L118.56224690877832,134.40582758589494L131.02987181580335,137.9351810796403L142.15843383035974,141.24153201410024ZM123.15975701797686,291.4033109290451L123.94531371751953,293.4578898880942L121.48862161509163,293.74029055765516L120.3029252248092,291.2170690091755ZM125.55114855151044,291.28911072509425L130.3999669042003,294.02654919756685L127.75959583560098,294.0911582976478L125.87367712056437,293.4703587879959ZM127.41714324917871,307.1081626245302L128.66346790903395,308.42754575951164L127.03910231522457,308.0354183830269ZM140.50536683339539,315.2791215000219L142.99682993285626,319.56865656227967L141.08937588564066,318.85864999623925ZM142.26329440818074,307.0323176491361L145.52729543732062,309.20737198800055L145.69587278841624,311.32061426559153L143.81461392821996,310.4328419276519L143.49897954318646,308.2311678166966ZM282.18542063437525,171.4536805154121L280.94918641123934,179.2917078136013L279.96597643609255,185.38721877092212L279.20767358584493,190.10525532134045L293.0015330486693,192.23833440601436L293.65660893418203,192.33570507513207L306.8205688604494,194.16458121615165L305.9507550076048,200.6437079885444L304.8045626695131,208.6805652283516L303.3491984838075,219.17529090225582L302.9290839464752,222.21546064884012L302.59608444295327,224.6627203048863L300.2305103163204,240.832935939025L299.58753085987183,247.34998316527685L298.89674898141914,252.42892510447666L297.8478058885993,259.8328031049193L296.5688665006553,268.89977970478174L282.58956634131846,266.91872760778097L271.6555957481746,265.15177470600713L261.9969155042003,263.63997511774767L245.56614599577378,260.866064664238L240.35035462788937,259.94509590262237L223.6291833612022,256.8345455380602L225.75496360063715,245.63714653618524L227.72686805553445,235.5740618966796L229.23730284859948,227.71659622634138L229.60901544194428,225.78290206433644L232.71931094137534,209.76552504524034L234.02195609661848,203.04216327817267L234.77226706693938,199.13831805773634L237.9806384091279,182.81739842586308L241.51437533212479,164.45244088140396L255.62126287079596,166.99664084530787L266.95905635804127,169.00653436610048L267.7145145618956,169.13708142644555L275.90534585979714,170.47636550018183ZM170.44474996095113,148.73365908597668L185.5467390853404,152.36064280589312L201.26264186741616,155.9443229041574L201.38062018260996,155.98327886854509L213.10504367718886,158.58241564320986L228.03746052948316,161.74634177601865L238.25747411672734,163.81312146165828L241.51437533212479,164.45244088140396L237.9806384091279,182.81739842586308L234.77226706693938,199.13831805773634L234.02195609661848,203.04216327817267L232.71931094137534,209.76552504524034L229.60901544194428,225.78290206433644L229.23730284859948,227.71659622634138L227.72686805553445,235.5740618966796L225.75496360063715,245.63714653618524L223.6291833612022,256.8345455380602L223.07456037997372,259.74778796890325L220.85671139851286,271.7960812693101L218.64276359979613,274.63591294976743L217.42957209618055,274.599838504075L215.885414860548,271.80554632593373L212.06919458182676,271.061433275161L210.02459988362187,271.74113838493486L209.91880116898847,276.2243146864588L209.07516794134347,282.557548364034L209.59647175053726,286.2414900478776L209.383921564148,289.35391101575624L208.00566563363606,290.2410311623313L207.8332295109568,292.14191615883067L195.84920341105197,274.1211640931841L193.02461238573687,269.8683717034909L178.47042302161105,247.94941362816712L170.98245148321678,236.66903154150282L164.384173890831,226.74557133760857L156.40922377696114,214.72931916597258L154.53726681530276,211.90690059454175L151.81835564835848,207.83863075027182L148.3443584300877,202.6048534436618L147.3128734059569,201.04239369548122L147.61098970412195,199.80453533952436L147.8091000530519,198.97496622588562L148.04865237130286,198.0054927728478L148.7124581516968,195.24829201287093L149.3888859867542,192.85324911719226L150.71615055150994,187.853153306369L157.60978744985096,161.19727160964794L161.4316944556187,146.42455346316547L169.962119533568,148.60435335545844ZM703.6893621591496,186.62099570255236L703.7109884809666,186.78347592800253L704.3980562924131,190.964392471118L704.5547934937329,191.85615478134503L705.2000132677053,195.8133302119669L703.304533589701,197.1947192087298L704.660831978131,199.26602558632987L704.4148445293046,200.58384846162858L705.0511287635991,201.90429135360932L704.3102396607234,204.6072530155484L704.1053453082892,205.18198355553113L704.0421709386552,207.55388191104998L704.1389459596853,209.83945212171693L703.3557962355408,211.19236618059426L703.593662362171,213.6008648997821L702.3734648630536,215.96841382872526L701.2370619080216,217.4248673928555L700.3141648920796,219.1323309819552L697.1290974004274,221.84367828267125L695.9467120173313,220.7478340383002L694.5420542566785,222.21689086521678L694.4841539084623,223.70613423874704L692.977862655346,223.81891369454706L692.4703205666946,224.96519986508974L692.1279142489519,225.6950042733156L692.4850088866489,227.2317190998716L692.4715691857366,230.53086687788982L690.8158829187123,231.64777471441494L690.7553929751388,230.5436401066787L689.0673514436413,229.05319462802834L687.8769341876223,230.49154215674344L687.5737573940979,232.90402646847622L686.6342469108444,233.98541045633726L687.7712434467572,237.32006667014946L687.2314918319641,237.64470860162112L686.2238247818102,237.96244490545973L686.0955351709224,240.51432213046849L683.5625047256248,241.60347231880405L682.2332514474758,241.60252928165312L681.0127676268229,240.17530733619992L678.6877705989109,239.26309416969502L677.1790039318726,235.98175479970882L675.2112657613128,236.79741370489842L673.6871560911513,239.04210247486287L672.0994038664601,239.2600987555321L668.355465834395,238.20544204878342L666.6462193070579,239.63864982456857L665.780187492324,239.73422189780138L662.6189303721044,237.6613851211648L660.4853489658508,237.8693954217399L657.8126952102627,237.13888204609748L657.6818375051741,236.25493980734154L656.0908999826731,233.6619346485636L653.2617048987684,232.61374493439553L651.6355403599806,233.20310668983427L649.753286238459,232.04109677327017L648.7621422005459,232.95513548733322L648.3303356469125,229.21361293008613L647.9067349451074,225.14923962166904L647.8159702198027,224.29430697659416L647.4691446749912,221.3173775192746L647.0731411766762,217.7511918781529L646.9033138470111,216.09846216268477L646.3288880046275,210.3790890785009L646.2292956352155,209.58066699986773L645.7636245384984,205.47408374695408L645.4232560689032,202.55558797223284L644.9828122223844,198.92001732755182L644.8300470899554,197.67201002677632L644.2426307516588,192.75135712827853L644.201153422027,192.400896394004L643.8538382054753,189.50870239534174L643.6138068510652,187.56523904428036L643.2269044558229,184.46488911652682L648.7925891557405,183.61102091484133L649.3280861578296,183.52994831032402L655.8847878557889,182.45147199223732L657.4867513232497,182.17782211571466L661.3108262078879,181.5139124541589L661.3402254964878,181.5089982153188L661.4870870757741,181.4834152095135L661.5657041966797,181.47196826076242L661.6928734880224,181.44897378667702L665.9368639476867,182.96132813761938L668.8929695202135,184.52162249075866L670.5970639814275,183.00347544114254L672.2678561856897,184.3812930788439L668.1000694532763,185.8134338530067L667.8537028180048,185.85129913869662L667.7797638471618,185.86244934956767L670.0562926222306,186.05792012594043L672.7391927560884,185.04899898336828L675.6768264604319,186.19240989959724L677.683864320377,185.04475875914648L682.0572457562071,182.71640282073304L682.6830788711504,182.82787661127986L685.8018926135738,182.6976451210245L688.9060426322549,179.47977637906854L691.3247226738658,176.5981763706758L694.9010348906465,174.31384384505918L701.108616984983,170.94763286036573L701.4990611662114,173.32354759434872L702.5666763796825,179.82015540120585L702.5984790605796,180.01367975566313ZM637.722848177819,183.9020690962427L642.8246020824271,183.30344711107136L643.2269044558229,184.46488911652682L643.6138068510652,187.56523904428036L643.8538382054753,189.50870239534174L644.201153422027,192.400896394004L644.2426307516588,192.75135712827853L644.8300470899554,197.67201002677632L644.9828122223844,198.92001732755182L645.4232560689032,202.55558797223284L645.7636245384984,205.47408374695408L646.2292956352155,209.58066699986773L646.3288880046275,210.3790890785009L646.9033138470111,216.09846216268477L647.0731411766762,217.7511918781529L647.4691446749912,221.3173775192746L647.8159702198027,224.29430697659416L647.9067349451074,225.14923962166904L648.3303356469125,229.21361293008613L648.7621422005459,232.95513548733322L648.1024003037742,234.44735056695038L648.4913071398908,236.87054421464825L649.6653924897207,237.55907846339312L649.5300662621305,238.96831270325163L646.6080221739736,239.73576926641817L644.2076868990105,241.34655472546717L642.2283198789136,240.7167850471775L640.5799800314853,241.40094200490546L641.1734235261914,243.68090780803902L641.236863096312,244.85713824517586L638.5785534579508,247.87203405090304L637.3270634219184,250.13691610374917L636.5555600518752,249.83619569175255L635.2063780068936,252.07141956930195L634.8474355658045,255.3633372992573L634.1384283895133,255.57185168859223L631.504456809564,255.6285397804968L630.1417014368552,254.90157338401332L628.9933232221506,252.65883215473752L627.207479087312,253.9843410170879L626.9181848311066,255.44180557516154L626.8566745678468,257.71214967654646L624.9062858221865,259.48796306893826L624.9681463471512,258.46089858415667L623.4137024441322,258.3336252592875L622.3280369443022,256.79556121755377L620.0493618979767,258.303853653848L618.8303992372532,260.99660762241876L615.9366342773267,259.66070341816805L615.4120563706639,259.3335704898153L613.1756944381762,258.7365261564453L612.3525683545957,259.463457197155L610.9674076964342,258.30950508149033L610.9739690084357,260.9967142828958L609.6125609899753,259.8728449421369L606.3239573940634,260.08358206551134L606.7626076337519,261.8355051276907L605.0139625955627,262.1320639920207L603.9398361994334,260.4857746103878L606.1399537933723,255.15425518513894L604.9614418584313,253.9764482768378L604.8677799362779,253.48725591204197L605.9817351639001,253.17714877713934L608.1514534989667,250.219555972811L607.890774306741,249.32307795549798L609.4006227375949,248.2198486295673L609.2235412646177,247.21554803307208L611.1762269032213,243.7726522323594L610.4835236365191,241.7215107673254L610.5179654873069,240.77171355941005L608.5718409048089,236.11797285629257L608.7560208074397,234.17100654026547L609.6419008063282,232.4167060629186L609.4252882852799,229.99197592833082L609.2017915683873,227.54768258291017L608.7243333463354,222.3746929199615L608.3051790963442,217.3965659940767L607.8188315914413,211.21429975231854L607.7951362234774,210.94921526696623L607.3931120183339,206.3385744940515L606.9346412204344,201.21001327092927L606.6636046462647,198.29056121009899L606.4421246970711,195.81282385496513L606.1749020243237,192.65542029076596L605.7959540994759,188.13770801315684L607.1151794246932,189.0501353830001L610.0911308959306,189.3279884388836L613.936670928747,187.33451739311818L615.3288082505193,186.2522119352327L619.4690152710396,185.8568673294916L623.5657963455466,185.42635807845534L625.8165591942744,185.19009499550168L629.6391691160964,184.80973360799726L631.3611721856475,184.62279196715303L636.4106645434063,184.04713163046915ZM789.9604978558002,169.46113005869688L794.7575653381782,170.96527293814017L794.3960459152057,174.8757613659783L793.9534383407165,177.63344746660061L793.0097438408834,178.24655894776754L792.9763152496139,176.4909437250244L792.6023639865331,177.501239997943L792.3366644233263,179.33388413357102L791.8880720484831,181.50291860568598L792.7525309096633,182.02784679771196L795.9618028644359,182.045640087734L796.7702040381148,183.90757852114712L796.832481321257,187.79974667832096L795.8950411264631,187.63009250137816L796.8770724986604,187.83396836925908L797.3392612596379,193.33881524978187L796.5957731360011,191.19639744184133L796.1288773721944,194.90843103917155L796.816987440586,195.54094919652255L794.8930707275199,198.6660936202352L793.8998147274967,198.983340114425L793.8754123005704,199.05964818995892L794.8041076524933,202.57717095974544L791.6879628404638,204.74897010108475L792.1889607123137,205.34916769420397L791.068835529258,210.4717955812174L790.2282275038183,211.83052863520425L788.722566349056,212.1721715275645L789.0858609053732,209.16157016195143L788.5332840092619,207.62510155197413L784.7162546479087,207.36705093397165L781.543439680564,205.9470256189511L780.8126322608653,205.39774493190043L780.7228604377772,205.37187963639064L780.6538009463907,205.32071510368655L778.460757412928,203.6992813288822L778.519312398068,203.67922244319595L777.82247465302,201.7140117021704L777.6893549171425,201.29639757118696L778.90139370291,198.04454091167906L782.5875036953795,195.30130329551946L783.2288311131534,193.10500958925422L783.1536559423519,193.07205314938312L784.1018362101593,191.79168677136317L787.1403136680071,189.19554836403665L783.3194491957329,186.30516107633252L781.3482626393313,185.19616647573878L780.7785065050548,183.02159211040612L778.8962447302617,182.46713942956683L778.7294024981193,182.1818806931833L778.3703393984293,178.9915735796767L779.6641485394393,176.91653071026076L778.3015604130723,175.33479535334516L779.8763164185709,172.54702167332846L779.548115489443,172.663318591647L780.8658707828777,168.79471558540774L782.4142693041183,166.95295062867228L787.6122270197291,168.73208277363585L789.6720680976211,169.34874558406057ZM363.8325312316832,200.8373946984501L376.2254413381485,201.8885658770621L382.9010113981078,202.43152877435728L385.57254678805646,202.63202793113578L395.73913598527236,203.38308238839068L396.1896961177674,203.41256982941934L404.1186366830899,203.94402312802413L403.83075686655195,208.6958860092193L403.7684430273883,209.6732619222305L403.4597290871345,214.51535756686621L403.3508426957093,216.22321151491587L402.93075716125554,222.73217519551065L402.4417574120113,230.803753620674L402.43473660626427,230.91389928523915L401.95413335214937,239.1014915094703L401.8612008196243,240.7223403254626L401.4577202713991,247.3005806408496L401.364197169008,248.8505508796469L400.9541993175669,255.37014289852345L400.94133676183606,255.49011108572734L400.35013165011395,265.3510577589316L400.2477396883334,267.1248952481843L399.94214896436233,271.9257130698654L399.45760267121005,279.3709813690093L385.32184671894476,278.27553481525047L384.08485580466595,278.18063918352254L370.50631763680275,277.17736206358643L353.6283172334229,275.6665778293768L352.66235733968256,275.5749412345622L345.3460856235341,274.8303300868805L341.1103308142377,274.39938369660797L334.2121207714081,273.68271206474185L320.3579439511178,271.9613720745873L319.4736962269195,271.85431350846363L306.3170484885112,270.20326735507L296.5688665006553,268.89977970478174L297.8478058885993,259.8328031049193L298.89674898141914,252.42892510447666L299.58753085987183,247.34998316527685L300.2305103163204,240.832935939025L302.59608444295327,224.6627203048863L302.9290839464752,222.21546064884012L303.3491984838075,219.17529090225582L304.8045626695131,208.6805652283516L305.9507550076048,200.6437079885444L306.8205688604494,194.16458121615165L322.5059884565578,196.2113387566966L330.83369486412107,197.2171167539791L337.2110195526866,197.96963670734635L344.6872867695132,198.87427868472867L346.48067215588253,199.0899109762978L359.1880722668508,200.3898252632266ZM716.4630815467181,211.46175323170007L718.6077419244951,211.0935474856576L722.6326097268131,210.3867764861186L724.1650941860437,219.97514503990556L726.8026657802988,217.17674955521613L729.1659230519116,213.83943640582663L730.7320776132664,214.34786782141657L732.5506637499575,210.754038519593L734.7455703653478,211.76625886061947L737.458044216856,211.6172226506676L737.581200765094,209.6000020987084L738.921422867505,209.0324462441863L739.9378050040614,209.1232553753348L740.8679193474528,207.52205944942853L743.3498600502337,208.52918518412764L745.9742109909514,208.2788204467371L745.5077477378608,209.42600094240083L746.5547404673146,210.33542288220565L748.6765269258436,213.24194225599513L747.8080869865793,217.02643151071572L744.4519054566282,215.13319924672874L741.2557842754372,213.31055127879597L739.331394507438,212.23896398187776L739.8237068761632,214.3030035500832L739.0482430785704,216.29996916916434L739.5764964537817,217.91965345321614L738.3761105496103,219.6562120820979L737.9795429627683,220.34288976559048L736.0504049061136,223.62039960797017L735.1327988830164,224.11623747544525L734.3787173498204,226.63652776323602L732.3192235213683,225.34172338447752L731.7132251208297,227.13906763207126L730.279579125715,232.8387572411673L729.1964003651077,234.2896904659715L726.7495801337203,233.858547866074L725.5985035932108,232.28637505202846L723.8800686371923,231.79738937939578L723.7958674056204,234.86640488499233L722.4795654479764,237.45898188830995L722.8232328476195,238.19642696702124L721.292671051546,240.06940846531882L721.092841813951,242.3447250958585L720.0729034182301,244.67879542277808L718.78550428429,246.36512335150417L717.4268282227338,250.09914041020227L718.7141470382844,251.10714787227664L717.3549164149603,252.54699031851646L717.9438602283412,253.51997112151616L715.6601791366205,255.5300503284626L714.9605484473905,254.52419179768026L711.546253353434,257.1693564658658L710.09745496493,256.3327046465281L710.0734231166343,256.3160470512389L710.4714826299494,257.8289386481623L708.7121912401774,259.1291686882515L705.3416609755004,260.7816517028026L703.0493131568857,259.1760138651508L700.5285266071813,262.0663788939669L697.8376861036801,261.8814982298345L696.0465814719443,261.19853912673454L693.501957789923,257.8329012519656L694.3498305821041,257.16189790172325L693.6858032054149,256.77740678111775L691.3750332307316,256.87335876974396L687.8295933095915,253.7606437532329L686.3462617968146,251.81828856854327L684.9103865735326,250.29277336689097L683.834422280186,248.0846992473297L682.4276467040734,246.9830428888663L682.5761593050106,244.8707863614477L682.2332514474758,241.60252928165312L683.5625047256248,241.60347231880405L686.0955351709224,240.51432213046849L686.2238247818102,237.96244490545973L687.2314918319641,237.64470860162112L687.7712434467572,237.32006667014946L686.6342469108444,233.98541045633726L687.5737573940979,232.90402646847622L687.8769341876223,230.49154215674344L689.0673514436413,229.05319462802834L690.7553929751388,230.5436401066787L690.8158829187123,231.64777471441494L692.4715691857366,230.53086687788982L692.4850088866489,227.2317190998716L692.1279142489519,225.6950042733156L692.4703205666946,224.96519986508974L692.977862655346,223.81891369454706L694.4841539084623,223.70613423874704L694.5420542566785,222.21689086521678L695.9467120173313,220.7478340383002L697.1290974004274,221.84367828267125L700.3141648920796,219.1323309819552L701.2370619080216,217.4248673928555L702.3734648630536,215.96841382872526L703.593662362171,213.6008648997821L703.3557962355408,211.19236618059426L704.1389459596853,209.83945212171693L704.0421709386552,207.55388191104998L704.1053453082892,205.18198355553113L704.3102396607234,204.6072530155484L705.0511287635991,201.90429135360932L704.4148445293046,200.58384846162858L704.660831978131,199.26602558632987L703.304533589701,197.1947192087298L705.2000132677053,195.8133302119669L705.6924466672776,198.8097947873016L705.94734822188,200.26726844499024L706.6628954568756,204.71499013500204L707.1058643014585,207.3790923198494L707.2658251657296,208.38382639908718L707.9972732600256,212.86619824844513L709.3792197792243,212.6445196231349ZM553.392524758255,224.99702511522605L553.4895717766926,226.90998509371263L554.5506040870141,228.46112903228402L555.4819628508865,229.82645346230515L557.3708825761544,231.35083478159686L559.6666970252712,234.19515094781275L561.0038924392323,234.90733614175042L563.507713298081,236.70256224697687L564.2513813870788,238.04586858368145L565.3643000031118,243.45917870693006L567.11688975836,244.52424178097135L568.4005296609076,242.65822030922243L570.9802813384515,243.33399524044557L573.368010520412,244.5375875877778L573.3858901726915,245.41123964459211L572.7271657311857,246.07802083740432L572.6393468597521,248.19824341522406L571.689134722768,250.68957884333406L571.5698736762156,250.86828530283128L570.6231916569752,253.49040576342293L570.5240687523803,256.47257584076203L572.2170391244764,258.29205753844576L572.9243607041647,258.9959933005765L576.1234817163705,261.1589784377891L577.0912407141466,262.7641492145002L578.4240454517646,262.1038286635909L581.0242411580199,263.8657304607549L581.1743424700902,264.69734698011064L583.5407452772457,265.9193084928313L583.5448867431772,268.06239039081765L583.5524758430722,268.17355772545716L585.2135915377692,271.2139738621197L584.3962050300985,272.47354390116686L584.4418132592832,274.0634274092753L586.3435504066612,277.93722980930283L587.3176174833465,278.4172140681453L588.0650258700881,277.34284766165354L590.0122738989003,278.78429161751933L590.555889382983,279.4597719549338L590.44871442631,282.45812985425505L589.3994917440666,283.81011052018255L589.8266073176246,285.0009198291061L588.8664330363281,286.7418049957191L587.6280428038463,285.55221902891265L586.4565462987939,288.1435311732481L585.4729111169703,288.2327276900264L584.6631468700132,288.28301592049434L584.7790459609988,291.32412576192223L583.8091083224286,291.888072160246L585.0444537300096,292.85889111032566L582.6478830398141,293.0556498417957L583.7214721072579,294.2575270855938L584.3288741449879,295.2974003035806L583.1096324026419,296.20111147159423L582.7951576008617,297.78563351647597L579.029252986852,298.0820721747748L574.1039349967532,298.43869013174185L572.7799338843865,298.53192142580895L575.3429119803124,294.4938012366738L577.1058697554024,292.46327604096496L576.7621074138729,290.6483565246285L575.5233682070057,288.87957909822626L574.548543268325,288.9412938209406L569.2727765762266,289.23939801601944L566.1765899332529,289.4138850607311L561.1032043461751,289.6986182287591L556.9296483683206,289.9187948716393L556.3000037470438,289.9379502076803L552.9927435479162,290.0580560325311L546.3382692579036,290.35670259747417L545.8904951788243,290.37998739226646L540.2582612458589,290.5969863896029L536.6476261743327,290.74250543134315L535.43654152555,290.7790750768961L528.8582390869958,290.97448085727444L528.5808555967567,290.98437200516946L524.5734394015631,291.0777357521365L520.3794379097478,291.18114860017465L517.2523709308684,291.24788264153176L509.2097963176881,291.37556701227345L509.1636064720573,288.1990367353354L509.1259356800189,286.33996035912605L509.0728530058277,281.9578135989733L509.0569926620602,280.8670790123547L508.97977894341903,275.5570003206109L508.97270975609985,275.07084395342565L508.893356313151,269.6136138920508L508.8880100256626,269.2459433825635L508.8457280562392,262.38287803680157L508.8393916089273,261.9483546804895L508.76462050448026,255.75042144292615L508.74018716285843,254.07620032367868L508.72545297213026,249.1632631353748L508.7108434730602,247.10510608758898L508.66677717506406,243.3923409544492L508.6476336193381,242.0859962981507L508.7172310012314,241.2139088551951L506.2265628593537,240.50689432066702L504.414161133185,238.6290820892791L504.69010956935995,237.19282484632743L503.3930804824474,236.3943007434949L501.4594852253267,234.25593134197527L502.1288174866154,232.54928084916457L503.51520682540104,230.2342463349296L504.5405515924897,230.57596888408773L504.62689694439007,228.8060811762689L502.94865972142514,227.36795688005884L501.65592264297817,228.0603690799744L498.4661134873296,225.48347173441198L496.8619807962244,224.43126986943776L497.1944125191193,223.1365410557803L494.9829628564618,220.56971406780042L494.94722035705007,220.5152268791726L494.11207010755163,219.58773908978299L492.74238559017573,215.6447863972843L491.95663922123725,214.48935341112747L497.4629525527541,214.55246030260935L499.8756289351788,214.57385439495738L503.91882323429127,214.59654649788672L507.89674853406007,214.61503422408362L510.15794600668653,214.59069397568067L513.5187497668454,214.5121644034965L516.5660851338519,214.41556748858306L519.9554455424772,214.27064675660347L523.0117642543827,214.14495201763032L525.5746260666759,214.0745698564533L529.4671144561868,213.89350930005514L534.845495437237,213.61610020878186L535.91872510881,213.55121472454334L539.9482414933166,213.28101336729696L542.3456589449022,213.1249891961553L545.6685742276856,212.88796453487623L548.8501661352943,212.88703761332715L553.228266255452,216.83518992294046L552.2468311216096,219.32605343051227L552.1733059162246,220.23946465601296L552.4709720013379,223.30192252769336ZM421.22718339336507,223.7880569459428L421.5065246526028,223.8050672082329L429.23144875453113,224.17646199951002L429.45501808521885,224.18834097579372L437.2384511483539,224.50410431334296L437.27912606649727,224.50565723218085L443.5997411298828,224.72594214828757L445.18648497062895,224.7740529448845L450.0178956325814,224.92034221988354L453.1610517196427,225.00888357351425L456.42670650919524,225.08390808796935L461.27924896363703,225.20242855798904L462.8358885976191,225.23317048076137L469.2509801544212,225.3428988068166L475.6715604211994,225.42819949576915L477.23861857261886,225.44340823265543L482.0874198996993,225.48388747486626L485.26746631181135,225.49868542011382L488.5086035915571,225.50699812677055L491.6632626551577,225.5077095168324L498.0183636427602,225.48665604860128L498.4661134873296,225.48347173441198L501.65592264297817,228.0603690799744L502.94865972142514,227.36795688005884L504.62689694439007,228.8060811762689L504.5405515924897,230.57596888408773L503.51520682540104,230.2342463349296L502.1288174866154,232.54928084916457L501.4594852253267,234.25593134197527L503.3930804824474,236.3943007434949L504.69010956935995,237.19282484632743L504.414161133185,238.6290820892791L506.2265628593537,240.50689432066702L508.7172310012314,241.2139088551951L508.6476336193381,242.0859962981507L508.66677717506406,243.3923409544492L508.7108434730602,247.10510608758898L508.72545297213026,249.1632631353748L508.74018716285843,254.07620032367868L508.76462050448026,255.75042144292615L508.8393916089273,261.9483546804895L508.8457280562392,262.38287803680157L508.8880100256626,269.2459433825635L508.893356313151,269.6136138920508L508.97270975609985,275.07084395342565L508.97977894341903,275.5570003206109L509.0569926620602,280.8670790123547L509.0728530058277,281.9578135989733L503.3206359371601,282.0185273983881L502.3451352854457,282.0273625883369L497.40930760176883,282.0718637083487L495.7127374877143,282.0814113509208L491.8105912146844,282.0955902348884L489.1861717516131,282.1030775296713L488.6506817365965,282.10722736974594L480.8993318113625,282.08881426097287L477.5857546128198,282.06152148331125L471.70626937692253,282.0018155362401L467.06216453095664,281.94412346938907L462.0366997342254,281.85780473480156L457.46717850459527,281.7748383923515L453.99008214287886,281.69224257649546L451.07527616640544,281.6060661946235L444.35044415153845,281.396671610441L437.6209789156456,281.1680199151474L436.3654038486766,281.11874048025675L429.5542294725051,280.80977209849175L428.2728168037461,280.7450502278723L420.24734428328134,280.4160554733144L415.6337003972605,280.2147966665451L413.8488896154515,280.13083730852736L406.6413463970387,279.7763441795222L399.6687526442471,279.3925266392664L399.45760267121005,279.3709813690093L399.94214896436233,271.9257130698654L400.2477396883334,267.1248952481843L400.35013165011395,265.3510577589316L400.94133676183606,255.49011108572734L400.9541993175669,255.37014289852345L401.364197169008,248.8505508796469L401.4577202713991,247.3005806408496L401.8612008196243,240.7223403254626L401.95413335214937,239.1014915094703L402.43473660626427,230.91389928523915L402.4417574120113,230.803753620674L402.93075716125554,222.73217519551065L411.99067951271013,223.28832694796392L413.204945814373,223.35394655851496ZM778.460757412928,203.6992813288822L778.519312398068,203.67922244319595L778.460757412928,203.6992813288822ZM777.82247465302,201.7140117021704L777.6893549171425,201.29639757118696L777.82247465302,201.7140117021704ZM778.6133349976233,216.5522346929023L777.0059110062118,210.83492940528424L776.4797641449234,208.96242875279006L776.2230765383815,208.04295645093134L775.8104531705907,206.5718411987591L774.1330555571669,200.28665511635472L776.3711496164428,197.57981593910517L776.3808992714296,197.57665369280505L776.5652733736182,197.51260080657323L778.8549148856002,197.61937821778463L776.9604180447316,201.7227791169895L777.9146372552757,202.5675906807112L777.9551971210776,204.5072266183579L779.3678074240463,206.06949127900396L781.3611324469794,207.69823049757895L782.2716482224237,211.33053057168422L783.8714922321174,213.0497333611777L786.2424101727119,215.3612330001497L787.6174251563864,215.10950000515072L788.2709464628055,218.41231853292368L789.6441917467114,221.40992234706096L789.3550421954982,221.47468010087425L789.1318295037405,221.52462597443855L785.5158535704145,222.3148254591266L780.496453441528,223.2559911379875L779.9825842518808,221.42611345029854L779.6030877970531,220.06773041945598ZM760.2325768573534,203.238614036562L763.2628809365754,202.6067059828672L767.8521255385493,201.64379305691455L767.9470874140502,201.62375699012875L769.3072240601116,201.34013973309334L774.1330555571669,200.28665511635472L775.8104531705907,206.5718411987591L776.2230765383815,208.04295645093134L776.4797641449234,208.96242875279006L777.0059110062118,210.83492940528424L778.6133349976233,216.5522346929023L779.6030877970531,220.06773041945598L779.9825842518808,221.42611345029854L780.496453441528,223.2559911379875L785.5158535704145,222.3148254591266L789.1318295037405,221.52462597443855L789.0408057016949,222.54763427205899L789.0263848157242,225.49532574429782L787.651489177702,226.6394720928639L786.7714088631989,230.47338708191614L783.3956168909999,231.61022018067888L783.358268497814,231.58621458539892L779.7637760008677,233.78231628656033L779.7598359809119,230.95143684035725L779.3562367220075,229.10065378860122L778.1778647542009,230.17726502774963L779.8396087758424,227.1354096057596L778.5459884887123,228.13613544850182L778.1354374561797,227.01831161282337L778.7313034868018,224.3423726256574L777.5593960343106,227.936359448021L774.3127727633481,227.2490529191889L773.2508813918204,226.9837843876993L771.4139714286075,224.92332702414035L772.2662356759811,223.47395026733113L771.7299149739883,222.28782765626352L773.2061884103061,221.72241333207262L775.1368785115778,222.44614254353928L776.1843577634033,220.00159242524387L775.0411662282922,218.76807339951756L775.7857537402946,217.7956443560629L774.9004973089875,219.349110048468L775.9441097982667,220.09241179382514L775.3323895370681,222.0688944194394L772.8764229176144,220.54048747358274L770.1984473614352,219.88969079108472L770.8912190410982,217.7785397963131L772.5711022859252,219.3233771609457L771.8612982166384,217.6680029480658L772.7610961035306,215.95643970305878L771.7341826460589,217.01679647255878L771.2975894213437,215.4009870288137L771.6739129494944,213.04483088590666L773.2685847639573,209.65805472290378L771.9304713823756,212.5659244992039L770.988021033146,212.16834102676194L770.6261807276433,213.9196909412393L769.565694525448,212.3360951380081L771.0126131802512,207.723081238085L774.8920020266781,206.841519067617L771.9290518535215,207.17195469576097L772.2562994089652,203.84458597912896L770.8336667878891,204.44006257677893L770.8868554669571,206.5137201498162L769.0490715633844,208.21306945197898L769.0728764769522,206.26341623744588L767.4592849999294,208.03506503527535L768.0205020216213,208.98514761050228L767.2673635704971,211.68298906795894L765.6600177658393,211.3568516976054L765.0325589347568,212.13036332611284L765.1251857784421,212.146333982947L765.737170979569,211.9810838462305L767.7128029699846,213.8402243252899L766.3901343140337,214.41482566868194L768.4425326982139,215.18898179176347L767.4073192778314,215.98661717448545L767.7851893182866,217.26834713609105L767.1123832246026,220.1280428020042L767.6940276933121,221.0955514477463L768.5510729633575,224.3780134625523L771.0381140157114,226.7036296858363L770.7344027576773,228.04834286007258L767.080516157685,225.98618893849346L765.499751198902,222.48449360812742L765.9293574636179,224.75082719873137L766.111948756825,225.58607934537213L769.8515409460347,228.20251985021343L772.8213895522983,231.06789081331954L773.1148420443142,232.71931715185679L770.9390494458264,231.09453859635664L766.8313375798251,229.51891123020926L766.4776203979729,230.69716375017117L764.1038037593526,228.06158418234918L764.981177295574,230.24996921450054L763.6984043171551,230.06182742687997L761.442891486911,227.5549500604501L759.4154877162317,229.58311772841387L758.009161137154,227.5101409855157L760.031611046436,223.11022801231286L760.4437771857959,220.73286983364653L761.6404708421248,218.88383163998753L760.0554881554725,217.8001688342233L758.5183009001695,218.71712705794346L755.1551416360746,217.03120287840454L753.1878076129462,217.07441772514835L751.9925656590823,215.93926897862787L752.6908587897673,214.32027386214497L750.8736213488824,213.10113568109307L749.2419553402933,213.0553436789013L748.6765269258436,213.24194225599513L746.5547404673146,210.33542288220565L745.5077477378608,209.42600094240083L745.9742109909514,208.2788204467371L743.3498600502337,208.52918518412764L740.8679193474528,207.52205944942853L739.9378050040614,209.1232553753348L738.921422867505,209.0324462441863L737.581200765094,209.6000020987084L737.458044216856,211.6172226506676L734.7455703653478,211.76625886061947L732.5506637499575,210.754038519593L730.7320776132664,214.34786782141657L729.1659230519116,213.83943640582663L726.8026657802988,217.17674955521613L724.1650941860437,219.97514503990556L722.6326097268131,210.3867764861186L723.8081994321573,210.17052465040922L730.2650937394131,208.9908256079957L731.9835253103518,208.6766771227783L737.9712848059348,207.57285321471613L738.4995316043982,207.47986076946881L741.9028856545759,206.83879332125753L750.715896068541,205.16897050936348L750.8562122322699,205.14125326582564L754.2485569720343,204.46955273525805L757.272114490093,203.85534302978772ZM770.1818767830674,215.38791445591983L769.3242775996086,218.09011556742553L769.5209290774452,214.5012916609635ZM788.6559178890127,229.81688439137656L788.3926139206262,229.90953756655722L788.6559178890127,229.81688439137656ZM789.3550421954982,221.47468010087425L789.6441917467114,221.40992234706096L789.3550421954982,221.47468010087425ZM777.6132517486674,233.6395353330256L777.5070214676061,233.66839098245373L777.6132517486674,233.6395353330256ZM777.9397923291235,233.0633741961941L778.2293902220902,233.51736626752768L778.0702947815118,233.5492754026218L777.7803200894365,233.21859989903612ZM777.7803200894365,233.21859989903612L777.8339930457089,233.59556737895275L777.7369483801162,233.61730347653554ZM770.1741555561699,248.29964492433078L770.1741555561699,248.29964492433078L770.1741555561699,248.29964492433078ZM747.8080869865793,217.02643151071572L748.6765269258436,213.24194225599513L749.2419553402933,213.0553436789013L750.8736213488824,213.10113568109307L752.6908587897673,214.32027386214497L751.9925656590823,215.93926897862787L753.1878076129462,217.07441772514835L755.1551416360746,217.03120287840454L758.5183009001695,218.71712705794346L758.947416287817,219.1472774628113L759.8782151114316,220.23240627758048L760.0249758912585,221.1937186885059L760.4004570559287,222.47669951922126L759.0736465973956,224.2608942986027L757.7714817026398,223.96300285561188L757.5547911499064,227.1710920795358L757.8253666680512,230.33968068110687L759.1209214624544,230.1803117574093L761.5962722876591,228.36619540959805L762.2961378064851,230.77628921956534L765.3863476853351,232.15434014007883L768.689309359054,231.76162434900016L770.3830384698099,233.4204822162169L769.6621940038383,234.1153169826771L771.1435496471531,233.81576015634812L774.9672445139591,235.54988818604863L774.1313043483697,239.2462429548615L774.4413357419353,240.7244231946595L771.666144433296,240.54829200934716L769.9330752590779,238.0843425578255L768.6407566473533,238.048999857102L765.2048168128983,235.52453484945283L764.3195398138728,233.95354011782342L762.215977062791,232.80153096031825L762.1806648983527,232.83759716315456L762.5064243161953,233.81763895443385L764.4778121839429,234.15497313336255L764.9556298775009,235.8740338235002L767.03565827656,236.98050948744992L769.1020160117182,238.96237969301922L771.8781326376301,241.43953027773875L775.4393931273892,241.7403239997691L773.8304363638608,242.94181998059935L771.80970781205,242.30002279635812L773.6141935783688,243.01389085634867L774.6359468055732,242.575581822014L776.5623747737598,243.80193502212887L776.6806660542003,246.2314062078135L773.7538253704145,244.14680974068574L775.2619102491849,247.4420995072744L773.6659770000849,248.0969349503796L770.0292693170411,244.94989069707867L768.1790245512905,242.64016819590165L765.790432761182,243.24720570073703L767.9881630194784,243.43921332907837L769.2403278826303,244.95902409427072L770.7820440823857,246.35646495722972L771.8166850552866,247.34776987042324L775.5335459141279,248.73987385556097L775.40147230138,249.8137013802609L776.0764114611516,249.21604165714223L775.9673064813146,250.21789781882387L777.6640740114935,250.38836947683512L776.3461560271255,252.49281022823482L772.3749795677561,250.67458674001375L772.4665681161916,249.8633535016777L771.7929796827302,249.06033348299195L768.4178706281134,249.25685930365535L767.8445817312756,246.9485477144956L768.2134156466386,248.9419140483327L766.0554704691699,248.40051749925738L762.5448800880195,248.96502156462668L762.4370148595997,247.77904515461012L761.4829356500816,247.9033123959515L761.7310248137169,249.3380734322276L762.6917094452396,249.45732132024114L764.9220504201897,248.73591301274314L766.4345989673735,249.84709147036278L769.5465785680915,249.73742496616887L771.6217583626465,250.5860032175582L772.3108335410337,252.3798812132194L775.0556687960097,253.4223781067153L774.6833537936652,254.4205541433107L774.8263106369402,255.68287386450947L776.4199676419246,254.2706157255218L776.9663138194878,255.2479563869838L776.7977094830912,255.765425532392L778.3146320023545,255.12747349057042L779.0140621394484,254.94185964040844L779.2893484995716,254.8309833491378L779.5206784914675,254.84630667401086L777.6553547500796,254.4442963457384L777.3260446372904,252.79858948385265L779.5841886575988,253.11857781527908L782.3732606290989,252.7098397766348L785.6126749224,258.9871974379614L785.252858472319,259.06452868677525L783.8669015560492,256.1343799457936L783.9548583101091,259.34578484185784L783.4854067265878,259.4460695993597L783.1669923444615,259.5129592209096L781.904669700851,259.7825220078L779.1287391468436,260.3708623251671L776.5333640429587,260.9106303088291L775.8022650057537,261.0626359016062L770.3526358497174,262.1540578546088L770.3781095622242,262.3059585874149L766.7568416217829,262.9946922834623L764.8265246168576,263.40674827761745L757.9680786040085,264.74508731099286L756.0384876351648,265.1339385444028L753.9028610303368,265.5532168493015L749.8477634055041,266.3295497502021L747.9076277941074,266.7210042851226L743.859605554803,267.4778865240713L742.9529746039834,267.65029464568363L737.9504821990472,268.5554826517697L736.774587810139,268.7678591032151L734.9634858245918,269.09492554629765L733.0950349231307,269.43477547781276L732.5067354404762,269.5390348776948L729.512430679585,270.0368469576299L724.931193115518,270.81156111756866L724.5472596882958,270.8766433418441L718.8559362610283,271.67365424967136L716.3127880443648,271.9528520137286L712.9975156290621,272.4656841686609L712.052358836306,272.56717247646543L705.3880924285254,273.37254632459894L700.590854852616,273.85219204618045L700.9716661877924,273.34256659078505L698.3249999763511,273.6976961498675L693.6867969209086,274.7582195283053L692.2549137628075,274.95027910265765L691.5111284473469,275.0584906659325L686.8824524828672,275.7524833575218L683.626293407692,276.2165769727453L681.3505066615872,276.53206027997794L674.1784046621458,277.43419943487663L671.1840024053928,277.76258200918267L674.1746212923108,276.1495315110178L678.7586396223865,274.0525611972554L679.4058534662531,271.8370353763893L682.1489900208057,270.73590890356604L682.0681709919731,269.1907922118653L684.020933333798,267.57595862172445L683.7836226803831,266.26838587848147L685.9272296361283,264.42358516251966L686.0771848514429,264.276393838667L689.3648807785479,261.9690324005204L693.6858032054149,256.77740678111775L694.3498305821041,257.16189790172325L693.501957789923,257.8329012519656L696.0465814719443,261.19853912673454L697.8376861036801,261.8814982298345L700.5285266071813,262.0663788939669L703.0493131568857,259.1760138651508L705.3416609755004,260.7816517028026L708.7121912401774,259.1291686882515L710.4714826299494,257.8289386481623L710.0734231166343,256.3160470512389L710.09745496493,256.3327046465281L711.546253353434,257.1693564658658L714.9605484473905,254.52419179768026L715.6601791366205,255.5300503284626L717.9438602283412,253.51997112151616L717.3549164149603,252.54699031851646L718.7141470382844,251.10714787227664L717.4268282227338,250.09914041020227L718.78550428429,246.36512335150417L720.0729034182301,244.67879542277808L721.092841813951,242.3447250958585L721.292671051546,240.06940846531882L722.8232328476195,238.19642696702124L722.4795654479764,237.45898188830995L723.7958674056204,234.86640488499233L723.8800686371923,231.79738937939578L725.5985035932108,232.28637505202846L726.7495801337203,233.858547866074L729.1964003651077,234.2896904659715L730.279579125715,232.8387572411673L731.7132251208297,227.13906763207126L732.3192235213683,225.34172338447752L734.3787173498204,226.63652776323602L735.1327988830164,224.11623747544525L736.0504049061136,223.62039960797017L737.9795429627683,220.34288976559048L738.3761105496103,219.6562120820979L739.5764964537817,217.91965345321614L739.0482430785704,216.29996916916434L739.8237068761632,214.3030035500832L739.331394507438,212.23896398187776L741.2557842754372,213.31055127879597L744.4519054566282,215.13319924672874ZM778.2293902220902,233.51736626752768L778.0702947815118,233.5492754026218L778.2293902220902,233.51736626752768ZM777.8339930457089,233.59556737895275L777.7369483801162,233.61730347653554L777.8339930457089,233.59556737895275ZM777.5070214676061,233.66839098245373L777.6132517486674,233.6395353330256L777.5070214676061,233.66839098245373ZM782.0360613446912,240.37875502990744L780.5518299316409,240.5597824989967L781.8290298979455,236.30222141338015L783.0543356678114,234.74873006247196L783.3956168909999,231.61022018067888L786.7714088631989,230.47338708191614L786.0422644081966,232.883482185091L786.7100193361764,233.017811082766L784.7991281202517,236.96921842031134L785.0416325284207,239.44081975185293L782.8990193935101,241.2341070041075L781.88165927149,245.17893658840228L781.8623613196605,248.87495170589443L780.5205031355681,246.4158087532661L780.7398374073747,240.73393596165454ZM788.3926139206262,229.90953756655722L788.6559178890127,229.81688439137656L788.3926139206262,229.90953756655722ZM784.1345953219552,259.1406110391682L784.8308642663567,259.15716956893664L784.2160738392049,259.29198269391793ZM653.2617048987684,232.61374493439553L656.0908999826731,233.6619346485636L657.6818375051741,236.25493980734154L657.8126952102627,237.13888204609748L660.4853489658508,237.8693954217399L662.6189303721044,237.6613851211648L665.780187492324,239.73422189780138L666.6462193070579,239.63864982456857L668.355465834395,238.20544204878342L672.0994038664601,239.2600987555321L673.6871560911513,239.04210247486287L675.2112657613128,236.79741370489842L677.1790039318726,235.98175479970882L678.6877705989109,239.26309416969502L681.0127676268229,240.17530733619992L682.2332514474758,241.60252928165312L682.5761593050106,244.8707863614477L682.4276467040734,246.9830428888663L683.834422280186,248.0846992473297L684.9103865735326,250.29277336689097L686.3462617968146,251.81828856854327L687.8295933095915,253.7606437532329L691.3750332307316,256.87335876974396L693.6858032054149,256.77740678111775L689.3648807785479,261.9690324005204L686.0771848514429,264.276393838667L685.9272296361283,264.42358516251966L683.7836226803831,266.26838587848147L684.020933333798,267.57595862172445L682.0681709919731,269.1907922118653L682.1489900208057,270.73590890356604L679.4058534662531,271.8370353763893L678.7586396223865,274.0525611972554L674.1746212923108,276.1495315110178L671.1840024053928,277.76258200918267L667.4459577642639,278.4930788187255L666.2660430127785,278.59626052034685L663.0720323167645,278.96089317394024L662.5645537539425,279.0270469851512L654.9188680577716,279.73983723971355L654.8127700223032,279.75037919300246L651.9911321902625,279.850551654368L647.531325926074,280.1561419231348L647.2307860852895,280.201376937831L645.170704036195,280.5744826502215L639.9726163616629,281.0806741129504L637.235607106257,281.243840553993L633.7957736936016,281.3910406986769L630.7168887236053,281.4974052482902L628.5118032092678,282.0384441145046L625.5259619228352,282.05082630400034L621.1349807681443,282.57980209283187L620.340730876882,282.6687354448451L617.0799754998321,282.98792108487044L612.5702687455386,283.4579384752618L611.7917121208136,283.5446684179932L606.1588993268548,283.2503819894871L606.6923644213211,286.6193154593227L600.2288419675693,287.0810320361144L599.8184280893316,287.10432915971637L595.3734360147732,287.4266359067842L595.2241144138013,287.433872729918L595.1073348689664,287.44676055263903L587.5212558171921,287.9900962981145L586.4565462987939,288.1435311732481L587.6280428038463,285.55221902891265L588.8664330363281,286.7418049957191L589.8266073176246,285.0009198291061L589.3994917440666,283.81011052018255L590.44871442631,282.45812985425505L590.555889382983,279.4597719549338L590.0122738989003,278.78429161751933L589.4065095927631,277.2387714734217L590.4747956040551,275.353730899738L592.6373879863382,273.9756120443085L592.7091514052946,273.9428399654431L598.2369628767286,276.2843028665369L599.3692956871074,276.42776934661197L600.2115613690383,274.79806016040334L598.7817598156905,272.82252209988405L599.1090924553887,270.40167850668524L599.9438392745092,269.65843230121834L600.8079023639843,269.94575534080343L601.8949586572696,268.9369710675812L604.7153767616634,268.3273456010876L604.9956610587705,267.69706951717626L603.8332711751381,266.4877765080215L603.3171301374751,264.8422211580711L605.0139625955627,262.1320639920207L606.7626076337519,261.8355051276907L606.3239573940634,260.08358206551134L609.6125609899753,259.8728449421369L610.9739690084357,260.9967142828958L610.9674076964342,258.30950508149033L612.3525683545957,259.463457197155L613.1756944381762,258.7365261564453L615.4120563706639,259.3335704898153L615.9366342773267,259.66070341816805L618.8303992372532,260.99660762241876L620.0493618979767,258.303853653848L622.3280369443022,256.79556121755377L623.4137024441322,258.3336252592875L624.9681463471512,258.46089858415667L624.9062858221865,259.48796306893826L626.8566745678468,257.71214967654646L626.9181848311066,255.44180557516154L627.207479087312,253.9843410170879L628.9933232221506,252.65883215473752L630.1417014368552,254.90157338401332L631.504456809564,255.6285397804968L634.1384283895133,255.57185168859223L634.8474355658045,255.3633372992573L635.2063780068936,252.07141956930195L636.5555600518752,249.83619569175255L637.3270634219184,250.13691610374917L638.5785534579508,247.87203405090304L641.236863096312,244.85713824517586L641.1734235261914,243.68090780803902L640.5799800314853,241.40094200490546L642.2283198789136,240.7167850471775L644.2076868990105,241.34655472546717L646.6080221739736,239.73576926641817L649.5300662621305,238.96831270325163L649.6653924897207,237.55907846339312L648.4913071398908,236.87054421464825L648.1024003037742,234.44735056695038L648.7621422005459,232.95513548733322L649.753286238459,232.04109677327017L651.6355403599806,233.20310668983427ZM585.4729111169703,288.2327276900264L584.6631468700132,288.28301592049434L585.4729111169703,288.2327276900264ZM760.4437771857959,220.73286983364653L758.947416287817,219.1472774628113L758.5183009001695,218.71712705794346L760.0554881554725,217.8001688342233L761.6404708421248,218.88383163998753ZM296.5688665006553,268.89977970478174L293.9871783517866,287.5125454379455L291.299084242144,306.9731378310894L290.3079180616213,314.06872274467923L288.234168160366,329.0000627083124L286.76907175075496,339.60551985993186L285.6598118508173,347.63516778045516L284.7514454969192,354.16947978472L281.90253783753366,374.4996261039621L259.7310881619969,371.25914157434886L250.07563860842117,369.7559053799438L245.78055237196924,367.27926679196366L217.10247232542906,350.6303906751824L195.88457887623093,337.844600886286L196.40415404685814,335.5967100194407L198.16011706908756,333.99702027836133L201.2475103264273,333.8732328144773L202.77865612479076,331.2865735457641L202.40895108055997,328.94209049363735L200.05540306729745,328.2081098148615L199.71578894362978,327.22738340991236L200.83264865562478,323.96075035297997L200.12688386348265,323.2022029711667L200.6245766937734,321.3056778697137L202.21803256694614,321.0420345061083L204.18046256550167,319.2186917456378L205.12546348076904,316.63302738634013L205.38423113501085,312.2942928807024L207.2439186164143,310.7034073345426L207.51600223187444,309.6041722481739L210.4941283788787,308.54647330661794L212.71880949917983,306.4886730092187L210.21242738736572,303.1588020734322L209.30841427511012,300.1941894553777L209.17599031899857,297.92004405876844L207.3662502366762,294.5771591370558L207.8332295109568,292.14191615883067L208.00566563363606,290.2410311623313L209.383921564148,289.35391101575624L209.59647175053726,286.2414900478776L209.07516794134347,282.557548364034L209.91880116898847,276.2243146864588L210.02459988362187,271.74113838493486L212.06919458182676,271.061433275161L215.885414860548,271.80554632593373L217.42957209618055,274.599838504075L218.64276359979613,274.63591294976743L220.85671139851286,271.7960812693101L223.07456037997372,259.74778796890325L223.6291833612022,256.8345455380602L240.35035462788937,259.94509590262237L245.56614599577378,260.866064664238L261.9969155042003,263.63997511774767L271.6555957481746,265.15177470600713L282.58956634131846,266.91872760778097ZM502.3451352854457,282.0273625883369L503.3206359371601,282.0185273983881L509.0728530058277,281.9578135989733L509.1259356800189,286.33996035912605L509.1636064720573,288.1990367353354L509.2097963176881,291.37556701227345L510.1225004019882,297.7238555720255L510.3058239997843,298.8460858201315L511.2882076505488,305.2976717396888L511.63193909590643,307.56595829180003L512.3277740425124,312.10366064112384L512.3166189124837,312.4125525479012L512.2211503353269,320.83170929584014L512.1858541980545,324.6929084222621L512.1441082438104,328.8649889298857L512.108867338889,334.8459387710317L512.0738658429458,339.5300966593686L512.0322285657359,345.23258790143404L507.9993124764134,344.06868221701995L507.5031456483965,342.9444031229674L506.2075339256347,343.32225767890793L504.5180276677401,341.1233591299085L501.643646908921,339.7418444565542L500.662690507497,339.2640847546662L499.2561107216004,340.8606787066211L495.55972647684297,340.68167580603824L494.82102556493163,339.70567306003545L492.35150577011774,340.97625575144264L491.0211964385072,341.61565792814724L489.64998436444085,340.71883709434167L487.28550101783486,341.2894996029469L485.90073056798,343.1044230871797L482.811119009952,343.7531342122885L482.1180264361638,342.79230643029314L478.99035410865315,341.4997161687917L479.6041120334635,340.5547002641491L478.5848741739217,340.1933007696274L476.76172657459017,341.67833134268267L475.28411808537504,341.27346608006053L474.28584113420663,339.39529112577213L474.13034569883854,339.4928031296753L471.78446698143296,342.38328753917096L471.5860077811759,343.7532548334299L470.10519311720935,342.2295751167985L470.4052192476238,340.3444852630148L468.5079206927626,340.56112261501426L467.5171108813676,341.8508805328921L466.14681659750477,341.4373047021668L465.83184109759884,340.01643094037547L464.63458679221026,340.29036148377827L462.72012775854387,338.6170987587943L459.87836579262074,341.16065763489223L458.22028126978137,340.3609201153208L458.76125451860446,338.4918794653073L456.65978169082877,338.2117877440613L455.87580805799547,335.5423989169211L455.37902725187405,336.07714583028906L452.40958733769946,335.1983999150009L451.46605743848266,336.5730813492063L450.49240351789365,336.92407073999664L448.64054653921306,335.1007597396093L446.24690246701255,335.42239578633473L443.42425927883124,333.9053676145792L439.8134543024758,333.7613704720901L439.54527993900876,331.4378200178468L437.08575535040376,329.05890501813906L436.7072521679918,330.5914489255297L435.5468236517276,330.1842135133594L433.9550932561696,329.72947441030703L432.1727589548982,330.3877581181564L430.0051351039113,327.893227625044L428.83740155738104,326.55704637861174L427.6941235467393,326.7725476944744L427.79761171841915,323.27437745075827L428.0233905130729,317.913548520871L428.143368322615,315.06482876698976L428.33332690011383,310.5545051145954L428.4893299128822,306.8504129509324L428.6965990272063,301.92907272478544L428.83552101123394,298.6305477587249L429.1344340400485,290.26480974939955L421.0827248977261,289.9094912906379L415.0219253122342,289.60024485251085L413.076096199909,289.50447938814534L405.07224721651005,289.0479932322279L399.01087150905255,288.65653617319674L397.08777969854003,288.5370490189139L384.6230117358495,287.6713744571787L385.32184671894476,278.27553481525047L399.45760267121005,279.3709813690093L399.6687526442471,279.3925266392664L406.6413463970387,279.7763441795222L413.8488896154515,280.13083730852736L415.6337003972605,280.2147966665451L420.24734428328134,280.4160554733144L428.2728168037461,280.7450502278723L429.5542294725051,280.80977209849175L436.3654038486766,281.11874048025675L437.6209789156456,281.1680199151474L444.35044415153845,281.396671610441L451.07527616640544,281.6060661946235L453.99008214287886,281.69224257649546L457.46717850459527,281.7748383923515L462.0366997342254,281.85780473480156L467.06216453095664,281.94412346938907L471.70626937692253,282.0018155362401L477.5857546128198,282.06152148331125L480.8993318113625,282.08881426097287L488.6506817365965,282.10722736974594L489.1861717516131,282.1030775296713L491.8105912146844,282.0955902348884L495.7127374877143,282.0814113509208L497.40930760176883,282.0718637083487ZM352.66235733968256,275.5749412345622L353.6283172334229,275.6665778293768L370.50631763680275,277.17736206358643L384.08485580466595,278.18063918352254L385.32184671894476,278.27553481525047L384.6230117358495,287.6713744571787L384.03757568724785,287.6270249792841L383.4324059573996,295.9973621018189L382.9863724196252,301.9343290233878L382.81780588660826,304.13250779078885L382.1890034651635,312.3839457195837L381.8696135328739,316.6862736932841L381.5813623693014,320.56914825855176L380.95369774776486,328.7272876613747L380.9395480340331,328.9178517651369L380.2246237989766,337.8743855821847L379.79255865418384,342.6425918284889L379.4720344857968,346.05446769076L378.75066792582766,354.0946333474899L378.14127254486823,362.2779329991555L377.5402300117951,370.4251612080874L377.41963892084243,372.04460793821283L373.30151018164287,371.7352781064925L367.06967695579215,371.2439008179248L363.02714284732986,370.9112047998584L362.3336885402466,370.85369125850923L349.40805952301116,369.6942729248044L348.30400127079344,369.59179584130266L331.3751316740047,367.867142365209L325.42777180495614,367.2474802869358L321.64767531969926,366.8434645837176L321.09083211122606,369.3163874260297L322.61540285862526,371.0391824935923L310.54420563577327,369.65319858385453L296.24630582130555,367.8740938348594L295.1645893811796,376.24895740466195L281.90253783753366,374.4996261039621L284.7514454969192,354.16947978472L285.6598118508173,347.63516778045516L286.76907175075496,339.60551985993186L288.234168160366,329.0000627083124L290.3079180616213,314.06872274467923L291.299084242144,306.9731378310894L293.9871783517866,287.5125454379455L296.5688665006553,268.89977970478174L306.3170484885112,270.20326735507L319.4736962269195,271.85431350846363L320.3579439511178,271.9613720745873L334.2121207714081,273.68271206474185L341.1103308142377,274.39938369660797L345.3460856235341,274.8303300868805ZM620.340730876882,282.6687354448451L621.1349807681443,282.57980209283187L625.5259619228352,282.05082630400034L628.5118032092678,282.0384441145046L630.7168887236053,281.4974052482902L633.7957736936016,281.3910406986769L637.235607106257,281.243840553993L639.9726163616629,281.0806741129504L645.170704036195,280.5744826502215L647.2307860852895,280.201376937831L647.531325926074,280.1561419231348L651.9911321902625,279.850551654368L654.8127700223032,279.75037919300246L654.9188680577716,279.73983723971355L662.5645537539425,279.0270469851512L663.0720323167645,278.96089317394024L666.2660430127785,278.59626052034685L667.4459577642639,278.4930788187255L671.1840024053928,277.76258200918267L674.1784046621458,277.43419943487663L681.3505066615872,276.53206027997794L683.626293407692,276.2165769727453L686.8824524828672,275.7524833575218L691.5111284473469,275.0584906659325L692.2549137628075,274.95027910265765L693.6867969209086,274.7582195283053L698.3249999763511,273.6976961498675L700.9716661877924,273.34256659078505L700.590854852616,273.85219204618045L700.3978992394772,277.63731006164414L697.8972897715207,280.00164887668495L697.7396666923023,280.43262577793394L696.0038717090196,283.7813189366618L693.7607809062229,283.08817459777447L691.1109809416089,285.0774326094188L690.0519929909401,287.03864114651276L688.5146448430198,287.4518241851466L688.4399964927109,286.0840019368553L687.866490725074,285.67239781855733L685.8670343182679,287.4209546711802L685.5139388322475,288.7399136899361L684.308622988975,288.4670825165359L683.7684085035805,291.4739381255804L682.0318785119111,291.73914507654627L679.5899827443186,293.4663411306926L679.6571759850098,293.8433698184897L676.3495649373212,296.8117035469071L673.8751587563049,297.0194921552311L672.2647106924437,297.3747313085611L669.803572686737,299.6081136441517L669.6778049348595,299.5629205494447L668.9119410928118,300.79363181952976L669.0643028678137,302.90220739235906L667.720135617394,304.03759076934296L666.3531231125557,303.73237320271653L665.3120704213582,304.99354525748083L665.3740591099606,309.12808758238566L660.8612613565778,309.68122160162386L658.5372776904961,309.96599825013607L657.9917419736385,310.035712083005L655.4661226654407,310.33111255125016L651.1658106487893,310.8753239676438L649.6760294471617,311.07609638926647L648.0261487245183,311.2666388791388L646.0472995461676,311.4547777102771L642.1368227931628,311.80959477803276L635.4000157444078,312.4608914669798L635.2699156602503,312.4731787986136L628.2468416927553,313.15843909819444L627.466559529393,313.23514203963134L621.7844156505141,313.63927605232334L621.5831852845749,313.65081144474414L615.785691025681,314.0986533419783L610.081516253949,314.5455335032967L606.8425749862995,315.01157228875434L604.3791705063921,315.2151094641408L604.1130060801066,315.2334727398784L597.9745764849174,315.7205405789563L597.4262562026283,315.7621306696394L594.4838879756937,315.98678924126193L591.7476370242941,316.1936742423701L589.4131831510961,316.3712891097706L584.9953166777493,316.6476003919586L583.7844724850883,316.73730386042325L574.9319323773256,317.27910700563075L576.3535481788667,316.6194850402263L576.8766507065109,314.837901321403L578.4360349308486,314.34288093056455L578.236258155627,312.8001456518001L577.010714009672,312.2404745987242L578.0137522069682,309.75806981375604L576.9329779141106,308.8659133633266L578.047881277372,308.30690911320005L578.3266490445754,309.6411618215643L578.5126366323553,309.4915936851356L578.3562891560864,306.65592197133196L580.3311821315422,306.70803351767256L579.5438430645304,305.82731172529L581.003487739857,304.8755502998415L579.4248403074489,303.02436903805165L581.3639923047372,302.51708643096015L583.0770779436045,300.97915162596985L582.3618230714426,299.62535515250875L583.845383709976,299.5572214285777L582.7951576008617,297.78563351647597L583.1096324026419,296.20111147159423L584.3288741449879,295.2974003035806L583.7214721072579,294.2575270855938L582.6478830398141,293.0556498417957L585.0444537300096,292.85889111032566L583.8091083224286,291.888072160246L584.7790459609988,291.32412576192223L584.6631468700132,288.28301592049434L585.4729111169703,288.2327276900264L586.4565462987939,288.1435311732481L587.5212558171921,287.9900962981145L595.1073348689664,287.44676055263903L595.2241144138013,287.433872729918L595.3734360147732,287.4266359067842L599.8184280893316,287.10432915971637L600.2288419675693,287.0810320361144L606.6923644213211,286.6193154593227L606.1588993268548,283.2503819894871L611.7917121208136,283.5446684179932L612.5702687455386,283.4579384752618L617.0799754998321,282.98792108487044ZM712.052358836306,272.56717247646543L712.9975156290621,272.4656841686609L716.3127880443648,271.9528520137286L718.8559362610283,271.67365424967136L724.5472596882958,270.8766433418441L724.931193115518,270.81156111756866L729.512430679585,270.0368469576299L732.5067354404762,269.5390348776948L733.0950349231307,269.43477547781276L734.9634858245918,269.09492554629765L736.774587810139,268.7678591032151L737.9504821990472,268.5554826517697L742.9529746039834,267.65029464568363L743.859605554803,267.4778865240713L747.9076277941074,266.7210042851226L749.8477634055041,266.3295497502021L753.9028610303368,265.5532168493015L756.0384876351648,265.1339385444028L757.9680786040085,264.74508731099286L764.8265246168576,263.40674827761745L766.7568416217829,262.9946922834623L770.3781095622242,262.3059585874149L770.3526358497174,262.1540578546088L775.8022650057537,261.0626359016062L776.5333640429587,260.9106303088291L779.1287391468436,260.3708623251671L781.904669700851,259.7825220078L783.1669923444615,259.5129592209096L784.300684579662,261.96012249869784L786.4759051478648,263.9431944425297L788.5168636797093,267.58962282437403L785.5334368779647,264.47573878935384L784.2548983403235,263.2818089181436L786.4976227428692,266.23865765343237L784.8574848429748,266.1568072447802L781.0199062277131,263.4166282639661L781.5022171010808,264.74299045612554L784.3848354838174,266.94808324801465L782.9442530101873,267.78085328062195L780.815618270266,266.4441061865359L782.6101260698956,268.1972218156793L781.7505783528413,268.43769269799L778.4233038485978,267.28052821738265L781.0194062786048,268.767518539722L778.3418825383847,269.49218461002033L779.591538392308,269.5686174253534L778.3017068246437,271.01244843220945L775.4628458421286,270.43894325158067L774.7143616171138,269.0114315263048L774.7437676905756,266.0994104692302L773.1093582388908,265.2155850062886L770.5849754095125,264.93005349873056L772.9960461242968,265.30187135757967L774.3293370890301,267.27230008097854L774.2076239091039,269.0762780324534L775.8742140140469,271.8499572196423L775.8408867885084,273.1271782232536L780.0731425331091,271.11042818797205L780.7332979509928,271.9548388754872L783.3925775297237,270.1831475351088L785.0020821108019,269.9242033675358L786.4539205110017,275.4473764676368L784.6640183365547,275.6672722636781L786.9586515676342,275.6926565032768L786.4835855999669,271.55944233209505L788.9096762382096,270.3530924521733L789.9877588606008,270.91046570151957L791.2343962058724,275.6255238584075L789.6157855281946,276.75358724650937L788.9197795319706,275.85446402267144L789.2754394187847,276.99553016091284L787.7088384122465,280.504296139586L786.237365838274,282.25835149787406L784.6654096224604,282.36926246814926L782.3363275345234,281.29388828755384L781.3815962142558,282.5767913078382L779.1362494226282,280.4178170583597L780.5687088196628,280.26712118279636L780.2465933741138,278.9850360910459L778.3660481043445,280.51203424313314L779.7643843584925,282.5956049105828L773.4448549690815,282.0659986164153L771.5222499327884,281.01537813550055L771.4197985903727,281.19090566033526L773.8231606471195,282.95067351217506L779.2419255346163,283.62663940012396L779.6273434663119,284.79421301535217L781.1198859465411,283.7125406024421L781.6483177106394,285.4527231358811L779.4488432270882,286.9348290356903L781.0896658928061,286.9547728847974L780.6397411264226,288.4802158441769L777.9878178215899,291.1189960024103L775.5764894308398,290.08374416985873L775.5335485747698,289.2716734901268L773.9798921999995,288.6947465794867L772.7094518253602,290.1504123007088L772.9841278901883,290.0817108459521L773.9709217061861,289.3634182968972L776.6467043763773,291.65725977134616L780.0057124582928,292.0057777976905L779.8837420556033,290.63131470106L783.4740640938287,289.30752269802656L783.1268394228086,290.49615201075267L785.8381528771904,289.5962714769229L783.8088960807934,292.7781848830159L783.2810395648792,294.66218348863526L782.3162230927949,294.906932748385L781.270618255501,293.38493914663513L780.5428394371284,295.3704274154511L777.5607488618191,295.8151478253478L774.6721380871959,297.38404292001815L773.4925364675141,295.8705540483078L774.347269982743,296.8232164324396L771.580060448298,300.84047579606977L769.2638316932378,302.9420326053904L766.4734240330265,306.31741568721657L766.7979639550131,306.23055505114735L766.8642662359318,306.28356273681254L765.1833321248453,309.31396266814556L764.6392055604715,311.29151708259815L763.550665769924,308.8100930778328L764.3691471835027,312.83590427871866L763.6671058131841,314.6263276228093L761.4759934822962,314.54517558489056L757.5299327495554,315.5810420712621L755.6133399988591,316.5425956401799L755.4018344791518,316.40196797072304L755.3295602571643,316.34547968454115L753.9575496306727,315.36393359272233L746.4176936894528,309.95899422500827L746.3915874114168,309.9380114210679L739.6562151083748,305.00899898782984L739.4533177476127,304.8659996854525L735.5025765185034,302.2207639539189L731.9036000411672,302.8050296454379L731.8713196159833,302.81054083849676L725.987612150532,303.6620061626543L722.3209457525268,304.2009888036133L718.8076252746058,304.72918155546927L718.6954276086166,302.56264390571755L717.6418066524304,301.46794863841546L716.423366912039,300.2289661648756L714.4897081516035,301.12636546078556L714.3029595195746,299.1870022655637L709.8463612383963,299.59565703009685L709.2679390199917,299.6589208364228L703.2150681859141,300.2873231766796L701.6150623640751,300.4582215302546L700.1881792860627,300.6107756722297L696.4678527770766,300.9923605305195L694.4238838190018,301.3895825658684L691.2178789224431,302.72120028652955L688.5990642441088,304.5501005978673L686.631427926643,305.0523082514594L685.0286592878813,305.81606041951716L683.6038052760533,306.5239132694454L683.5988215902553,306.527656699321L677.9893266745022,307.4208036137986L676.9871967320934,307.5674814737947L671.1730681154609,308.4163337062382L670.142145782511,308.55362991246886L668.2560149850891,308.7855534232425L665.3740591099606,309.12808758238566L665.3120704213582,304.99354525748083L666.3531231125557,303.73237320271653L667.720135617394,304.03759076934296L669.0643028678137,302.90220739235906L668.9119410928118,300.79363181952976L669.6778049348595,299.5629205494447L669.803572686737,299.6081136441517L672.2647106924437,297.3747313085611L673.8751587563049,297.0194921552311L676.3495649373212,296.8117035469071L679.6571759850098,293.8433698184897L679.5899827443186,293.4663411306926L682.0318785119111,291.73914507654627L683.7684085035805,291.4739381255804L684.308622988975,288.4670825165359L685.5139388322475,288.7399136899361L685.8670343182679,287.4209546711802L687.866490725074,285.67239781855733L688.4399964927109,286.0840019368553L688.5146448430198,287.4518241851466L690.0519929909401,287.03864114651276L691.1109809416089,285.0774326094188L693.7607809062229,283.08817459777447L696.0038717090196,283.7813189366618L697.7396666923023,280.43262577793394L697.8972897715207,280.00164887668495L700.3978992394772,277.63731006164414L700.590854852616,273.85219204618045L705.3880924285254,273.37254632459894ZM788.2098879853309,264.59292223275907L787.3244151665384,263.63730622008893L785.252858472319,259.06452868677525L785.6126749224,258.9871974379614L788.2446134081421,264.5760957898324L792.7010276735389,270.72375087961586L789.5191269597296,267.9571991355866ZM783.4854067265878,259.4460695993597L784.8308642663567,259.15716956893664L784.2160738392049,259.29198269391793L783.9548583101091,259.34578484185784ZM792.6974558336349,283.6402089924874L795.7993690733603,281.48126899698775L795.3359214060639,275.5985290464356L794.7393361444012,273.962584653248L795.392633590152,275.3529232964961L795.8440894656201,282.39649814522215L792.7449623260234,283.7313884305122ZM764.7717425173207,313.55611019043386L764.8036597445073,313.6343622550344L764.7717425173207,313.55611019043386ZM755.7512082515356,316.6495922727114L755.6346150449282,316.5663982565584L755.7512082515356,316.6495922727114ZM384.6230117358495,287.6713744571787L397.08777969854003,288.5370490189139L399.01087150905255,288.65653617319674L405.07224721651005,289.0479932322279L413.076096199909,289.50447938814534L415.0219253122342,289.60024485251085L421.0827248977261,289.9094912906379L429.1344340400485,290.26480974939955L428.83552101123394,298.6305477587249L428.6965990272063,301.92907272478544L428.4893299128822,306.8504129509324L428.33332690011383,310.5545051145954L428.143368322615,315.06482876698976L428.0233905130729,317.913548520871L427.79761171841915,323.27437745075827L427.6941235467393,326.7725476944744L428.83740155738104,326.55704637861174L430.0051351039113,327.893227625044L432.1727589548982,330.3877581181564L433.9550932561696,329.72947441030703L435.5468236517276,330.1842135133594L436.7072521679918,330.5914489255297L437.08575535040376,329.05890501813906L439.54527993900876,331.4378200178468L439.8134543024758,333.7613704720901L443.42425927883124,333.9053676145792L446.24690246701255,335.42239578633473L448.64054653921306,335.1007597396093L450.49240351789365,336.92407073999664L451.46605743848266,336.5730813492063L452.40958733769946,335.1983999150009L455.37902725187405,336.07714583028906L455.87580805799547,335.5423989169211L456.65978169082877,338.2117877440613L458.76125451860446,338.4918794653073L458.22028126978137,340.3609201153208L459.87836579262074,341.16065763489223L462.72012775854387,338.6170987587943L464.63458679221026,340.29036148377827L465.83184109759884,340.01643094037547L466.14681659750477,341.4373047021668L467.5171108813676,341.8508805328921L468.5079206927626,340.56112261501426L470.4052192476238,340.3444852630148L470.10519311720935,342.2295751167985L471.5860077811759,343.7532548334299L471.78446698143296,342.38328753917096L474.13034569883854,339.4928031296753L474.28584113420663,339.39529112577213L475.28411808537504,341.27346608006053L476.76172657459017,341.67833134268267L478.5848741739217,340.1933007696274L479.6041120334635,340.5547002641491L478.99035410865315,341.4997161687917L482.1180264361638,342.79230643029314L482.811119009952,343.7531342122885L485.90073056798,343.1044230871797L487.28550101783486,341.2894996029469L489.64998436444085,340.71883709434167L491.0211964385072,341.61565792814724L492.35150577011774,340.97625575144264L494.82102556493163,339.70567306003545L495.55972647684297,340.68167580603824L499.2561107216004,340.8606787066211L500.662690507497,339.2640847546662L501.643646908921,339.7418444565542L504.5180276677401,341.1233591299085L506.2075339256347,343.32225767890793L507.5031456483965,342.9444031229674L507.9993124764134,344.06868221701995L512.0322285657359,345.23258790143404L513.5909779234618,346.95387898832564L517.1134039297375,346.0461839299294L518.8962912052394,346.71885044760427L519.0050470685546,352.00109827913457L519.1025630255855,356.7374263893071L519.155983152965,359.3320299666092L519.2287101204008,362.8643624250333L519.3449778419833,368.5114595238442L519.43211174482,372.19522931974177L519.9399510086631,376.24215325336377L522.152166301288,378.73968416782475L523.5457582010386,381.37671882546965L522.9594266466055,383.5626401654174L524.8792412051305,384.86669909235684L525.4769839591941,388.83586481487987L526.8656596476268,391.1566687796728L527.626782862174,390.96206242853907L528.3949291542592,393.87674672559774L527.6820484248918,396.89545505230353L526.6068258139817,400.4983169384377L524.93747390049,403.1096700869681L525.6493703967187,404.9045034776817L524.9644427713608,405.6990952200215L524.5980620784778,406.80951966744703L525.554864413203,408.64215930233183L525.4447257946154,412.2490525514022L523.3740608441991,415.7855047907923L522.191510543913,416.97147597424373L523.6971315623159,419.00702879465246L520.8623189871204,419.3017509899356L515.3888730311539,421.61820423324616L515.1226589329394,421.7341691468007L508.83674907366714,424.816531942055L511.9817981974326,422.2453498342194L513.5132556867184,421.7278092711597L512.2791490110409,421.47627180072016L509.1430563043858,422.36487457092824L509.8072103320124,418.0618080291548L508.0479489919557,417.3833000730433L506.91859089348304,419.7096495679673L506.0604763556932,419.5118338464496L504.6110626580119,418.96248102791174L503.63590410481146,416.826222361703L503.2044764245233,417.90846571633585L505.1589481036988,419.5869800762247L504.60768884300234,422.01606351176474L506.37986299807767,422.99496399489965L505.6972826073186,423.5312993768149L506.8430468897235,425.17122310283776L506.5033583604743,426.6232684610479L505.8923554573187,426.3744858012723L504.048317330685,428.5174814052681L502.53498279420995,428.8746078466619L501.13466048351364,432.4483962210132L498.46708201901015,434.82784718239014L496.7366027020398,435.55596102104346L493.71354671341066,437.3803593570956L492.128849543824,437.04822921236547L489.72758623638197,437.99397386376114L489.2922171953321,439.3157736022028L493.5079426134368,437.53722143111355L483.16031461416986,442.80427634550495L487.9004879974009,440.07851582221525L489.07392799426736,438.74019373155346L485.9723629374509,439.685987505447L483.3565058106468,438.9735169513909L482.24490251278996,438.3816464263746L481.6289996299622,437.76621691391307L481.50857939090116,439.6248733984409L479.63702912884935,438.99048499371344L479.2375412781178,437.7926527888637L477.8965568265758,437.5096092528519L477.84939118331454,437.51729376613787L477.83193340604134,437.48713208693107L477.8352160471308,437.86265338369674L478.63548679702023,439.8253002955133L482.1207591177481,442.7082163929788L477.95785911433546,444.9154568993277L475.7287408310011,442.57237395900927L474.5002996668837,443.1711431272906L475.62612196636246,444.9648195208305L475.48916754785836,445.7709407429419L475.5049205499932,446.71627423065996L475.3027881786579,446.80057837330156L474.76431136626803,447.39796168026226L472.8084277367416,448.5814125028216L471.85755291773296,447.09550227496163L468.1204590033649,449.6559445150937L469.4762766984108,449.9370177766407L469.0079462209348,451.3097541284656L469.05453916024817,451.3853020130526L471.715220905662,448.7539795253192L471.66349692901167,450.2461089380386L469.8358900856187,452.63017446656227L469.81771765975736,452.6579394556069L469.7266538446077,452.81274689572035L468.91316761759794,454.13177319105654L467.5529792233924,453.023954150775L463.94277344067245,453.7438965312919L465.66247522530296,453.76194247138324L466.5646335994798,456.0617344760287L467.83471620877816,456.46657263510974L466.613421980419,458.9736531122255L465.04847315194667,463.4189807268752L463.49046742689245,464.244160366999L464.2108512013634,461.82246175959847L461.7492275827852,463.4063215135414L459.77107814828025,461.54506328523405L460.9253058295941,463.9499298069671L459.0073286258805,464.0030348575904L461.1549870393683,464.17743986496555L462.84785488946727,465.0759005340878L464.8947898139208,464.4843283746598L464.4338158332227,467.20857865370857L464.03330093564256,469.0412441602532L462.59647652336014,469.8109766356262L462.68345001193654,472.59131789165144L463.9405487143812,473.86480818512064L464.3663600401319,476.78196995107794L464.65669338965085,478.35965636387994L464.6241129016081,479.7250389171574L464.2707314777898,480.28706671980154L465.2145258335111,480.3051377009857L466.7696216384258,484.31314053031446L466.4782725065523,485.64288973448186L468.1943091785256,486.77240210624734L467.4842791539892,488.5566712542666L465.34002641465804,489.6144221843345L465.3583508808443,490.8737744167619L462.87506096723604,489.9793724577256L459.7844162749335,487.1316342366636L457.15332257888406,486.469726564433L451.5463642633861,486.6643606095604L448.31482615774854,484.65195244119525L447.3516833444057,483.39079143304696L444.98009972237793,482.7100486174912L443.46832838512677,482.9896157145479L441.3740239371442,480.5802450870422L436.2301588570502,479.3229047821102L436.58080798190105,478.4061965455893L435.3343798600583,476.598053900187L433.84748289021263,471.5106356994656L430.9944225952876,468.1156654260457L431.4223425953804,465.252455796105L431.02122035105765,463.5750183985353L430.23377169931297,462.16841258079063L430.7538396492342,459.57998242563247L428.94255671159993,456.5562442473553L427.0078819832735,456.11208195275475L424.3560225851727,453.37908725348245L423.57426325550523,449.95357310795015L422.6684286267847,449.71872445322117L421.14307485549955,446.7560549053539L419.13390355389254,445.75640558945753L417.86392163657587,444.0636451142499L416.35671560214325,438.35316660315937L414.83556491368097,436.93294816420894L414.1721782478919,433.78353324211446L412.57549455017966,431.51789172063565L412.44620785699306,428.884100463235L410.7680627270372,427.1157479649253L410.51558273132935,425.8443350784754L407.21779180792566,423.3689448225972L406.40603540916186,421.58138785983465L403.2297767526469,419.92897216953565L402.7034671681955,417.9532572871028L400.37049079400225,415.102050960664L399.00413343988004,415.56387152235743L395.3903045783228,414.91546406417183L389.67066004790524,414.3474158623792L386.47175772201285,412.51512900884563L385.21711738128704,414.6384404552316L383.186793384065,414.0697956898414L380.6940864556052,414.62506024292895L378.1073502331002,418.65325291800036L376.7785599470693,421.6566493855321L376.43124628697103,424.3426748964797L374.71320847146603,424.71456607131677L371.7779185349372,428.4381927294131L367.2945097478878,426.7327689103183L365.4853249279322,424.4755692332983L362.84702654458454,423.81762044712434L361.7794582743009,422.22153564535245L358.9162513716695,421.3597585511443L357.2008484090311,420.27564177983163L354.56057769318693,416.91121552306333L353.3558807456571,416.6939715864629L350.76321175011867,414.1327841846537L348.5192443105369,408.87596269328844L348.8173740661722,403.90610556341665L346.4140925265435,399.71384926413305L346.4276538685273,397.4638805614869L344.91074270942045,395.08525601404097L341.47898078551907,391.4349577225614L338.7191400918225,390.1733963007123L336.3841462847399,387.4798787760935L335.7844173444512,385.61486907140716L333.2834679172199,383.81821071571426L332.00780863894585,381.3896488138163L330.1751892285995,379.3407824730873L326.86300298806475,377.25141231279486L324.80548260173975,372.24710722810664L322.61540285862526,371.0391824935923L321.09083211122606,369.3163874260297L321.64767531969926,366.8434645837176L325.42777180495614,367.2474802869358L331.3751316740047,367.867142365209L348.30400127079344,369.59179584130266L349.40805952301116,369.6942729248044L362.3336885402466,370.85369125850923L363.02714284732986,370.9112047998584L367.06967695579215,371.2439008179248L373.30151018164287,371.7352781064925L377.41963892084243,372.04460793821283L377.5402300117951,370.4251612080874L378.14127254486823,362.2779329991555L378.75066792582766,354.0946333474899L379.4720344857968,346.05446769076L379.79255865418384,342.6425918284889L380.2246237989766,337.8743855821847L380.9395480340331,328.9178517651369L380.95369774776486,328.7272876613747L381.5813623693014,320.56914825855176L381.8696135328739,316.6862736932841L382.1890034651635,312.3839457195837L382.81780588660826,304.13250779078885L382.9863724196252,301.9343290233878L383.4324059573996,295.9973621018189L384.03757568724785,287.6270249792841ZM505.27521823388867,419.5716811178801L505.34460342786605,419.5277776821089L505.27521823388867,419.5716811178801ZM509.27764836822655,425.900887559446L508.3082512820091,426.9032433910927L503.08937069207326,430.5504862054406L507.3750676875491,426.64707175874184ZM474.9352294645739,448.86340883295554L475.6118547149518,447.3922373064797L476.94616907823297,447.27675760316396L478.7936163224029,445.623175233022L481.98919973709843,444.4646200777659L474.7599744567019,449.2278083315439ZM471.11297901780256,453.2934826955571L471.0256982087286,453.6502389528379L471.11297901780256,453.2934826955571ZM474.2167168401295,449.5878316349397L472.2537551566678,452.29045345273386L472.5005460371815,450.8377284180784ZM465.7073909530948,471.2982783427732L465.42842872871415,466.5083185768041L465.75234629857664,464.8501252354149L465.9471554350528,464.22038059781516L466.0262478667429,462.4582591799773L467.9138998606643,458.6088227416364L468.3304845388322,458.7080986886741L466.16276837567165,464.2244513893901L465.63001896999924,467.501618438448ZM469.2715299708001,455.97045723262227L470.7771909839212,454.05011439808465L468.6857780731814,457.99265452643107ZM466.50361558568375,476.8050536879277L466.57604778371365,476.80705180399696L466.50361558568375,476.8050536879277ZM467.52522492456063,478.5474632122562L467.3818694547412,478.4181265735457L466.25169525220275,477.546408517259L466.66660534476193,476.8083002395747L466.24534470867076,475.4160536066365L466.69733716622477,475.8904715378233L466.99869081128224,476.8098469129214ZM466.69733716622477,475.8904715378233L465.8663970525241,474.4912412718531L465.5183364672601,471.47096168118617L465.7073909530948,471.2982783427732ZM467.7196703801665,480.3199329995526L467.93748621707334,480.32276511691765L467.7196703801665,480.3199329995526ZM524.5734394015631,291.0777357521365L528.5808555967567,290.98437200516946L528.8582390869958,290.97448085727444L535.43654152555,290.7790750768961L536.6476261743327,290.74250543134315L540.2582612458589,290.5969863896029L545.8904951788243,290.37998739226646L546.3382692579036,290.35670259747417L552.9927435479162,290.0580560325311L556.3000037470438,289.9379502076803L556.9296483683206,289.9187948716393L561.1032043461751,289.6986182287591L566.1765899332529,289.4138850607311L569.2727765762266,289.23939801601944L574.548543268325,288.9412938209406L575.5233682070057,288.87957909822626L576.7621074138729,290.6483565246285L577.1058697554024,292.46327604096496L575.3429119803124,294.4938012366738L572.7799338843865,298.53192142580895L574.1039349967532,298.43869013174185L579.029252986852,298.0820721747748L582.7951576008617,297.78563351647597L583.845383709976,299.5572214285777L582.3618230714426,299.62535515250875L583.0770779436045,300.97915162596985L581.3639923047372,302.51708643096015L579.4248403074489,303.02436903805165L581.003487739857,304.8755502998415L579.5438430645304,305.82731172529L580.3311821315422,306.70803351767256L578.3562891560864,306.65592197133196L578.5126366323553,309.4915936851356L578.3266490445754,309.6411618215643L578.047881277372,308.30690911320005L576.9329779141106,308.8659133633266L578.0137522069682,309.75806981375604L577.010714009672,312.2404745987242L578.236258155627,312.8001456518001L578.4360349308486,314.34288093056455L576.8766507065109,314.837901321403L576.3535481788667,316.6194850402263L574.9319323773256,317.27910700563075L576.0221468147528,318.52687796684484L575.1611307108832,319.82638200861186L573.6174666686735,320.42585085390124L572.4188355339419,319.9254805447965L573.0259990324303,322.08886149092996L571.3116028865744,322.62871940150444L572.9041670020061,323.47185575054857L571.1645565275821,324.17597845923353L571.497737514971,326.3611823749907L571.5123484516324,328.4417893557853L568.8382755039281,329.4650123162221L569.1106804053861,330.6114276759448L567.5979200312747,332.4389516541503L566.1870451268469,332.1129245652686L567.9846723319617,333.774543763004L566.0110599008851,334.2937690258649L566.023291322773,334.31640158323194L567.1307351191223,335.9364916795482L564.1129544489618,337.3618972837879L565.3288755679613,341.0579160435044L563.6351871457146,340.7602079584136L563.9315561189816,342.21608197966566L562.4082877788367,343.1190929283998L563.7847601680952,344.32782333464434L562.3257058235196,345.0087519174074L562.6055847661172,345.6035698258718L562.363294916412,347.30778980238915L563.9286512600788,346.4850468668069L563.9632290796604,349.87721707028095L564.9504273289111,352.8020822624296L563.215512837169,353.49534642371657L564.520052137163,354.42357847006576L563.8484746376556,355.28579504313063L563.8610326118957,355.422622108671L562.3426130031196,355.47993210387733L559.6580809930647,355.5921783172888L559.2844029944213,355.6131199297025L549.8184561605581,355.9927870977789L539.6111922588876,356.2647524126297L535.5119972242192,356.3417838984933L531.6207257885301,356.4498943077001L527.7013213878952,356.549507672289L527.2322928271318,356.5597996027825L522.8155988307158,356.6542950394677L522.6536562743827,356.657017518937L519.1025630255855,356.7374263893071L519.0050470685546,352.00109827913457L518.8962912052394,346.71885044760427L517.1134039297375,346.0461839299294L513.5909779234618,346.95387898832564L512.0322285657359,345.23258790143404L512.0738658429458,339.5300966593686L512.108867338889,334.8459387710317L512.1441082438104,328.8649889298857L512.1858541980545,324.6929084222621L512.2211503353269,320.83170929584014L512.3166189124837,312.4125525479012L512.3277740425124,312.10366064112384L511.63193909590643,307.56595829180003L511.2882076505488,305.2976717396888L510.3058239997843,298.8460858201315L510.1225004019882,297.7238555720255L509.2097963176881,291.37556701227345L517.2523709308684,291.24788264153176L520.3794379097478,291.18114860017465ZM701.6150623640751,300.4582215302546L703.2150681859141,300.2873231766796L709.2679390199917,299.6589208364228L709.8463612383963,299.59565703009685L714.3029595195746,299.1870022655637L714.4897081516035,301.12636546078556L716.423366912039,300.2289661648756L717.6418066524304,301.46794863841546L718.6954276086166,302.56264390571755L718.8076252746058,304.72918155546927L722.3209457525268,304.2009888036133L725.987612150532,303.6620061626543L731.8713196159833,302.81054083849676L731.9036000411672,302.8050296454379L735.5025765185034,302.2207639539189L739.4533177476127,304.8659996854525L739.6562151083748,305.00899898782984L746.3915874114168,309.9380114210679L746.4176936894528,309.95899422500827L753.9575496306727,315.36393359272233L755.3295602571643,316.34547968454115L755.5306131498926,316.7933135465987L752.1852948457301,319.5414272314605L749.8785830705626,323.2365183781237L748.3230864797438,327.22662523662007L748.2397210196829,329.6658451891184L746.60331355314,328.7964814609976L748.3341247240264,331.1752979877474L747.2750872114864,331.96922958753703L745.0746104907344,331.5325851464893L747.2114150762757,332.2482060920222L745.303646124502,334.66306286101894L743.04725443013,335.1182866945329L740.7024973940315,338.6755237862958L739.3864242725818,340.43895854077937L738.5996489400201,340.22555688396176L739.8314529291301,337.1787525581186L738.1968505286916,339.4640617567745L737.5393982048545,338.03941270239204L738.3124667702945,340.8735086973287L739.1824158444164,340.8076897433675L737.8480568078655,343.55757476643396L734.1265826321251,345.84158937930897L732.7726419621309,346.7095906683178L731.2789953522732,344.91412813959766L731.6918008931068,346.68639980213925L729.0041410020668,346.03080230658463L729.3782564090961,347.16758186703487L726.2727878646706,346.8392300777614L725.5600816897411,347.9608310547568L724.9697017533845,346.55694926256126L725.3503925607223,348.6393022676825L725.4218335341425,349.4726883487273L725.5196045636125,349.54889519791084L725.4379530801423,349.7500058935858L725.1670635233079,350.1929772709516L726.8745852656763,351.54707152481603L726.2638634676574,354.3143798375369L724.5383175105849,355.03827521911444L724.4670355865364,356.0970818649357L721.9354045641644,355.68231247702874L721.1936683203821,353.7334186849333L721.1113660681366,351.6189144532268L718.1145317986848,347.94394514367855L716.3312150891322,347.47803301406714L715.6573980464043,344.73985966506893L712.6908156566759,339.48004435626615L711.4353456002711,338.72834961514866L709.3013742745719,338.16185784954723L708.9511703550497,337.14969868084995L707.3533480753547,336.4517127514879L705.5931368342135,334.34892554859766L705.5722997125763,332.58845563563716L704.1067100896443,331.5257557787804L703.8298488932235,331.3227078769969L702.3602546230817,330.5572721471998L700.3092262805078,329.0177636413488L698.1786446694459,326.6265799291268L694.5389980570772,324.86289056010173L693.9263346038913,323.84540752713383L691.1941119414672,320.527492625042L690.476903268815,319.0947071742738L688.6752488446202,316.15273715247713L686.7222097463896,315.95655225222436L685.7474544419084,315.8679818003777L684.8512738948092,315.17812249894996L680.9301748415238,312.8458472876789L680.6409873287053,312.33352535721224L681.8855814373496,309.0961374132213L683.4761038974895,307.72370110511247L683.6038052760533,306.5239132694454L685.0286592878813,305.81606041951716L686.631427926643,305.0523082514594L688.5990642441088,304.5501005978673L691.2178789224431,302.72120028652955L694.4238838190018,301.3895825658684L696.4678527770766,300.9923605305195L700.1881792860627,300.6107756722297ZM755.6346150449282,316.5663982565584L755.7512082515356,316.6495922727114L755.6346150449282,316.5663982565584ZM755.4018344791518,316.40196797072304L755.6133399988591,316.5425956401799L755.4018344791518,316.40196797072304ZM746.8152056007881,331.9309842024127L747.2791180278139,332.1192607917285L746.8152056007881,331.9309842024127ZM727.5661670619368,351.8682386776795L728.5893379148281,352.7501820652451L726.7045350923142,355.0613515825431ZM727.996892956848,347.46379276770017L729.4864353486439,347.3757570610553L731.2904320788454,348.6389726417717L729.8187887782049,349.8907959441134L729.1829719770869,351.8340897915508L728.0920084794651,350.00922288499055ZM726.4703592413553,346.96974074347156L727.4642627912314,347.1304150661117L728.3927678761737,351.22622740944496L726.6205787356084,350.046570354579L725.6366360909996,348.2590998697741ZM608.5506065267793,316.8232513389048L606.8425749862995,315.01157228875434L610.081516253949,314.5455335032967L615.785691025681,314.0986533419783L621.5831852845749,313.65081144474414L621.7844156505141,313.63927605232334L627.466559529393,313.23514203963134L628.2468416927553,313.15843909819444L635.2699156602503,312.4731787986136L635.4000157444078,312.4608914669798L642.1368227931628,311.80959477803276L646.0472995461676,311.4547777102771L646.6335259889477,313.74537413874157L647.8655454766676,318.0890083859264L648.041708637354,318.7359983645574L648.3766153763321,319.91989820878337L649.6560319339469,324.28271569195897L650.6973611980154,328.0593442880846L651.2977354214161,330.20222186136345L651.61481768413,331.3463703224454L652.8737629451343,335.91174790349237L653.7562386388188,339.03384009828324L654.0320356652393,340.03948991617267L655.5496976289386,345.51703446709223L655.6506499063116,345.9109897278146L656.9114517610337,350.2609427558044L657.9332877482889,352.4893567002772L659.0720457833519,354.975654178745L660.5273313002392,356.65240186325434L661.2681272892987,359.07538956556004L660.8384291611058,360.06050583485194L662.8291675756194,361.0716719350879L662.3492903506884,361.72491660668584L660.4003624884032,363.8264405897103L660.6381557008672,365.09589718818415L660.600747205996,366.4467439562708L659.7514806436479,369.0706118945475L659.9116184377067,370.51582517621364L660.1638447316772,370.8225621245292L661.9785404003663,375.2483880508415L661.7647610141004,379.20707828419984L661.8630244261701,381.9053204161545L663.1974135474038,383.43795941299516L663.7745629912888,384.7851474232368L656.0758464260592,385.7268620796908L655.9224617570922,385.74692474443407L647.4098433279246,386.73586194890527L644.9926525524314,386.97410757083287L641.7954663618123,387.2989209001156L637.0353351001373,387.76829384967493L635.4801270422795,387.8738393768699L629.4776483430305,388.4071410016089L622.560629806433,389.06541783048215L622.2066144782835,391.5702090510663L624.086471213076,393.7197284734252L626.1579835546529,394.8034897628809L626.0670688099408,398.39747135327536L626.8089691208529,399.04582877682424L624.3869400107295,402.53687244894843L619.9911254031516,403.7639312739285L617.8820931647293,403.8038666893914L621.3606901745856,402.4936587930242L618.5991639249871,400.4430760724118L618.4637281876234,397.975911120158L617.6158124160073,394.80279943425853L616.2743723059014,394.35411405903085L616.2216030645384,393.93263389208346L616.4832704446284,393.54924365724446L615.3080853119108,399.02189759713053L615.4419090641263,401.32446004417955L610.7967432997023,401.52652738965526L610.0119467487777,395.045757435346L609.414032112726,390.1577652207111L609.1383571857311,387.99923761811317L608.3808229516228,382.0153728223024L607.7587469717665,377.1350844376901L607.3207100699716,373.48150213295537L607.488734153119,367.1842883766012L607.5194373742854,365.6563526722148L607.6258095620074,360.5712169741754L607.7337984725399,353.94867469406074L607.7568174195088,352.77513157638157L607.8620251562031,347.1639494693378L607.9474629938024,342.5229854498799L608.022343364766,338.5352454956105L608.1791218844719,332.60574448197667L608.1905664966613,332.0723448194751L608.2887246010253,327.63554147913953L608.3309179929919,324.94746700952896L608.397878156097,322.70241434468585ZM625.036499889628,402.3386751162062L625.0290675155645,402.25560912678L625.036499889628,402.3386751162062ZM680.9301748415238,312.8458472876789L684.8512738948092,315.17812249894996L685.7474544419084,315.8679818003777L686.7222097463896,315.95655225222436L688.6752488446202,316.15273715247713L690.476903268815,319.0947071742738L691.1941119414672,320.527492625042L693.9263346038913,323.84540752713383L694.5389980570772,324.86289056010173L698.1786446694459,326.6265799291268L700.3092262805078,329.0177636413488L702.3602546230817,330.5572721471998L703.8298488932235,331.3227078769969L704.1067100896443,331.5257557787804L705.5722997125763,332.58845563563716L705.5931368342135,334.34892554859766L707.3533480753547,336.4517127514879L708.9511703550497,337.14969868084995L709.3013742745719,338.16185784954723L711.4353456002711,338.72834961514866L712.6908156566759,339.48004435626615L715.6573980464043,344.73985966506893L716.3312150891322,347.47803301406714L718.1145317986848,347.94394514367855L721.1113660681366,351.6189144532268L721.1936683203821,353.7334186849333L721.9354045641644,355.68231247702874L723.2138392416823,356.2056452173829L724.0079578218104,358.32079638486323L725.3857004460715,359.0870255099111L724.6532145087568,360.1774550955357L721.9792929826874,359.1551465186351L720.8013039104096,360.15939645186074L722.3004038619681,360.64711282516316L722.3864689244454,363.01634459351135L719.6714212835062,361.88715085002684L721.3846788264156,363.04009279215916L721.7757414129727,364.06789122406065L719.6203229269636,364.8458783950233L721.7131899118513,365.0260054783837L722.2498270519038,365.9155427218765L720.2425435787445,366.77568021795946L720.6958646923354,370.20896357140884L721.610676076432,370.819466864173L718.5765174836899,370.98321202734985L718.6068845232155,371.0304881269334L719.0838003272547,371.091423446657L720.0877454082906,371.7959790864338L719.2432622721869,373.9605900334709L720.0435135006009,376.4837003381284L718.0821968984551,375.9688017124429L720.1934115657218,378.16792267039943L719.9094153600977,382.35597946175756L718.2813735870136,382.81188267474556L713.2514601386813,381.47095921175196L711.3749868242872,383.1420598031393L711.4372315835841,385.01657282961276L712.3890930471796,386.61165595067484L712.2333724749424,390.4410984192874L710.3291849294613,390.7853749058286L709.5694306470319,389.8585017603872L709.0539504422568,387.00805785884734L705.775890759934,387.2323558545221L705.1196302127937,387.2799074895887L703.1283291179402,387.4260796563532L701.4423480989043,387.5499635450868L694.2653863170915,388.0460972927914L691.4964334119553,388.22375227097814L690.9897829457686,388.2551992650632L690.7307554467095,388.27162208928496L686.6527565677856,388.54803379734744L684.5360873875902,388.6871103339663L680.3105967501763,388.9725955039736L679.0922998813644,389.0567072803692L675.9092399769272,389.2771694898544L674.3346127907727,389.3812844436534L666.6090616810319,389.9033923919127L666.5919347234319,389.9054083318732L663.7745629912888,384.7851474232368L663.1974135474038,383.43795941299516L661.8630244261701,381.9053204161545L661.7647610141004,379.20707828419984L661.9785404003663,375.2483880508415L660.1638447316772,370.8225621245292L659.9116184377067,370.51582517621364L659.7514806436479,369.0706118945475L660.600747205996,366.4467439562708L660.6381557008672,365.09589718818415L660.4003624884032,363.8264405897103L662.3492903506884,361.72491660668584L662.8291675756194,361.0716719350879L660.8384291611058,360.06050583485194L661.2681272892987,359.07538956556004L660.5273313002392,356.65240186325434L659.0720457833519,354.975654178745L657.9332877482889,352.4893567002772L656.9114517610337,350.2609427558044L655.6506499063116,345.9109897278146L655.5496976289386,345.51703446709223L654.0320356652393,340.03948991617267L653.7562386388188,339.03384009828324L652.8737629451343,335.91174790349237L651.61481768413,331.3463703224454L651.2977354214161,330.20222186136345L650.6973611980154,328.0593442880846L649.6560319339469,324.28271569195897L648.3766153763321,319.91989820878337L648.041708637354,318.7359983645574L647.8655454766676,318.0890083859264L646.6335259889477,313.74537413874157L646.0472995461676,311.4547777102771L648.0261487245183,311.2666388791388L649.6760294471617,311.07609638926647L651.1658106487893,310.8753239676438L655.4661226654407,310.33111255125016L657.9917419736385,310.035712083005L658.5372776904961,309.96599825013607L660.8612613565778,309.68122160162386L665.3740591099606,309.12808758238566L668.2560149850891,308.7855534232425L670.142145782511,308.55362991246886L671.1730681154609,308.4163337062382L676.9871967320934,307.5674814737947L677.9893266745022,307.4208036137986L683.5988215902553,306.527656699321L683.6038052760533,306.5239132694454L683.4761038974895,307.72370110511247L681.8855814373496,309.0961374132213L680.6409873287053,312.33352535721224ZM722.6155421550047,360.6443408649102L724.0624747231341,361.04683964894787L722.8778456007092,363.03479074931863L721.9106069567506,361.41540183083ZM723.8010963432296,356.3358769733562L725.257981219223,357.24876955006346L724.232833279247,358.4013683680207ZM722.9510369559057,363.5352486699769L722.6084358959138,366.2191123064024L722.07822479874,364.23659346771876ZM720.9076699219521,371.2367159867438L721.0176523284102,371.2012641486383L721.8393221315387,372.8032076526249L720.4911921156906,374.58655886496297L719.6786355829992,373.4096276833951L720.0611987041301,371.2519971352107ZM722.3638722120266,366.64190509240666L721.5795476141511,369.7696221224446L720.5063159077522,368.0637379007393ZM720.7873017661063,378.3326841226527L720.2051573349102,382.1995720156583L719.3261081804233,379.54331884414864ZM597.4262562026283,315.7621306696394L597.9745764849174,315.7205405789563L604.1130060801066,315.2334727398784L604.3791705063921,315.2151094641408L606.8425749862995,315.01157228875434L608.5506065267793,316.8232513389048L608.397878156097,322.70241434468585L608.3309179929919,324.94746700952896L608.2887246010253,327.63554147913953L608.1905664966613,332.0723448194751L608.1791218844719,332.60574448197667L608.022343364766,338.5352454956105L607.9474629938024,342.5229854498799L607.8620251562031,347.1639494693378L607.7568174195088,352.77513157638157L607.7337984725399,353.94867469406074L607.6258095620074,360.5712169741754L607.5194373742854,365.6563526722148L607.488734153119,367.1842883766012L607.3207100699716,373.48150213295537L607.7587469717665,377.1350844376901L608.3808229516228,382.0153728223024L609.1383571857311,387.99923761811317L609.414032112726,390.1577652207111L610.0119467487777,395.045757435346L610.7967432997023,401.52652738965526L609.5577111685161,402.9126970717575L608.4327951637914,401.7222775644343L605.1721158272874,402.6816396365052L602.9269041464744,401.3881989073334L596.5718600469962,404.1738356760957L595.668034125008,402.93091230815526L595.9554352130802,404.2203229417016L592.9843152370199,406.7586405933678L591.4107573460632,405.95296863993156L589.9572643365042,401.6992243113599L587.7949881992433,399.46497506264313L587.2665842298247,397.98993857864775L588.6769826952205,391.59531701099706L586.9626334912795,391.7126781516681L580.2128801170442,392.1621626216016L578.8180675251625,392.2509031371511L575.6222846384221,392.44990937449336L575.3134784958113,392.4676118312834L571.1903876664821,392.7049713828502L567.4614049991814,392.91162743337793L565.607802378195,393.00389711509774L558.26700439097,393.35290743295593L559.3696307717387,392.03761667287085L558.3374185113561,391.1465444054902L558.8556363995681,389.72912081884374L557.7661462049246,388.67190327850324L559.9546140126826,388.0451235942023L558.8460175976315,385.7133413296174L560.0487505466267,386.4118821408325L559.7978933018221,383.2783404774392L561.337565693556,382.6017766696224L559.9594579244616,381.16012742937903L561.4575852757766,381.55222966020483L561.6999739675332,379.3992044803932L562.660791325343,379.06162975461496L562.1323163885551,377.32113815892944L563.6478209572882,376.7577511138919L564.5003562127313,374.9953289654426L566.2213770314094,373.8655499548155L566.8373964319986,372.0003365538563L566.825696455253,371.884853487609L566.4723373483567,371.83364574532163L564.6913001432291,371.73255478573697L565.2775377362758,370.26397280510946L567.1645914194678,369.9407158448861L568.4672534566818,367.68224098110534L567.0054761808783,367.3457806217915L567.302323422047,365.7070596216429L565.5768771397009,365.673043777971L565.7696498445039,363.63577334734725L566.1822650653306,363.3506305606262L564.450613248254,362.1479337046611L565.821924120587,360.6415161010858L564.5378871509542,360.45013965856606L564.4081775602858,358.57324043165556L565.393604645705,357.57856755356465L564.9492090444809,355.6983691511872L563.7869566500813,357.3780532835889L563.8610326118957,355.422622108671L563.8484746376556,355.28579504313063L564.520052137163,354.42357847006576L563.215512837169,353.49534642371657L564.9504273289111,352.8020822624296L563.9632290796604,349.87721707028095L563.9286512600788,346.4850468668069L562.363294916412,347.30778980238915L562.6055847661172,345.6035698258718L562.3257058235196,345.0087519174074L563.7847601680952,344.32782333464434L562.4082877788367,343.1190929283998L563.9315561189816,342.21608197966566L563.6351871457146,340.7602079584136L565.3288755679613,341.0579160435044L564.1129544489618,337.3618972837879L567.1307351191223,335.9364916795482L566.023291322773,334.31640158323194L566.0110599008851,334.2937690258649L567.9846723319617,333.774543763004L566.1870451268469,332.1129245652686L567.5979200312747,332.4389516541503L569.1106804053861,330.6114276759448L568.8382755039281,329.4650123162221L571.5123484516324,328.4417893557853L571.497737514971,326.3611823749907L571.1645565275821,324.17597845923353L572.9041670020061,323.47185575054857L571.3116028865744,322.62871940150444L573.0259990324303,322.08886149092996L572.4188355339419,319.9254805447965L573.6174666686735,320.42585085390124L575.1611307108832,319.82638200861186L576.0221468147528,318.52687796684484L574.9319323773256,317.27910700563075L583.7844724850883,316.73730386042325L584.9953166777493,316.6476003919586L589.4131831510961,316.3712891097706L591.7476370242941,316.1936742423701L594.4838879756937,315.98678924126193ZM519.43211174482,372.19522931974177L519.3449778419833,368.5114595238442L519.2287101204008,362.8643624250333L519.155983152965,359.3320299666092L519.1025630255855,356.7374263893071L522.6536562743827,356.657017518937L522.8155988307158,356.6542950394677L527.2322928271318,356.5597996027825L527.7013213878952,356.549507672289L531.6207257885301,356.4498943077001L535.5119972242192,356.3417838984933L539.6111922588876,356.2647524126297L549.8184561605581,355.9927870977789L559.2844029944213,355.6131199297025L559.6580809930647,355.5921783172888L562.3426130031196,355.47993210387733L563.8610326118957,355.422622108671L563.7869566500813,357.3780532835889L564.9492090444809,355.6983691511872L565.393604645705,357.57856755356465L564.4081775602858,358.57324043165556L564.5378871509542,360.45013965856606L565.821924120587,360.6415161010858L564.450613248254,362.1479337046611L566.1822650653306,363.3506305606262L565.7696498445039,363.63577334734725L565.5768771397009,365.673043777971L567.302323422047,365.7070596216429L567.0054761808783,367.3457806217915L568.4672534566818,367.68224098110534L567.1645914194678,369.9407158448861L565.2775377362758,370.26397280510946L564.6913001432291,371.73255478573697L566.4723373483567,371.83364574532163L566.825696455253,371.884853487609L566.8373964319986,372.0003365538563L566.2213770314094,373.8655499548155L564.5003562127313,374.9953289654426L563.6478209572882,376.7577511138919L562.1323163885551,377.32113815892944L562.660791325343,379.06162975461496L561.6999739675332,379.3992044803932L561.4575852757766,381.55222966020483L559.9594579244616,381.16012742937903L561.337565693556,382.6017766696224L559.7978933018221,383.2783404774392L560.0487505466267,386.4118821408325L558.8460175976315,385.7133413296174L559.9546140126826,388.0451235942023L557.7661462049246,388.67190327850324L558.8556363995681,389.72912081884374L558.3374185113561,391.1465444054902L559.3696307717387,392.03761667287085L558.26700439097,393.35290743295593L565.607802378195,393.00389711509774L567.4614049991814,392.91162743337793L571.1903876664821,392.7049713828502L575.3134784958113,392.4676118312834L575.6222846384221,392.44990937449336L578.8180675251625,392.2509031371511L580.2128801170442,392.1621626216016L586.9626334912795,391.7126781516681L588.6769826952205,391.59531701099706L587.2665842298247,397.98993857864775L587.7949881992433,399.46497506264313L589.9572643365042,401.6992243113599L591.4107573460632,405.95296863993156L592.9843152370199,406.7586405933678L591.3802924432075,407.31127537006773L589.8261749093565,409.1603733371784L587.7927976248237,410.39938878491955L588.9147456907351,411.6506597510735L589.9654789396785,411.0925514967315L590.4350355505187,412.6492923241392L592.0486556357293,412.5816652235726L592.3244735902598,410.2917090880891L594.3949258021274,408.87579047678537L594.9056381288405,411.13249990232885L595.2899453077484,411.8073210455444L596.5993710864844,412.30247775640703L595.2032451969524,413.2413347964209L596.2995933741984,413.8400493002447L594.3129941670486,413.59365353934015L594.8057425013993,414.65434068308195L591.4458714433299,414.88276052426374L593.2875207352278,416.5891913655877L593.0981054597687,416.4642696831112L593.000162241803,416.4829854965935L591.7446884102155,416.73256397239345L591.6896377406013,417.21797062550013L590.2282375590876,417.6308523201991L591.5317941338507,419.4014358170373L593.7198662724682,420.4512632222852L593.1260592111379,421.2736855713106L596.2304370555986,421.29161315740305L598.5356783600394,422.82515567269024L599.2985221347668,421.93429467439205L601.3155544543674,424.8453946361785L601.1386482191158,426.5325142091118L599.7322154543732,427.8215962234556L598.6902924096595,427.3132481141947L596.2435405726799,429.9267460444172L598.4415400502761,425.9614532438744L597.5311944847264,424.4621737342069L595.4237049196925,425.2140248028809L594.4613009329879,422.6472509123349L592.6083927754707,421.5840589380597L589.6344882064529,421.85383261519974L589.2451751445365,421.2701990129615L588.2757961752424,420.758184034971L586.531649715682,420.6497213791864L584.0274940473429,419.1180800840857L584.0967184083709,417.21986007614L583.094935260343,416.6774183901583L583.4082976320046,418.7381312271449L582.4208044951735,419.7845323683547L585.4419117851239,421.27121547481704L585.4895979150849,423.2457129468588L585.0050674693881,423.7421601323716L585.4280123009065,425.4455417351627L585.0655888286788,426.21942847770833L583.0052982276334,427.84955268268925L582.2254406299916,426.8997859839526L580.53425328124,423.8265282028075L579.7852913622464,425.5310336115457L579.7699679266409,425.2708310227772L579.763838416053,425.1667476720255L579.8327688774217,424.84432333663244L579.8978413738033,424.75511818107645L576.7834930022157,423.99067290494236L576.9813999206369,425.3029915474448L576.5294685918202,425.9121207353628L576.0542031997098,425.6990530635338L574.9809227887476,427.480067963147L572.9041899956787,427.49399995726856L571.1329500407525,427.0693493856446L573.2538115044151,425.6237349100219L571.2761618798737,424.918334666532L570.7272827030513,423.84805580314617L569.3544140133384,426.70731993248614L567.9436490931697,425.95206479719207L567.9310418664282,423.99197597349314L565.7352738358804,422.09575385443463L566.3187972002316,419.4077791008734L564.7867007265786,421.3504460175035L563.2294821480291,420.1941477979494L560.9528802512783,420.9342652685883L560.814002244103,418.8415866694463L559.6250680259365,418.98017922023337L559.4041925449719,416.8395044366198L555.7936353977071,417.0906730734372L556.1837705591805,415.36760090587063L553.8464098490243,415.3830880466003L553.6798995050801,416.12156864165706L550.794004803421,417.9906789294756L551.8413168782741,417.96312812738654L551.7833802599955,419.53525121346377L548.7590211915293,421.2204479128859L543.5699190338548,420.52336803775256L538.1659037105151,418.39617482843323L534.3886193611947,417.2638599741987L529.3906789520377,417.4373671223609L525.2084332479187,418.16881944144984L523.6971315623159,419.00702879465246L522.191510543913,416.97147597424373L523.3740608441991,415.7855047907923L525.4447257946154,412.2490525514022L525.554864413203,408.64215930233183L524.5980620784778,406.80951966744703L524.9644427713608,405.6990952200215L525.6493703967187,404.9045034776817L524.93747390049,403.1096700869681L526.6068258139817,400.4983169384377L527.6820484248918,396.89545505230353L528.3949291542592,393.87674672559774L527.626782862174,390.96206242853907L526.8656596476268,391.1566687796728L525.4769839591941,388.83586481487987L524.8792412051305,384.86669909235684L522.9594266466055,383.5626401654174L523.5457582010386,381.37671882546965L522.152166301288,378.73968416782475L519.9399510086631,376.24215325336377ZM594.0264454997125,416.8958156299643L593.9597164758658,416.85914692161134L593.6557190300767,416.5962916233183ZM593.4234914094498,416.4431498910875L593.6557190300767,416.5962916233183L593.4234914094498,416.4431498910875ZM594.0264454997125,416.8958156299643L593.4234914094498,416.4431498910875L594.0264454997125,416.8958156299643ZM555.2613176245738,419.0544450793577L558.2792392240725,420.4255677789055L556.1671625686821,421.9041446254839L553.1602698474373,420.39107193742257ZM579.7968425530211,425.72718086078476L579.8047396361063,425.8612788212804L579.7968425530211,425.72718086078476ZM590.9256581528729,421.9004962874433L591.6598066385977,423.1632137651071L589.3287899568676,423.1822012296161ZM566.1798277943446,423.50043857191474L567.4587875400316,424.3725564988904L566.9319240429727,426.22539572502274L565.065380661263,424.74465921784144ZM674.3346127907727,389.3812844436534L675.9092399769272,389.2771694898544L679.0922998813644,389.0567072803692L680.3105967501763,388.9725955039736L684.5360873875902,388.6871103339663L686.6527565677856,388.54803379734744L690.7307554467095,388.27162208928496L690.9897829457686,388.2551992650632L691.4964334119553,388.22375227097814L694.2653863170915,388.0460972927914L701.4423480989043,387.5499635450868L703.1283291179402,387.4260796563532L705.1196302127937,387.2799074895887L705.775890759934,387.2323558545221L709.0539504422568,387.00805785884734L709.5694306470319,389.8585017603872L710.3291849294613,390.7853749058286L712.2333724749424,390.4410984192874L712.3890930471796,386.61165595067484L711.4372315835841,385.01657282961276L711.3749868242872,383.1420598031393L713.2514601386813,381.47095921175196L718.2813735870136,382.81188267474556L721.158005535365,382.68348681044824L721.4912257827257,386.1226213615113L720.466992702669,385.3385465338415L718.8041709884565,385.7031904894386L721.1136139441778,386.0557677438809L721.5478332002416,388.001560268254L718.8259680720532,388.8285973109197L719.0478311194486,390.246418093575L717.678685251595,391.4289915137248L718.4170415906907,392.75090826650376L717.4264259529399,394.2896022091668L718.6315810032768,394.08796480156855L718.501818998141,395.5897593620549L720.3233839475608,396.7694478798727L720.7701721482324,399.0432948620719L721.7511721504721,400.1524863568561L720.4943064255899,402.17481076165336L720.471462382603,406.64424388862005L721.0835565211474,407.8355640181186L721.777222983387,409.5192267751213L723.414143652823,410.89495511962923L723.5289181213784,408.8244870022452L722.66776200252,408.02922703562126L720.7468667093639,406.7079564342413L720.2909915602419,403.8996370882154L721.6393621628183,403.2325068772136L720.8629017668906,401.6568114647574L722.2897330502544,400.3268214114863L720.9042241436593,398.07429152078146L721.2532218426322,396.55620038369693L719.1532374749422,395.1699431084156L720.2259649529483,393.7121207955596L719.1464110122854,393.7760897058164L719.3803855114703,391.8148343065427L718.6006685466865,391.0330593006929L719.1559534371726,388.88706506947597L721.9397778883701,389.1033940600164L722.400300917662,390.9874817426156L725.3946900494616,397.0612761097908L725.4526054289337,398.14960086948395L727.4486535714187,401.20427012560526L727.3681300099156,401.21689276713505L727.0330587347443,401.48571548545283L729.9302502662475,405.42141150126054L730.5651545740194,406.78107666892754L736.9698592436876,416.3099405999154L739.7476502803812,418.3192934084867L737.7538419693376,416.182159149055L737.8641975499082,416.16428215197277L741.0156387618977,419.4987751490173L742.2508100525413,421.7779921217066L741.4123470330231,422.7631638127617L740.8463320601339,419.7425314029441L739.7546856769108,423.617373832123L739.3182842603286,423.5858424971699L738.6447494704188,419.83843022778024L737.5351165183918,419.40447047936937L738.1843745450478,417.7720447437978L736.1971111089917,416.43347530171013L735.9707097123393,416.4709049017962L737.5608607192746,420.71137083388135L740.87540205547,426.96783882173975L744.5602802324622,432.5696845361878L744.5255834182385,433.1282757406029L747.064251191709,436.0316664374783L747.7191095331049,437.8269006381079L750.6417722919803,442.88105419323483L749.8808088185384,443.5989096486957L749.9422091775293,444.00329118246947L752.4161898160892,445.15713573466246L753.9685959307617,447.824464555894L753.5948104411136,447.8855752898415L753.5412928942145,447.8935960474612L753.3216236594243,447.9286261918855L753.1912043089536,447.9506092676454L754.3026904408687,448.2855598951912L755.8373213151121,455.25595948636465L756.1610460899311,459.6690763996859L756.4913881103296,466.1073223571352L756.6322719748455,467.491564237928L755.9791773295644,470.25516153973587L754.5464801311425,472.968847967354L754.3173751976979,475.9464860267268L755.1085621410093,477.68079772119006L753.5257957279241,480.4591464690182L753.428818201359,480.4741690773084L752.5969406459515,481.04658405267105L752.6275068821685,481.1189340879121L751.3263963606671,480.7287108837509L749.2111305456637,482.5477234189094L746.471636176286,482.7160667576035L745.8640334785218,483.50139127895073L742.8274450742235,484.4245851362878L741.0445228179049,482.7334814746168L741.3140452601187,480.42584640544266L742.6821437413354,481.858542708146L744.6263431145053,482.52448484050484L745.4877411125084,481.4628495349875L743.7219217482724,479.96594947918953L741.5878228358656,480.1566747608513L739.58510323059,477.6260562354054L737.9257608414683,474.4499877621838L739.2438214084848,473.640418615666L737.8452011917437,472.9858390988052L737.5589787109477,474.3946466441732L736.4908575245433,472.5675349288599L733.4329999068041,471.16306118207586L732.090258921347,471.56281590538106L729.4255319473324,470.02266484601L728.0087069668195,468.41160609092685L726.6287080204576,464.20745856438367L725.87480154707,461.8318802854996L722.8609800436727,461.0466582756437L721.7149586251248,458.4115999472823L721.8662728906118,456.6704606211565L720.8563158994461,454.1563346028734L722.5143581991144,452.8712655828128L720.3249941017813,453.1898076407345L719.8822054998051,454.06483722363316L717.9815234993317,452.8255496723528L718.0001999187846,452.95379338042954L719.3389102579988,453.9248601256503L720.3095087752022,456.39619062852626L717.6324482251918,455.8595164850405L716.5109252934058,454.1610297759541L714.702529707257,452.31354430905213L711.8278472168109,446.5204217340447L709.5549821402342,445.1831145276101L710.8720768725966,444.25583601361996L711.3812693349964,441.77313545049094L713.6744743478217,438.16092778382387L711.682143439051,436.5917648849414L712.2236591281061,438.31702203556097L711.1490942891443,438.15978522746343L711.0073640381431,436.3661569873673L708.8276695470261,435.13121836858136L707.8775057371851,436.81763874948217L710.0776105547452,437.85204013533183L709.8143003203779,440.8739146632298L708.0005873351295,440.25906251819185L705.9461517049065,438.46323834589214L706.4908891764852,436.000845484876L706.1890214487976,432.6007264422292L707.3647756505875,427.5292261128684L707.3150527650052,422.6252964259852L706.3485259264705,422.05700952283655L705.8531336047572,418.7960822125775L704.5573437408923,417.2988193051972L704.5379907790698,417.32986394665215L704.4373666830012,416.147955350766L702.86255845608,414.57900382459L699.1431034763216,414.6639971383903L698.0156331669459,412.0334259266682L696.9556632040163,412.09171150343275L695.6710042117313,410.31150962826837L692.695848385097,408.6724558847858L692.5898302449898,406.24707922406355L690.1642357789722,405.6213628508589L688.1436261460674,402.86983956359063L685.561166412944,401.23735697816915L681.9162447277064,399.651085017729L680.5633587986415,399.7554984085117L676.0800224823491,400.97402788515285L676.339039319848,402.69867103916215L674.864145171173,402.8238762679657L676.5622710955827,403.9418262385444L673.657050872303,404.14509768654875L668.1087560609147,408.11762933234434L665.673118281541,407.5657509397613L665.6709199467298,407.59732891269005L666.6906166307575,408.6642137166973L663.1273631242831,409.4643818832534L661.6230943215238,409.73298389368745L661.5719398792774,407.67422676028025L659.8914109104265,405.4670914481284L654.6978940831243,402.3815302162973L655.7301873112033,402.18081349533895L657.7475933993142,403.6691378694709L659.6341538565445,403.536663421473L659.62050622208,403.41490384443637L658.1452053127138,403.62602443906076L657.311261362355,402.04506130347477L656.1793901911666,402.29318456369504L653.8236483830158,401.24784839041047L653.907138729007,402.39370652867035L649.449082978575,400.149958524514L642.8202429065719,398.7701688608514L642.7898966501037,398.41362775980656L647.482168836993,398.0659921990491L644.8537299551492,396.5398256928188L642.7188841240983,397.37017932851427L641.6590425073136,396.40031610125516L639.5108524251,398.6788722831759L636.3381674902993,398.90244347642306L630.39202661943,400.51482393654305L634.0319496793247,398.24318681129637L632.6433128557887,397.4040235688151L631.9623450959707,398.5315632557166L630.298089745017,396.21393873381805L630.0154231119137,396.90467099964553L630.3066374830275,398.9754196836635L628.9531587395102,400.7570896166035L625.889318627532,401.69311652019894L626.3486292939481,399.91006341124125L627.63937957334,399.26084798047157L626.0670688099408,398.39747135327536L626.1579835546529,394.8034897628809L624.086471213076,393.7197284734252L622.2066144782835,391.5702090510663L622.560629806433,389.06541783048215L629.4776483430305,388.4071410016089L635.4801270422795,387.8738393768699L637.0353351001373,387.76829384967493L641.7954663618123,387.2989209001156L644.9926525524314,386.97410757083287L647.4098433279246,386.73586194890527L655.9224617570922,385.74692474443407L656.0758464260592,385.7268620796908L663.7745629912888,384.7851474232368L666.5919347234319,389.9054083318732L666.6090616810319,389.9033923919127ZM625.036499889628,402.3386751162062L625.0290675155645,402.25560912678L625.036499889628,402.3386751162062ZM636.3559051071127,399.26423233061155L634.4708235781336,399.7398833936245L634.4645922448029,399.67485766246295L636.351644876732,399.16064287151823ZM722.428712820669,390.98207500246554L722.0071136157056,388.32930091388937L723.1979436733702,390.84979149781213L725.3067799743158,396.2711804004631ZM729.9590881477524,405.4168555245237L727.4772563712911,401.19876961932914L727.5520273820985,401.1870433788424L730.0395206091334,405.4021145596612ZM664.8102019058567,409.374749392381L665.1941530641134,410.36792833356697L663.084775556727,409.7591104620949ZM705.1699001792939,432.7601661753566L705.2225995360102,432.7518161460294L705.1699001792939,432.7601661753566ZM748.1134010245892,437.75933359127333L748.295652253094,437.7269791586889L748.1134010245892,437.75933359127333ZM710.5763896372621,446.6858927259702L710.6416868801723,446.67766090182556L710.5763896372621,446.6858927259702ZM751.0197787933046,442.8167057914773L751.1853889714673,442.7899389425251L751.0197787933046,442.8167057914773ZM716.1834373753176,454.2073347672531L716.2249576065482,454.200333118259L716.1834373753176,454.2073347672531ZM754.034465265589,447.81737352255055L754.0581759978832,447.81336466755204L754.034465265589,447.81737352255055ZM718.2796940675147,456.8377684184685L718.3451297356617,456.82724255647224L718.2796940675147,456.8377684184685ZM720.4193752892485,458.0997938049755L722.6365743216911,461.67760711020236L722.0546340762273,461.9164289626918ZM734.9798906968192,472.8046790793209L735.0580253939916,472.79160263206734L734.9798906968192,472.8046790793209ZM755.9356775550734,477.94915599478526L754.2278387474128,482.67256813801197L752.3575429783009,485.00490966127074L754.9228788637593,480.82268586766554ZM313.30573978076234,453.31886282913206L315.02346687229493,453.5906604433786L318.57889597266455,453.9428266261519L315.71040409680666,455.83789580302863L312.4056511677678,454.8315584747387L308.0692173839066,454.81742348936297L309.0847687308886,452.54543799563737ZM333.7483163200626,470.2601204065164L338.41176799169347,472.99675711118425L340.70171509751526,473.37316657896605L343.80207796920524,474.8342455026993L347.3283805803386,478.00461750687384L347.1857885904674,480.0903290228087L348.72370213059384,480.06558236598534L349.09184881450216,481.8007795631292L352.220293557271,484.05966358210884L349.2493811787,487.30503678060427L346.5334764270569,488.70084409856696L343.67474560026153,488.9060018239489L339.8462414862629,491.4285337057377L337.30308768597337,495.3058985747404L333.31191043297963,493.1980464239982L332.64538623332334,491.6970174229411L333.19808775469346,487.4725725156454L331.32542350293886,482.0389399330663L330.0717131464338,480.3276435600574L332.23969643945367,478.05557852612424L334.23616305518567,474.7135402197722L333.03998302272555,472.9453322584707L332.89861630365766,470.9350479394313ZM271.69820306425635,433.7700116585074L273.13795059995715,434.5901369022052L272.7871793838982,438.70039760778474L270.78908844019213,440.3972912378326L267.46034885368863,439.511852794626L265.3405261222059,438.30610593823394L264.9191638882266,436.68591665625013L265.9888315593236,435.1398660650789L268.44627959519795,433.81585427545014ZM259.67594352555426,437.9073199560896L259.81126710392465,439.69200970889074L258.3413735402588,440.3534472506747L257.5309447442187,441.93807618788514L257.0785242316248,439.989538995382ZM313.81568324505054,458.0417717234015L315.365194199176,458.33356900279784L316.9035630573025,460.28740634501827L316.3810869233355,461.1456225713116L314.17522214452526,461.6782065052667L312.54335024180745,458.3607684864962ZM321.0815373072781,464.077554427532L321.3675163467895,465.3206079682733L319.153964267719,465.92281866316733L319.2032191560573,464.958568929236ZM320.5015282070282,456.12008762435863L322.65337307316054,458.5879073428328L325.40369826573345,457.6830232242407L327.0610899133997,458.0303097832907L329.09577631506147,459.93349340298937L331.0577255796701,460.5257213648565L331.2907431153307,462.0790544518829L330.27329093355195,463.1006839990788L325.78740395184474,464.4304277945861L323.32665348497756,464.0243133627381L322.97301545984885,460.812376175387L320.08569380480486,460.2020869242613L319.0065415370312,458.88105588332496L319.375224779605,456.5932398880839ZM296.3620084552338,443.4994323040764L298.9122595018343,446.9234309753191L298.7951792737337,448.13676047506544L300.14011059122527,448.12007038483813L302.11201256513004,451.1452961792747L299.5752535104665,451.92016892959424L297.8693794201146,450.5019290353676L294.2257529766938,451.1900037226579L291.1451205332214,445.97746440490573L293.88455721726183,445.821099014533ZM50.077243283279785,487.41330169110483L51.01540891256562,488.2623256843817L51.01299508433435,488.6056218632315L51.61725096839113,489.8659740052779L50.9444059092549,489.1186862841835L50.70678785973769,488.3668620210369L49.766346018567276,487.2985048498897ZM59.93622860192778,490.1287233270506L59.86280086428599,490.7162399750909L59.55988998612558,490.36523229223667ZM69.60737613753078,493.5193694549129L69.3126649271767,494.25811202816357L68.88239096590078,494.1346266856143L69.03314023243007,493.40985627994354ZM70.02005479469237,493.52941246013205L70.52861702698934,493.974686553598L70.17535987900987,494.2119534613662L69.74561804662156,493.9199699329689ZM70.81991232447584,493.60686764260674L70.78790720481126,494.04944864223756L70.29233169070324,493.6015659588245ZM62.838032589468014,490.67106556779993L63.316039747754616,490.862426965999L63.32695468235917,491.29138941157044L64.27876996786976,491.9199348594619L63.562559069621,491.8661117044819L63.208855812719634,492.45963106987574L62.52830776538738,492.5103470946651L62.27927756534859,491.93315958525665L63.01707639956561,491.80764433346064L62.22355008740861,490.86590149396113ZM65.72863182951548,493.19955012118294L65.40568831922302,493.30398216220357L65.07752804518456,492.79764912055714L63.85991856480912,492.4884388471918L65.54293128191547,492.63949446930525L65.97917628786203,492.5247552893248L66.2330399342445,491.89599693559046L66.75848892992359,492.2729099808817L66.30302190508239,492.55111188738243L66.12178441037524,493.14446499966556ZM50.15527417533768,484.9999264595857L50.458851469076805,485.4322902720505L50.01423220085384,485.5626583283101ZM68.7665289852412,492.2635585548322L68.22942137903746,493.24446735620245L68.99399605575196,493.49495613239645L68.6090253132541,494.09745883689624L67.67415748440366,494.0231204405703L67.20152668794525,494.26838401916973L67.19655425060328,493.63062424817366L66.52804657044196,494.29776115227025L66.4638331755358,493.8363635307661L67.13035847440918,493.4689132494332L67.07592500459245,493.0115168193057L67.82244498156187,493.4101554738113L67.7217496631482,492.41813175356214ZM54.595973232896114,486.63306643605836L54.911856081530004,487.13432331982136L54.221909010682964,487.5521131517773L53.802411169098164,487.2129453421106L53.872514576798636,486.6351174637385ZM70.7004448644991,492.18697421735766L71.0985378004646,492.6360053936941L70.76189511651737,492.94542135358427L70.26073019079156,492.81379468394886ZM47.34623175721727,482.7090295967092L47.354310999391814,483.159631761955L46.727704182224755,483.48541616280477L46.536634983312766,483.91435355279975L45.78177369914475,483.602878871311L45.41327142662341,484.0165557709276L45.18892786060131,483.42576187046944L46.05374889500065,483.22384514419923L46.46347783723404,483.3649739053201ZM80.80589445125239,495.1934752353757L80.61890676268723,495.3716358642177L81.32361445945907,495.8027966202402L82.06003468994068,495.8617672643097L82.86435608329383,496.2001729259443L80.8728792456403,495.9179269901844L80.00096355704714,495.4823785505999L79.3894397793795,495.51890643382495L78.79747942808997,494.9272148881554L79.35214599204451,494.82393018070826L79.61349907926949,495.1699388965217ZM85.43825904659525,494.96060481932903L85.8256525767987,495.45580190462465L85.30062717258289,495.664797411704L84.50582907770583,495.6013228878578L84.79782961685586,495.0341502904026ZM78.91266713863361,492.7997553571312L79.32911789679315,493.6147645627441L78.86492763887901,494.0975247715028L78.2838741980984,494.122007518475L78.5802536828662,494.59783793171795L77.325797334005,494.5101935218274L75.8365941071338,494.6265990888495L75.33558581434093,494.21999708833005L73.96875307740547,494.0216272398529L75.5943352837476,493.8925543747938L76.52390641499969,494.1418484549434L77.71423550700825,494.0118174925918L78.28638437547434,493.6036133078352L77.89323264077694,493.1877785334656L78.40446815783733,492.7490162160177ZM34.521218180491644,473.6529190607688L33.97439372679065,474.5101531456716L33.70693889819104,474.0778326987359L32.814406626136474,473.5400548705555L33.98103280515035,473.44777131814175ZM92.77085873338031,494.84515808858345L93.11743095256583,495.0972751375913L92.84331898746305,495.512920078562L92.0297556641785,495.7174468469716L92.07272956810145,495.0825900850339ZM96.5397958990759,494.48981843670623L96.77193458348627,495.02457808002754L96.4728323311626,495.2451197484133L95.6110376568374,494.4968706566647ZM32.8274765735723,469.1350090052701L33.753872800951854,469.69646992315006L33.90173932098813,470.72622986600476L34.44296530329865,471.10937097802594L33.367582882606314,470.9836192078253L33.099565850360904,470.5307033381095L32.2896875148959,470.73378606510875L31.848242609597904,470.1452848148387L32.33412663298495,469.74572662869053L31.6347812130289,469.49653274012474L31.922752683413194,469.1995563219499L31.23852088438214,468.8507604481261L32.184966701622244,468.7545702521674ZM99.06229732765958,495.4747828778275L100.67640506605862,494.1835534158288L100.65930058036909,493.65131108748216L101.55278334836031,493.0681349680374L102.58216801585974,493.2720116982857L102.27128186946204,492.9059719259086L102.5197366022023,492.31374212951255L103.35556712147114,491.77415632014174L104.24182108970268,491.73315120393613L105.00217857762075,492.24201067668855L104.61547799119674,493.00958810766394L102.77980549912397,493.57334353868936L101.80556719261544,494.6017362654735ZM111.84413930071581,491.3977803060203L111.15268887569113,492.1489931107582L110.97605749841425,491.6114845288786ZM109.92862322057243,489.90930680584114L110.00044511486028,491.0961559103262L110.85269773959152,490.28278523628916L111.3702869254175,490.4235533424894L111.34857485327025,491.06781414661157L110.89572099634992,491.1224363903478L110.01162462709982,491.91687598226974L110.88984642830559,491.6191985059579L111.03416710349455,492.2152845793879L110.05556740469842,492.34015610061266L109.74068631545276,492.8289942244599L109.39871611983807,492.5527539698532L109.33732557561004,493.21027961305646L108.80452098698554,493.01241461046976L106.02858263296427,493.7352214788031L105.28790554959357,494.07455631306453L104.48117509242272,493.46123338276277L106.10315682147922,492.91954471730037L107.69014190686389,492.8100683206121L107.50301193506044,492.1441107777329L108.16613174810759,492.15599892232854L108.06176781444046,491.60188806971524L109.37196699242409,491.6935081057214L108.2165767230335,491.27965049650186L107.89071153932579,490.48798337489796L108.4853907562466,489.99757119987385ZM102.32535861310018,470.85242250063186L103.24881248746225,471.16867384674975L102.79024004068825,471.4904677999341ZM101.98982895644701,466.5735898858878L101.27780575486209,467.1184496349991L100.89527156842685,466.6097439433692ZM116.34289609684018,490.24065850831596L116.44842496237284,490.6542820213501L115.70050078101808,490.5393190858419L115.56232602439482,490.2505187967428ZM112.92241012437611,489.09145044838573L113.80720009151193,489.8421244318142L112.91310696216959,490.3163924672399L112.27243417067847,490.146281798831L112.28242608826801,489.29924421082376ZM114.7046259362581,488.918997784248L114.38790995148878,489.39159560302613L114.86581682977715,489.497075613696L114.23199931010396,490.04889503758324L113.91108026206665,489.2176740208009L114.22843453017117,488.8414502205911ZM125.01647227039066,489.21719641122723L125.87839227855537,489.8564827565243L125.00280075334263,489.7547485267529ZM127.28570644745847,486.2492697363753L127.42670760858303,486.93559142790826L127.07359641196342,487.2550308279365L126.74854663727746,486.59850380121696ZM121.88686273548896,485.0605544838556L122.73051886261467,485.17907144677974L123.00495814992254,485.7747541969886L123.25345244873961,487.2598962006406L123.77223638611417,487.1777891030666L123.99090250133955,487.7318027646124L123.3365071834294,487.62214646638387L123.2171228749108,487.2749648455269L122.7910333640215,487.82481477138805L122.14290852803344,488.0076172607006L121.3466582953736,487.73413786890603L120.21671129390437,487.6909399863292L119.2682753622754,488.106692931744L119.1168060884348,488.5264947091434L117.95914305636349,488.8304369168873L117.21946259234531,488.53484983894987L116.96968120988552,487.7299967831922L117.14250248947806,487.27922704815774L117.98363903401206,487.0450835724593L118.74925695290483,485.75231874094266L119.2823267483422,485.4590766259217L119.95773188370165,485.7477611924543L121.39586942228816,485.0817713900318ZM129.23384040850215,485.2146770174886L129.85007009488237,485.7512102389809L129.43593035461964,486.0463351168633L128.90730494931617,485.27206808319977ZM137.8178899353933,485.7568317546767L137.81262595507835,486.35439339152714L137.19137731133367,486.86982578843003ZM136.5677398578452,485.437492064889L136.39819795410054,486.50305164455494L135.4094701954487,487.13772354090145L135.53374540971032,485.9961265208186L136.0342797317965,486.30906377239955L136.226492071995,485.45719597166465ZM134.79302900610384,484.59513211437087L134.7455037297839,485.3714140239635L134.0974155600876,484.8179598421282ZM133.46792452181415,484.20080124044995L133.5251174622249,484.86748697322923L133.89269447947305,484.82699079639536L134.26671617450813,485.6800960626513L133.98252123015752,486.03825252269894L132.8034824833649,485.42071434055583L132.94592447484908,484.5633109522288ZM135.1797287997536,483.9879469090819L135.44043378543046,484.4135898802923L134.8106212512356,484.230175093687ZM140.8886833820231,475.2085766143738L140.8557640274985,475.65453363072294L141.8166016124364,476.00985892405953L141.6602953216219,474.5817345561324L141.96620443877865,474.0268079261656L143.14006853011094,472.6254102050981L143.98214532727917,472.13977910404026L144.54738789435737,471.474616897013L145.31614452456506,470.93255079715607L145.8435966136026,471.61830545828644L145.74840660804273,470.58619120545757L145.4328855297999,470.6414796062975L145.43199801348425,469.91539371248535L145.9220059089846,467.5714247141552L146.19314169545555,467.0601339912341L146.61390259119136,467.02146682184764L146.15553544239316,465.96402825742376L146.4649477315301,464.9878499044735L147.2305459705216,464.1795604138872L147.9710302659591,463.4558924248052L148.26893861133874,462.39768916071847L148.14182027099108,461.9507145496219L147.6832814073845,462.55715275509L146.3252829169725,463.1827283766635L144.27909982439633,463.9805309636392L143.70195099779482,463.6987596478636L143.61174809111264,463.19719594074024L142.9262220544351,462.65818207613853L143.25478088335717,461.3920034420295L142.8013854243852,461.9230886437788L142.25397165834795,462.0796336274836L142.09826402138762,463.0588333995952L141.18225775013576,462.29206131421097L141.75966159690557,462.83304831637224L142.132925148937,464.1671986067539L142.32804642391014,464.70874463420574L141.61194196402926,465.27743258607217L141.1029639841429,464.9238020971135L140.12603261374647,462.713216404174L139.31387478934596,462.1195306043101L139.4517409050654,461.51034410034663L139.07491310981445,461.62552686656323L138.7827230644539,462.3197798048731L138.3914885087938,462.4670004200526L138.11261374814873,461.75849219560916L137.32523482034796,461.60141272090857L137.30397362832264,460.7507416516746L136.98226365075027,460.50160459939553L135.30887945699305,461.5733804934847L134.6510313358104,461.6900149229822L134.51605415607844,461.79183898887993L133.5606012735147,462.2594050181936L133.33677060703536,462.7548451879396L131.97644966103974,463.2744263282082L131.9135402127161,462.8083824290161L130.6819537256993,462.50126367807536L131.77070293959676,462.20576119459713L132.58274268904643,461.71573082915734L132.21879777417269,461.6166001596792L132.2225279202783,460.4885824123952L133.1261450170238,459.7428374226771L132.2683729478233,459.5871527601123L131.98268931994352,459.8750627936869L131.65022516721467,458.8047869895038L132.003625589006,457.8199471850343L132.90600705927076,457.1425938727554L132.4910024993268,456.2123165962789L132.29826625293114,455.09535590651655L131.95855596368622,454.531895447878L131.63786391810308,453.16917562144187L131.8445177454004,452.7907031596217L131.09847597758898,451.59019915237417L131.60642943901175,451.20743692825147L132.09805007787202,449.9224619601135L131.97513836940527,449.70255723859077L131.33014154780983,451.1088649843399L130.7898850959051,451.3951386788353L131.032227241908,452.3268048460923L130.81530502445065,453.3780925626362L130.2980704825691,453.6963503611299L128.29079437042114,454.29546633564814L126.47906046973277,454.3380562634981L125.34689569537977,453.88622331342077L125.15885375000994,453.1133774050933L125.49178606576403,453.0117379685611L124.72083952412657,452.1941685114562L124.09418122589432,450.9924342869233L124.05975190583052,450.56665713250504L124.5863844204024,450.08133342296605L124.53420639097762,449.61218112251765L125.00681830106433,449.5522500283156L124.88067309626251,449.01193243349917L125.29526879007483,449.05971720989635L125.6960583218376,448.56132082759103L126.17735017885268,448.5141275370304L126.53063744495327,447.9431422680513L127.31480992871452,448.1030362885961L127.13089318027997,449.23333092894694L127.62470109763888,449.22054659193844L128.43966506426955,448.4487236306104L128.08306381954836,447.8412979850453L126.94331741176829,447.37259016485825L127.66014217726008,447.4269506945213L128.15896380971242,447.14293822973883L127.4994066454245,446.9514882464438L126.88847136332596,447.3393715490481L126.93106650515003,446.10188449273903L126.32150283162201,446.6621691422062L126.47050493858458,447.1514307270823L125.04197741397374,447.13081139416533L124.88551201103371,446.5631492197391L124.24666775748139,446.68311609204954L124.10470129686287,446.3286558818813L123.24488850107454,446.34821275252415L123.12024611778959,445.92956829036916L123.9095841083238,445.76582464193064L122.84244270682015,444.4406448317027L122.69852790727514,445.19397156900675L122.13060278459793,445.0298875955126L122.02680173350126,444.09299855239044L122.20618247725766,443.8208805275821L121.56372980775278,443.5024321519398L121.469477568497,442.72488980783845L122.00200836167116,442.3956676968917L121.56015382618841,441.8174123541974L120.88747490208691,442.1192429583529L120.95154814332788,441.1836929057168L122.17552150644147,441.1216325047967L121.63806370125927,440.81023049491876L121.30963221757649,440.06098865409723L122.84712989149537,440.13020692381167L122.5568230781322,438.99658450357884L122.98392818072733,438.1602492316878L124.49105357119404,436.5324297879789L125.2752777270623,435.91494458755704L125.87495118871537,436.0568008969889L127.09010036042159,434.8354282191434L127.91159530212009,435.2839965185283L128.7239523156607,436.8436391826912L128.74119725964053,435.2149284423857L128.35473761090873,434.51758093597886L128.429149237037,434.1026267723157L129.3572863485863,434.0148374118202L129.52844937935492,433.42630921896296L130.379701948776,432.91570237967L130.85973319302425,433.4820117439361L131.69946538970447,433.43356828187126L132.46576073986643,432.58886780609873L133.22120776120803,432.2439621043247L134.038748803594,431.14815543113974L134.2405029977486,430.6001346121027L135.06287596563718,431.07105462789065L134.61395898409674,431.3557911499743L136.44018843706743,431.4453756644819L137.59865103970964,431.2214788481309L138.84301736854738,429.594834492288L138.52894839816474,427.5127159503712L138.5571117248191,426.5230339468541L137.8720243234213,425.473634224587L137.14510490471886,425.3195882711424L137.36582647819384,424.6107466870073L138.4497209307179,424.8172487070081L139.29897941015145,424.1365094126974L139.42322218599037,423.4468612869613L139.17497996179887,422.72769899678144L138.54389361249582,422.06705886213075L138.9340265679463,421.9813294858026L138.49789635769926,421.9561221494776L137.81669334648598,422.9075588746235L136.92825386924068,422.77729450005046L136.27684799185818,423.1994318959143L135.55347080221674,423.2522585671139L135.30787004194693,423.63347072557985L134.39855529944052,424.0906809657301L134.02459985439197,424.97617882404495L133.52232203520043,425.3328483283688L133.50938133974788,424.20645951014075L132.69585926964214,423.0892627791537L132.18232467611375,423.4215405640958L132.78606269684002,424.04351848750804L132.70892034507256,424.6689260609141L131.48402757901133,423.4763327474002L129.47269343055734,423.19336235250626L127.3348801624751,423.6473826155396L126.5831183885036,423.19831275830404L124.20672062748687,422.13523246995584L123.70956887885112,421.0442738935188L124.079717792845,420.5831801007432L124.06914868567651,420.0647390552829L123.45521675391201,419.31841149979044L123.05609808801624,418.22328738102425L123.664846218029,418.531175257946L124.30380107781036,418.2050372294L124.71289768620888,417.6294907386856L125.50830648994253,418.05460588249093L125.91018650200891,419.16322301536957L126.37609607743906,419.3616140731244L127.08149985401327,419.0060056641472L126.75956573268496,418.65438398740514L125.96858399069507,418.44401639799355L125.76318832181465,418.6604703534323L125.27974177854506,417.6524682325723L123.51547635533748,416.7406502570071L122.07895362131646,416.2802064392231L120.92484043120936,415.03014774351493L120.51869052594651,414.7783145887146L121.44095180086649,414.0988618429313L121.98932931209572,414.20564883135546L122.10277767056324,413.6588378320017L123.02151819829116,413.2243457349976L123.26465229592421,413.5984197302259L124.3673679045519,412.9301553425636L124.88632956982637,412.3574475572529L125.97115558538405,411.96747411105923L126.50711303763498,412.4326411612573L127.6518853263515,412.6039778006307L127.99824942581517,412.38678341051417L127.12073784179539,411.67758153440803L127.70408952763142,411.12592380038205L128.44524707597117,410.8323059488786L129.4950382474682,410.83203605827026L129.5560728689569,411.08323679761645L130.5073415134435,410.23488610036634L131.31164141881612,410.1273972967189L132.78265562780734,410.28034077718576L132.83766731239336,411.19237118233235L132.48583489449487,411.5738189828124L132.48611958194869,412.3451797278787L132.1854321781608,412.6637602773949L132.29589142938292,413.3046869826193L132.79089602012937,413.8013265692561L133.17285865369584,413.66594792620344L134.224731458427,413.9712414869054L135.16917376053036,413.8517698396718L135.41892183061907,414.3005076224319L136.04357738242163,414.43717254036187L137.00720150938423,414.27527944889596L137.44235848290992,415.035083126037L137.70576365610705,414.34474083058024L138.61144956231297,413.210734038029L139.3242775079189,413.6277394789315L139.9190825402571,413.50587706493644L139.5223208503199,412.7941047356952L138.16281888052896,412.28178888933184L137.4594117057489,412.64661623599784L137.7752708826103,411.5443882743531L137.1424526789472,410.2464178457358L136.40355671047465,409.8758755510157L136.12523606357803,408.98942637749917L136.54915738877128,408.487448377715L136.95784178053893,408.52925388285837L137.63000028029666,409.7018935897511L137.38394153734492,410.5523924325407L137.71777799462245,411.26652692971606L138.5087437055678,412.04373517766106L139.61748465761394,411.52263396229733L140.50806657562583,412.7237524224933L141.93538401731288,412.7482096116041L142.11797526448584,412.142790906896L141.87942580001115,411.36003214299194L141.00638063887354,411.3310956833946L140.6217709874396,410.8562825023418L139.79165237713502,410.86055406490686L139.4860841737813,411.4826372046128L138.80807379778068,411.50687436002846L137.928216996571,410.1660500236042L138.26872640022714,409.1307409723611L139.12890341274203,408.6963497987145L138.30611201341605,407.9974048941743L137.2377452439857,408.24593602575976L136.29325886094082,408.17981819631757L135.9942373777578,407.70035927462186L135.4868644308011,407.8309157978732L133.53997936859898,406.9122290217296L133.46333679375363,404.9617545915609L133.0452545133479,403.6360427116371L132.18640985135934,402.7673459491465L130.44666729426018,400.4524013950509L129.10061381129637,399.4677106406478L128.91119885737396,398.88596084541996L127.9467271983406,397.76929126198667L128.4523055031407,397.5803385936152L128.99402036008422,396.585004462067L129.38621817793106,394.66092574771136L131.4035291800457,395.1695019751835L133.92606252075413,395.12482928281946L134.74582451359208,394.8753071303213L135.91970660153507,394.027042392117L137.11845993887425,392.6738651575258L137.83858826317152,390.70989934690647L137.59785966980158,390.4507167407382L138.76093206897673,389.394622177827L139.16130503118507,388.6157226125328L139.9331515295566,387.9950825123056L140.56855488345894,387.17663873771767L140.92196104529347,387.76940944307484L140.13575234476232,388.0081446642468L140.62115761250521,388.11419846130246L141.20102267866457,387.58071892934987L141.86818069781745,387.6470932054437L143.2558960135906,386.9590581471465L144.5425420346378,385.87658439137266L145.25835201391433,385.76030211581485L144.90365672912787,387.01076455808584L145.18725466679237,387.94258307785475L145.24337236261476,386.75039801738006L145.57382360279624,386.4437117982933L145.25491749958357,385.5748692254888L144.8281227019496,385.5209804756387L145.92261133185696,384.4883753547011L147.03156584242285,384.16206368359L146.5930470980688,384.47399889327124L146.89622680524363,384.7918150372074L149.52365165380866,384.491020862703L150.67796883541513,383.8275600837567L151.26110194170073,383.192693032493L152.3564610945807,381.6668231806454L152.68253632721448,381.40318502466266L153.148270986919,381.8978872426742L153.8486125836979,382.08329624234074L153.92570904613632,382.5461412912903L154.93046924996534,382.60629558608827L155.0368236528275,383.14929743010805L154.5613247546957,383.76301314724907L153.56055073646377,384.1690783988418L154.03249768795115,384.31775982203743L153.7034590088018,384.76129672622915L154.7288041104814,384.8083757405308L155.09249409965827,384.6086505696199L155.02689811441056,384.0325401745404L155.58640725008627,383.57456418985123L155.81901885396766,382.99725478907106L156.0047118432571,383.4476927524724L156.55933977447356,383.13750219452146L157.084308858107,383.7450724809262L156.8649220908749,384.4207438944367L157.94285932959514,385.1798797516777L158.48987198165742,384.4601758310058L159.44092704324066,384.4260533656962L160.21217011528037,384.1804038111201L160.9794485038581,384.45375020177744L161.21456830021745,385.3344978269127L161.43188741171684,384.40800210434566L162.21910363723813,384.7569941758798L161.79725854059984,385.63334488873886L161.81376046961677,386.1606773071375L162.62164801741972,386.3192527525972L161.44583918536378,386.5836697792451L163.4169051970092,386.47012870889415L163.0429213315642,387.26822816763155L164.29150485919791,387.3534176942626L164.56913544901127,387.7146713666471L164.7370972596184,387.1534716163367L165.75557920558256,387.0123569967881L165.6435779361099,387.8784260462129L166.34098393431475,387.2990438849114L167.0054693990095,387.0807935728545L167.50664041038237,386.5451530544032L169.0801191001429,386.5856749322981L169.83322413278506,387.1166376252453L170.3812773084801,387.0556932590082L170.64918403082237,387.55769545095154L171.50204301323404,387.3235170379003L172.27293735170895,387.9906241907853L173.99368325586116,388.3668097532987L175.1219973662155,387.97152431894665L176.36638618897922,388.18605950070906L176.6883190184739,387.9256902307671L178.15011800666716,388.8654186915813L179.60293287202074,388.8004365295478L179.849301206547,388.44780530505153L182.48445191105236,387.3916802602595L183.68123135151592,387.6614411260189L184.69737010983812,388.2437919383519L185.1007920585682,388.69965383075765L186.19024204568692,388.8705993921256L187.29920714136404,389.70149928188505L187.60728604044823,389.3413474575217L188.1277339419215,389.4610506106313L189.56677844653774,396.7277706796224L192.9215525625258,413.6534047754671L197.9398860793224,438.965412211367L199.86550371325978,448.6839859383369L199.97434135240877,449.23296841917795L201.61174544458237,449.48177026200005L201.69109488026044,448.87379896889604L203.3711312754827,449.36575497060534L204.0671037161234,448.1862419677577L205.98671508143167,447.6405267440391L205.97986582264957,449.4200477228485L206.575793215531,449.9132405570287L207.80710528843161,450.2241540663427L208.27223779963577,451.04304942706705L212.35921773521488,453.5901874918527L213.12257660392146,455.1456943407341L213.1634151668687,455.6700097096029L215.0091445579456,453.4740212209638L215.78882940496695,453.2261698171587L215.9337472869404,452.54930319181324L215.62044181712787,451.2337556566939L216.17161388226197,451.0928583250242L216.21670007573698,450.43498447408706L215.78392908401977,450.2788148797481L216.9488918600898,449.5332627003495L217.55988862373823,448.90801684434683L218.2009337324743,448.25346135409643L219.16119347203755,448.6723485832637L220.0524906872174,449.3174025305458L220.07480147674784,450.24139636471637L220.44853935865396,450.687075861098L220.79513712671937,451.0324808035388L221.68156530746853,450.98760605840965L221.85585160868033,451.3238533418845L222.59826709192447,451.5161829003116L223.391590607838,452.41080820528856L223.83748203656876,452.9940201399363L225.43969569858731,453.4012973075443L226.09920338513427,453.9993924902607L227.5309549102363,454.79441207430494L227.34357523872603,455.1491875529437L228.75893084417703,456.31087602378955L229.40234314074786,457.1537357621866L230.39141900269925,457.9379590694648L232.14279118411685,459.7265984436726L233.06618045760655,460.4370463257918L233.7603388168913,461.1535897623602L233.6057158803662,462.034566197565L234.791439216615,461.95205979776347L234.88973628788278,463.1056005968871L235.88146393883278,463.23290103641324L236.45108504904485,464.46889608349403L237.28573056763696,464.0871963668814L239.48348304620646,464.7566966861499L240.5357296808951,464.6310919788875L241.30105652144465,465.04788387069607L241.88360453513127,464.9991608694724L242.25738304373948,465.56936702698874L242.9736396868313,465.6178834871679L243.3974357289079,465.2746180512593L244.00504289369525,465.84803178413097L244.23655902925358,466.46435710434514L244.0522259702047,467.52075439987306L244.5624785384344,468.6237245189556L245.78565871638642,470.25364024004966L245.5436799773143,470.9684321478394L245.5455976088769,471.8739315343021L245.32009952102158,472.9707474120258L244.54952360184322,474.26533792774177L244.04740658227746,473.72735321315196L243.9303851224292,474.53926081410714L243.51020496856484,474.4445364427166L242.7474959626893,473.1554008391247L243.16451731184188,472.37431985719724L242.5439732950357,472.7771554137204L242.11425473473554,472.20481233388386L242.58831197165637,471.2235802454684L241.59980248239242,468.79493621497306L239.8950386834966,467.5079323601035L239.3500117255336,467.8771477202988L239.15910567228536,467.6206840298116L238.2680284254834,468.8385675975141L237.7884888747938,469.0487803592997L238.40640765237723,469.44869944994747L238.3333474532934,471.43831879480035L237.40476588919933,471.13849298908264L236.93734878413792,470.24158730623907L237.35621040049557,469.587896932233L237.1160471511394,468.6692302522047L237.3620332245539,468.5697736198283L236.90072126762692,467.2666742990086L237.53592140692177,466.81424780080664L236.90309690117277,466.8377853091369L236.42511422136738,466.18870269642497L235.72224597797316,466.1621335441699L235.4900234000373,465.76568723092714L234.7992436435428,465.48375044730784L234.81564068531083,464.507444087399L234.21079511189686,464.7348326368687L233.91851072168274,464.3249956771676L232.7790679397233,464.0654941755067L231.89409744726726,463.2665292118384L232.3923515309179,463.3276899647185L232.01849509580867,462.53655149304484L231.96698931968308,463.03108607336213L230.47097757088602,462.9494085568075L229.5701514273019,462.7639593168833L229.36028421998216,462.155229639322L230.57778891229702,461.5258205919672L229.56754209306843,461.6201616730818L228.92077895508945,460.81681313775067L228.91082227995025,460.24394414383977L228.1496021322684,460.0875311104456L228.24890332205348,459.38208097577115L229.9210278129682,459.86967985276254L228.78489765083202,459.23337589480167L228.1962115133863,459.1542600429635L227.9894586569182,458.40050131852763L228.0613627603409,458.1836414065412L228.09803755249382,458.0736553241834L227.88032077377238,458.7354548456025L227.6419391286384,459.08919461250025L226.93564033367159,458.28093711023723L225.93776925374897,457.5798875986091L225.54519504951887,456.4571045592298L225.82663264885417,456.1076010414775L225.5260247648948,455.6363165270382L225.2366666003805,457.06925918387986L223.95535076750366,456.41972285594653L223.22782856652213,456.51316487676667L222.6808525392945,455.6370666572052L221.9865407343548,454.91023561684233L221.40519294501027,452.9696450703172L221.3739456109646,452.97445259184383L221.60489732083136,453.36070758672753L221.59396549930358,454.53590761898965L221.0165051049114,453.9821619352197L220.6685680129636,453.16832356392223L219.4275961621789,451.02198902187763L219.30287414330041,450.97651288569796L219.36301144962167,451.8080004297621L218.92125054610136,451.8243788102573L219.77133971410154,452.556230699816L219.9542308007217,453.4136020755593L221.43549508380906,455.3832662406325L221.45391104176946,455.75108096729633L222.20136849361165,456.98695775079506L222.29251986047484,457.7309888370405L221.69281414288048,457.92612456209457L221.14977004216806,457.4681161388987L220.49793278448416,456.45318469533726L220.77687418088522,457.2142059799449L220.2057707495265,457.0254494910095L219.31858588642925,457.59474596393886L219.33194827234863,456.83826510621464L218.56564573666046,455.57536542350954L217.9948510071431,455.00540985302706L218.9214169021643,454.28086783985884L217.9509133340739,454.3526165749856L217.21921104260267,453.4846797602625L217.85361113858457,454.7213184337424L217.82084804404099,455.4729237604484L216.64026953327453,455.2176388679814L216.2957593916844,454.4128560137486L216.1069882450754,455.01256745209025L215.18315255346482,454.7684209589899L214.82979450061657,455.27537288205156L215.7588355655357,455.19805469537744L216.6710095834694,455.470983960278L216.31240667561786,455.747191052347L217.36430357412354,456.0397818248294L216.97532330766447,456.7911311543859L217.53071211601812,456.331459209659L217.9775200890719,456.3962141214798L218.91847352532358,457.707160858942L218.27196175162285,458.32213000682793L218.17329883524917,458.0171824966283L217.543047988138,458.60044955563234L217.0907808891289,458.33218662838334L217.37970951128383,459.21011078279196L216.28661007378776,458.5298134122268L215.48211585845792,458.62358215916373L213.3842341599497,457.67814650669317L211.96211223109563,456.67329220435175L211.722925615577,456.0714699515813L210.69689121339735,455.4004152831763L209.62448411801444,455.18945195065385L209.6956295004424,454.63901718075743L209.08349177186247,455.0124323987207L206.30239652709005,453.9162240882812L205.6842261417569,453.84733834902477L204.630477157775,453.3711985755133L205.0964552118532,452.9456548190231L205.23508149380058,453.08629111058247L205.66142321432042,452.0527467834031L204.90624377819495,450.91895292277724L205.16271988824184,450.2783264290715L205.96314978402896,451.013876461009L206.13835661705838,450.91045697967326L205.3854354705076,450.12769193783504L204.91218958291,449.9302427016117L204.85561554220357,450.6179540354761L204.4917826721497,451.5063386920942L202.97538994186777,452.697023775511L201.14066924144265,452.8082667729725L199.0829395414812,452.2323087948711L199.5505558663732,451.3924031453787L198.91634484268644,450.38353163707666L198.5431964161309,450.76162802634246L199.15176486828733,451.22507030725075L198.51945396752757,451.80206455421165L195.20256535332203,451.57892813119076L192.1399204981201,452.34165184237844L191.1241465725151,452.8532941039469L189.80317109908088,452.0850308874864L189.8161554277351,451.8073565749029L188.664365352032,451.98649423204654L188.2632880061256,451.4560315763982L187.4588394865734,451.41638320520156L187.7305911096881,450.2612720438855L187.6232555378037,449.3410831729119L187.00208845535607,449.98339122250417L186.86643992358748,450.5000537228762L186.2039483607073,451.3072437340904L185.61309581191398,450.8492641697366L184.74901472717522,450.57847558028635L184.10932010403198,450.78491165912504L185.01901035162388,449.3221409170039L183.784107642701,449.74654290483693L184.00656240873715,449.11913683321774L183.02031906077434,449.79029094753554L183.53761801670092,448.9832255735892L182.42728599203542,449.4286885472258L181.65405440167012,449.49390609742125L181.51732601580522,449.2250187339222L182.62962716154814,448.7600434772992L183.08756088460572,448.31073675541376L181.9300492896404,448.69422733386136L181.27382106426933,448.1172584504185L181.5063092353497,446.95229537651375L182.68752949455373,446.7968777837368L182.4520606959878,446.50400604390296L181.62795317122956,446.6986097663101L180.5027264653217,448.0229611972296L180.04412044780062,447.56589357055634L179.88086341941408,448.10259142569555L179.25686318448544,448.56130090109724L178.81605017580856,448.46042794726856L178.70468291080417,447.2418957377049L178.43615532640632,447.7424515826115L178.57660653138072,448.77194537478954L178.1282556225854,448.9645247835595L177.7947429853851,449.04458647857643L177.06339121601485,448.3769639559887L177.34786353687386,447.43439464332903L177.84752600321823,446.65014593693894L177.92532730258466,446.026194435092L177.17609788892494,447.34279794241303L177.00642888635474,447.9061679569526L176.6601500297597,447.49961284640136L176.32680253765128,449.0903644469566L175.31267516964863,449.8770790238513L175.3433172582726,450.27131804244607L176.0762178017602,449.4664488939228L176.12282890670133,450.52285267552855L176.49143240257987,449.6067900387399L176.8500687372423,450.52048492090375L176.45005702402585,451.0790356366234L175.9484923492854,450.8334724435682L175.43346387255698,451.3749878463627L175.42590937729162,451.6397184783782L176.04780291816135,451.0150975353283L176.67309345874105,451.32267520449955L177.21496673009085,450.60919128492736L177.58369203502875,451.05261051578833L177.67948973786443,451.7240721547028L176.62217313618422,452.8325682163655L177.3530499630808,453.1331519564076L176.5885474025255,453.9832400405716L176.41653775363747,454.94457388411104L175.6899154754229,455.15277309741805L174.21380778557395,454.9812257322455L174.457301168208,454.44222417661064L174.02862915460886,454.53293886410427L173.62991932077554,455.28134609274383L173.29852287821015,453.9970815308801L173.3246068811793,454.84173206199506L172.80180190111366,455.4659244603408L172.6408846231712,456.08836320192813L172.36520050271105,455.18109960785637L172.25492899879922,457.0690855721148L171.18578497241342,455.94969685366254L171.17339770703612,456.4958711068799L171.68173862418527,456.74767330069506L171.26957903660028,457.16234007510934L171.22320808626944,457.7189782860634L170.48849733811005,458.0639423777267L170.65797457386464,456.6987019315819L169.96262411178134,458.5763562468856L169.50670309129674,458.0796158693836L169.56919039374864,458.8131779746828L169.10880482993886,458.84332989388156L168.2744929677025,460.29754086437816L168.15287508485522,459.5583903466965L167.77180930266067,460.3619212192175L166.9708655154399,460.0653345454119L166.77462661734847,460.37548490069753L165.83207743913755,460.7225801182063L165.79563565990338,460.35397493803026L165.0441941643655,460.12603980821757L165.2597930263458,459.1530267157023L165.89327262708187,458.7079507086833L166.74621252995257,458.6684007018846L166.74618253143143,458.2043077193422L167.6043962914798,457.829938571914L167.51507641238268,457.53672606409447L168.36923510156652,456.46647620275763L167.93183507623976,456.4774452884293L166.53065601890253,457.5812494219322L166.07061967407785,457.5113137692355L165.30123626961955,456.73512476956455L165.78397300493685,454.998252184807L166.65357687056272,453.7739558099046L166.74695583192684,452.812707634594L167.00578320867749,452.63479518095704L167.08070302670694,451.56471569116206L166.56327330015029,450.44727066475303L167.6480996132236,449.9597750516729L168.73175692697427,448.92138642104504L169.65599110450327,448.22689640325945L170.2776467604688,448.8901215280032L170.79403105440775,448.9843124177998L171.67319641717432,448.55870097724176L172.08362549751863,448.81961091047543L173.79488292436412,449.0137029255268L174.03874707434326,449.2238805401547L173.4955506993207,448.58151624865883L172.98118495485335,448.7269638913094L171.74243734332293,448.2209105195188L170.6713157053944,447.4142491115222L171.3994404644431,446.2932047323136L172.5964379389444,445.2434997035728L173.1123968212478,445.10077204729635L172.64897413173358,444.92089642073836L171.83968475368994,445.1377392164038L171.13653945696416,445.89655921179303L170.87674976786704,446.8318023321551L169.37423489195936,446.8727360804073L168.9678257230713,446.12968812823794L168.97622329478986,446.66453270843806L167.81666573943795,447.29795755086724L167.2602680026452,448.2590965126365L166.26589525679395,448.5492898351016L165.29142704530992,449.6161033407973L165.62496431640264,450.401043589218L165.16426058209973,450.4013132385905L164.55120967640144,450.8927516158475L164.3880722454226,451.3568983337276L163.73485834204794,451.9414750655863L163.5027402456024,453.2879636214417L162.9641701147032,453.82134722132486L161.7619198851295,453.69948577055123L162.5931412254543,454.19495569264245L162.964616836834,454.8119033758669L162.53811084592107,455.8474879027511L162.20739302588754,456.0933629038124L160.8610378995545,456.2098957076488L160.6794392623019,456.56051164952873L161.6148744094619,456.5476307520349L161.43334151795167,457.33415826026663L160.9035155430759,457.7171275355617L160.2362449864243,457.620040631565L160.50203825949578,457.1544543933452L160.09965253094214,456.6608416408429L160.14430683978978,457.359684839448L159.68049709273527,458.27088840667784L158.88708355653807,458.3438118460479L159.21812610572323,459.0355125349095L157.96438648725623,459.63613074718495L157.8898068561779,460.6099545737755L157.57559231532673,460.7810790455013L157.7707956184484,461.78936838386755L158.10331018499903,461.4199750479901L159.33596640825712,461.4054092378986L159.83497391020526,461.9948604082092L160.56666909930502,462.399161139852L160.64117466615747,462.8328330889196L160.83335541494372,462.8247641353291L160.52440474126337,462.88616097953525L160.19330800035,463.7918161143783L159.4107612875383,464.43815385244005L158.66308278102034,464.47224808410607L158.45161974454146,465.25168249744956L158.03239048461938,465.2670429498333L158.16014431159255,466.11395411524893L157.6859477466338,466.3417261244207L157.94950250973392,466.64098486887224L157.20418797073208,467.4208046507168L157.14245320233533,467.90897320399637L156.70666601055208,467.27977653054927L156.76950602865585,467.83455822154565L156.367351109843,467.7346326708587L155.77105673487242,468.3517890666977L154.78864931721162,468.2553030317334L154.6384558232228,469.04888710485415L153.60622856154174,469.7397185348983L153.43647978260014,470.101393671939L152.69379741126738,469.7735161040919L152.7599761881489,470.60205344490106L152.2592249182616,470.79340619716885L152.2554165628805,471.3233220973948L151.2869408525025,471.1607750549269L151.2182193784545,472.01521070586114L150.5726211568555,471.76429389613884L149.40198780302921,472.68192225057504L149.3600368281776,473.0512126148919L150.09334383829383,472.79181137850134L149.82029458244105,473.45190903478476L149.98769627649958,473.8090195520665L149.2680854436424,474.91950509495933L148.64775917471775,474.5458751893807L148.24937158316936,475.46001047879975L148.05644604137177,475.01147837476907L146.8764916725286,476.27107759329175L146.2519870236769,475.5919430081244L146.10294736945508,476.1965666800346L145.5396831300371,476.6833499646415L145.89737382407225,477.1324087802825L145.27986010713062,477.1952049839748L144.93062129205614,476.75022508079843L143.82382267054854,477.1910031928798L143.49064662995823,477.62651035704283L144.5763582499281,477.50902211941366L144.42050396782443,478.0326843553682L143.44316576594488,477.66161374705956L143.47934296621463,478.0377498604833L142.7302381884498,477.87444741029213L141.33172388369098,479.2082745013561L142.31099359738076,478.7765149240199L143.13868629553832,479.20208179653025L141.8500369825581,481.11451779670125L141.4413005257975,480.2138180757281L141.3879162187611,481.05162104676504L140.6571266208287,480.8005897091323L140.3514063139326,481.3635269104278L138.7941537869099,481.5653050825505L138.47450496965783,482.12013617339863L138.37171651379342,481.409249414881L138.09182127152852,481.445300904269L138.1517384090865,482.26530212571333L137.82942455560138,483.06213379938424L137.643622528452,481.7827955800048L137.04878474794407,481.5595684745602L136.71122100518627,481.99935356178855L136.430396233488,481.78260197619653L136.20424083993677,482.39411122937423L134.9029979350088,482.96175442284004L134.1518179975184,483.79192236901866L133.95317156789213,483.0798465604522L133.66709326256108,483.8441940625137L133.2381465687166,483.8571127709362L132.77244487762766,483.33738944525726L132.4340482516492,483.84933302737534L131.19287403513806,484.2545630468478L130.49821654554296,484.14595049660704L130.71691965400674,483.40921678814817L131.2117707455899,482.710610794301L130.39599425067638,482.4412697688424L129.91757745412934,482.95611236697346L129.87156776691444,483.77694540121655L129.0241981739518,484.89131591665733L128.47493059568686,484.72051113927944L128.69745004833476,485.50227075201997L128.232191418053,485.7830146821253L127.86111975821522,485.20568353447186L127.4906402755442,486.04210285914587L126.69573966310874,485.73803000900955L126.69712644576107,484.41333848992326L126.22894101946346,484.0149644453067L125.92779874015507,484.3171958823112L126.26257452549056,484.882170511479L126.25984040885598,486.33035557156734L125.90753092477723,485.6714578523686L125.71583533213456,486.2305224366237L124.9338089513516,486.1629386950186L124.74408285636042,485.29070865824116L124.0497583081553,484.8543137814069L123.89638395583785,485.51609585649464L124.53758886846887,486.1267927354105L123.19310263020427,486.85574546906145L123.66918142412906,485.45163123642794L123.63680186504646,484.9208515559602L124.07348308094365,484.63566725860227L125.3294772118348,484.69489183071755L125.73016426723508,483.8973645084889L126.28786053112881,483.52425286479325L126.80758850703639,483.6293401018687L126.72250616400628,482.97936191944734L128.02154456388655,481.65068661309374L129.79864412227437,480.58079540718603L131.41455457793253,480.342464502692L132.41445231401474,480.4055642279404L133.27105417334724,480.2454157888752L132.6382227460345,480.85683460371797L133.4003678191927,482.0667851206129L133.79409940960335,482.3063948365475L133.5629697523092,481.03524389495607L134.42153013882302,481.22150433218854L134.57658575503422,481.7431584227116L135.367427665357,482.00138602834255L135.51483749341932,481.5464947687862L134.52920319018975,480.77191090171124L134.3795873560107,480.33925821941176L135.319817475665,478.620642793383L137.38020834517164,477.0722889743758L139.25015410999592,476.3990915445455L140.89293119272662,475.1510317136694ZM239.01172038560247,471.75283790193754L239.8214413484297,472.14516810759784L239.90859226510992,473.45048855051493L239.08475907300544,472.4561577358089ZM239.89127692737094,467.747027841809L240.74979712190668,468.3004311060303L241.6690900415997,469.42872867711355L242.00558866940344,470.7849543475592L242.03256989194642,471.791923216849L241.6626669735513,472.3931422142236L240.5228806589043,472.08004726263016L240.8008580639437,470.82250921178945L240.3251046483988,472.1374531094766L238.95006522499935,471.5953776478802L239.30355523722318,470.38765609635635L238.8844342088969,470.26758707911375L238.668051592207,469.7189439232214L239.16977123850802,469.07680497732065L238.764233221172,468.50958958568185ZM135.7641388507143,462.05697132593025L134.97980635388473,463.4635315972956L134.31211615135345,463.5850926173038L134.47890020220396,462.6080840014499ZM146.67646111277037,477.4732359601219L147.54903495605697,477.70648933051854L146.3460832244584,477.72628599178717ZM152.56293849763063,483.04166104160066L151.9053897812057,482.7640563469971L152.62487438261263,482.31154484474416ZM158.75201635651257,477.8469408783644L158.4890790753655,478.2295991757826L157.83385678294476,478.2358560470784ZM156.58222643706014,477.60712250634515L156.2564673867394,478.31258456859916L155.57612837419055,478.90191419832627L155.83724876332062,478.09440076473ZM158.04379180099005,477.73568073063456L157.47939644256275,478.3361706201956L157.0119156798589,477.9971277933695L157.49507237931763,477.5392023259278ZM161.107388272463,473.66108421249925L161.93536491367888,473.74691813687076L162.16888701852164,474.1419870590504L161.22006714960258,474.36748967495356L160.75786007442946,475.0459443186093L160.4818859937468,474.2966100782118ZM160.20809644026792,468.6824628661503L160.79296647888702,469.0684973098447L161.07342655908667,469.75867238621305L160.18024004236744,469.22640207784326ZM160.86705415946955,468.46549167696713L161.80902066822867,469.0197423996799L161.98220251781305,468.7349504364691L162.48680114562526,469.041905748372L162.1007581288707,469.60500533716714L162.72001805827537,469.6021070338604L163.04030843457278,468.9361056799395L164.13068963805773,469.5465361100881L163.34065932628477,470.23390248074895L163.6606306618357,470.23553022892906L163.66619587756216,471.01860872704316L164.76324769695103,470.87096203713594L164.13773009118972,472.17353407768036L163.52264447233793,472.1144967539365L162.72023470900794,471.65362213757334L162.46909781283566,471.8821636174917L163.12704725653944,472.297629851648L162.87007311280925,473.1515755623006L162.48162924360557,473.22322920166323L161.80383555188325,472.7527574226811L161.48822216276204,472.94874725989155L162.03437616565444,473.2722946707816L161.57179352882002,473.59667119560953L160.89670919393782,473.52552598781347L160.09621751839552,474.565891972898L159.52549280686938,474.4470499838876L159.9390994906138,475.0354004031454L158.67517486171107,476.51773247328373L157.7869454000265,476.67079650282807L158.05725051833718,476.0453729135189L158.83278373446473,475.2473146135476L158.42186341923806,475.29078251761166L158.60609599014774,474.59742263543905L158.0530922430639,475.1826354151359L157.81738346682738,475.0288373372629L158.3858109990972,474.22738481490626L157.50745444302476,473.9465746024664L156.65542623932646,474.18070168350573L156.80594305005712,474.6817847566325L157.2444574732088,474.2847753253896L157.97412787656916,474.2120128171649L157.30625552507973,475.5873732072047L156.45160932555518,475.05190295719586L156.41631573004872,473.7414306303722L155.66534393004002,473.0879213748146L155.78085761323712,472.2348843962148L156.11148927672747,471.65105797195105L157.066247415353,470.80161294351313L158.2846359121645,470.7687231668124L158.36615522985076,471.4238875199951L159.15777248577015,472.9933782446148L158.97118647884275,472.2678232132782L159.0675532628401,471.2836229192253L158.8091589110674,470.7372204334197L159.6947159549319,470.8206065978364L158.53324632460865,470.1940363999791L158.54023817497858,469.67644702785964L159.27190913826183,469.12562199412787L159.79665224841014,469.5330723187887L159.88967199427728,470.3922936687525L160.09916948239186,469.5186065905527L161.0804943184824,469.82830894962507L160.961486537507,469.13106457822613L161.62135749029886,469.62681470735555L160.83873400316722,468.708800296249ZM161.07432721138105,467.76576099516194L161.44375371068767,467.8465933993868L161.9307858834648,468.54417550118404L160.9670400879054,468.106895232024L160.31800189718138,468.05432100751113L160.8512201322567,467.48552542686406ZM164.07827545704004,465.62405464253993L164.34075136341494,466.1439997935589L164.83036108618137,465.91835202638634L164.66447009642206,466.6119153653468L165.283756743486,466.1804489123378L165.22709456825177,466.94471616859414L164.91563357027186,467.34011423403473L164.05790067605454,466.75909337155855L164.28369096658741,467.48469187192853L163.69796347114553,467.47070923731104L163.29480487615388,467.8398633161823L163.22897486346346,466.96625576263705L163.04116066235275,467.89420487935655L162.52330159333357,467.98426780205745L162.52935822014442,468.4487316211633L161.20343819730255,467.7130980123541L161.05238735506506,467.0704071450832L161.7818844369071,467.1520671194616L161.40173436968453,466.7531626777517L161.5876359174657,466.417339797361L162.47273097256277,466.5709149138686L162.3710806351485,465.76919592526974L162.86935661208204,465.2587422610044L163.47699100340623,465.36196624182816L163.9170614361774,466.23975767420546ZM162.89167125832628,464.670953819337L163.93566867203398,464.22943523034013L163.50144249228586,465.30785129749415L162.99066695691604,465.15303536468116ZM223.57579493433295,457.42892859319124L223.72635792014637,457.8206200417784L224.65743486299147,457.4984089449985L224.99227378507538,457.65748739257873L225.01116960768587,457.6432526921348L225.44896760427554,457.3109289011364L225.34552478737479,457.59213615951785L227.03269577707218,459.23748007763095L227.29803858245646,459.9867650283159L227.0341077408118,460.03509801569004L225.33892302569927,457.9544026741584L225.62659962862017,458.5675236407516L225.26929326254248,458.48902913608106L226.48713791614003,459.95467526912256L227.3236480598264,460.5102187111186L227.6094625799679,461.2117098346569L226.95995498720075,461.33298832280684L227.9756181886737,461.86440309321847L227.75623229758278,462.4758924855566L226.94125330039043,462.1141554695801L227.3590809111176,463.24353470198355L226.9419812159913,463.6351010654176L226.85355061447834,464.1941063592121L226.31970562142206,464.824596629616L225.87381956546386,464.1855243517581L225.68206925004546,463.317823700301L226.0398994678626,462.9014906299589L225.8753155169132,462.37503229001186L224.44666570664117,460.61281522428334L224.32338933968396,459.89080785888854L223.56132088007251,458.5816740851279L223.63942388545615,458.29350327543034L223.53473129302216,457.6918730563849L223.5891816216178,458.28936281194666L223.0090017084978,457.8094822816966L222.42195641902447,456.5072219064736ZM223.92340625640458,456.5092081981176L225.06672359632984,457.0992640191363L223.7926569837704,457.20476387969137L223.50336386691401,456.93775539410353ZM229.4527916102221,471.4858944591937L229.98180202630573,471.30269253463933L229.5577982543746,471.9143199678795ZM225.1942322066461,467.14383203701396L224.66991825939812,467.3508027019777L224.6223361286564,466.8381459053901L223.96683567126158,466.9382787704951L223.6629485996108,466.16500055925366L224.0477345998564,465.43876317717724L223.34010266214733,465.19492687865693L223.18687036302947,464.2132433348664L222.63883204350725,464.438167644602L221.88491097410335,463.8711916349574L222.59182148218932,463.6480904194067L222.11384079121143,463.4762549919926L222.09994642589356,462.7518555513419L222.8047301629171,462.342990256485L222.82981320244738,462.7743306183191L223.28067502326854,462.5495789026841L224.11820798978056,462.91937181594204L224.71238717925075,462.7412511916347L224.85254617619546,463.57787185234486L226.10839353138925,465.73190650051333L226.87687181845249,467.3033592922318L227.42515033488036,469.75684791181715L227.58637926982192,470.29948792568905L226.95746255146253,469.98743939086717L225.55459191772712,468.43222005921456L225.73646937137642,467.7749127550259L225.2201675579726,468.06136653658297ZM235.044832372036,466.75417045718353L235.4097904154803,467.39663088187154L236.6029734738131,467.8506549131109L236.25835477632415,468.2007859969936L236.81025366139414,468.7925439285362L236.13453304467225,469.32106570258304L235.622047189041,469.0331299763621L235.80348172351495,468.7056832225957L235.05056135328743,468.4695170506509L234.7787633649802,468.81594052622586L234.2357260921699,467.85681425105577L234.59152207789947,467.5857030548885L234.60085112941903,466.94523898939843ZM233.7784605433477,466.3927692862578L234.21165685678574,466.668925074626L234.30962058934603,467.4394934718433L233.67041269141635,467.94334432872466L232.79576402601785,467.5331826701434L232.82159389874892,466.8562490962878ZM236.13004854012917,467.45934645214675L235.3181134806061,467.05200537586694L235.16092760759182,466.2870119140136L234.79498406831596,465.78216527195997L235.34578503803337,465.88420577874416L235.9486625934265,466.43601170096633L236.32644313642575,466.233029722144L237.00371353850915,467.02549021692096L236.64387029630367,467.7281410940696ZM232.35854148374665,464.40202341297635L234.08259812349937,465.3770818188004L233.32263789364166,466.2465762081827L232.85018254952914,466.30358869895747L232.66617363837543,465.49068565550584L232.14562418778172,464.5137206067204ZM229.2290597648631,465.82532714547693L229.03237535899558,465.47988118855733L229.63802510114044,465.49562298197424L229.59396617596155,467.33394213403045L229.75517146176236,469.03737285899973L229.9721322961996,468.8239939958084L230.16702073250545,470.0897455116683L229.85830497752957,469.9592047968022L229.34053979957093,468.7756717228452L229.77222008234884,470.779152043263L229.29540381219226,470.46240883190075L228.75190838420502,469.2896943468279L228.63104032388316,468.25277525727137L229.27705449337356,468.03550200201613L228.82142290995426,467.4029860287914L228.05808996534944,467.51193042449574L228.0824256340651,467.150299845047L227.44735201503798,466.5279071594895L227.16340151262216,465.721430096219L227.65645704265296,465.84993868588595L227.65624587958342,465.04560319948064L228.45243589526825,465.18508139646286ZM228.47558536020574,463.6591493241575L230.19979181699287,463.7032801758985L231.30521650624766,463.3894009943291L231.88172695083455,463.7408603933427L232.5827504876948,465.3274042230711L232.46187148233997,465.7856696601177L231.6415105522342,465.34064652774936L230.84616551808094,464.4218781607844L231.57825878183246,465.82624146090717L232.08540312868308,465.80341518380516L232.30896800173417,466.2817959825336L232.09650740074463,466.9753661500151L231.1751373799422,466.8905960260787L231.28727433609254,467.18595048393564L230.56022961911566,467.53089701717414L229.8323178395853,466.09093855274324L229.81788834091782,465.2772750435118L229.43609652937386,465.3537361937642L229.0963964865488,464.84012743110173L228.06641014256007,464.2589131914853ZM220.66763234402777,459.4944266623503L220.44391747001026,459.9607621511771L220.88727562600067,459.9563460754832L221.36642666086476,458.9540953714598L221.7067191391512,458.69786876979634L223.0548798472364,458.79804586329084L223.36857867008098,459.1912303445972L223.24643788999802,459.81758804538043L222.39069162195952,459.63523740508106L223.5668487314632,460.30611552154227L222.6895112015186,460.74416217824427L222.01523913095957,460.44429459425544L220.04936053539984,459.9770388534408L222.14438857476173,460.73981503116164L222.79740243721193,461.2231850722413L223.11685395488894,460.75679456303345L223.7175585437506,460.5744156884123L224.54071873672586,462.22049464092265L223.74400305991466,462.57904357512126L223.32095275659566,462.31458230394514L220.71197677384075,461.360552959975L221.89110552946596,462.2344726489336L222.18022207221225,463.09757964868936L221.79938568416767,463.80063104728083L221.31468692591784,463.77799268076564L220.52166099042427,463.05275896612454L221.32531065927088,463.41013906941043L219.8140291664262,462.470079088676L219.8426764178742,462.1736819788517L219.03911281048204,461.6894799557118L218.82494672216887,461.46755749509464L218.6898774229817,461.50718751232284L218.60989564840057,461.5310732751887L218.5303057091224,460.4084040759651L219.9131295425886,461.14117041280804L219.91952623293807,461.1083353343647L218.18720202617584,459.981213831513L218.17935435975863,459.1655237225771L218.66195381481901,459.3130434760321L218.89452127408927,458.86122240906457L219.44116543599785,458.7807223735607L219.8032945579192,458.12839516461827L221.08577581428295,458.5347893225639ZM217.89234998597402,459.9186718339834L218.56017916256738,460.319979389687L218.45598962681396,461.46768603886096L218.00808761124122,461.1442584476658ZM220.95203966725592,457.56265738116605L220.94000197735772,457.52067363665816L220.95203966725592,457.56265738116605ZM221.67972306960104,464.00408949867426L222.36670033109405,464.6203130025426L222.76749173345678,465.40310319367825L222.705767306209,465.9540512834207L221.99866374687775,466.2928074158223L221.40409600839024,464.115560775418ZM126.36705446414851,434.43827337706534L127.15154996875121,434.7560856583128L126.08340159875428,435.57251465923775L126.14817402271518,434.36523345438707ZM127.56361189147704,433.04627682021686L128.37163363543584,433.9645029962049L128.35058833548482,434.6433972726403L128.7026537443618,435.47049563024797L128.56981628095744,436.0697537476015L127.95105701778397,435.11337511975336L126.16014468634353,434.2794225865027L126.36028228915242,433.66116715456667L126.95764707544691,432.9378042548177ZM128.9483914652811,431.72278737130586L129.8386209050797,432.20365196642894L130.34054878213325,432.86844381473577L129.50847770378977,433.3945232960752L129.0331240538034,434.1369267041843L128.43868394199507,434.0474556991843L127.8221545984946,433.09636343054984L127.21660640494311,432.710703716841L127.30363228395198,432.2622860567823L128.07945189696923,431.75822717770956ZM131.49202567780503,452.2366611973657L131.7356090624889,452.72355494864945L131.3958041909119,452.91721623148607ZM119.46956170202459,448.9509688066259L119.55028079405486,449.66545121115297L120.23438978016569,449.66024968314474L120.81567121374653,450.10355373427484L120.39994030914839,451.6092742293721L120.76903001831408,452.5343847411682L119.23593186764927,452.67531066387266L118.53831642006499,453.3085698659902L117.87801957090517,452.46755118175093L117.2998177059016,452.4041624420789L116.26730012454803,451.24381338600284L115.8897525910279,451.2006134072576L115.26453685600539,450.5099436690225L115.18236063010016,449.70252307563914L115.55322174205378,449.47029940363626L116.97290626403846,449.9776733319744L117.12352518996853,449.5467713350895L118.41061736608529,449.0373733722023L119.4258720808354,449.29485192474044ZM98.61119497915877,442.79840040877514L98.57833053409735,443.42995502214416L99.25543681734214,444.41785874958936L99.92275661985663,444.67570354691924L100.29031257950268,445.27956834232293L99.14987306433927,444.9313452637385L98.34521664634367,443.56660552523937L98.02672155664135,443.3358510591653ZM123.93696490792226,446.4173510458973L124.02473816131425,446.82695167411003L124.77763646030058,446.7395830111665L124.58298576246442,447.23717066243927L125.313214942143,447.33958474858855L125.86039243711971,447.7137646803037L125.91751663984803,448.3963382557914L125.27081419894927,448.9491937871949L124.7580793534389,449.05839539485635L124.92754860800908,449.5521769669196L124.4680401935677,449.68258187707823L123.94535739103112,450.61379187157826L123.47195089349906,450.4880937759984L122.72760164895445,449.5015847777135L123.34049402188177,448.89692155130183L122.60212879576187,449.04954844181054L121.93750588792182,448.57841457493333L123.5259617136175,447.78449406955224L123.38195084445948,447.2748008778866L123.86595740899747,447.14504719122806ZM189.98190643298778,453.11812380856276L189.03183738493928,454.48085835914105L189.0554900245418,454.12291149746517ZM178.29954949757936,453.96785820991266L178.1477507814513,454.6090715103768L177.66795692301955,454.7977606783902ZM177.63235660308507,454.19199004802516L177.82012043001302,453.3965035045607L178.122228857793,453.70892115202156ZM177.56878943977523,453.19842508747433L177.2402733641618,454.3297938097779L176.81997725876283,453.9538839927459ZM180.3925149291786,451.93468076258125L180.80821850873804,451.89611208914994L180.5844677268,452.4593250954519L181.14045662836273,452.1747789126134L180.30892343410622,453.2145619768667L179.50100078935827,454.68670818664833L179.72822056461266,455.1037644109399L178.99024721777073,455.66845046646466L178.18586236389703,455.83185300058403L178.28900367579445,455.2989303567008L179.59922508149384,453.6489362412555L180.2879029030439,452.53329410794134ZM177.58722180548622,451.94619734700973L177.56322537133622,452.606210739864L177.16515296844292,452.3526619237569ZM182.2068791290381,450.8016389889149L182.80623663506003,450.8629914307666L182.79482431702672,451.31700656562447L183.53651509102053,451.05267891790135L183.7083620938467,451.2848862132192L182.6747661535592,451.892379086192L182.11904524246754,452.47549624378445L181.83333005100772,452.21359112295386L182.45732839810972,451.5883513716726L181.72414441009283,451.80404144819687L181.66216843518728,451.49423530472467ZM177.95107976527572,452.7375878180429L178.11260764473866,451.52206906818526L178.8135384479398,451.5596759766266L178.50327317446337,453.35765348349344ZM184.48268237823584,449.8356344559575L184.49609167385432,450.02752039402264L183.27468209791124,450.91049389981634L182.9701278486045,450.51789398544435ZM179.19304008798585,449.76297102704865L179.64833021474075,449.9213913084173L179.09262475927036,450.24956691254374ZM175.33110895680014,450.11991186191034L175.33624352640228,450.1693517998923L175.33110895680014,450.11991186191034ZM176.7567598929102,449.53453759464895L177.13626956590753,450.1530481727914L176.6388719405183,449.9845580247725ZM177.1609586110638,448.4096005591156L177.5944943520375,449.11934067647144L176.89502214285048,449.2835610002681ZM160.22838960380264,459.1629641126925L160.51057521541927,459.5518495125852L159.82293137319675,459.7017466393948ZM169.5091170569814,458.98949239075296L169.21360935471492,459.7360637072571L169.28020791552564,458.890590998513ZM165.10257462154675,452.34232072578976L164.72611732886952,452.7901271740143L164.9569684501712,451.8536087346595ZM165.97782242109676,386.70832492885023L165.85574750108617,387.2169271938481L165.51734461214778,386.7608007666545ZM133.97960276613978,429.94152763137015L134.04829673458278,430.49075323704153L133.1237552696232,430.2367470596517ZM107.99950676545515,423.79577233779185L107.97761406534677,424.4882803363394L109.55718597191398,425.69916884010587L111.1815449112531,425.2035185440829L111.69186409870106,425.41652580272284L112.07768578759422,426.04832867992053L112.04443580085481,426.85299197120804L113.06642141878322,427.4797580439045L113.267151278308,428.0010873714002L114.75774875315187,428.4684674648574L115.62208760407498,428.9325206977747L114.94417257898276,429.80796897230005L113.69681458880845,429.2802786214161L112.6789736139049,430.1013094741241L112.73254494470655,430.44886303543575L112.08148416651056,430.4367335937909L112.33097280206144,429.95083052579196L111.90375223113148,429.11115440227525L110.9503907788339,428.5967428162576L111.18286250548809,428.07908545579636L110.37668139809182,427.05765644811123L109.69176985538783,426.45848839196134L108.36424439001972,426.6548321645705L107.83594588440025,426.9757844601689L107.07157158857882,426.3714210702526L106.96960067877905,425.5285896946094ZM130.4079022061482,410.26832960243956L130.01107400847127,410.4911439413336L128.33771664091708,410.8128553564897ZM236.86619765831495,475.8724010377224L237.32501989233913,476.09345932805275L237.36094817284095,476.8047611815113L236.54966700702042,476.01452067066873ZM241.9672719602919,473.6016582052718L242.3398616675878,474.0721384525516L241.92210773167412,474.6368621795447L241.2238018775467,474.36217994618096ZM235.96371614792344,474.36397227879445L236.7885151875045,475.21122848480644L236.62199921539158,475.51247607169563L236.0398219908958,475.38371971947487L236.22181457487696,474.93183015576994ZM234.8640574851357,474.35958609725407L235.4356625854805,474.96769546469466L235.51917397226669,475.53884059454975L237.2384331701735,476.8868871736307L237.55265413434626,477.34684173242766L236.9305294819613,477.4793178766226L235.64747909201674,476.38365585308054L234.68987789871466,475.39439772404455L234.47362218030145,474.50361997776724ZM240.5772344668424,472.3867495142209L241.17544416293808,472.7536974091178L241.4540388280691,473.67608993020355L240.47493630783435,473.9077378013874L240.62953101107024,473.05900918395895L240.22996632994258,472.72962070865646ZM233.7913926162213,473.9932731872458L234.38051241029996,474.3373613207615L234.35948098177064,474.69847207899215L233.74816578563633,474.93916294626524L233.52885695704873,474.1965923861756ZM232.903555142929,473.8145574421348L233.3292281995673,473.90049563126644L232.76136856235854,474.69861916955773ZM233.20339207738033,473.21417908249157L232.6379381108132,473.6548647988357L232.80636143141882,473.0705711733097ZM232.06116252834443,473.1164544947939L232.60100801803785,473.06839759000576L232.4882819259397,473.77260456301974L232.01114722683837,473.5498706858179ZM233.32876879662666,472.6098759527225L233.71027702375176,472.9595183207828L233.54274907753975,473.3629099361658L233.0585349761481,472.9573064983406ZM232.0433242061291,471.198899487104L233.01710978605496,471.3336887888937L232.25673302730115,471.52675544061543L232.4801786575353,472.0243087560993L231.71631237108306,471.662612884105ZM232.84355684614547,470.40816074864205L233.27381970587396,471.2276892351503L232.77084999240728,470.8989801277899ZM239.2526118550399,467.99514190850937L238.65732718251036,468.3515247795035L239.1415518757375,467.70071936577034ZM231.8952089598639,468.99620363778007L232.40142865127547,468.92961162462063L232.65309169266231,469.77006445882887L232.31795425873136,469.74157686677904L231.5731043036985,470.4420439016269L231.39971289799956,470.9432333843409L231.00429216584428,470.80634410662987L231.32484163433412,469.5715145600935ZM230.89090666889086,467.98688589295307L231.5119220794117,468.00318390062955L232.43045750698448,467.68635036320114L233.21020647781182,468.4635382575001L233.13209038800775,469.03258522465455L233.80843961305584,469.4851554866322L234.32050767310824,469.21825222255694L235.13278719011575,469.6009441348799L235.99513592285854,470.2833933889445L236.41309883702223,471.32772473762617L236.6642915781056,470.97087794049855L237.09834283785204,471.551017033724L237.75913255077205,471.96381960105845L236.45860326785242,471.6460366215648L235.92484943214635,472.35573975564L236.72083552179475,471.8721522854917L237.18538887452752,472.58373416335877L237.50629608064787,472.294424377563L238.3843490658594,473.0308052461725L237.90032324037793,473.53790779750585L238.51657927736164,473.45845790055733L238.60732683371987,472.8778663178742L239.07926357402516,473.8842842350996L238.62599538543614,474.34658495129884L239.18897910796625,474.34373826746236L239.6022471277492,475.13085448523896L239.10096800088752,475.32441854982915L239.77335584885762,475.5363779431747L239.82466020439477,476.4388580377312L238.95881025726783,476.47464124796795L237.89507336499616,475.2273954305658L237.18142832180098,475.4796684157445L237.21772075484552,474.49050124871235L236.87650029009475,474.8670343277715L236.84324450020938,474.20366579725794L236.51627812069376,474.4983938428884L235.34834472540481,474.0513976326274L234.397377699511,474.2636163288451L234.22350835116663,473.60072147512193L234.8770116172488,473.3962995474784L234.24022125587192,472.9878319240385L234.23030167912384,471.94990947978295L233.77215375507234,472.4215539415793L233.1202473514683,472.337314679534L233.5498353359162,470.895262986422L233.0928087193849,470.5046407597551L232.34893184151065,468.8390377897559L231.30616518153758,469.05922715848925L230.8733513702333,468.5036829883357Z"></path></g>',c="http://d3js.org/d3.v3.min.js",d=a.util;
-a.define("nx.graphic.Topology.USMapLayout",{properties:{topology:{},projection:{}},methods:{process:function(a,b,e){"undefined"==typeof d3?d.loadScript(c,function(){this._process(a,b,e)}.bind(this)):this._process(a,b,e)},_process:function(b,c,d){var e=this.topology(),f=d3.geo.albersUsa();e.prependLayer("usmap","nx.graphic.Topology.USMapLayer");var g=c.longitude||"model.longitude",h=c.latitude||"model.latitude",i=g.split(".").pop(),j=h.split(".").pop();e.graph().eachVertexSet(function(b){b.positionGetter(function(){var c=f([a.path(b,i),a.path(b,j)]);return{x:c[0],y:c[1]}}),b.positionSetter(function(a){var c=f.invert([a.x,a.y]);b.set(i,c[0]),b.set(j,c[1])}),b.position(b.positionGetter().call(b))}),e.graph().eachVertex(function(b){b.positionGetter(function(){var c=f([a.path(b,i),a.path(b,j)]);return{x:c[0],y:c[1]}}),b.positionSetter(function(a){var c=f.invert([a.x,a.y]);b.set(i,c[0]),b.set(j,c[1])}),b.position(b.positionGetter().call(b))}),e.stage().resetFitMatrix(),this.projection(f),e.fit(function(){d&&d.call(e)},this,!1)}}}),a.define("nx.graphic.Topology.USMapLayer",a.graphic.Topology.Layer,{view:{type:"nx.graphic.Group",content:{name:"map",type:"nx.graphic.Group"}},methods:{draw:function(){var a=this.view("map"),c="http://www.w3.org/2000/svg",d=(new DOMParser).parseFromString('<svg xmlns="'+c+'">'+b+"</svg>","text/xml");a.view().dom().$dom.appendChild(document.importNode(d.documentElement.firstChild,!0))},updateMap:function(){}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.TooltipPolicy",{events:[],properties:{topology:{},tooltipManager:{}},methods:{init:function(a){this.inherited(a),this.sets(a),this._tm=this.tooltipManager()},pressStage:function(){this._tm.closeAll()},zoomstart:function(){this._tm.closeAll()},clickNode:function(a){this._tm.openNodeTooltip(a)},clickLinkSetNumber:function(a){this._tm.openLinkSetTooltip(a)},dragStageStart:function(){this._tm.closeAll()},clickLink:function(a){this._tm.openLinkTooltip(a)},resizeStage:function(){this._tm.closeAll()},fitStage:function(){this._tm.closeAll()},deleteNode:function(){this._tm.closeAll()},deleteNodeSet:function(){this._tm.closeAll()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Tooltip",a.ui.Popover,{properties:{lazyClose:{value:!1},pin:{value:!1},listenWindow:{value:!0}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.NodeTooltipContent",a.ui.Component,{properties:{node:{set:function(b){var c=b.model();this.view("list").set("items",new a.data.Dictionary(c.getData())),this.title(b.label())}},topology:{},title:{}},view:{content:[{name:"header",props:{"class":"n-topology-tooltip-header"},content:[{tag:"span",props:{"class":"n-topology-tooltip-header-text"},name:"title",content:"{#title}"}]},{name:"content",props:{"class":"n-topology-tooltip-content n-list"},content:[{name:"list",tag:"ul",props:{"class":"n-list-wrap",template:{tag:"li",props:{"class":"n-list-item-i",role:"listitem"},content:[{tag:"label",content:"{key}: "},{tag:"span",content:"{value}"}]}}}]}]},methods:{init:function(a){this.inherited(a),this.sets(a)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.LinkTooltipContent",a.ui.Component,{properties:{link:{set:function(b){var c=b.model();this.view("list").set("items",new a.data.Dictionary(c.getData()))}},topology:{},tooltipmanager:{}},view:{content:{props:{"class":"n-topology-tooltip-content n-list"},content:[{name:"list",tag:"ul",props:{"class":"n-list-wrap",template:{tag:"li",props:{"class":"n-list-item-i",role:"listitem"},content:[{tag:"label",content:"{key}: "},{tag:"span",content:"{value}"}]}}}]}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.LinkSetTooltipContent",a.ui.Component,{properties:{linkSet:{set:function(b){var c=[];a.each(b.model().edges(),function(a){c.push({item:"Source:"+a.sourceID()+" Target :"+a.targetID(),edge:a})}),this.view("list").items(c)}},topology:{}},view:[{props:{style:{maxHeight:"247px",overflow:"auto","overflow-x":"hidden"}},content:{name:"list",props:{"class":"list-group",style:"width:200px",template:{tag:"a",props:{"class":"list-group-item"},content:"{item}",events:{click:"{#_click}"}}}}}],methods:{_click:function(a){a.model().edge}}})}(nx,nx.global),function(a,b){a.define("nx.graphic.Topology.TooltipManager",{events:["openNodeToolTip","closeNodeToolTip","openLinkToolTip","closeLinkToolTip","openLinkSetTooltip","closeLinkSetToolTip"],properties:{topology:{value:null},tooltips:{value:function(){return new a.data.ObservableDictionary}},nodeTooltip:{},linkTooltip:{},linkSetTooltip:{},nodeSetTooltip:{},nodeTooltipClass:{value:"nx.graphic.Topology.Tooltip"},linkTooltipClass:{value:"nx.graphic.Topology.Tooltip"},linkSetTooltipClass:{value:"nx.graphic.Topology.Tooltip"},nodeSetTooltipClass:{value:"nx.graphic.Topology.Tooltip"},nodeTooltipContentClass:{value:"nx.graphic.Topology.NodeTooltipContent"},linkTooltipContentClass:{value:"nx.graphic.Topology.LinkTooltipContent"},linkSetTooltipContentClass:{value:"nx.graphic.Topology.LinkSetTooltipContent"},nodeSetTooltipContentClass:{value:"nx.graphic.Topology.NodeSetTooltipContent"},showNodeTooltip:{value:!0},showLinkTooltip:{value:!0},showLinkSetTooltip:{value:!0},showNodeSetTooltip:{value:!0},tooltipPolicyClass:{get:function(){return void 0!==this._tooltipPolicyClass?this._tooltipPolicyClass:"nx.graphic.Topology.TooltipPolicy"},set:function(c){if(this._tooltipPolicyClass!==c){this._tooltipPolicyClass=c;var d=this.topology(),e=a.path(b,this.tooltipPolicyClass());if(e){var f=new e({topology:d,tooltipManager:this});this.tooltipPolicy(f)}return!0}return!1}},tooltipPolicy:{value:function(){var b=this.topology();return new a.graphic.Topology.TooltipPolicy({topology:b,tooltipManager:this})}},activated:{get:function(){return void 0!==this._activated?this._activated:!0},set:function(a){return this._activated!==a?(this._activated=a,!0):!1}}},methods:{init:function(c){this.inherited(c),this.sets(c),this.registerTooltip("nodeTooltip",this.nodeTooltipClass()),this.registerTooltip("linkTooltip",this.linkTooltipClass()),this.registerTooltip("linkSetTooltip",this.linkSetTooltipClass()),this.registerTooltip("nodeSetTooltip",this.nodeSetTooltipClass());var d=this.getTooltip("nodeTooltip");d.on("close",function(){this.fire("closeNodeToolTip")},this),d.view().dom().addClass("n-topology-tooltip"),this.nodeTooltip(d);var e=this.getTooltip("linkTooltip");e.on("close",function(){this.fire("closeLinkToolTip",e)},this),e.view().dom().addClass("n-topology-tooltip"),this.linkTooltip(e);var f=this.getTooltip("linkSetTooltip");f.on("close",function(){this.fire("closeLinkSetToolTip",f)},this),f.view().dom().addClass("n-topology-tooltip"),this.linkSetTooltip(f);var g=this.getTooltip("nodeSetTooltip");g.on("close",function(){this.fire("closeNodeSetToolTip")},this),g.view().dom().addClass("n-topology-tooltip"),this.nodeSetTooltip(g);var h=this.topology(),i=a.path(b,this.tooltipPolicyClass());if(i){var j=new i({topology:h,tooltipManager:this});this.tooltipPolicy(j)}},registerTooltip:function(c,d){var e=this.tooltips(),f=this.topology(),g=d;a.is(g,"String")&&(g=a.path(b,d));var h=new g;h.sets({topology:f,tooltipManager:this,model:f.graph(),"data-tooltip-type":c}),e.setItem(c,h)},getTooltip:function(a){var b=this.tooltips();return b.getItem(a)},executeAction:function(a,b){if(this.activated()){var c=this.tooltipPolicy();c&&c[a]&&c[a].call(c,b)}},openNodeTooltip:function(c,d){var e,f=this.topology(),g=this.nodeTooltip();if(g.close(!0),this.showNodeTooltip()!==!1){var h=d||f.getAbsolutePosition(c.position()),i=a.path(b,this.nodeTooltipContentClass());i&&(e=new i,e.sets({topology:f,node:c,model:f.model()})),e&&(g.content(null),e.attach(g));var j=c.getBound(!0);g.open({target:h,offset:Math.max(j.height,j.width)/2}),this.fire("openNodeToolTip",c)}},openNodeSetTooltip:function(c,d){var e,f=this.topology(),g=this.nodeSetTooltip();if(g.close(!0),this.showNodeSetTooltip()!==!1){var h=d||f.getAbsolutePosition(c.position()),i=a.path(b,this.nodeSetTooltipContentClass());i&&(e=new i,e.sets({topology:f,nodeSet:c,model:f.model()})),e&&(g.content(null),e.attach(g));var j=c.getBound(!0);g.open({target:h,offset:Math.max(j.height,j.width)/2}),this.fire("openNodeSetToolTip",c)}},openLinkTooltip:function(c,d){var e,f=this.topology(),g=this.linkTooltip();if(g.close(!0),this.showLinkTooltip()!==!1){var h=d||f.getAbsolutePosition(c.centerPoint()),i=a.path(b,this.linkTooltipContentClass());i&&(e=new i,e.sets({topology:f,link:c,model:f.model()})),e&&(g.content(null),e.attach(g)),g.open({target:h,offset:4}),this.fire("openLinkToolTip",c)}},openLinkSetTooltip:function(c,d){var e,f=this.topology(),g=this.linkSetTooltip();if(g.close(!0),this.showLinkSetTooltip()!==!1){var h=d||f.getAbsolutePosition(c.centerPoint()),i=a.path(b,this.linkSetTooltipContentClass());i&&(e=new i,e.sets({topology:f,linkSet:c,model:f.model()})),e&&(g.content(null),e.attach(g)),g.open({target:h,offsetX:0,offsetY:8}),this.fire("openLinkSetToolTip",c)}},closeAll:function(){this.tooltips().each(function(a){a.value().close(!0)},this)},dispose:function(){this.tooltips().each(function(a){a.value().close(!0),a.value().dispose()},this),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Scene",a.data.ObservableObject,{properties:{topology:{value:null}},methods:{init:function(a){this.sets(a)},activate:function(){},deactivate:function(){}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.DefaultScene",a.graphic.Topology.Scene,{events:[],methods:{activate:function(){this._topo=this.topology(),this._nodesLayer=this._topo.getLayer("nodes"),this._nodeSetLayer=this._topo.getLayer("nodeSet"),this._linksLayer=this._topo.getLayer("links"),this._linkSetLayer=this._topo.getLayer("linkSet"),this._groupsLayer=this._topo.getLayer("groups"),this._tooltipManager=this._topo.tooltipManager(),this._nodeDragging=!1,this._sceneTimer=null,this._interval=600},deactivate:function(){this._tooltipManager.closeAll()},dispatch:function(a,b,c){this._tooltipManager.executeAction(a,c)},pressStage:function(){},clickStage:function(a,b){b.target!=this._topo.stage().view().dom().$dom||b.shiftKey||this._topo.selectedNodes().clear()},dragStageStart:function(){var b=this._nodesLayer.nodes().length;b>300&&this._linksLayer.hide(),this._recover(),this._blockEvent(!0),a.dom.Document.html().addClass("n-moveCursor")},dragStage:function(a,b){var c=this._topo.stage();c.applyTranslate(b.drag.delta[0],b.drag.delta[1])},dragStageEnd:function(){this._linksLayer.show(),this._blockEvent(!1),a.dom.Document.html().removeClass("n-moveCursor")},projectionChange:function(){},zoomstart:function(){var a=this._nodesLayer.nodes().length;a>300&&this._linksLayer.setStyle("display","none"),this._recover()},zooming:function(){},zoomend:function(){this._linksLayer.setStyle("display","block"),this._topo.adjustLayout()},beforeSetData:function(){},afterSetData:function(){},insertData:function(){},ready:function(){},enterNode:function(b,c){clearTimeout(this._sceneTimer),this._nodeDragging||(this._sceneTimer=setTimeout(function(){this._nodeDragging||this._topo.activeRelatedNode(c)}.bind(this),this._interval),this._recover()),a.dom.Document.body().addClass("n-dragCursor")},leaveNode:function(){clearTimeout(this._sceneTimer),this._nodeDragging||this._recover(),a.dom.Document.body().removeClass("n-dragCursor")},hideNode:function(){},dragNodeStart:function(){this._nodeDragging=!0,this._blockEvent(!0),a.dom.Document.html().addClass("n-dragCursor"),setTimeout(this._recover.bind(this),0)},dragNode:function(a,b){this._topo._moveSelectionNodes(event,b)},dragNodeEnd:function(){this._nodeDragging=!1,this._blockEvent(!1),this._topo.stage().resetFitMatrix(),a.dom.Document.html().removeClass("n-dragCursor")},pressNode:function(){},clickNode:function(a,b){this._nodeDragging||(event.shiftKey||this._topo.selectedNodes().clear(),b.selected(!b.selected()))},selectNode:function(a,b){var c=this._topo.selectedNodes();b.selected()?-1==c.indexOf(b)&&this._topo.selectedNodes().add(b):-1!==c.indexOf(b)&&this._topo.selectedNodes().remove(b)},updateNodeCoordinate:function(){},enterLink:function(){},pressNodeSet:function(){},clickNodeSet:function(a,b){clearTimeout(this._sceneTimer),this._recover(),event.shiftKey?b.selected(!b.selected()):b.collapsed(!1)},enterNodeSet:function(a,b){clearTimeout(this._sceneTimer),this._nodeDragging||(this._sceneTimer=setTimeout(function(){this._topo.activeRelatedNode(b)}.bind(this),this._interval))},leaveNodeSet:function(){clearTimeout(this._sceneTimer),this._nodeDragging||this._recover()},beforeExpandNodeSet:function(b,c){this._blockEvent(!0);for(var d=c.parentNodeSet();d&&d.group;){var e=d.group;e.clear(),e.nodes(a.util.values(d.nodes())),e.draw(),d=d.parentNodeSet()}this._recover()},expandNodeSet:function(b,c){clearTimeout(this._sceneTimer),this._recover(),this._topo.stage().resetFitMatrix(),this._topo.fit(function(){c.group=this._groupsLayer.addGroup({shapeType:"nodeSetPolygon",nodeSet:c,nodes:a.util.values(c.nodes()),label:c.label(),color:"#9BB150",id:c.id()});for(var b=c.parentNodeSet();b&&b.group;)b.group.draw(),b=b.parentNodeSet();this._blockEvent(!1),this._topo.adjustLayout()},this,c.animation()?1.5:!1)},beforeCollapseNodeSet:function(b,c){this._blockEvent(!0),c.group&&(this._groupsLayer.removeGroup(c.id()),delete c.group),a.each(c.nodeSets(),function(a){a.group&&(this._groupsLayer.removeGroup(a.id()),delete a.group)},this),this._topo.fadeIn(),this._recover()},collapseNodeSet:function(b,c){for(var d=c.parentNodeSet();d&&d.group;){var e=d.group;e.clear(),e.nodes(a.util.values(d.nodes())),d=d.parentNodeSet()}this._topo.stage().resetFitMatrix(),this._topo.fit(function(){this._blockEvent(!1)},this,c.animation()?1.5:!1)},removeNodeSet:function(a,b){b.group&&(this._groupsLayer.removeGroup(b.id()),delete b.group),this._topo.stage().resetFitMatrix()},updateNodeSet:function(b,c){c.group&&(c.group.clear(),c.group.nodes(a.util.values(c.nodes())))},dragNodeSetStart:function(){this._nodeDragging=!0,this._recover(),this._blockEvent(!0),a.dom.Document.html().addClass("n-dragCursor")},dragNodeSet:function(a,b){this._topo._moveSelectionNodes(event,b)},dragNodeSetEnd:function(){this._nodeDragging=!1,this._blockEvent(!1),a.dom.Document.html().removeClass("n-dragCursor"),this._topo.stage().resetFitMatrix()},selectNodeSet:function(a,b){var c=this._topo.selectedNodes();b.selected()?-1==c.indexOf(b)&&this._topo.selectedNodes().add(b):-1!==c.indexOf(b)&&this._topo.selectedNodes().remove(b)},addNode:function(){this._topo.stage().resetFitMatrix(),this._topo.adjustLayout()},addNodeSet:function(){this._topo.stage().resetFitMatrix(),this._topo.adjustLayout()},removeNode:function(){this._topo.adjustLayout()},dragGroupStart:function(){},dragGroup:function(a,b){if(event){var c=this._topo.stageScale();b.updateNodesPosition(event.drag.delta[0],event.drag.delta[1]),b.move(event.drag.delta[0]*c,event.drag.delta[1]*c)}},dragGroupEnd:function(){},clickGroupLabel:function(){},collapseNodeSetGroup:function(a,b){var c=b.nodeSet();c&&c.collapsed(!0)},enterGroup:function(b,c){if(a.is(c,"nx.graphic.Topology.NodeSetPolygonGroup")){var d=c.nodeSet();this._topo.activeNodes(a.util.values(d.nodes())),this._topo.fadeOut(),this._groupsLayer.fadeOut(),c.view().dom().addClass("fade-active-item")}},leaveGroup:function(a,b){b.view().dom().removeClass("fade-active-item"),this._topo.fadeIn(),this._topo.recoverActive()},right:function(){this._topo.move(30,null,.5)},left:function(){this._topo.move(-30,null,.5)},up:function(){this._topo.move(null,-30,.5)},down:function(){this._topo.move(null,30,.5)},pressR:function(){a.DEBUG&&this._topo.activateLayout("force")},pressA:function(){if(a.DEBUG){var b=this._topo.selectedNodes().toArray();this._topo.selectedNodes().clear(),this._topo.aggregationNodes(b)}},pressS:function(){a.DEBUG&&this._topo.activateScene("selection")},pressM:function(){a.DEBUG&&this._topo.activateScene("default")},pressF:function(){a.DEBUG&&this._topo.fit()},topologyGenerated:function(){this._topo.adjustLayout()},_recover:function(){this._topo.fadeIn(),this._topo.recoverActive()},_blockEvent:function(a){this._topo.blockEvent(a)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.SelectionScene",a.graphic.Topology.DefaultScene,{methods:{activate:function(a){this.appendRect(),this.inherited(a),this.topology().dom().addClass("n-crosshairCursor")},deactivate:function(){this.inherited(),this.rect.dispose(),delete this.rect,this.topology().dom().removeClass("n-crosshairCursor"),a.dom.Document.html().removeClass("n-crosshairCursor")},_dispatch:function(a,b,c){this[a]&&this[a].call(this,b,c)},appendRect:function(){var b=this.topology();this.rect||(this.rect=new a.graphic.Rect({"class":"selectionRect"}),this.rect.attach(b.stage().staticLayer())),this.rect.sets({x:0,y:0,width:0,height:0})},dragStageStart:function(){this.rect.set("visible",!0),this._blockEvent(!0),a.dom.Document.html().addClass("n-crosshairCursor")},dragStage:function(a,b){var c=this.rect,d=b.drag.origin,e=b.drag.offset;e[0]<0?(c.set("x",d[0]+e[0]),c.set("width",-e[0])):(c.set("x",d[0]),c.set("width",e[0])),e[1]<0?(c.set("y",d[1]+e[1]),c.set("height",-e[1])):(c.set("y",d[1]),c.set("height",e[1]))},dragStageEnd:function(){this._stageTranslate=null,this.rect.set("visible",!1),this._blockEvent(!1),a.dom.Document.html().removeClass("n-crosshairCursor")},_getRectBound:function(){var a=this.rect.getBoundingClientRect(),b=this.topology().getBound();return{top:a.top-b.top,left:a.left-b.left,width:a.width,height:a.height,bottom:a.bottom-b.top,right:a.right-b.left}},esc:{},clickNodeSet:function(){},dragNode:function(){},dragNodeSet:function(){},_blockEvent:function(b){b?(this.topology().scalable(!1),a.dom.Document.body().addClass("n-userselect n-blockEvent")):(this.topology().scalable(!0),a.dom.Document.body().removeClass("n-userselect"),a.dom.Document.body().removeClass("n-blockEvent"))}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.SelectionNodeScene",a.graphic.Topology.SelectionScene,{properties:{selectedNodes:{get:function(){return this.topology().selectedNodes()}}},methods:{activate:function(){this.inherited();var a=this._tooltipManager;a.activated(!1)},deactivate:function(){this.inherited();var a=this._tooltipManager;a.activated(!0)},pressStage:function(a,b){var c=this.selectedNodes(),d=this._multi=b.metaKey||b.ctrlKey||b.shiftKey;d||c.clear(),b.captureDrag(a.stage().view(),this.topology().stage())},enterNode:function(){},clickNode:function(){},dragStageStart:function(a,b){this.inherited(a,b);var c=this.selectedNodes(),d=this._multi=b.metaKey||b.ctrlKey||b.shiftKey;d||c.clear(),this._prevSelectedNodes=this.selectedNodes().toArray().slice()},dragStage:function(a,b){this.inherited(a,b),this.selectNodeByRect(this.rect.getBound())},selectNode:function(a,b){b.selected()?this._topo.selectedNodes().add(b):this._topo.selectedNodes().remove(b)},selectNodeSet:function(a,b){b.selected()?this._topo.selectedNodes().add(b):this._topo.selectedNodes().remove(b)},pressNode:function(a,b){if(b.enable()){var c=this.selectedNodes();this._multi=event.metaKey||event.ctrlKey||event.shiftKey,this._multi||c.clear(),b.selected(!b.selected())}},pressNodeSet:function(a,b){if(b.enable()){var c=this.selectedNodes();this._multi=event.metaKey||event.ctrlKey||event.shiftKey,this._multi||c.clear(),b.selected(!b.selected())}},selectNodeByRect:function(b){this.topology().eachNode(function(c){if("vertexSet"!=c.model().type()||c.collapsed()){var d=c.getBound();if(a.util.isFirefox()){var e=[c.x(),c.y()],f=this.topology().stage().dom().getBound(),g=this.topology().stage().matrix();e=a.geometry.Vector.transform(e,g),d.x=d.left=e[0]+f.left-d.width/2,d.right=d.left+d.width,d.y=d.top=e[1]+f.top-d.height/2,d.bottom=d.top+d.height}var h=c.selected();this._hittest(b,d)?h||c.selected(!0):this._multi?-1==this._prevSelectedNodes.indexOf(c)&&h&&c.selected(!1):h&&c.selected(!1)}},this)},collapseNodeSetGroup:function(){},enterGroup:function(){},_hittest:function(a,b){var c=b.top>=a.top&&b.top<=a.top+a.height,d=b.left>=a.left&&b.left<=a.left+a.width,e=a.top+a.height>=b.top+b.height&&b.top+b.height>=a.top,f=a.left+a.width>=b.left+b.width&&b.left+b.width>=a.left,g=a.top>=b.top&&a.top+a.height<=b.top+b.height,h=a.left>=b.left&&a.left+a.width<=b.left+b.width;return c&&d||e&&f||c&&f||e&&d||c&&h||e&&h||d&&g||f&&g}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.ZoomBySelection",a.graphic.Topology.SelectionScene,{events:["finish"],properties:{},methods:{activate:function(b){this.inherited(b),a.dom.Document.html().addClass("n-zoomInCursor")},deactivate:function(){this.inherited(),a.dom.Document.html().removeClass("n-zoomInCursor")},dragStageEnd:function(a,b){var c=this.rect.getBound();this.inherited(a,b),this.fire("finish",c)},esc:function(){this.fire("finish")}}})}(nx,nx.global),function(a,b){var c={rect:"nx.graphic.Topology.RectGroup",circle:"nx.graphic.Topology.CircleGroup",polygon:"nx.graphic.Topology.PolygonGroup",nodeSetPolygon:"nx.graphic.Topology.NodeSetPolygonGroup"},d=["#C3A5E4","#75C6EF","#CBDA5C","#ACAEB1 ","#2CC86F"];a.define("nx.graphic.Topology.GroupsLayer",a.graphic.Topology.Layer,{statics:{colorTable:d},events:["dragGroupStart","dragGroup","dragGroupEnd","clickGroupLabel","enterGroup","leaveGroup","collapseNodeSetGroup"],properties:{shapeType:"polygon",groupItems:{value:function(){var b=new a.data.ObservableDictionary;return b.on("change",function(b,c){var d=c.action,e=c.items;"clear"==d&&a.each(e,function(a){var b=a.value();b&&b.dispose()})},this),b}},groups:{get:function(){return this._groups||[]},set:function(b){a.is(b,Array)&&(a.each(b,function(a){this.addGroup(a)},this),this._groups=b)}}},methods:{registerGroupItem:function(a,b){c[a]=b},attach:function(a){this.inherited(a);var b=this.topology();b.on("afterFitStage",this._redraw.bind(this),this),b.on("zoomend",this._redraw.bind(this),this),b.on("collapseNode",this._redraw.bind(this),this),b.on("expandNode",this._redraw.bind(this),this),b.watch("revisionScale",this._redraw.bind(this),this),b.watch("showIcon",this._redraw.bind(this),this)},addGroup:function(e){var f=this.groupItems(),g=e.shapeType||this.shapeType(),h=e.nodes,i=a.path(b,c[g]),j=new i({topology:this.topology()}),k=a.clone(e);k.color||(k.color=d[f.count()%5]),delete k.nodes,delete k.shapeType,j.sets(k),j.attach(this),j.nodes(h);var l=k.id||j.__id__;f.setItem(l,j);var m=["dragGroupStart","dragGroup","dragGroupEnd","clickGroupLabel","enterGroup","leaveGroup","collapseNodeSetGroup"];return a.each(m,function(a){j.on(a,function(b,c){c instanceof MouseEvent&&(window.event=c),this.fire(a,j)},this)},this),j},_redraw:function(){this.groupItems().each(function(a){a.value()._draw()},this)},removeGroup:function(a){var b=this.groupItems(),c=b.getItem(a);c&&(c.dispose(),b.removeItem(a))},getGroup:function(a){return this.groupItems().getItem(a)},eachGroupItem:function(a,b){this.groupItems().each(function(c){a.call(b||this,c.value(),c.key())},this)},clear:function(){this.groupItems().clear(),this.inherited()},dispose:function(){this.clear();var a=this.topology();a.off("collapseNode",this._redraw.bind(this),this),a.off("expandNode",this._redraw.bind(this),this),a.off("zoomend",this._redraw.bind(this),this),a.off("fitStage",this._redraw.bind(this),this),a.unwatch("revisionScale",this._redraw.bind(this),this),a.unwatch("showIcon",this._redraw.bind(this),this),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.GroupItem",a.graphic.Group,{events:[],properties:{topology:{},nodes:{get:function(){return this._nodes||[]},set:function(b){var c=this.topology(),d=c.graph(),e=this.vertices();(a.is(b,Array)||a.is(b,a.data.ObservableCollection))&&(a.each(b,function(b){var c;a.is(b,a.graphic.Topology.AbstractNode)?c=b.model():d.getVertex(b)&&(c=d.getVertex(b)),c&&-1==e.indexOf(c)&&e.push(c)},this),a.each(e,function(a){this.attachEvent(a)},this),this.draw()),this._nodes=b}},vertices:{value:function(){return[]}},color:{},label:{},blockDrawing:{value:!1}},view:{},methods:{attachEvent:function(a){a.watch("generated",this._draw,this),a.on("updateCoordinate",this._draw,this)},detachEvent:function(a){a.unwatch("generated",this._draw,this),a.off("updateCoordinate",this._draw,this)},getNodes:function(){var b=[],c=this.topology();return a.each(this.vertices(),function(a){if(a.generated()){var d=c.getNode(a.id());d&&b.push(d)}}),b},addNode:function(b){var c,d=this.topology(),e=d.graph(),f=this.vertices();a.is(b,a.graphic.Topology.AbstractNode)?c=b.model():e.getVertex(b)&&(c=e.getVertex(b)),c&&-1==f.indexOf(c)&&(f.push(c),this.attachEvent(c),this.draw())},removeNode:function(b){var c,d=this.topology(),e=d.graph(),f=this.vertices(),g=this.nodes();if(a.is(b,a.graphic.Topology.AbstractNode)?c=b.model():e.getVertex(b)&&(c=e.getVertex(b)),c&&-1!=f.indexOf(c)){if(f.splice(f.indexOf(c),1),this.detachEvent(c),a.is(g,Array)){var h=c.id(),i=d.getNode(h);-1!==g.indexOf(h)?g.splice(g.indexOf(h),1):i&&-1!==g.indexOf(i)&&g.splice(g.indexOf(i),1)}this.draw()}},_draw:function(){this.blockDrawing()||this.draw()},draw:function(){0===this.getNodes().length?this.hide():this.show()},updateNodesPosition:function(b,c){var d=this.topology().stageScale();a.each(this.getNodes(),function(a){a.move(b*d,c*d)})},clear:function(){a.each(this.vertices(),function(a){this.detachEvent(a)},this),this.vertices([]),this.nodes([])},dispose:function(){this.clear(),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.RectGroup",a.graphic.Topology.GroupItem,{events:["dragGroupStart","dragGroup","dragGroupEnd","clickGroupLabel","enterGroup","leaveGroup"],view:{type:"nx.graphic.Group",props:{"class":"group"},content:[{name:"shape",type:"nx.graphic.Rect",props:{"class":"bg"},events:{mousedown:"{#_mousedown}",dragstart:"{#_dragstart}",dragmove:"{#_drag}",dragend:"{#_dragend}"}},{name:"text",type:"nx.graphic.Group",content:{name:"label",type:"nx.graphic.Text",props:{"class":"groupLabel",text:"{#label}"},events:{click:"{#_clickLabel}"}}}]},properties:{},methods:{draw:function(){this.inherited(),this.setTransform(0,0);var a=this.topology(),b=a.stageScale(),c=(a.revisionScale(),{x:a.matrix().x(),y:a.matrix().y()}),d=a.getBoundByNodes(this.getNodes());if(null!=d){d.left-=c.x,d.top-=c.y;var e=this.view("shape");e.sets({x:d.left,y:d.top,width:d.width,height:d.height,fill:this.color(),stroke:this.color(),scale:a.stageScale()});var f=this.view("text");f.setTransform((d.left+d.width/2)*b,(d.top-12)*b,b),f.view().dom().setStyle("fill",this.color()),this.view("label").view().dom().setStyle("font-size",11)}},_clickLabel:function(){this.fire("clickGroupLabel")},_mousedown:function(a,b){b.captureDrag(this.view("shape"),this.topology().stage())},_dragstart:function(a,b){this.blockDrawing(!0),this.fire("dragGroupStart",b)},_drag:function(a,b){this.fire("dragGroup",b)},_dragend:function(a,b){this.blockDrawing(!1),this.fire("dragGroupEnd",b)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.CircleGroup",a.graphic.Topology.GroupItem,{events:["dragGroupStart","dragGroup","dragGroupEnd","clickGroupLabel","enterGroup","leaveGroup"],view:{type:"nx.graphic.Group",props:{"class":"group"},content:[{name:"shape",type:"nx.graphic.Circle",props:{"class":"bg"},events:{mousedown:"{#_mousedown}",touchstart:"{#_mousedown}",dragstart:"{#_dragstart}",dragmove:"{#_drag}",dragend:"{#_dragend}"}},{name:"text",type:"nx.graphic.Group",content:{name:"label",type:"nx.graphic.Text",props:{"class":"groupLabel",text:"{#label}"},events:{click:"{#_clickLabel}"}}}]},methods:{draw:function(){this.inherited(),this.setTransform(0,0);var a=this.topology(),b=(a.revisionScale(),{x:a.matrix().x(),y:a.matrix().y()}),c=a.getBoundByNodes(this.getNodes());if(null!=c){var d=Math.sqrt(Math.pow(c.width/2,2)+Math.pow(c.height/2,2)),e=this.view("shape");e.sets({cx:c.left-b.x+c.width/2,cy:c.top-b.y+c.height/2,r:d,fill:this.color(),stroke:this.color(),scale:a.stageScale()});var f=this.view("text"),g=a.stageScale();c.left-=b.x,c.top-=b.y,f.setTransform((c.left+c.width/2)*g,(c.top+c.height/2-d-12)*g,g),f.view().dom().setStyle("fill",this.color()),this.view("label").view().dom().setStyle("font-size",11),this.setTransform(0,0)}},_clickLabel:function(){this.fire("clickGroupLabel")},_mousedown:function(a,b){b.captureDrag(this.view("shape"),this.topology().stage())},_dragstart:function(a,b){this.blockDrawing(!0),this.fire("dragGroupStart",b)},_drag:function(a,b){this.fire("dragGroup",b)},_dragend:function(a,b){this.blockDrawing(!1),this.fire("dragGroupEnd",b)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.PolygonGroup",a.graphic.Topology.GroupItem,{events:["dragGroupStart","dragGroup","dragGroupEnd","clickGroupLabel","enterGroup","leaveGroup"],view:{type:"nx.graphic.Group",props:{"class":"group"},content:[{name:"shape",type:"nx.graphic.Polygon",props:{"class":"bg"},events:{mousedown:"{#_mousedown}",dragstart:"{#_dragstart}",dragmove:"{#_drag}",dragend:"{#_dragend}"}},{name:"text",type:"nx.graphic.Group",content:{name:"label",type:"nx.graphic.Text",props:{"class":"nodeSetGroupLabel",text:"{#label}",style:{"alignment-baseline":"central","text-anchor":"middle","font-size":12}},events:{click:"{#_clickLabel}"}}}],events:{mouseenter:"{#_mouseenter}",mouseleave:"{#_mouseleave}"}},properties:{shape:{get:function(){return this.view("shape")}}},methods:{draw:function(){this.inherited(),this.setTransform(0,0);var b=this.topology(),c=b.stageScale(),d=b.revisionScale(),e={x:b.matrix().x(),y:b.matrix().y()},f=[];a.each(this.getNodes(),function(a){a.visible()&&f.push({x:a.model().x(),y:a.model().y()})});var g=this.view("shape");g.sets({fill:this.color()}),g.dom().setStyle("stroke",this.color()),g.dom().setStyle("stroke-width",60*c*d),g.nodes(f);var h=b.getInsideBound(g.getBound());h.left-=e.x,h.top-=e.y,h.left*=c,h.top*=c,h.width*=c,h.height*=c;var i=this.view("text");i.setTransform(h.left+h.width/2,h.top-40*c*d,c),this.view("label").view().dom().setStyle("font-size",11),i.view().dom().setStyle("fill",this.color())},_clickLabel:function(){this.fire("clickGroupLabel")},_mousedown:function(a,b){b.captureDrag(this.view("shape"),this.topology().stage())},_dragstart:function(a,b){this.blockDrawing(!0),this.fire("dragGroupStart",b)},_drag:function(a,b){this.fire("dragGroup",b)},_dragend:function(a,b){this.blockDrawing(!1),this.fire("dragGroupEnd",b)}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.NodeSetPolygonGroup",a.graphic.Topology.GroupItem,{events:["dragGroupStart","dragGroup","dragGroupEnd","clickGroupLabel","enterGroup","leaveGroup","collapseNodeSetGroup"],view:{type:"nx.graphic.Group",props:{"class":"group aggregationGroup"},content:[{name:"shape",type:"nx.graphic.Polygon",props:{"class":"bg"}},{name:"icons",type:"nx.graphic.Group",content:[{name:"minus",type:"nx.graphic.Group",content:{name:"minusIcon",type:"nx.graphic.Icon",props:{iconType:"collapse"}},events:{click:"{#_collapse}"}},{name:"nodeIcon",type:"nx.graphic.Group",content:{name:"nodeIconImg",type:"nx.graphic.Icon",props:{iconType:"nodeSet",scale:1}}},{name:"labelContainer",type:"nx.graphic.Group",content:{name:"label",type:"nx.graphic.Text",props:{"class":"nodeSetGroupLabel",text:"{#label}",style:{"alignment-baseline":"central","text-anchor":"start","font-size":12},visible:!1},events:{click:"{#_clickLabel}"}},events:{}}],events:{mouseenter:"{#_mouseenter}",mouseleave:"{#_mouseleave}",mousedown:"{#_mousedown}",touchstart:"{#_mousedown}",dragstart:"{#_dragstart}",dragmove:"{#_drag}",dragend:"{#_dragend}"}}]},properties:{nodeSet:{},topology:{},opacity:{set:function(a){Math.max(a,.1);this._opacity=a}},shape:{get:function(){return this.view("shape")}}},methods:{getNodes:function(){return a.util.values(this.nodeSet().nodes())},draw:function(){this.inherited(),this.setTransform(0,0);var b=this.topology(),c=b.stageScale(),d={x:b.matrix().x(),y:b.matrix().y()},e=[];a.each(this.getNodes(),function(a){a.visible()&&e.push({x:a.model().x(),y:a.model().y()})});var f=this.view("shape");f.nodes(e);var g=b.getInsideBound(f.getBound());g.left-=d.x,g.top-=d.y,g.left*=c,g.top*=c,g.width*=c,g.height*=c;{var h=this.view("minus"),i=this.view("label"),j=this.view("nodeIcon"),k=this.view("nodeIconImg");
-this.view("labelContainer")}if(b.showIcon()&&b.revisionScale()>.6){f.dom().setStyle("stroke-width",60*c),k.set("iconType",this.nodeSet().iconType());var l=k.size();j.visible(!0),a.util.isFirefox()?(h.setTransform(g.left+g.width/2,g.top-l.height*c/2+8*c,1*c),j.setTransform(g.left+g.width/2+3*c+l.width*c/2,g.top-l.height*c/2-0*c,.5*c)):(h.setTransform(g.left+g.width/2,g.top-l.height*c/2-22*c,1*c),j.setTransform(g.left+g.width/2+3*c+l.width*c/2,g.top-l.height*c/2-22*c,.5*c)),i.sets({x:g.left+g.width/2-3*c+l.width*c,y:g.top-l.height*c/2-22*c}),i.view().dom().setStyle("font-size",16*c)}else f.dom().setStyle("stroke-width",30*c),a.util.isFirefox()?h.setTransform(g.left+g.width/2,g.top-29*c/2,c):h.setTransform(g.left+g.width/2,g.top-45*c/2,c),j.visible(!1),i.sets({x:g.left+g.width/2+12*c,y:g.top-45*c/2}),i.view().dom().setStyle("font-size",16*c)},_clickLabel:function(){this.fire("clickGroupLabel")},_mousedown:function(a,b){b.captureDrag(this.view("icons"),this.topology().stage())},_dragstart:function(a,b){this.blockDrawing(!0),this.fire("dragGroupStart",b)},_drag:function(a,b){this.fire("dragGroup",b),this.view("minus").dom().$dom.contains(b.srcElement)||(this._dragMinusIcon=!0)},_dragend:function(a,b){this.blockDrawing(!1),this.fire("dragGroupEnd",b)},_collapse:function(){this._dragMinusIcon||this.fire("collapseNodeSetGroup",event),this._dragMinusIcon=!1},_mouseenter:function(){this.fire("enterGroup")},_mouseleave:function(){this.fire("leaveGroup")}}})}(nx,nx.global),function(a){var b=a.geometry.Vector,c=a.geometry.Line,d=0,e=["#b2e47f","#e4e47f","#bec2f9","#b6def7","#89f0de"];a.define("nx.graphic.Topology.Path",a.graphic.Component,{view:{type:"nx.graphic.Group",content:{name:"path",type:"nx.graphic.Path"}},properties:{pathStyle:{value:{stroke:"#666","stroke-width":"0px"}},pathWidth:{value:"auto"},pathGutter:{value:13},pathPadding:{value:"auto"},arrow:{value:"none"},links:{value:[],set:function(b){this._links=b,this.edgeIdCollection().clear();var c=[];(a.is(b,"Array")||a.is(b,a.data.Collection))&&(a.each(b,function(a){c.push(a.model().id())}.bind(this)),this.edgeIdCollection().addRange(c)),this.draw()}},edgeIdCollection:{value:function(){var b,c=new a.data.ObservableCollection,d=function(){this.draw()}.bind(this);return c.on("change",function(e,f){var g=function(e,h){if(h){this.unwatch("topology",g),b=b||a.path(this,"topology.graph.edges"),verticesIdCollection=this.verticesIdCollection();var i=[];"add"===f.action?(a.each(f.items,function(a){var c=b.getItem(a);c.watch("generated",d),i.push(c.sourceID()),i.push(c.targetID())}.bind(this)),a.each(i,function(a){verticesIdCollection.contains(a)||verticesIdCollection.add(a)})):(a.each(f.items,function(a){var c=b.getItem(a);c.unwatch("generated",d)}.bind(this)),verticesIdCollection.clear(),a.each(c,function(a){var c=b.getItem(a);verticesIdCollection.contains(c.sourceID())&&verticesIdCollection.add(c.sourceID()),verticesIdCollection.contains(c.targetID())&&verticesIdCollection.add(c.targetID())}.bind(this)))}}.bind(this);this.topology()?g("topology",this.topology()):this.watch("topology",g)}.bind(this)),c}},verticesIdCollection:{value:function(){var b,c=new a.data.ObservableCollection,d=function(){this.draw()}.bind(this);return c.on("change",function(c,e){b=b||a.path(this,"topology.graph.vertices"),"add"===e.action?a.each(e.items,function(a){var c=b.getItem(a);c.watch("position",d)}.bind(this)):a.each(e.items,function(a){var c=b.getItem(a);c.unwatch("position",d)}.bind(this))}.bind(this)),c}},reverse:{value:!1},owner:{},topology:{}},methods:{init:function(a){this.inherited(a);var b=this.pathStyle();this.view("path").sets(b),b.fill||this.view("path").setStyle("fill",e[d++%5])},draw:function(){if(this.topology()){var c=!0,d=this.topology(),e=a.path(this,"topology.graph.edges"),f=a.path(this,"topology.graph.vertices");if(a.each(this.verticesIdCollection(),function(a){var b=f.getItem(a);return b.generated()?void 0:(c=!1,!1)}.bind(this)),a.each(this.edgeIdCollection(),function(a){var b=e.getItem(a);return b.generated()?void 0:(c=!1,!1)}.bind(this)),!c)return void this.view("path").set("d","M0 0");var g,h,i,j,k,l,m,n,o=[],p=[],q=this.topology().stageScale(),r=this.pathWidth(),s=this.pathPadding(),t=this.arrow(),u=this.edgeIdCollection(),v=[];a.each(u,function(a){v.push(d.getLink(a))});var w=this._serializeLinks(v),x=v.length,y=v[0],z=y.getOffset();if(y.reverse()&&(z*=-1),z=new b(0,this.reverse()?-1*z:z),h=w[0].translate(z),"auto"===s?(k=Math.min(y.sourceNode().showIcon()?24:4,h.length()/4/q),l=Math.min(y.targetNode().showIcon()?24:4,h.length()/4/q)):a.is(s,"Array")?(k=s[0],l=s[1]):k=l=s,"string"==typeof k&&k.indexOf("%")>0&&(k=h.length()*q*parseInt(k,10)/100/q),"auto"===r&&(r=Math.min(10,Math.max(3,Math.round(3/q)))),m=new b(0,r/2*q),n=new b(0,-r/2*q),k*=q,j=h.translate(m).pad(k,0).start,o.push("M",j.x,j.y),j=h.translate(n).pad(k,0).start,p.unshift("L",j.x,j.y,"Z"),v.length>1)for(var A=1;x>A;A++)g=v[A],i=w[A].translate(new b(0,g.getOffset())),j=h.translate(m).intersection(i.translate(m)),isFinite(j.x)&&isFinite(j.y)&&o.push("L",j.x,j.y),j=h.translate(n).intersection(i.translate(n)),isFinite(j.x)&&isFinite(j.y)&&p.unshift("L",j.x,j.y),h=i;else i=h;"string"==typeof l&&l.indexOf("%")>0&&(l=i.length()*parseInt(l,10)/100/q),l*=q,"cap"==t?(j=i.translate(m).pad(0,2.5*r+l).end,o.push("L",j.x,j.y),j=j.add(i.normal().multiply(r/2)),o.push("L",j.x,j.y),j=i.translate(n).pad(0,2.5*r+l).end,p.unshift("L",j.x,j.y),j=j.add(i.normal().multiply(-r/2)),p.unshift("L",j.x,j.y),j=i.pad(0,l).end,o.push("L",j.x,j.y)):"end"==t?(j=i.translate(m).pad(0,2*r+l).end,o.push("L",j.x,j.y),j=i.translate(n).pad(0,2*r+l).end,p.unshift("L",j.x,j.y),j=i.pad(0,l).end,o.push("L",j.x,j.y)):"full"==t?(j=i.pad(0,l).end,o.push("L",j.x,j.y)):(j=i.translate(m).pad(0,l).end,o.push("L",j.x,j.y),j=i.translate(n).pad(0,l).end,p.unshift("L",j.x,j.y)),this.view("path").set("d",o.concat(p).join(" "))}},_serializeLinks:function(a){var b=[],d=a.length;b.push(this.reverse()?new c(a[0].targetVector(),a[0].sourceVector()):new c(a[0].sourceVector(),a[0].targetVector()));for(var e=1;d>e;e++){var f=a[e-1],g=a[e],h=f.sourceVector(),i=f.targetVector(),j=g.sourceVector(),k=g.targetVector();f.targetNodeID()==g.sourceNodeID()?b.push(new c(j,k)):f.targetNodeID()==g.targetNodeID()?b.push(new c(k,j)):f.sourceNodeID()==g.sourceNodeID()?(b.pop(),b.push(new c(i,h)),b.push(new c(j,k))):(b.pop(),b.push(new c(i,h)),b.push(new c(k,j)))}return this.reverse()&&b.reverse(),b},isEqual:function(a,b){return a.x==b.x&&a.y==b.y},dispose:function(){a.each(this.nodes,function(a){a.off("updateNodeCoordinate",this.draw,this)},this),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.BasePath",a.graphic.Component,{events:[],properties:{nodes:{},pathGenerator:{value:function(){return function(){}}},pathStyle:{value:function(){return{stroke:"#666","stroke-width":2,fill:"none"}}},topology:{}},view:{type:"nx.graphic.Group",content:{name:"path",type:"nx.graphic.Path",props:{}}},methods:{attach:function(b){this.inherited(b);var c=this._nodesWatcher=new a.graphic.Topology.NodeWatcher;c.observePosition(!0),c.topology(this.topology()),c.updater(this._draw.bind(this)),c.nodes(this.nodes()),this.view("path").dom().setStyles(this.pathStyle())},_draw:function(){var a=this.view("path"),b=this._nodesWatcher.getNodes();if(b.length==this.nodes().length){var c=this.topology(),d=this.pathStyle(),e=this.pathGenerator().call(this);if(e){a.set("d",e),a.visible(!0);var f=parseInt(d["stroke-width"],10)||1;a.dom().setStyle("stroke-width",f*c.stageScale())}}else a.visible(!1)},draw:function(){this._draw()}}})}(nx,nx.global),function(a){a.util;a.define("nx.graphic.Topology.PathLayer",a.graphic.Topology.Layer,{properties:{paths:{value:function(){return[]}}},methods:{attach:function(){this.attach.__super__.apply(this,arguments);var a=this.topology();a.on("zoomend",this._draw,this),a.watch("revisionScale",this._draw,this)},_draw:function(){a.each(this.paths(),function(a){a.draw()})},addPath:function(a){this.paths().push(a),a.topology(this.topology()),a.attach(this),a.draw()},removePath:function(a){this.paths().splice(this.paths().indexOf(a),1),a.dispose()},clear:function(){a.each(this.paths(),function(a){a.dispose()}),this.paths([]),this.inherited()},dispose:function(){this.clear();var a=this.topology();a.off("zoomend",this._draw,this),a.unwatch("revisionScale",this._draw,this),this.inherited()}}})}(nx,nx.global),function(a){a.define("nx.graphic.Topology.Nav",a.ui.Component,{properties:{topology:{get:function(){return this.owner()}},scale:{},showIcon:{value:!1},visible:{get:function(){return void 0!==this._visible?this._visible:!0},set:function(a){this.view().dom().setStyle("display",a?"":"none"),this.view().dom().setStyle("pointer-events",a?"all":"none"),this._visible=a}}},view:{props:{"class":"n-topology-nav"},content:[{name:"icons",tag:"ul",content:[{tag:"li",content:{name:"mode",tag:"ul",props:{"class":"n-topology-nav-mode"},content:[{name:"selectionMode",tag:"li",content:{props:{"class":"n-icon-selectnode",title:"Select node mode"},tag:"span"},events:{mousedown:"{#_switchSelectionMode}",touchstart:"{#_switchSelectionMode}"}},{name:"moveMode",tag:"li",props:{"class":"n-topology-nav-mode-selected"},content:{props:{"class":"n-icon-movemode",title:"Move mode"},tag:"span"},events:{mousedown:"{#_switchMoveMode}",touchstart:"{#_switchMoveMode}"}}]}},{tag:"li",props:{"class":"n-topology-nav-zoom"},content:[{name:"zoomin",tag:"span",props:{"class":"n-topology-nav-zoom-in n-icon-zoomin-plus",title:"Zoom out"},events:{touchend:"{#_in}"}},{name:"zoomout",tag:"span",props:{"class":"n-topology-nav-zoom-out n-icon-zoomout-minus",title:"Zoom in"},events:{touchend:"{#_out}"}}]},{tag:"li",name:"zoomselection",props:{"class":"n-topology-nav-zoom-selection n-icon-zoombyselection",title:"Zoom by selection"},events:{click:"{#_zoombyselection}",touchend:"{#_zoombyselection}"}},{tag:"li",name:"fit",props:{"class":"n-topology-nav-fit n-icon-fitstage",title:"Fit stage"},events:{click:"{#_fit}",touchend:"{#_fit}"}},{tag:"li",name:"agr",props:{"class":"n-topology-nav-agr n-icon-aggregation",title:"Aggregation"},events:{click:"{#_agr}",touchend:"{#_agr}"}},{tag:"li",name:"fullscreen",props:{"class":"n-topology-nav-full n-icon-fullscreen",title:"Enter full screen mode"},events:{click:"{#_full}",touchend:"{#_full}"}},{tag:"li",name:"setting",content:[{name:"icon",tag:"span",props:{"class":"n-topology-nav-setting-icon n-icon-viewsetting"},events:{mouseenter:"{#_openPopover}",mouseleave:"{#_closePopover}"}},{name:"settingPopover",type:"nx.ui.Popover",props:{title:"Topology Setting",direction:"right",lazyClose:!0},content:[{tag:"h5",content:"Display icons as dots :"},{tag:"label",content:[{tag:"input",props:{type:"radio",checked:"{#showIcon,converter=inverted,direction=<>}"}},{tag:"span",content:"Always"}],props:{"class":"radio-inline"}},{tag:"label",content:[{tag:"input",props:{type:"radio",checked:"{#showIcon,direction=<>}"}},{tag:"span",content:"Auto-resize"}],props:{"class":"radio-inline"}},{name:"displayLabelSetting",tag:"h5",content:[{tag:"span",content:"Display Label : "},{tag:"input",props:{"class":"toggleLabelCheckBox",type:"checkbox",checked:!0},events:{click:"{#_toggleNodeLabel}",touchend:"{#_toggleNodeLabel}"}}]},{tag:"h5",content:"Theme :"},{props:{"class":"btn-group"},content:[{tag:"button",props:{"class":"btn btn-default",value:"blue"},content:"Blue"},{tag:"button",props:{"class":"btn btn-default",value:"green"},content:"Green"},{tag:"button",props:{"class":"btn btn-default",value:"dark"},content:"Dark"},{tag:"button",props:{"class":"btn btn-default",value:"slate"},content:"Slate"},{tag:"button",props:{"class":"btn btn-default",value:"yellow"},content:"Yellow"}],events:{click:"{#_switchTheme}",touchend:"{#_switchTheme}"}},{name:"customize"}],events:{open:"{#_openSettingPanel}",close:"{#_closeSettingPanel}"}}],props:{"class":"n-topology-nav-setting"}}]}]},methods:{init:function(a){this.inherited(a),this.view("settingPopover").view().dom().addClass("n-topology-setting-panel"),window.top.frames.length&&this.view("fullscreen").style().set("display","none")},attach:function(a){this.inherited(a);var b=this.topology();b.watch("scale",function(a,c){var d=b.maxScale(),e=b.minScale(),f=this.view("zoomball").view(),g=65/(d-e);f.setStyles({top:72-(c-e)*g+14})},this),b.selectedNodes().watch("count",function(a,b){this.view("agr").dom().setStyle("display",b>1?"block":"none")},this),b.watch("currentSceneName",function(a,b){"selection"==b?(this.view("selectionMode").dom().addClass("n-topology-nav-mode-selected"),this.view("moveMode").dom().removeClass("n-topology-nav-mode-selected")):(this.view("selectionMode").dom().removeClass("n-topology-nav-mode-selected"),this.view("moveMode").dom().addClass("n-topology-nav-mode-selected"))},this),this.view("agr").dom().setStyle("display","none")},_switchSelectionMode:function(){var a=this.topology(),b=a.currentSceneName();"selection"!=b&&(a.activateScene("selection"),this._prevSceneName=b)},_switchMoveMode:function(){var a=this.topology(),b=a.currentSceneName();"selection"==b&&(a.activateScene(this._prevSceneName||"default"),this._prevSceneName=null)},_fit:function(a){this._fitTimer||(this.topology().fit(),a.dom().setStyle("opacity","0.1"),this._fitTimer=!0,setTimeout(function(){a.dom().setStyle("opacity","1"),this._fitTimer=!1}.bind(this),1200))},_zoombyselection:function(a){var b=a,c=this.topology(),d=c.currentSceneName();if("zoomBySelection"==d)b.dom().removeClass("n-topology-nav-zoom-selection-selected"),c.activateScene("default");else{var e=c.activateScene("zoomBySelection");e.upon("finish",function f(a,g){g&&c.zoomByBound(c.getInsideBound(g)),c.activateScene(d),b.dom().removeClass("n-topology-nav-zoom-selection-selected"),e.off("finish",f,this)},this),b.dom().addClass("n-topology-nav-zoom-selection-selected")}},_in:function(a,b){var c=this.topology();c.stage().zoom(1.2,c.adjustLayout,c),b.preventDefault()},_out:function(a,b){var c=this.topology();c.stage().zoom(.8,c.adjustLayout,c),b.preventDefault()},_full:function(a,b){this.toggleFull(b.target)},_enterSetting:function(){this.view("setting").addClass("n-topology-nav-setting-open")},_leaveSetting:function(){this.view("setting").removeClass("n-topology-nav-setting-open")},cancelFullScreen:function(a){var b=a.cancelFullScreen||a.webkitCancelFullScreen||a.mozCancelFullScreen||a.exitFullscreen;if(b)b.call(a);else if("undefined"!=typeof window.ActiveXObject){var c=new ActiveXObject("WScript.Shell");null!==c&&c.SendKeys("{F11}")}},requestFullScreen:function(){return document.body.webkitRequestFullscreen.call(document.body),!1},toggleFull:function(){var a=document.body,b=document.fullScreenElement&&null!==document.fullScreenElement||document.mozFullScreen||document.webkitIsFullScreen;return b?(this.cancelFullScreen(document),this.fire("leaveFullScreen")):(this.requestFullScreen(a),this.fire("enterFullScreen")),!1},_openPopover:function(a){this.view("settingPopover").open({target:a.dom(),offsetY:3}),this.view("icon").dom().addClass("n-topology-nav-setting-icon-selected")},_closePopover:function(){this.view("settingPopover").close()},_closeSettingPanel:function(){this.view("icon").dom().removeClass("n-topology-nav-setting-icon-selected")},_togglePopover:function(){var a=this.view("settingPopover");a._closed?a.open():a.close()},_switchTheme:function(a,b){this.topology().theme(b.target.value)},_toggleNodeLabel:function(b){var c=b.get("checked");this.topology().eachNode(function(a){a.labelVisibility(c)}),a.graphic.Topology.NodesLayer.defaultConfig.labelVisibility=c,a.graphic.Topology.NodeSetLayer.defaultConfig.labelVisibility=c},_agr:function(){var a=this.topology(),b=a.selectedNodes().toArray();a.selectedNodes().clear(),a.aggregationNodes(b)}}})}(nx,nx.global); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/bower.json b/vbd/gui/module/src/main/resources/vpp/bower.json
deleted file mode 100644
index f317fb1ae..000000000
--- a/vbd/gui/module/src/main/resources/vpp/bower.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "name": "odl-vpp-ui",
- "description": "Opendaylight VPP UI",
- "main": "main.js",
- "authors": [
- "Varun Seereeram",
- "Chris Metz",
- "Dave Wallace",
- "Daniel Malachovsky"
- ],
- "license": "ISC",
- "keywords": [
- "open-vpp"
- ],
- "moduleType": [
- "node"
- ],
- "homepage": "",
- "private": true,
- "ignore": [
- "**/.*",
- "node_modules",
- "bower_components",
- "test",
- "tests"
- ],
- "dependencies": {
- "angular-animate": "^1.3.0 || >1.4.0-beta.0",
- "angular-aria": "^1.3.15 || >1.4.0-beta.0",
- "angular-material": "~0.11.4",
- "angular-smart-table": "~2.1.7"
- },
- "resolutions": {
- "angular": "1.4.9"
- }
-}
diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js
deleted file mode 100644
index ea65afbc9..000000000
--- a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.bridgedomain.controller.js
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-
-define(['app/vpp/vpp.module'], function(vpp) {
-
- vpp.register.controller('bdmBridgeDomainCtrl', ['$scope', '$rootScope', '$timeout' ,'dataService', 'toastService', '$mdSidenav', '$mdDialog',
- function ($scope, $rootScope, $timeout ,dataService, toastService, $mdSidenav, $mdDialog) {
-
- }]);
-
-
-});
diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js
deleted file mode 100644
index f88162ef6..000000000
--- a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.controller.js
+++ /dev/null
@@ -1,541 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-define(['app/vpp/vpp.module'], function(vpp) {
- vpp.register.controller('bdmCtrl', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', function ($scope, $rootScope, filter, dataService, toastService) {
-
- }]);
-
- vpp.register.controller('TableController', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', 'bdmInterfaceService',
- function ($scope, $rootScope, filter, dataService, toastService, bdmInterfaceService) {
- $scope.interfaceList = [];
- $scope.unassignedInterfaceList = [];
- $scope.assignedInterfaces = [];
-
- var vm = this;
-
- vm.updateAssignment = function(receivedInterface) {
- if (receivedInterface.assigned){
- receivedInterface.vbdName = $scope.selectedBd['topology-id'];
- vm.assignInterface($scope.selectedBd, receivedInterface);
-
- } else {
- vm.unassignInterface(receivedInterface);
- }
- };
-
- vm.assignInterface = function(bridgeDomain, interface) {
- var interfaceObject = bdmInterfaceService.createObj(interface['tp-id'], interface['tp-id']);
-
- var successCallback = function() {
- toastService.showToast('Interface assigned');
- $scope.assignedInterfaces.push(interface);
-
- $scope.$emit('INTERFACE_CHANGED', interface);
- };
-
- var errorCallback = function() {
- toastService.showToast('Unable to assign interface');
- };
-
- bdmInterfaceService.add(interfaceObject, bridgeDomain['topology-id'], interface.vppName, successCallback, errorCallback);
- };
-
- vm.unassignInterface = function(interface) {
- var interfaceObject = bdmInterfaceService.createObj(interface['tp-id'], interface['tp-id']);
-
- var successCallback = function() {
- toastService.showToast('Interface unassigned');
- $scope.assignedInterfaces.splice($scope.assignedInterfaces.indexOf(interface), 1);
- interface.vbdName = '';
-
- $scope.$emit('INTERFACE_CHANGED', interface);
- };
-
- var errorCallback = function() {
- toastService.showToast('Unable to unassign interface');
- };
-
- bdmInterfaceService.delete(interfaceObject, interface.vbdName, interface.vppName, successCallback, errorCallback);
-
- };
-
- $scope.$on('BUILD_INTERFACES_TABLE', function(event) {
- $scope.interfaceList = [];
- $scope.unassignedInterfaceList = [];
- $scope.assignedInterfaces = $scope.getAssignedInterfaces();
-
- $scope.assignedInterfacesFlat = [];
-
- var getAssignedInterfacesFlat = function() {
- var keys = Object.keys($scope.assignedInterfaces);
-
- if(keys.length) {
- keys.forEach(function (k) {
- if($scope.assignedInterfaces[k]) {
- $scope.assignedInterfaces[k].forEach(function(ai) {
- checkAndPushIntoArray($scope.assignedInterfacesFlat, ai);
- });
- }
- });
- }
- };
-
- var checkAndPushIntoArray = function(array, item) {
- var check = array.some(function(i) {
- return i['tp-id'] === item['tp-id'] && i.vppName === item.vppName;
- });
-
- if(!check) {
- array.push(item);
- }
- };
-
- getAssignedInterfacesFlat();
-
- dataService.vpps.forEach(function(vpp){
- vpp.interfaces.forEach(function(interface){
- var interfaceObject = bdmInterfaceService.createObj(interface.name, interface.name);
-
- var check = $scope.assignedInterfacesFlat.some(function (ai) {
- return interfaceObject['tp-id'] === ai['tp-id'] && vpp.name === ai.vppName;
- });
-
- if(!check) {
- interfaceObject.vppName = vpp.name;
- checkAndPushIntoArray($scope.unassignedInterfaceList, interfaceObject);
- }
- });
- });
-
- if($scope.selectedBd) {
- $scope.interfaceList = $scope.assignedInterfaces[$scope.selectedBd['topology-id']] ? $scope.assignedInterfaces[$scope.selectedBd['topology-id']].concat($scope.unassignedInterfaceList) : $scope.unassignedInterfaceList;
- }
-
- $scope.interfaceDisplayList = [].concat($scope.interfaceList);
- });
-
- $scope.$on('INIT_INTERFACES_TABLE', function(event) {
- $scope.interfaceList = [];
- $scope.unassignedInterfaceList = [];
- $scope.assignedInterfaces = [];
- $scope.assignedInterfacesFlat = [];
- });
-
-
-
- }]);
-
- vpp.register.controller('BridgeDomainsController', ['$scope', '$rootScope','$filter', 'dataService', 'bdmBridgeDomainService', 'toastService', '$mdDialog', 'bdmTunnelService',
- function($scope, $rootScope, $filter, dataService, bdmBridgeDomainService, toastService, $mdDialog, bdmTunnelService) {
- $scope.bridgeDomainList = [];
- $scope.showOverlay = true;
-
- $scope.loadBridgeDomains = function(bridgeDomain, successCallback) {
- bdmBridgeDomainService.get(function(data) {
- $scope.bridgeDomainList = data;
-
- if(bridgeDomain) {
- $scope.selectedBd = $scope.bridgeDomainList.filter(function(bd) {
- return bd['topology-id'] === bridgeDomain['topology-id'];
- })[0];
-
- $scope.showTopology($scope.selectedBd);
- }
-
- successCallback();
-
- }, function(data,status) {
- //error callback
- console.log(status);
- });
- };
-
- $scope.getInterfacesForBridgeDomain = function(bridgeDomain) {
- var interfaceList = [];
-
- if(bridgeDomain.node) {
- bridgeDomain.node.forEach(function (n) {
- if (n['termination-point']) {
- n['termination-point'].forEach(function (tp) {
- tp.vppName = n['node-id'];
- tp.vbdName = bridgeDomain['topology-id'];
- tp.assigned = true;
-
- interfaceList.push(tp);
- });
- }
- });
- }
-
- return interfaceList;
- };
-
- $scope.getAssignedInterfaces = function() {
- var interfaces = [];
-
- $scope.bridgeDomainList.forEach(function(bd) {
- var bdCopy = {};
- angular.copy(bd, bdCopy);
-
- interfaces[bdCopy['topology-id']] = $scope.getInterfacesForBridgeDomain(bdCopy);
- });
-
- return interfaces;
- };
-
- $scope.addBd = function() {
- //show dialog
- $mdDialog.show({
- controller: function() {
- var vm = this;
- vm.bd = {};
- vm.waiting = false;
-
- //function called when the cancel button ( 'x' in the top right) is clicked
- vm.close = function() {
- $mdDialog.cancel();
- };
-
- vm.isDone = function(status, bridgeDomain) {
- vm.waiting = false;
- if (status === 'success') {
- $scope.reload(bridgeDomain);
- vm.close();
- }
- };
-
- //function called when the update button is clicked
- vm.updateConfig = function() {
- vm.waiting = true;
- //send a POST with the entered content in the form field
-
- var obj = bdmBridgeDomainService.createObj(vm.bd.name);
-
- bdmBridgeDomainService.add(obj,
- function(data) {
- vm.isDone('success', obj);
- },
- function() {
- vm.isDone('failed');
- });
-
- };
- },
- controllerAs: 'NewBdDialogCtrl',
- templateUrl: $scope.view_path + 'new-bd-dialog.html',
- parent: angular.element(document.body),
- clickOutsideToClose:false
- })
- };
-
- $scope.removeBd = function() {
- if($scope.selectedBd['topology-id']) {
- var successCallback = function(success) {
- $scope.selectedBd = null;
- $scope.loadBridgeDomains(null, function() {
- $scope.$broadcast('INIT_INTERFACES_TABLE');
- $scope.clearTopologies();
- });
-
- };
- bdmBridgeDomainService.remove($scope.selectedBd['topology-id'], function(){successCallback(true)}, function(){successCallback(false)});
- }
- };
-
- $scope.bdChanged = function() {
- $scope.loadBridgeDomains($scope.selectedBd, function() {
- $scope.$broadcast('BUILD_INTERFACES_TABLE');
-
- $scope.showTopology($scope.selectedBd);
- });
-
- };
-
- nx.graphic.Icons.registerIcon("bd", "src/app/vpp/assets/images/bd1.svg", 45, 45);
- nx.graphic.Icons.registerIcon("interf", "src/app/vpp/assets/images/interf.svg", 45, 45);
-
- $scope.showOverlayTopology = function(bridgeDomain) {
- var bdCopy = {};
- angular.copy(bridgeDomain, bdCopy);
-
- $scope.bridgeDomainsTopo = new nx.graphic.Topology({
- adaptive: true,
- scalable: true,
- theme: 'blue',
- enableGradualScaling: true,
- nodeConfig: {
- color: '#414040',
- label: 'model.label',
- scale: 'model.scale',
- iconType: function (vertex) {
- var type = vertex.get().type;
- if (type === 'bd') {
- return 'bd'
- } else {
- return 'interf';
- }
- }
- },
- linkConfig: {
- label: 'model.label',
- linkType: 'parallel',
- color: function (link) {
- if (link.getData().type === 'tunnel') {
- return '#00FF00';
- } else {
- return '#ffffff';
- }
- },
- width: function (link) {
- if (link.getData().type === 'tunnel') {
- return 5;
- }
- }
- },
- showIcon: true,
- dataProcessor: 'force',
- autoLayout: true,
- enableSmartNode: false,
- tooltipManagerConfig: {
- nodeTooltipContentClass: 'TooltipNode',
- linkTooltipContentClass: 'TooltipLink'
- }
- });
-
- $scope.overlayNextApp = new nx.ui.Application;
-
- var bdNode = {
- "data": bdCopy,
- "type": "bd",
- "label": bdCopy['topology-id']
- };
-
- var nodes = [].concat(bdNode);
- var links = [];
-
- _.forEach($scope.getInterfacesForBridgeDomain(bdCopy), function(tp, index){
- var ifNode = {
- "data": tp,
- "type": "interf",
- "label": tp['tp-id']
- };
- nodes.push(ifNode);
- links.push({source: 0, target: nodes.length-1});
- });
-
-
- $scope.bridgeDomainsTopo.data({
- nodes: nodes,
- links: links
- });
-
- $scope.overlayNextApp.container(document.getElementById('overlay-next-app'));
- $scope.bridgeDomainsTopo.attach($scope.overlayNextApp);
- };
-
- $scope.fillOverlayTopology = function(bridgeDomain) {
- var bdCopy = {};
- angular.copy(bridgeDomain, bdCopy);
-
- var bdNode = {
- "data": bdCopy,
- "type": "bd",
- "label": bdCopy['topology-id']
- };
-
- var nodes = [].concat(bdNode);
- var links = [];
-
- _.forEach($scope.getInterfacesForBridgeDomain(bdCopy), function(tp, index){
- var ifNode = {
- "data": tp,
- "type": "interf",
- "label": tp['tp-id']
- };
- nodes.push(ifNode);
- links.push({source: 0, target: nodes.length-1});
- });
-
-
- $scope.bridgeDomainsTopo.data({
- nodes: nodes,
- links: links
- });
-
- };
-
- $scope.showUnderTopology = function(bridgeDomain) {
- //var bdCopy = {};
- //angular.copy(bridgeDomain, bdCopy);
-
- $scope.underlayTopo = new nx.graphic.Topology({
- adaptive: true,
- scalable: true,
- theme:'blue',
- enableGradualScaling:true,
- nodeConfig: {
- color: '#414040',
- label: 'model.label',
- scale: 'model.scale',
- iconType: function(vertex) {
- var type = vertex.get().type;
- if (type === 'bd') {
- return 'bd';
- } else if (type==='vpp') {
- return 'switch';
- } else {
- return 'interf';
- }
- }
- },
- linkConfig: {
- label: 'model.label',
- linkType: 'parallel',
- color: function(link) {
- if (link.getData().type === 'tunnel') {
- return '#00FF00';
- } else {
- return '#ffffff';
- }
- },
- width: function(link) {
- if (link.getData().type === 'tunnel') {
- return 5;
- }
- }
- },
- showIcon: true,
- enableSmartNode: false
- });
-
- $scope.underlayNextApp = new nx.ui.Application;
-
- $scope.fillUnderlayTopology(bridgeDomain);
-
- $scope.underlayNextApp.container(document.getElementById('underlay-next-app'));
- $scope.underlayTopo.attach($scope.underlayNextApp);
- };
-
- $scope.fillUnderlayTopology = function(bridgeDomain) {
- var bdCopy = {};
- angular.copy(bridgeDomain, bdCopy);
-
- var nodes = [];
- var links = [];
-
- _.forEach(bdCopy.node, function(node, index){
- var i = index + 1;
-
- nodes.push({
- label: node['node-id'],
- x: (-1+(2*(i%2)))*((i+1)/2 * 500),
- y: 700,
- scale: 1.25,
- type: 'vpp'
- });
-
-
- bdmTunnelService.get(
- bdCopy['topology-id'],
- function(data) {
- //success
- console.log(data);
-
- var link = data;
- var sourceNode = link[0].source['source-node'];
- var targetNode = link[0].destination['dest-node'];
-
- links.push({
- source: _.findIndex(nodes, {label: sourceNode, type: 'vpp'}),
- target: _.findIndex(nodes, {label: targetNode, type: 'vpp'}),
- type: 'tunnel'
- });
-
- $scope.underlayTopo.data({
- nodes: nodes,
- links: links
- });
-
- }, function(res) {
- $scope.underlayTopo.data({
- nodes: nodes,
- links: links
- });
- });
- });
-
-
- $scope.underlayTopo.data({
- nodes: nodes,
- links: links
- });
- };
-
- $scope.reload = function(bridgeDomain) {
- $scope.loadBridgeDomains(bridgeDomain, function() {
- $scope.$broadcast('BUILD_INTERFACES_TABLE');
-
- $scope.showTopology($scope.selectedBd);
- });
-
- };
-
- $scope.toggleUnderlay = function() {
- $scope.showOverlay = !$scope.showOverlay;
-
- $scope.reload($scope.selectedBd);
- };
-
- $scope.showTopology = function(bridgeDomain) {
- if($scope.showOverlay) {
- if(!$scope.bridgeDomainsTopo) {
- $scope.showOverlayTopology(bridgeDomain);
- }
- else {
- $scope.fillOverlayTopology(bridgeDomain);
- }
- } else {
- if(!$scope.underlayTopo) {
- $scope.showUnderTopology(bridgeDomain);
- }
- else {
- $scope.fillUnderlayTopology(bridgeDomain);
- }
- }
- };
-
- $scope.clearTopologies = function() {
- if($scope.bridgeDomainsTopo) {
- $scope.bridgeDomainsTopo.data({
- nodes: [],
- links: []
- });
- }
-
- if($scope.bridgeDomainsTopo) {
- $scope.underlayTopo.data({
- nodes: [],
- links: []
- });
- }
- };
-
- $scope.$on('INTERFACE_CHANGED', function(event, data) {
- bdmBridgeDomainService.getOne($scope.selectedBd['topology-id'],
- function(bdData) {
- $scope.fillOverlayTopology(bdData);
- },
- function() {
- console.log('error getting vbd');
- });
- });
-
- $scope.loadBridgeDomains(null, function() {});
- }]);
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js
deleted file mode 100644
index 5aa68a9dc..000000000
--- a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.interface.controller.js
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-define(['app/vpp/vpp.module'], function(vpp) {
-
- vpp.register.controller('bdmInterfaceCtrl', ['$scope', '$rootScope', '$timeout' ,'dataService', 'toastService', '$mdSidenav', '$mdDialog',
- function ($scope, $rootScope, $timeout ,dataService, toastService, $mdSidenav, $mdDialog) {
-
- }]);
-
-
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js
deleted file mode 100644
index 44a4b0cf2..000000000
--- a/vbd/gui/module/src/main/resources/vpp/controllers/bdm.vpp.controller.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-define(['app/vpp/vpp.module'], function(vpp) {
- vpp.register.controller('bdmCtrl', ['$scope', '$rootScope','$filter', 'dataService', 'toastService', function ($scope, $rootScope, filter, dataService, toastService) {
-
- }]);
-
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js
deleted file mode 100644
index 6d994c152..000000000
--- a/vbd/gui/module/src/main/resources/vpp/controllers/inventory.controller.js
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-define(['app/vpp/vpp.module'], function(vpp) {
-
- vpp.register.controller('InventoryTableController', ['$scope', '$rootScope','$filter', 'toastService', 'VppService', '$mdDialog', 'dataService',
- function($scope, $rootScope, filter, toastService, VppService, $mdDialog, dataService) {
-
- $scope.getVppList = function() {
- $scope.initVppList();
-
- VppService.getVppList(
- // success callback
- function(data) {
- $scope.vppList = data;
- $scope.displayVppList = [].concat($scope.vppList);
- dataService.vpps = $scope.vppList;
-
- $scope.$broadcast('RELOAD_VPP_TABLE');
-
- //for vppList access in BDM
- dataService.vpps = $scope.vppList;
- },
- // error callback
- function(res) {
- console.warn("Can't load VPPs from controller. Nothing is mounted, or other error", res);
- }
- );
- };
-
- $scope.initVppList = function() {
- $scope.vppList = [];
- $scope.displayVppList = [];
- };
-
- $scope.addVppShowForm = function() {
- $mdDialog.show({
- controller: function() {
- var vm = this;
- vm.vpp = {};
- //function called when the cancel button ( 'x' in the top right) is clicked
- vm.close = function() {
- $mdDialog.cancel();
- };
-
- vm.finished = function(successful) {
- if (successful) {
- vm.close();
- vm.waiting = false;
- toastService.showToast('New VPP added!');
- $scope.getVppList();
- } else {
- vm.waiting = false;
- toastService.showToast('Error adding new VPP');
- }
- };
-
- //function called when the update button is clicked
- vm.updateConfig = function() {
- vm.waiting = true;
- VppService.mountVpp(vm.vpp.name, vm.vpp.ip, vm.vpp.port, vm.vpp.un, vm.vpp.pw, vm.finished);
- };
- },
- controllerAs: 'NewVppDialogCtrl',
- templateUrl: $scope.view_path + 'new-vpp-dialog.html',
- parent: angular.element(document.body),
- clickOutsideToClose:false
- })
- };
-
- $scope.editVppShowForm = function(vppObject) {
-
- $mdDialog.show({
- controller: function() {
- var vm = this;
-
- vm.vpp = {
- name: vppObject.name,
- status: vppObject.status,
- ip: vppObject.ipAddress,
- port: vppObject.port
- };
-
- //function called when the cancel button ( 'x' in the top right) is clicked
- vm.close = function() {
- $mdDialog.cancel();
- };
-
- vm.finishedUpdating = function(successful) {
- if (successful) {
- vm.close();
- vm.waiting = false;
- toastService.showToast('VPP configuration updated!');
- $scope.getVppList();
- } else {
- vm.waiting = false;
- toastService.showToast('Error configuring VPP');
- }
- };
-
- vm.finishedDeleting = function(successful) {
- if (successful) {
- VppService.mountVpp(vm.vpp.name, vm.vpp.ip, vm.vpp.port, vm.vpp.un, vm.vpp.pw, vm.finishedUpdating);
- $scope.getVppList();
- } else {
- vm.waiting = false;
- toastService.showToast('Error configuring VPP');
- }
- };
-
- //function called when the update button is clicked
- vm.updateConfig = function() {
- //VppService.editVpp(vm.vpp.name, vm.vpp.ip, vm.vpp.port, vm.vpp.un, vm.vpp.pw, vm.finishedUpdating);
- VppService.deleteVpp(vm.vpp, vm.finishedDeleting);
- };
- },
- controllerAs: 'ConfigVppDialogCtrl',
- templateUrl: $scope.view_path + 'config-vpp-dialog.html',
- parent: angular.element(document.body),
- clickOutsideToClose:true
- });
- };
-
- $scope.deleteVpp = function(vppObject) {
-
- var finished = function(successful) {
- if (successful) {
- toastService.showToast('Removed VPP!');
- $scope.getVppList();
- } else {
- toastService.showToast('Error removing VPP');
- }
- };
-
- VppService.deleteVpp(vppObject, finished);
- };
-
- $scope.getVppList();
- }]);
-
- vpp.register.controller('InventoryDetailController', ['$scope', '$rootScope','$filter', 'toastService', 'dataService',
- function($scope, $rootScope, filter, toastService, dataService) {
- $scope.displayInterfaceList = [].concat($scope.selectedVpp.interfaces);
- $scope.vppList = dataService.vpps;
-
- $scope.viewTopology = function(vpp) {
-
- var vm = this;
-
- $scope.topo = new nx.graphic.Topology({
- height: 400,
- width: 800,
- scalable: true,
- theme:'blue',
- enableGradualScaling:true,
- nodeConfig: {
- color: '#ffffff',
- label: 'model.label',
- scale: 'model.scale',
- iconType: function(vertex) {
- var type = vertex.get().type;
- if (type === 'bd') {
- return 'bd'
- } else if (type === 'vpp') {
- return 'switch'
- } else {
- return 'interf';
- }
- }
- },
- linkConfig: {
- label: 'model.label',
- linkType: 'parallel',
- color: function(link) {
- if (link.getData().type === 'tunnel') {
- return '#ffffff';
- } else {
- return '#ffffff';
- }
- },
- width: function(link) {
- if (link.getData().type === 'tunnel') {
- return 5;
- }
- }
- },
- showIcon: true,
- dataProcessor: 'force',
- autoLayout: true,
- enableSmartNode: false,
- tooltipManagerConfig: {
- nodeTooltipContentClass: 'TooltipNode',
- linkTooltipContentClass: 'TooltipLink'
- }
- });
- $scope.app = new nx.ui.Application;
-
- vm.vpp = vpp;
- vm.vpp.type = 'vpp';
- vm.vpp.label = vm.vpp.name;
-
- var nodes = [].concat(vm.vpp);
- var links = [];
-
- _.forEach(vm.vpp.interfaces, function(interf, index){
- interf.label = interf.name;
- interf.scale = 0.5;
- nodes.push(interf);
- links.push({source: 0, target: index + 1});
- });
-
- $scope.topo.data({
- nodes: nodes,
- links: links
- });
-
- $scope.app.container(document.getElementById('next-vpp-topo'));
- $scope.topo.attach($scope.app);
-
- };
-
- $scope.fillTopologyData = function(vpp) {
- var nodes = [].concat(vpp);
- var links = [];
- vpp.type = 'vpp';
- vpp.label = vpp.name;
-
- _.forEach(vpp.interfaces, function(interf, index){
- interf.label = interf.name;
- interf.scale = 0.5;
- nodes.push(interf);
- links.push({source: 0, target: index + 1});
- });
-
- $scope.topo.data({
- nodes: nodes,
- links: links
- });
- };
-
- $scope.$watch('selectedVpp', function() {
- $scope.fillTopologyData($scope.selectedVpp);
- });
-
- $scope.viewTopology($scope.selectedVpp);
-
- }]);
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js b/vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js
deleted file mode 100644
index 5bd2c955e..000000000
--- a/vbd/gui/module/src/main/resources/vpp/controllers/vpp.controller.js
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-var modules = [
- // module
- 'app/vpp/vpp.module',
- // services
- 'app/vpp/services/vpp.services',
- 'app/vpp/services/inventory.service',
- 'app/vpp/services/bdm.service',
- 'app/vpp/services/bdm.bridgedomain.service',
- 'app/vpp/services/bdm.interface.service',
- 'app/vpp/services/bdm.vpp.service',
- 'app/vpp/services/bdm.tunnel.service',
- //controllers
- 'app/vpp/controllers/inventory.controller',
- 'app/vpp/controllers/bdm.controller',
- 'app/vpp/controllers/bdm.bridgedomain.controller',
- 'app/vpp/controllers/bdm.vpp.controller',
- 'app/vpp/controllers/bdm.interface.controller'
-];
-
-
-define(modules, function(vpp) {
-
- vpp.controller('vppCtrl', ['$scope', '$rootScope', '$timeout', 'toastService', '$mdSidenav', '$mdDialog',
- function ($scope, $rootScope, $timeout, toastService, $mdSidenav, $mdDialog) {
-
- $rootScope['section_logo'] = 'src/app/vpp/assets/images/vpp.gif';
- $scope.view_path = 'src/app/vpp/views/';
-
- $scope.mainView = "inventory";
- $scope.selectedVpp = null;
-
- $scope.setMainView = function(viewName) {
- $scope.mainView = viewName;
- };
-
- $scope.selectVpp = function(vpp) {
- $scope.selectedVpp = vpp;
- $scope.$broadcast('RELOAD_SELECTED_VPP');
- };
-
- // filter used in inventory to filter interfaceList of vxlan_tunnel interfaces
- $scope.filterRemoveVxlanIf = function (item) {
- return (item.name && item.name.indexOf('vxlan') !== 0) || (item['tp-id'] && item['tp-id'].indexOf('vxlan') !== 0);
- };
-
- // filter used in inventory to return vxlan_tunnel interfaces
- $scope.filterGetVxlanIf = function (item) {
- return (item.name && item.name.indexOf('vxlan') === 0) || (item['tp-id'] && item['tp-id'].indexOf('vxlan') === 0);
- };
-
- }]);
-
-
-});
-
-
diff --git a/vbd/gui/module/src/main/resources/vpp/main.js b/vbd/gui/module/src/main/resources/vpp/main.js
deleted file mode 100644
index cbeb1f692..000000000
--- a/vbd/gui/module/src/main/resources/vpp/main.js
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-require.config({
- paths : {
- 'angular-material' : 'app/vpp/bower_components/angular-material/angular-material.min',
- 'angular-animate' : 'app/vpp/bower_components/angular-animate/angular-animate.min',
- 'angular-aria' : 'app/vpp/bower_components/angular-aria/angular-aria.min',
- 'angular-smart-table' : 'app/vpp/bower_components/angular-smart-table/dist/smart-table',
- 'lodash' : 'app/vpp/assets/js/lodash.min',
- 'next': 'app/vpp/assets/js/next',
- 'angular-ui-grid': 'app/vpp/bower_components/angular-ui-grid/ui-grid.min',
- },
-
- shim : {
- 'angular-material' : ['angular'],
- 'angular-animate' : ['angular'],
- 'angular-aria' : ['angular'],
- 'angular-smart-table' : ['angular'],
- 'angular-ui-grid' : ['angular'],
- 'lodash' : {exports: '_'}
- },
-
-});
-
-define(['app/vpp/vpp.module']);
diff --git a/vbd/gui/module/src/main/resources/vpp/node/node b/vbd/gui/module/src/main/resources/vpp/node/node
deleted file mode 100755
index f11f22468..000000000
--- a/vbd/gui/module/src/main/resources/vpp/node/node
+++ /dev/null
Binary files differ
diff --git a/vbd/gui/module/src/main/resources/vpp/package.json b/vbd/gui/module/src/main/resources/vpp/package.json
deleted file mode 100644
index 3909fb8e0..000000000
--- a/vbd/gui/module/src/main/resources/vpp/package.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "odl-vpp",
- "version": "1.0.0",
- "description": "Opendaylight VPP UI",
- "main": "main.js",
- "devDependencies": {
- "bower": "~1.3.12"
- },
- "repository": {
- "type": "git",
- "url": "git clone https://gerrit.fd.io/r/honeycomb"
- },
- "author": "Varun Seereeram, Chris Metz, John Burns, Dave Wallace, Daniel Malachovsky",
- "license": "ISC",
- "keywords": [
- "odl-vpp"
- ]
-}
diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js
deleted file mode 100644
index e0fcee68f..000000000
--- a/vbd/gui/module/src/main/resources/vpp/services/bdm.bridgedomain.service.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/vpp/vpp.module'], function(vpp) {
- vpp.register.factory('bdmBridgeDomainService', function(VPPRestangular) {
- var s = {};
-
- var BridgeDomain = function(topologyId) {
- this['topology-id'] = topologyId || null;
- this['topology-types'] = {
- 'vbridge-topology:vbridge-topology': {}
- };
- this['underlay-topology'] = [
- {
- 'topology-ref': 'topology-netconf'
- }
- ];
- this['vbridge-topology:tunnel-type'] = 'tunnel-type-vxlan';
- this['vbridge-topology:vxlan'] = {
- 'vni': '1'
- };
- this['vbridge-topology:flood'] = "true",
- this['vbridge-topology:forward'] = "true",
- this['vbridge-topology:learn'] = "true",
- this['vbridge-topology:unknown-unicast-flood'] = "true",
- this['vbridge-topology:arp-termination'] = "false"
- };
-
- s.createObj = function(topologyId) {
- return new BridgeDomain(topologyId);
- };
-
- s.add = function(bridgeDomain, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one(bridgeDomain['topology-id']);
- var dataObj = {'topology': [bridgeDomain]};
-
- restObj.customPUT(dataObj).then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.get = function(successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology');
- var bridgeDomainList = [];
-
- restObj.get().then(function(data) {
- if(data['network-topology'].topology) {
- bridgeDomainList = data['network-topology'].topology.filter(function (topology) {
- if (topology['topology-types'] && topology['topology-types']['vbridge-topology:vbridge-topology']) {
- return topology['topology-types']['vbridge-topology:vbridge-topology'] !== undefined;
- }
- });
- }
- successCallback(bridgeDomainList);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.getOne = function(bdId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one(bdId);
-
- restObj.get().then(function(data) {
- successCallback(data.topology[0]);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.remove = function(bdName,successCallback,errorCallback) {
- //http://localhost:8181/restconf/config/network-topology:network-topology/topology/testBD
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one(bdName);
-
- restObj.remove().then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- return s;
- });
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js
deleted file mode 100644
index 5fc907b7f..000000000
--- a/vbd/gui/module/src/main/resources/vpp/services/bdm.interface.service.js
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/vpp/vpp.module'], function(vpp) {
- vpp.register.factory('bdmInterfaceService', function(VPPRestangular, bdmVppService) {
- var s = {};
-
- var Interface = function(tpId, interfaceName) {
- this['tp-id'] = tpId || null;
- this['vbridge-topology:user-interface'] = interfaceName;
- };
-
- s.createObj = function(tpId, interfaceName) {
- return new Interface(tpId, interfaceName);
- };
-
- s.add = function(interf, bridgeDomainId, vppId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology')
- .one('topology').one(bridgeDomainId).one('node').one(vppId).one('termination-point').one(encodeURIComponent(interf['tp-id']));
-
- var dataObj = {'termination-point': [interf]};
-
- var write = function() {
- restObj.customPUT(dataObj).then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- var errorCallback = function() {};
-
- bdmVppService.checkAndWriteVpp(bridgeDomainId, vppId, write, errorCallback);
-
-
- };
-
- s.delete = function(interf, bridgeDomainId, vppId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology')
- .one('topology').one(bridgeDomainId).one('node').one(vppId).one('termination-point').one(encodeURIComponent(interf['tp-id']));
-
- restObj.remove().then(function(data) {
- bdmVppService.checkAndDeleteVpp(bridgeDomainId, vppId,
- function() {
- successCallback(data);
- },
- function() {
-
- }
- );
-
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.get = function(bridgeDomainId, vppId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology')
- .one('topology').one(bridgeDomainId).one('node').one(vppId);
-
- restObj.get().then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- return s;
- });
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.service.js
deleted file mode 100644
index 5d6592787..000000000
--- a/vbd/gui/module/src/main/resources/vpp/services/bdm.service.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/vpp/vpp.module', 'next'], function(vpp) {
- vpp.register.factory('bdmService', function(VPPRestangular, VPPRestangularXml) {
- var s = {};
-
- return s;
- });
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.tunnel.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.tunnel.service.js
deleted file mode 100644
index 7c8f1492f..000000000
--- a/vbd/gui/module/src/main/resources/vpp/services/bdm.tunnel.service.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/vpp/vpp.module'], function(vpp) {
- vpp.register.factory('bdmTunnelService', function(VPPRestangular) {
- var s = {};
-
- s.get = function(bridgeDomainId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('operational').one('network-topology:network-topology')
- .one('topology').one(bridgeDomainId);
-
- restObj.get().then(function(data) {
- successCallback(data.topology[0].link);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- return s;
- });
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js b/vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js
deleted file mode 100644
index a86fa06fc..000000000
--- a/vbd/gui/module/src/main/resources/vpp/services/bdm.vpp.service.js
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/vpp/vpp.module'], function(vpp) {
- vpp.register.factory('bdmVppService', function(VPPRestangular) {
- var s = {};
-
- var Vpp = function(nodeId, vppId) {
- this['node-id'] = nodeId || null;
- this['supporting-node'] = [
- {
- 'topology-ref': 'topology-netconf',
- 'node-ref': vppId
- }
- ];
- this['netconf-node-topology:pass-through'] = {};
- };
-
- s.createObj = function(nodeId, vppId) {
- return new Vpp(nodeId, vppId);
- };
-
- s.add = function(vpp, bridgeDomainId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one(bridgeDomainId).one('node').one(vpp['node-id']);
- var dataObj = {'node': [vpp]};
-
- restObj.customPUT(dataObj).then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.get = function(bridgeDomainId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one(bridgeDomainId);
-
- return restObj.get().then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.getOne = function(bridgeDomainId, vppId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one(bridgeDomainId).one('node').one(vppId);
-
- return restObj.get().then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.delete = function(bridgeDomainId, vppId, successCallback, errorCallback) {
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one(bridgeDomainId).one('node').one(vppId);
-
- return restObj.remove().then(function(data) {
- successCallback(data);
- }, function(res) {
- errorCallback(res.data, res.status);
- });
- };
-
- s.checkAndWriteVpp = function(bridgeDomainId, vppId, successCallback, errorCallback) {
- s.getOne(bridgeDomainId, vppId,
- function() {
- successCallback();
- }, function() {
- var vppObject = s.createObj(vppId, vppId);
-
- s.add(vppObject, bridgeDomainId, function() {
- successCallback();
- }, function() {
- errorCallback();
- });
- }
- );
- };
-
- s.checkAndDeleteVpp = function(bridgeDomainId, vppId, successCallback, errorCallback) {
- s.getOne(bridgeDomainId, vppId,
- function(data) {
- if(!data['termination-point']) {
- s.delete(bridgeDomainId, vppId,
- function(){
- successCallback();
- },
- function() {
- errorCallback();
- }
- );
- }
- },
- function() {
- errorCallback();
- }
- );
- };
-
- return s;
- });
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/services/inventory.service.js b/vbd/gui/module/src/main/resources/vpp/services/inventory.service.js
deleted file mode 100644
index 6181ce678..000000000
--- a/vbd/gui/module/src/main/resources/vpp/services/inventory.service.js
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/vpp/vpp.module', 'next'], function(vpp) {
- vpp.register.factory('VppService', function(VPPRestangular, VPPRestangularXml, VppInterfaceService, $q) {
- var s = {};
-
- var Vpp = function(name, ipAddress, port, username, password, status) {
- this.name = name || null;
- this.ipAddress = ipAddress || null;
- this.port = port || null;
- this.username = username || null;
- this.password = password || null;
- this.status = status || null;
- this.interfaces = [];
- };
-
- s.createObj = function(name, ipAddress, port, username, password, status) {
- return new Vpp(name, ipAddress, port, username, password, status);
- };
-
- s.getVppList = function(successCallback, errorCallback) {
- var vppList = [];
- var promiseList = [];
- var restObj = VPPRestangular.one('restconf').one('operational').one('network-topology:network-topology').one('topology').one('topology-netconf');
-
- restObj.get().then(function(data) {
- data.topology[0].node.forEach(function(n) {
- if(n['node-id'] !== 'controller-config') {
- //create new object
- var vppObj = s.createObj(n['node-id'], n['netconf-node-topology:host'], n['netconf-node-topology:port'], null, null, n['netconf-node-topology:connection-status']);
- // register a promise
- if (vppObj.status === 'connected') {
- var promise = VppInterfaceService.getInterfaceListByVppName(n['node-id'],
- function (interfaceList) {
- vppObj.interfaces = interfaceList;
- },
- function (error) { }
- );
- // add promise to array
- promiseList.push(promise);
- // when promise is resolved, push vpp into vppList
- promise.then(
- function () {
- vppList.push(vppObj);
- },
- function() {
- console.warn('error');
- }
- )
- }
- else {
- vppList.push(vppObj);
- }
-
- }
- });
-
- // when all promises are resolved, call success callback
- $q.all(promiseList).then(function () {
- successCallback(vppList);
- });
- }, function(res) {
- errorCallback(res);
- });
- };
-
- s.deleteVpp = function(vpp, finishedSuccessfullyCallback) {
- console.log(vpp);
- var restObj = VPPRestangular.one('restconf').one('config').one('network-topology:network-topology').one('topology').one('topology-netconf').one('node').one('controller-config').one('yang-ext:mount').one('config:modules').one('module').one('odl-sal-netconf-connector-cfg:sal-netconf-connector').one(vpp.name);
-
- restObj.remove().then(function() {
- finishedSuccessfullyCallback(true);
- }, function(res) {
- finishedSuccessfullyCallback(false);
- });
- };
-
- s.mountVpp = function(name,ip,port,un,pw,finishedSuccessfullyCallback) {
-
- var postData = '\
- <module xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">\
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">prefix:sal-netconf-connector</type>\
- <name>'+name+'</name>\
- <address xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">'+ip+'</address>\
- <port xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">'+port+'</port>\
- <username xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">'+un+'</username>\
- <password xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">'+pw+'</password>\
- <tcp-only xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">false</tcp-only>\
- <event-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">\
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:netty">prefix:netty-event-executor</type>\
- <name>global-event-executor</name>\
- </event-executor>\
- <binding-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">\
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">prefix:binding-broker-osgi-registry</type>\
- <name>binding-osgi-broker</name>\
- </binding-registry>\
- <dom-registry xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">\
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:md:sal:dom">prefix:dom-broker-osgi-registry</type>\
- <name>dom-broker</name>\
- </dom-registry>\
- <client-dispatcher xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">\
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:config:netconf">prefix:netconf-client-dispatcher</type>\
- <name>global-netconf-dispatcher</name>\
- </client-dispatcher>\
- <processing-executor xmlns="urn:opendaylight:params:xml:ns:yang:controller:md:sal:connector:netconf">\
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:controller:threadpool">prefix:threadpool</type>\
- <name>global-netconf-processing-executor</name>\
- </processing-executor>\
- </module>';
-
- var restObj = VPPRestangularXml.one('restconf').one('config').one('opendaylight-inventory:nodes').one('node').one('controller-config').one('yang-ext:mount');
-
- restObj.post('config:modules', postData).then(function() {
- finishedSuccessfullyCallback(true);
- }, function(res) {
- finishedSuccessfullyCallback(false);
- });
- };
-
- return s;
- });
-
- vpp.register.factory('VppInterfaceService', function(VPPRestangular, $q) {
- var s = {};
-
- s.getInterfaceListByVppName = function(vppName, successCallback, errorCallback) {
- var interfaceList = [];
- var restObj = VPPRestangular.one('restconf').one('operational').one('network-topology:network-topology').one('topology').one('topology-netconf').one('node').one(vppName).one('yang-ext:mount').one('ietf-interfaces:interfaces-state');
-
- return restObj.get().then(
- function(data) {
- if (data['interfaces-state'].interface) {
- interfaceList = data['interfaces-state'].interface.filter(function(i) {
- if (i.name != 'local0') {
- return i;
- }
- });
- }
- successCallback(interfaceList);
- },
- function(res) {
- errorCallback(res);
- }
- );
- };
-
- return s;
- });
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/services/vpp.services.js b/vbd/gui/module/src/main/resources/vpp/services/vpp.services.js
deleted file mode 100644
index 19cee135b..000000000
--- a/vbd/gui/module/src/main/resources/vpp/services/vpp.services.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['app/vpp/vpp.module', 'next'], function(vpp) {
-
- vpp.register.factory('VPPRestangular', function(Restangular, ENV) {
- return Restangular.withConfig(function(RestangularConfig) {
- RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));
- });
- });
-
- vpp.register.factory('VPPRestangularXml', function(Restangular, ENV) {
- return Restangular.withConfig(function(RestangularConfig) {
- RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));
- RestangularConfig.setDefaultHeaders({ "Content-Type": "application/xml" }, { "Accept": "application/xml" });
- });
- });
-
- vpp.register.service('toastService', function($mdToast) {
- this.showToast = function(content) {
- var toast = $mdToast.simple()
- .content(content)
- .action('OK')
- .position('bottom right');
- $mdToast.show(toast);
- }
- });
-
- vpp.register.service('dataService', ['$timeout', 'bdmTunnelService',function($timeout, bdmTunnelService) {
-
- var self = this;
-
- this.vpps = [];
- this.interfaces = [];
- this.selectedBd = {
- name: ''
- };
-
-
- }]);
-
-
-
-}); \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/bridge-domains.tpl.html b/vbd/gui/module/src/main/resources/vpp/views/bridge-domains.tpl.html
deleted file mode 100644
index 91b9d0aa4..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/bridge-domains.tpl.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<div ng-controller="BridgeDomainsController">
- <div layout="row" style="height: 1000px; width: 100%">
- <div layout="column" style="height:100%; width:60%">
- <div ng-show="showOverlay" style="height: 100%; width: 100%">
- <h3>Overlay topology</h3>
- <md-button class="md-raised" md-no-ink ng-click="toggleUnderlay()" style="width: 25%;" ng-disabled="!selectedBd['topology-id']">Show Underlay</md-button>
- <div id="overlay-next-app" style="height: 50%; width: 100%"></div>
- </div>
- <div ng-show="!showOverlay" style="height: 100%; width: 100%">
- <h3>Underlay topology</h3>
- <md-button class="md-raised" md-no-ink ng-click="toggleUnderlay()" style="width: 25%;" ng-disabled="!selectedBd['topology-id']">Show Overlay</md-button>
- <div id="underlay-next-app" style="height: 50%; width: 100%"></div>
- </div>
- </div>
- <div class="md-sidenav-left md-whiteframe-z2" style="height: 100%; width: 40%; background-color: #414042;">
-
- <md-input-container style="margin-right: 5px;" layout="row">
-
- <md-select ng-model='selectedBd' placeholder="Select BD" ng-change="bdChanged()" style="width: 100%;">
- <md-option ng-repeat="bd in bridgeDomainList" ng-value="bd">{{bd['topology-id']}}</md-option>
- </md-select>
-
- <md-button class="md-raised" md-no-ink ng-click="addBd()" style="width: 25%;">Add BD</md-button>
- <md-button class="md-raised" md-no-ink ng-click="removeBd()" style="width: 35%;" ng-if="selectedBd['topology-id'] && !selectedBd.node">Remove BD</md-button>
- <!--<md-button class="md-raised" md-no-ink ng-click="reload()" style="width: 25%;">Reload</md-button>-->
-
- </md-input-container>
-
- <div ng-controller="TableController as TableCtrl">
- <table st-table="interfaceDisplayList" class="table" st-safe-src="interfaceList">
- <thead>
- <tr>
- <th st-sort="assigned" class="interactive">Assigned</th>
- <th st-sort="vppName" st-sort-default="true" class="interactive">Vpp</th>
- <th st-sort="'tp-id'" class="interactive">Interface Name</th>
- <th st-sort="vbdName" class="interactive">Bridge Domain</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="row in interfaceDisplayList | filter: filterRemoveVxlanIf">
- <div ng-hide="row.hidden">
- <td>
- <md-switch ng-model="row.assigned" aria-label="Assign Switch" ng-change="TableCtrl.updateAssignment(row);">
- </md-switch>
- </td>
- <td>{{row.vppName}}</td>
- <td>{{row['tp-id']}}</td>
- <td>{{row.vbdName}}</td>
- </div>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/config-interface-dialog.html b/vbd/gui/module/src/main/resources/vpp/views/config-interface-dialog.html
deleted file mode 100644
index 2d7084b7c..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/config-interface-dialog.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<md-dialog ng-cloak aria-label="config interface dialog">
- <form>
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2 style="color: white">
- {{ConfigInterfaceDialogCtrl.interf.label}}
- </h2>
- <span flex></span>
- <md-button class="md-icon-button" ng-click="ConfigInterfaceDialogCtrl.cancel()" aria-label="close button">
- <div class="glyphicon glyphicon-remove"></div>
- </md-button>
- </div>
- </md-toolbar>
- <md-dialog-content style="max-width:800px;max-height:810px; ">
- <div class="md-dialog-content">
- <!--<md-content layout-padding>-->
- <form name="bDConfigForm">
- <md-input-container flex ng-if="ConfigInterfaceDialogCtrl.interf.type==='iana-if-type:ethernetCsmacd'">
- <label>
- Description
- </label>
- <input ng-model="ConfigInterfaceDialogCtrl.interf.description" flex>
- <md-switch ng-model="ConfigInterfaceDialogCtrl.interf['admin-status']" ng-true-value="'up'" ng-false-value="'down'">Admin Status</md-switch>
- </md-input-container>
- </form>
- <!--</md-content>-->
- </div>
- </md-dialog-content>
- <md-progress-linear md-mode="indeterminate" ng-show="ConfigInterfaceDialogCtrl.waiting"></md-progress-linear>
- <md-dialog-actions layout="row">
- <span flex></span>
- <label ng-hide="ConfigInterfaceDialogCtrl.interf['v3po:l2']['bridge-domain']">Assign to BD first.</label>
- <md-button ng-click="ConfigInterfaceDialogCtrl.updateConfig();" style="margin-right:20px;" class="md-accent" ng-if="(ConfigInterfaceDialogCtrl.interf.type==='iana-if-type:ethernetCsmacd')" ng-disabled="!ConfigInterfaceDialogCtrl.interf['v3po:l2']['bridge-domain']">
- Update
- </md-button>
- </md-dialog-actions>
- </form>
-</md-dialog> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/config-vpp-dialog.html b/vbd/gui/module/src/main/resources/vpp/views/config-vpp-dialog.html
deleted file mode 100644
index 3fcd4a68b..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/config-vpp-dialog.html
+++ /dev/null
@@ -1,67 +0,0 @@
-<md-dialog ng-cloak aria-label="new vpp dialog">
- <form>
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2 style="color: white">
- Configuring {{ConfigVppDialogCtrl.vpp.name}}
- </h2>
- <span flex></span>
- <md-button class="md-icon-button" ng-click="ConfigVppDialogCtrl.close()" aria-label="close button">
- <div>X</div>
- </md-button>
- </div>
- </md-toolbar>
- <md-dialog-content style="max-width:800px;max-height:810px; ">
- <div class="md-dialog-content">
- <md-content layout-padding>
- <form name="vppConfigForm">
- <div layout="row">
- <md-input-container flex>
- <label>
- Name
- </label>
- <input ng-model="ConfigVppDialogCtrl.vpp.name" disabled>
- </md-input-container>
- <md-input-container flex>
- <label>
- IP Address
- </label>
- <input ng-model="ConfigVppDialogCtrl.vpp.ip" ng-disabled="ConfigVppDialogCtrl.vpp.status === 'connected'">
- </md-input-container>
- <md-input-container flex>
- <label>
- Port
- </label>
- <input ng-model="ConfigVppDialogCtrl.vpp.port" ng-disabled="ConfigVppDialogCtrl.vpp.status === 'connected'">
- </md-input-container>
- </div>
- <div layout="row">
- <md-input-container flex ng-if="ConfigVppDialogCtrl.vpp.status != 'connected'">
- <label>
- Username
- </label>
- <input ng-model="ConfigVppDialogCtrl.vpp.un">
- </md-input-container>
- <md-input-container flex ng-if="ConfigVppDialogCtrl.vpp.status != 'connected'">
- <label>
- Password
- </label>
- <input ng-model="ConfigVppDialogCtrl.vpp.pw" type="password">
- </md-input-container>
- </div>
-
- </form>
- </md-content>
-
- </div>
- </md-dialog-content>
- <md-progress-linear md-mode="indeterminate" ng-show="ConfigVppDialogCtrl.waiting"></md-progress-linear>
- <md-dialog-actions layout="row">
- <span flex></span>
- <md-button ng-click="ConfigVppDialogCtrl.updateConfig();" style="margin-right:20px;" class="md-accent" ng-if="ConfigVppDialogCtrl.vpp.status != 'connected'">
- Update
- </md-button>
-
- </md-dialog-actions>
- </form>
-</md-dialog> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/index.tpl.html b/vbd/gui/module/src/main/resources/vpp/views/index.tpl.html
deleted file mode 100644
index 5e6d1094e..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/index.tpl.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<div ng-controller="vppCtrl">
- <md-tabs md-dynamic-height md-border-bottom>
- <md-tab label="Inventory" md-on-select="setMainView('inventory')">
- <md-content class="md-padding">
- <section ng-if="mainView === 'inventory'" ng-include src="view_path+'inventory-table.tpl.html'"></section>
- <section ng-if="mainView === 'inventoryDetail'" ng-include src="view_path+'inventory-detail.tpl.html'"></section>
- </md-content>
- </md-tab>
- <md-tab label="Bridge Domains" md-on-select="setMainView('bridgeDomains')">
- <md-content class="md-padding">
- <section ng-if="mainView === 'bridgeDomains'" ng-include src="view_path+'bridge-domains.tpl.html'" style="height:80%; overflow: hidden"></section>
- </md-content>
- </md-tab>
- </md-tabs>
-</div> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/inventory-detail.tpl.html b/vbd/gui/module/src/main/resources/vpp/views/inventory-detail.tpl.html
deleted file mode 100644
index a5a5dc5d7..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/inventory-detail.tpl.html
+++ /dev/null
@@ -1,99 +0,0 @@
-<div ng-controller="InventoryDetailController">
- <div layout="row" layout-xs="column">
- <!-- Topology -->
- <div class="md-whiteframe-z2" flex="60" layout-margin>
- <md-content layout-padding>
- <h3>Vpp and Interfaces</h3>
- <div id="next-vpp-topo"></div>
- </md-content>
- </div>
-
- <!-- right aligned detail -->
- <div class="md-sidenav-left md-whiteframe-z2" flex layout-margin>
- <md-content layout-padding>
- <div style="float: left">
- <h3>VPP Detail</h3>
- </div>
- <div style="float: right">
- <md-button ng-click="setMainView('inventory')" class="md-raised">Back to VPP List</md-button>
- </div>
-
- <table class="table table-striped">
- <tbody>
- <tr>
- <td><b>VPP Name</b></td>
- <td>
- <md-select ng-model='selectedVpp' placeholder="Select VPP" ng-change="selectVpp(vpp)">
- <md-option ng-repeat="vpp in vppList" ng-value="vpp">{{vpp.name}}</md-option>
- </md-select>
- </td>
- </tr>
- <tr>
- <td><b>IP Address</b></td>
- <td>{{selectedVpp.ipAddress}}</td>
- </tr>
- <tr>
- <td><b>Port</b></td>
- <td>{{selectedVpp.port}}</td>
- </tr>
- <tr>
- <td><b>Connection Status</b></td>
- <td>{{selectedVpp.status}}</td>
- </tr>
- </tbody>
- </table>
-
- <div style="float: left">
- <h3>VXLAN Tunnel</h3>
- </div>
- <table st-table="displayInterfaceList" st-safe-src="selectedVpp.interfaces" class="table table-striped">
- <thead>
- <tr>
- <th st-sort="name" class="interactive">Name</th>
- <th st-sort="oper-status" class="interactive" >Oper Status</th>
- <th st-sort="admin-status" class="interactive">Admin Status</th>
- <th st-sort="'v3po:vxlan.src'" class="interactive">Source IP</th>
- <th st-sort="'v3po:vxlan.src'" class="interactive">Destination IP</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="interface in displayInterfaceList | filter: filterGetVxlanIf">
- <td>{{interface.name}}</td>
- <td>{{interface['admin-status']}}</td>
- <td>{{interface['phys-address']}}</td>
- <td>{{interface['v3po:vxlan'].src}}</td>
- <td>{{interface['v3po:vxlan'].dst}}</td>
- </tr>
- </tbody>
- </table>
- </md-content>
- </div>
- </div>
-
- <div layout="row" flex="100" layout-margin>
- <!-- interfaces list -->
- <div class="md-whiteframe-z2" flex="100">
- <md-content layout-padding>
- <h3>Interface list</h3>
- <table st-table="displayInterfaceList" st-safe-src="selectedVpp.interfaces" class="table table-striped">
- <thead>
- <tr>
- <th st-sort="name" class="interactive">Name</th>
- <th st-sort="oper-status" class="interactive" >Oper Status</th>
- <th st-sort="admin-status" class="interactive">Admin Status</th>
- <th st-sort="phys-address" class="interactive">MAC Address</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="interface in displayInterfaceList | filter: filterRemoveVxlanIf">
- <td>{{interface.name}}</td>
- <td>{{interface['oper-status']}}</td>
- <td>{{interface['admin-status']}}</td>
- <td>{{interface['phys-address']}}</td>
- </tr>
- </tbody>
- </table>
- </md-content>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/inventory-table-interfaces-subgrid.tpl.html b/vbd/gui/module/src/main/resources/vpp/views/inventory-table-interfaces-subgrid.tpl.html
deleted file mode 100644
index c47617cb1..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/inventory-table-interfaces-subgrid.tpl.html
+++ /dev/null
@@ -1 +0,0 @@
-<div ui-grid="row.entity.subGridOptions" style="height:150px;"></div> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/inventory-table.tpl.html b/vbd/gui/module/src/main/resources/vpp/views/inventory-table.tpl.html
deleted file mode 100644
index ab62c75c3..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/inventory-table.tpl.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<div ng-controller="InventoryTableController">
- <div layout="row" flex="100" layout-margin>
- <div class="md-whiteframe-z2 flex">
- <md-content layout-padding>
- <div style="float: left">
- <h3>VPP List</h3>
- </div>
- <div style="float: right">
- <md-button ng-click="addVppShowForm()" class="md-raised">Mount VPP</md-button>
- <md-button ng-click="getVppList()" class="md-raised">Reload VPPs</md-button>
- </div>
-
- <table st-table="displayVppList" st-safe-src="vppList" class="table table-striped">
- <thead>
- <tr>
- <th st-sort="name" class="interactive">VPP Name</th>
- <th st-sort="ipAddress" class="interactive">IP Address</th>
- <th st-sort="port" class="interactive">Port</th>
- <th st-sort="status" class="interactive">Connection Status</th>
- <th>Actions</th>
- </tr>
- </thead>
- <tbody>
- <tr ng-repeat="vpp in displayVppList">
- <td>{{vpp.name}}</td>
- <td>{{vpp.ipAddress}}</td>
- <td>{{vpp.port}}</td>
- <td>{{vpp.status}}</td>
- <td>
- <!--<md-button ng-click="viewTopology(vpp)" class="md-accent">View Topology</md-button>-->
- <md-button ng-click="selectVpp(vpp); setMainView('inventoryDetail')" >Detail</md-button>
- <md-button ng-click="editVppShowForm(vpp)" ng-disabled="vpp.status === 'connected'" class="md-accent">Edit</md-button>
- <md-button ng-click="deleteVpp(vpp)" class="md-accent">Delete</md-button>
- </td>
- </tr>
- </tbody>
- </table>
- </md-content>
- </div>
- </div>
-</div> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/inventory.tpl.html b/vbd/gui/module/src/main/resources/vpp/views/inventory.tpl.html
deleted file mode 100644
index 9d5e19d5e..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/inventory.tpl.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div ng-controller="InventoryController">
- <md-progress-linear md-mode="indeterminate" ng-if="InventoryController.dataService.loading"></md-progress-linear>
- <div id="inventory-next-app" style="height: 100%"></div>
- <md-button class="md-fab md-primary md-fab-bottom-right" md-no-ink aria-label="Add VPP" ng-click="InventoryController.addVpp()">
- <div class="glyphicon glyphicon-plus"></div>
- </md-button>
-</div> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/new-bd-dialog.html b/vbd/gui/module/src/main/resources/vpp/views/new-bd-dialog.html
deleted file mode 100644
index 41e6ad8a4..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/new-bd-dialog.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<md-dialog ng-cloak aria-label="new bd dialog">
- <form>
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2 style="color: white">
- New BD
- </h2>
- <span flex></span>
- <md-button class="md-icon-button" ng-click="NewBdDialogCtrl.close()" aria-label="close button">
- <div>X</div>
- </md-button>
- </div>
- </md-toolbar>
- <md-dialog-content style="max-width:800px;max-height:810px; ">
- <div class="md-dialog-content">
- <md-content layout-padding>
- <form name="bDConfigForm">
- <div layout layout-sm="column">
- <md-input-container flex>
- <label>
- Name
- </label>
- <input ng-model="NewBdDialogCtrl.bd.name">
- </md-input-container>
- </div>
- </form>
- </md-content>
-
- </div>
- </md-dialog-content>
- <md-progress-linear md-mode="indeterminate" ng-show="NewBdDialogCtrl.waiting"></md-progress-linear>
- <md-dialog-actions layout="row">
- <span flex></span>
- <md-button ng-click="NewBdDialogCtrl.updateConfig();" style="margin-right:20px;" class="md-accent">
- Add
- </md-button>
- </md-dialog-actions>
- </form>
-</md-dialog> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/new-vpp-dialog.html b/vbd/gui/module/src/main/resources/vpp/views/new-vpp-dialog.html
deleted file mode 100644
index d8d2600f3..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/new-vpp-dialog.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<md-dialog ng-cloak aria-label="new vpp dialog">
- <form>
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2 style="color: white">
- Mount new VPP
- </h2>
- <span flex></span>
- <md-button class="md-icon-button" ng-click="NewVppDialogCtrl.close()" aria-label="close button">
- <div>X</div>
- </md-button>
- </div>
- </md-toolbar>
- <md-dialog-content style="max-width:800px;max-height:810px; ">
- <div class="md-dialog-content">
- <md-content layout-padding>
- <form name="vppConfigForm">
- <div layout="row">
- <md-input-container flex>
- <label>
- Name
- </label>
- <input ng-model="NewVppDialogCtrl.vpp.name">
- </md-input-container>
- <md-input-container flex>
- <label>
- IP Address
- </label>
- <input ng-model="NewVppDialogCtrl.vpp.ip">
- </md-input-container>
- <md-input-container flex>
- <label>
- Port
- </label>
- <input ng-model="NewVppDialogCtrl.vpp.port">
- </md-input-container>
- </div>
- <div layout="row">
- <md-input-container flex>
- <label>
- Username
- </label>
- <input ng-model="NewVppDialogCtrl.vpp.un">
- </md-input-container>
- <md-input-container flex>
- <label>
- Password
- </label>
- <input ng-model="NewVppDialogCtrl.vpp.pw" type="password">
- </md-input-container>
- </div>
-
- </form>
- </md-content>
-
- </div>
- </md-dialog-content>
- <md-progress-linear md-mode="indeterminate" ng-show="NewVppDialogCtrl.waiting"></md-progress-linear>
- <md-dialog-actions layout="row">
- <span flex></span>
- <md-button ng-click="NewVppDialogCtrl.updateConfig();" style="margin-right:20px;" class="md-raised" type="submit">
- <span>Mount</span>
- </md-button>
- <md-button ng-click="NewVppDialogCtrl.close();" style="margin-right:20px;" class="md-raised" type="button">
- <span>Close</span>
- </md-button>
- </md-dialog-actions>
- </form>
-</md-dialog> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/root.tpl.html b/vbd/gui/module/src/main/resources/vpp/views/root.tpl.html
deleted file mode 100644
index b07c00c51..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/root.tpl.html
+++ /dev/null
@@ -1 +0,0 @@
-<div class="main" ui-view></div> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/views/vpp-topo.html b/vbd/gui/module/src/main/resources/vpp/views/vpp-topo.html
deleted file mode 100644
index 8b3c9fd8a..000000000
--- a/vbd/gui/module/src/main/resources/vpp/views/vpp-topo.html
+++ /dev/null
@@ -1,18 +0,0 @@
-<md-dialog ng-cloak aria-label="vpp topo">
- <form>
- <md-toolbar>
- <div class="md-toolbar-tools">
- <h2 style="color: white">
- Topology for {{VppTopoCtrl.vpp.name}}
- </h2>
- <span flex></span>
- <md-button class="md-icon-button" ng-click="VppTopoCtrl.close()" aria-label="close button">
- <div>X</div>
- </md-button>
- </div>
- </md-toolbar>
- <md-dialog-content style="max-width:500px;max-height:500px;overflow:hidden">
- <div id="next-vpp-topo"></div>
- </md-dialog-content>
- </form>
-</md-dialog> \ No newline at end of file
diff --git a/vbd/gui/module/src/main/resources/vpp/vpp.module.js b/vbd/gui/module/src/main/resources/vpp/vpp.module.js
deleted file mode 100644
index 464aa35bf..000000000
--- a/vbd/gui/module/src/main/resources/vpp/vpp.module.js
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-define(['angularAMD', 'app/routingConfig', 'ui-bootstrap', 'Restangular', 'angular-animate', 'angular-aria',
- 'angular-material', 'angular-smart-table', 'angular-translate',
- 'angular-translate-loader-partial', 'lodash'], function() {
-
- var vpp = angular.module('app.vpp', ['ui.router.state','app.core', 'ui.bootstrap', 'restangular', 'ngAnimate',
- 'ngAria', 'ngMaterial', 'smart-table', 'pascalprecht.translate']);
-
- vpp.register = vpp;
-
- vpp.config(function ($stateProvider, $compileProvider, $controllerProvider, $provide, $translateProvider, $translatePartialLoaderProvider, NavHelperProvider, $filterProvider, $mdThemingProvider) {
-
- $translatePartialLoaderProvider.addPart('app/vpp/assets/data/locale');
-
- vpp.register = {
- directive : $compileProvider.directive,
- controller : $controllerProvider.register,
- filter: $filterProvider.register,
- factory : $provide.factory,
- service : $provide.service
- };
-
- NavHelperProvider.addControllerUrl('app/vpp/controllers/vpp.controller');
- NavHelperProvider.addToMenu('vpp', {
- "link": "#/vpp/index",
- "active": "main.vpp",
- "title": "VPP",
- "icon": "icon-code-fork",
- "page": {
- "title": "VPP",
- "description": "VPP"
- }
- });
-
- var access = routingConfig.accessLevels;
- $stateProvider.state('main.vpp', {
- url: 'vpp',
- abstract: true,
- views : {
- 'content' : {
- templateUrl: 'src/app/vpp/views/root.tpl.html'
- }
- }
- });
-
- $stateProvider.state('main.vpp.index', {
- url: '/index',
- access: access.admin,
- views: {
- '': {
- controller: 'vppCtrl',
- templateUrl: 'src/app/vpp/views/index.tpl.html'
- }
- }
- });
-
- $mdThemingProvider.definePalette('odl-gray', {
- '50': 'BDBDBD',
- '100': 'BDBDBD',
- '200': 'BDBDBD',
- '300': 'BDBDBD',
- '400': 'BDBDBD',
- '500': '414040',
- '600': '414040',
- '700': '414040',
- '800': '414040',
- '900': '414040',
- 'A100': '414040',
- 'A200': '414040',
- 'A400': '414040',
- 'A700': '414040',
- 'contrastDefaultColor': 'light', // whether, by default, text (contrast)
- // on this palette should be dark or light
- 'contrastDarkColors': [],
- 'contrastLightColors': undefined // could also specify this if default was 'dark'
- });
-
- $mdThemingProvider.definePalette('odl-orange', {
- '50': 'FFA500',
- '100': 'FFA500',
- '200': 'FFA500',
- '300': 'FFA500',
- '400': 'FFA500',
- '500': 'FFA500',
- '600': 'FFA500',
- '700': 'FFA500',
- '800': 'FFA500',
- '900': 'FFA500',
- 'A100': 'FFA500',
- 'A200': 'FFA500',
- 'A400': 'FFA500',
- 'A700': 'FFA500',
- 'contrastDefaultColor': 'light', // whether, by default, text (contrast)
- // on this palette should be dark or light
- 'contrastDarkColors': [],
- 'contrastLightColors': undefined // could also specify this if default was 'dark'
- });
-
- $mdThemingProvider.theme('default').dark()
- .primaryPalette('odl-gray',{
- 'default': '500'
- })
- .accentPalette('odl-orange');
-
- });
-
- return vpp;
-});
diff --git a/vbd/gui/pom.xml b/vbd/gui/pom.xml
deleted file mode 100644
index 286c97b15..000000000
--- a/vbd/gui/pom.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Cisco Systems, Inc. and others. All rights reserved.
-This program and the accompanying materials are made available under the
-terms of the Eclipse Public License v1.0 which accompanies this distribution,
-and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL
--->
-<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>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-aggregator</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <relativePath>../</relativePath>
- </parent>
-
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-ui</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <name>vbd-ui</name>
- <description>Resources</description>
- <packaging>pom</packaging>
- <modules>
- <module>module</module>
- <module>bundle</module>
- </modules>
-</project>
diff --git a/vbd/impl/pom.xml b/vbd/impl/pom.xml
deleted file mode 100644
index 6f966b8c8..000000000
--- a/vbd/impl/pom.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-<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>io.fd.honeycomb.common</groupId>
- <artifactId>impl-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <relativePath>../../common/impl-parent</relativePath>
- </parent>
-
- <modelVersion>4.0.0</modelVersion>
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-impl</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <packaging>bundle</packaging>
-
- <properties>
- <config.file>src/main/config/vbd.xml</config.file>
- </properties>
-
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-artifacts</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
-
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-api</artifactId>
- </dependency>
-
- <dependency>
- <groupId>io.fd.honeycomb.v3po</groupId>
- <artifactId>v3po-api</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- </dependency>
-
- <!-- Testing Dependencies -->
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <scope>test</scope>
- </dependency>
-
- <dependency>
- <groupId>org.mockito</groupId>
- <artifactId>mockito-all</artifactId>
- <scope>test</scope>
- </dependency>
- </dependencies>
-
-
- <!--TODO: remove direct calling of builder-helper-maven-plugin. should be supported via profile in parent-->
- <build>
- <plugins>
- <plugin>
- <groupId>org.codehaus.mojo</groupId>
- <artifactId>build-helper-maven-plugin</artifactId>
- <executions>
- <execution>
- <id>attach-artifacts</id>
- <goals>
- <goal>attach-artifact</goal>
- </goals>
- <phase>package</phase>
- <configuration>
- <artifacts>
- <artifact>
- <file>${project.build.directory}/classes/config/vbd.xml</file>
- <type>xml</type>
- <classifier>config</classifier>
- </artifact>
- </artifacts>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
-
-</project>
diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java
deleted file mode 100644
index 02c5d89ed..000000000
--- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/BridgeDomain.java
+++ /dev/null
@@ -1,399 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package io.fd.honeycomb.vbd.impl;
-
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.Multimap;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import io.fd.honeycomb.vbd.api.VxlanTunnelIdAllocator;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import javax.annotation.Nullable;
-import javax.annotation.concurrent.GuardedBy;
-import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification.ModificationType;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.external.reference.rev160129.ExternalReference;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.LinkVbridgeAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.LinkVbridgeAugmentBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.NodeVbridgeAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TerminationPointVbridgeAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TerminationPointVbridgeAugmentBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyVbridgeAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.node.BridgeMember;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.node.BridgeMemberBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.node.termination.point._interface.type.TunnelInterfaceBuilder;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.LinkId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TpId;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.DestinationBuilder;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.link.attributes.SourceBuilder;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Link;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkBuilder;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.LinkKey;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPoint;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.node.attributes.SupportingNode;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.DataObject;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Implementation of a single Virtual Bridge Domain. It is bound to a particular network topology instance, manages
- * bridge members and projects state into the operational data store.
- */
-final class BridgeDomain implements DataTreeChangeListener<Topology> {
- private static final Logger LOG = LoggerFactory.getLogger(BridgeDomain.class);
-
- private static final int SOURCE_VPP_INDEX = 0;
- private static final int DESTINATION_VPP_INDEX = 1;
- private final KeyedInstanceIdentifier<Topology, TopologyKey> topology;
- @GuardedBy("this")
-
- private final BindingTransactionChain chain;
- private final ListenerRegistration<?> reg;
- private final MountPointService mountService;
- private final VppModifier vppModifier;
- private final VxlanTunnelIdAllocator tunnelIdAllocator;
- private TopologyVbridgeAugment config;
- private final String bridgeDomainName;
- private final String iiBridgeDomainOnVPPRest;
- private Multimap<NodeId, KeyedInstanceIdentifier<Node, NodeKey>> nodesToVpps = ArrayListMultimap.create();
-
- private BridgeDomain(final DataBroker dataBroker, final MountPointService mountService, final KeyedInstanceIdentifier<Topology, TopologyKey> topology,
- final BindingTransactionChain chain, VxlanTunnelIdAllocator tunnelIdAllocator) {
- this.bridgeDomainName = topology.getKey().getTopologyId().getValue();
- this.vppModifier = new VppModifier(mountService, bridgeDomainName);
-
- this.topology = Preconditions.checkNotNull(topology);
- this.chain = Preconditions.checkNotNull(chain);
- this.mountService = mountService;
- this.tunnelIdAllocator = tunnelIdAllocator;
-
- this.iiBridgeDomainOnVPPRest = provideIIBrdigeDomainOnVPPRest();
-
- reg = dataBroker.registerDataTreeChangeListener(
- new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION, topology), this);
- }
-
- private String provideIIBrdigeDomainOnVPPRest() {
- final StringBuilder strBuilder = new StringBuilder();
- strBuilder.append("v3po:vpp/bridge-domains/bridge-domain/");
- strBuilder.append(bridgeDomainName);
- return strBuilder.toString();
- }
-
- static BridgeDomain create(final DataBroker dataBroker,
- MountPointService mountService, final KeyedInstanceIdentifier<Topology, TopologyKey> topology, final BindingTransactionChain chain,
- final VxlanTunnelIdAllocator tunnelIdAllocator) {
-
- LOG.debug("Wiping operational state of {}", topology);
-
- final WriteTransaction tx = chain.newWriteOnlyTransaction();
- tx.delete(LogicalDatastoreType.OPERATIONAL, topology);
- tx.submit();
-
- return new BridgeDomain(dataBroker, mountService, topology, chain, tunnelIdAllocator);
- }
-
- synchronized void forceStop() {
- LOG.info("Bridge domain {} for {} going down", this, topology);
- reg.close();
- chain.close();
- LOG.info("Bridge domain {} for {} is down", this, topology);
- }
-
- synchronized void stop() {
- LOG.debug("Bridge domain {} for {} shutting down", this, topology);
-
- final WriteTransaction tx = chain.newWriteOnlyTransaction();
- tx.delete(LogicalDatastoreType.OPERATIONAL, topology);
- tx.submit();
- chain.close();
- }
-
- @Override
- public synchronized void onDataTreeChanged(final Collection<DataTreeModification<Topology>> changes) {
- for (DataTreeModification<Topology> c : changes) {
- LOG.debug("Domain {} for {} processing change {}", this, topology, c);
-
- final DataObjectModification<Topology> mod = c.getRootNode();
- switch (mod.getModificationType()) {
- case DELETE:
- LOG.debug("Topology {} deleted, expecting shutdown", topology);
- break;
- case SUBTREE_MODIFIED:
- // First check if the configuration has changed
- final DataObjectModification<TopologyVbridgeAugment> newConfig = mod.getModifiedAugmentation(TopologyVbridgeAugment.class);
- if (newConfig != null) {
- if (newConfig.getModificationType() != ModificationType.DELETE) {
- LOG.debug("Topology {} modified configuration {}", topology, newConfig);
- updateConfiguration(newConfig);
- } else {
- // FIXME: okay, what can we do about this one?
- LOG.error("Topology {} configuration deleted, good luck!", topology);
- }
- }
-
- for (DataObjectModification<? extends DataObject> child : mod.getModifiedChildren()) {
- LOG.debug("Topology {} modified child {}", topology, child);
-
- if (Node.class.isAssignableFrom(child.getDataType())) {
- modifyNode((DataObjectModification<Node>) child);
- }
- }
-
- break;
- case WRITE:
- final Topology data = mod.getDataAfter();
-
- // Read configuration
- final TopologyVbridgeAugment config = data.getAugmentation(TopologyVbridgeAugment.class);
- vppModifier.setConfig(config);
- if (config != null) {
- setConfiguration(config);
- } else {
- LOG.error("Topology {} has no configuration, good luck!", topology);
- }
-
- // FIXME: deal with nodes
-
- break;
- default:
- LOG.warn("Unhandled topology modification {}", mod);
- break;
- }
- }
- }
-
- private void modifyNode(final DataObjectModification<Node> nodeMod) {
- switch (nodeMod.getModificationType()) {
- case DELETE:
- LOG.debug("Topology {} node {} deleted", topology, nodeMod.getIdentifier());
- // FIXME: do something
- break;
- case SUBTREE_MODIFIED:
- LOG.debug("Topology {} node {} modified", topology, nodeMod.getIdentifier());
- for (DataObjectModification<? extends DataObject> nodeChild : nodeMod.getModifiedChildren()) {
- if (TerminationPoint.class.isAssignableFrom(nodeChild.getDataType())) {
- modifyTerminationPoint((DataObjectModification<TerminationPoint>) nodeChild,nodeMod.getDataAfter().getNodeId());
- }
- }
- break;
- case WRITE:
- LOG.debug("Topology {} node {} created", topology, nodeMod.getIdentifier());
- final int numberVppsBeforeAddition = nodesToVpps.keySet().size();
- final Node newNode = nodeMod.getDataAfter();
- createNode(newNode);
- final int numberVppsAfterAddition = nodesToVpps.keySet().size();
- if ((numberVppsBeforeAddition < numberVppsAfterAddition) && (numberVppsBeforeAddition >= 1)) {
- addTunnel(newNode.getNodeId());
- }
- break;
- default:
- LOG.warn("Unhandled node modification {} in topology {}", nodeMod, topology);
- break;
- }
- }
-
- private void modifyTerminationPoint(final DataObjectModification<TerminationPoint> nodeChild, final NodeId nodeId) {
- final TerminationPoint terminationPoint = nodeChild.getDataAfter();
- final TerminationPointVbridgeAugment termPointVbridgeAug = terminationPoint.getAugmentation(TerminationPointVbridgeAugment.class);
- if (termPointVbridgeAug != null) {
- final Collection<KeyedInstanceIdentifier<Node, NodeKey>> instanceIdentifiersVPP = nodesToVpps.get(nodeId);
- //TODO: probably iterate via all instance identifiers.
- if (!instanceIdentifiersVPP.isEmpty()) {
- final DataBroker dataBroker = VbdUtil.resolveDataBrokerForMountPoint(instanceIdentifiersVPP.iterator().next(), mountService);
- vppModifier.addInterfaceToBridgeDomainOnVpp(dataBroker, termPointVbridgeAug);
- }
- }
- }
-
- private void addTunnel(final NodeId sourceNode) {
- final KeyedInstanceIdentifier<Node, NodeKey> iiToSrcVpp = nodesToVpps.get(sourceNode).iterator().next();
- final Integer srcVxlanTunnelId = tunnelIdAllocator.nextIdFor(iiToSrcVpp);
- for (Map.Entry<NodeId, KeyedInstanceIdentifier<Node, NodeKey>> nodeToVpp : nodesToVpps.entries()) {
- if (!nodeToVpp.getKey().equals(sourceNode)) {
- //TODO: check whether returned value from nodesToVpps is not null
- final KeyedInstanceIdentifier<Node, NodeKey> iiToDstVpp = nodeToVpp.getValue();
- final Integer dstVxlanTunnelId = tunnelIdAllocator.nextIdFor(iiToDstVpp);
- final NodeId dstNode = nodeToVpp.getKey();
-
- final ListenableFuture<List<Optional<Ipv4AddressNoZone>>> ipAddressesFuture = vppModifier.readIpAddressesFromVpps(iiToSrcVpp, iiToDstVpp);
- Futures.addCallback(ipAddressesFuture, new FutureCallback<List<Optional<Ipv4AddressNoZone>>>() {
- @Override
- public void onSuccess(List<Optional<Ipv4AddressNoZone>> ipAddresses) {
- if (ipAddresses.size() == 2) {
- LOG.debug("All required IP addresses for creating tunnel were obtained.");
- final Optional<Ipv4AddressNoZone> ipAddressSrcVpp = ipAddresses.get(SOURCE_VPP_INDEX);
- final Optional<Ipv4AddressNoZone> ipAddressDstVpp = ipAddresses.get(DESTINATION_VPP_INDEX);
- if (ipAddressSrcVpp != null && ipAddressDstVpp != null) {
- if (ipAddressSrcVpp.isPresent() && ipAddressDstVpp.isPresent()) {
- //writing v3po:vxlan container to source node
- vppModifier.createVirtualInterfaceOnVpp(ipAddressSrcVpp.get(), ipAddressDstVpp.get(), iiToSrcVpp, srcVxlanTunnelId);
-
- //writing v3po:vxlan container to existing node
- vppModifier.createVirtualInterfaceOnVpp(ipAddressDstVpp.get(), ipAddressSrcVpp.get(), iiToDstVpp, dstVxlanTunnelId);
-
- addTerminationPoint(topology.child(Node.class, new NodeKey(dstNode)), dstVxlanTunnelId);
- addTerminationPoint(topology.child(Node.class, new NodeKey(sourceNode)), srcVxlanTunnelId);
-
- addLinkBetweenTerminationPoints(sourceNode, dstNode, srcVxlanTunnelId, dstVxlanTunnelId);
- addLinkBetweenTerminationPoints(dstNode, sourceNode, srcVxlanTunnelId, dstVxlanTunnelId);
- }
- }
- }
- }
-
- @Override
- public void onFailure(Throwable t) {
- LOG.debug("Reading of IP addresses has failed {}.", t);
- }
- });
- }
- }
- }
-
- private void addLinkBetweenTerminationPoints(final NodeId newVpp, final NodeId odlVpp,
- final int srcVxlanTunnelId, final int dstVxlanTunnelId) {
- //TODO clarify how should identifier of link looks like
- final String linkIdStr = newVpp.getValue() + "-" + odlVpp.getValue();
- final LinkId linkId = new LinkId(linkIdStr);
- final KeyedInstanceIdentifier<Link, LinkKey> iiToLink = topology.child(Link.class, new LinkKey(linkId));
- final WriteTransaction wTx = chain.newWriteOnlyTransaction();
- wTx.put(LogicalDatastoreType.OPERATIONAL, iiToLink, prepareLinkData(newVpp, odlVpp, linkId, srcVxlanTunnelId, dstVxlanTunnelId), true);
- wTx.submit();
- }
-
- private static Link prepareLinkData(final NodeId newVpp, final NodeId oldVpp, final LinkId linkId,
- final int srcVxlanTunnelId, final int dstVxlanTunnelId) {
- final LinkBuilder linkBuilder = new LinkBuilder();
- linkBuilder.setLinkId(linkId);
-
- final SourceBuilder sourceBuilder = new SourceBuilder();
- sourceBuilder.setSourceNode(newVpp);
- sourceBuilder.setSourceTp(new TpId(VbdUtil.provideVxlanId(srcVxlanTunnelId)));
- linkBuilder.setSource(sourceBuilder.build());
-
- final DestinationBuilder destinationBuilder = new DestinationBuilder();
- destinationBuilder.setDestNode(oldVpp);
- destinationBuilder.setDestTp(new TpId(VbdUtil.provideVxlanId(dstVxlanTunnelId)));
- linkBuilder.setDestination(destinationBuilder.build());
-
- final LinkVbridgeAugmentBuilder linkVbridgeAugmentBuilder = new LinkVbridgeAugmentBuilder();
- linkVbridgeAugmentBuilder.setTunnel(new ExternalReference(VbdUtil.provideVxlanId(srcVxlanTunnelId)));
- linkBuilder.addAugmentation(LinkVbridgeAugment.class, linkVbridgeAugmentBuilder.build());
- return linkBuilder.build();
- }
-
- private void createNode(final Node node) {
- for (SupportingNode supportingNode : node.getSupportingNode()) {
- final NodeId nodeMount = supportingNode.getNodeRef();
- final TopologyId topologyMount = supportingNode.getTopologyRef();
-
- final KeyedInstanceIdentifier<Node, NodeKey> iiToVpp = InstanceIdentifier
- .create(NetworkTopology.class)
- .child(Topology.class, new TopologyKey(topologyMount))
- .child(Node.class, new NodeKey(nodeMount));
- nodesToVpps.put(node.getNodeId(), iiToVpp);
- ListenableFuture<Void> addVppToBridgeDomainFuture = vppModifier.addVppToBridgeDomain(iiToVpp, node);
- addSupportingBridgeDomain(addVppToBridgeDomainFuture, node);
- }
- }
-
- private void addSupportingBridgeDomain(final ListenableFuture<Void> addVppToBridgeDomainFuture, final Node node) {
- Futures.addCallback(addVppToBridgeDomainFuture, new FutureCallback<Void>() {
- @Override
- public void onSuccess(Void result) {
- LOG.debug("Storing bridge member to operational DS....");
- final BridgeMemberBuilder bridgeMemberBuilder = new BridgeMemberBuilder();
- bridgeMemberBuilder.setSupportingBridgeDomain(new ExternalReference(iiBridgeDomainOnVPPRest));
- final InstanceIdentifier<BridgeMember> iiToBridgeMember = topology.child(Node.class, node.getKey()).augmentation(NodeVbridgeAugment.class).child(BridgeMember.class);
- final WriteTransaction wTx = chain.newWriteOnlyTransaction();
- wTx.put(LogicalDatastoreType.OPERATIONAL, iiToBridgeMember, bridgeMemberBuilder.build(), true);
- wTx.submit();
- }
-
- @Override
- public void onFailure(Throwable t) {
- //TODO handle this state
- }
- });
- }
-
- private void addTerminationPoint(final KeyedInstanceIdentifier<Node, NodeKey> nodeIID, final int vxlanTunnelId) {
- // build data
- final ExternalReference ref = new ExternalReference(VbdUtil.provideVxlanId(vxlanTunnelId));
- final TunnelInterfaceBuilder iFaceBuilder = new TunnelInterfaceBuilder();
- iFaceBuilder.setTunnelInterface(ref);
-
- final TerminationPointVbridgeAugmentBuilder tpAugmentBuilder = new TerminationPointVbridgeAugmentBuilder();
- tpAugmentBuilder.setInterfaceType(iFaceBuilder.build());
-
- final TerminationPointBuilder tpBuilder = new TerminationPointBuilder();
- tpBuilder.addAugmentation(TerminationPointVbridgeAugment.class, tpAugmentBuilder.build());
- tpBuilder.setTpId(new TpId(VbdUtil.provideVxlanId(vxlanTunnelId)));
- final TerminationPoint tp = tpBuilder.build();
-
- // process data
- final WriteTransaction wTx = chain.newWriteOnlyTransaction();
- wTx.put(LogicalDatastoreType.OPERATIONAL, nodeIID.child(TerminationPoint.class, tp.getKey()), tp, true);
- final CheckedFuture<Void, TransactionCommitFailedException> future = wTx.submit();
-
- Futures.addCallback(future, new FutureCallback<Void>() {
- @Override
- public void onSuccess(@Nullable Void result) {
- LOG.debug("Termination point successfully added to {}.", nodeIID);
- }
-
- @Override
- public void onFailure(Throwable t) {
- LOG.warn("Failed to add termination point to {}.", nodeIID);
- }
- });
- }
-
- private void setConfiguration(final TopologyVbridgeAugment config) {
- LOG.debug("Topology {} configuration set to {}", topology, config);
-
- this.config = config;
- }
-
- @GuardedBy("this")
- private void updateConfiguration(final DataObjectModification<TopologyVbridgeAugment> mod) {
- LOG.debug("Topology {} configuration changed", topology);
-
- // FIXME: do something smarter
- setConfiguration(mod.getDataAfter());
- }
-}
diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java
deleted file mode 100644
index dfab2e877..000000000
--- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/TopologyMonitor.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package io.fd.honeycomb.vbd.impl;
-
-import com.google.common.base.Preconditions;
-import io.fd.honeycomb.vbd.api.VxlanTunnelIdAllocator;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import javax.annotation.concurrent.GuardedBy;
-import org.opendaylight.controller.md.sal.binding.api.BindingTransactionChain;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataObjectModification;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeChangeListener;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeModification;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.md.sal.common.api.data.AsyncTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionChain;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionChainListener;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.topology.types.VbridgeTopology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class responsible for monitoring /network-topology/topology and activating a {@link BridgeDomain} when a particular
- * topology is marked as a bridge domain.
- */
-final class TopologyMonitor implements DataTreeChangeListener<VbridgeTopology>, AutoCloseable {
- private static final Logger LOG = LoggerFactory.getLogger(TopologyMonitor.class);
-
- @GuardedBy("this")
- private final Map<TopologyKey, BridgeDomain> domains = new HashMap<>();
- private final DataBroker dataBroker;
- private final MountPointService mountService;
- private static final VxlanTunnelIdAllocator tunnelIdAllocator = new VxlanTunnelIdAllocatorImpl();
-
- public TopologyMonitor(DataBroker dataBroker, MountPointService mountService) {
- this.dataBroker = Preconditions.checkNotNull(dataBroker);
- this.mountService = Preconditions.checkNotNull(mountService);
-
- }
-
- @Override
- public synchronized void onDataTreeChanged(final Collection<DataTreeModification<VbridgeTopology>> changes) {
- for (DataTreeModification<VbridgeTopology> c : changes) {
- @SuppressWarnings("unchecked")
- final KeyedInstanceIdentifier<Topology, TopologyKey> topology =
- (KeyedInstanceIdentifier<Topology, TopologyKey>) c.getRootPath().getRootIdentifier()
- .firstIdentifierOf(Topology.class);
-
- Preconditions.checkArgument(!topology.isWildcarded(), "Wildcard topology %s is not supported", topology);
-
- final DataObjectModification<VbridgeTopology> mod = c.getRootNode();
- switch (mod.getModificationType()) {
- case DELETE:
- LOG.debug("Topology {} removed", topology);
- stopDomain(topology);
- break;
- case WRITE:
- LOG.debug("Topology {} added", topology);
- startDomain(topology);
- break;
- default:
- LOG.warn("Ignoring unhandled modification type {}", mod.getModificationType());
- break;
- }
- }
- }
-
- private synchronized void completeDomain(final KeyedInstanceIdentifier<Topology, TopologyKey> topology) {
- LOG.debug("Bridge domain for {} completed operation", topology);
- domains.remove(topology);
-
- synchronized (domains) {
- domains.notify();
- }
- }
-
- private synchronized void restartDomain(final KeyedInstanceIdentifier<Topology, TopologyKey> topology) {
- final BridgeDomain prev = domains.remove(topology);
- if (prev == null) {
- LOG.warn("No domain for {}, not restarting", topology);
- return;
- }
-
- prev.forceStop();
- startDomain(topology);
- }
-
- @GuardedBy("this")
- private void startDomain(final KeyedInstanceIdentifier<Topology, TopologyKey> topology) {
- final BridgeDomain prev = domains.get(topology.getKey());
- if (prev != null) {
- LOG.warn("Bridge domain {} for {} already started", prev, topology);
- return;
- }
-
- LOG.debug("Starting bridge domain for {}", topology);
-
- final BindingTransactionChain chain = dataBroker.createTransactionChain(new TransactionChainListener() {
- @Override
- public void onTransactionChainSuccessful(final TransactionChain<?, ?> chain) {
- completeDomain(topology);
- }
-
- @Override
- public void onTransactionChainFailed(final TransactionChain<?, ?> chain,
- final AsyncTransaction<?, ?> transaction, final Throwable cause) {
- LOG.warn("Bridge domain for {} failed, restarting it", cause);
- restartDomain(topology);
- }
- });
-
- final BridgeDomain domain = BridgeDomain.create(dataBroker, mountService, topology, chain, tunnelIdAllocator);
- domains.put(topology.getKey(), domain);
-
- LOG.debug("Bridge domain {} for {} started", domain, topology);
- }
-
- @GuardedBy("this")
- private void stopDomain(final KeyedInstanceIdentifier<Topology, TopologyKey> topology) {
- final BridgeDomain domain = domains.remove(topology.getKey());
- if (domain == null) {
- LOG.warn("Bridge domain for {} not present", topology);
- return;
- }
-
- domain.stop();
- }
-
- @Override
- public synchronized void close() {
- LOG.debug("Topology monitor {} shut down started", this);
-
- for (Entry<TopologyKey, BridgeDomain> e : domains.entrySet()) {
- LOG.debug("Shutting down bridge domain {} (key {})", e.getValue(), e.getKey());
- e.getValue().stop();
- }
-
- while (!domains.isEmpty()) {
- LOG.debug("Waiting for domains for {} to complete", domains.keySet());
- synchronized (domains) {
- try {
- domains.wait();
- } catch (InterruptedException e) {
- LOG.warn("Interrupted while waiting for domain shutdown, {} have not completed yet",
- domains.keySet(), e);
- break;
- }
- }
- }
-
- LOG.debug("Topology monitor {} shut down completed", this);
- }
-
- public static class VxlanTunnelIdAllocatorImpl implements VxlanTunnelIdAllocator {
-
- private final Map<KeyedInstanceIdentifier<Node, NodeKey>, Integer> vppIIToNextTunnelId;
-
- VxlanTunnelIdAllocatorImpl() {
- vppIIToNextTunnelId = new HashMap<>();
- }
-
- @Override
- public synchronized Integer nextIdFor(final KeyedInstanceIdentifier<Node, NodeKey> iiToVPP) {
- if(vppIIToNextTunnelId.containsKey(iiToVPP)) {
- final int value = vppIIToNextTunnelId.get(iiToVPP);
- vppIIToNextTunnelId.put(iiToVPP, value + 1);
- return value + 1;
- } else {
- vppIIToNextTunnelId.put(iiToVPP, 0);
- return 0;
- }
- }
-
- }
-}
diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VbdUtil.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VbdUtil.java
deleted file mode 100644
index 2a29d7b4e..000000000
--- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VbdUtil.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- * <p>
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package io.fd.honeycomb.vbd.impl;
-
-
-import com.google.common.base.Optional;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.MountPoint;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-
-public class VbdUtil {
-
- private static final String TUNNEL_ID_PREFIX = "vxlan_tunnel";
-
-
- private VbdUtil() {
- throw new UnsupportedOperationException("Can't instantiate util class");
- }
-
- static DataBroker resolveDataBrokerForMountPoint(final InstanceIdentifier<Node> iiToMountPoint, final MountPointService mountService) {
- final Optional<MountPoint> vppMountPointOpt = mountService.getMountPoint(iiToMountPoint);
- if (vppMountPointOpt.isPresent()) {
- final MountPoint vppMountPoint = vppMountPointOpt.get();
- final Optional<DataBroker> dataBrokerOpt = vppMountPoint.getService(DataBroker.class);
- if (dataBrokerOpt.isPresent()) {
- return dataBrokerOpt.get();
- }
- }
- return null;
- }
-
- static String provideVxlanId(final int vxlanTunnelId) {
- return TUNNEL_ID_PREFIX + vxlanTunnelId;
- }
-
-
-}
diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java
deleted file mode 100644
index 0c1d08faa..000000000
--- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VirtualBridgeDomainManager.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- *
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-
-package io.fd.honeycomb.vbd.impl;
-
-import com.google.common.base.Preconditions;
-import javax.annotation.Nonnull;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyTypesVbridgeAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.topology.types.VbridgeTopology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.TopologyTypes;
-import org.opendaylight.yangtools.concepts.ListenerRegistration;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Tip for the Virtual Bridge Domain implementation. This class is instantiated when the application is started
- * and {@link #close()}d when it is shut down.
- */
-public final class VirtualBridgeDomainManager implements AutoCloseable {
- private static final Logger LOG = LoggerFactory.getLogger(VirtualBridgeDomainManager.class);
- private static final DataTreeIdentifier<VbridgeTopology> LISTEN_TREE =
- new DataTreeIdentifier<>(LogicalDatastoreType.CONFIGURATION,
- InstanceIdentifier.builder(NetworkTopology.class).child(Topology.class).child(TopologyTypes.class)
- .augmentation(TopologyTypesVbridgeAugment.class).child(VbridgeTopology.class).build());
-
- private final ListenerRegistration<TopologyMonitor> reg;
- private boolean closed;
-
- private VirtualBridgeDomainManager(final ListenerRegistration<TopologyMonitor> reg) {
- this.reg = Preconditions.checkNotNull(reg);
- }
-
- public static VirtualBridgeDomainManager create(@Nonnull final DataBroker dataBroker,@Nonnull MountPointService mountService) {
- final ListenerRegistration<TopologyMonitor> reg =
- dataBroker.registerDataTreeChangeListener(LISTEN_TREE, new TopologyMonitor(dataBroker, mountService));
-
- return new VirtualBridgeDomainManager(reg);
- }
-
- @Override
- public void close() {
- if (!closed) {
- LOG.debug("Virtual Bridge Domain manager shut down started");
-
- final TopologyMonitor monitor = reg.getInstance();
- reg.close();
- LOG.debug("Topology monitor {} unregistered", monitor);
- monitor.close();
-
- closed = true;
- LOG.debug("Virtual Bridge Domain manager shut down completed");
- }
- }
-}
diff --git a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VppModifier.java b/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VppModifier.java
deleted file mode 100644
index cffad412d..000000000
--- a/vbd/impl/src/main/java/io/fd/honeycomb/vbd/impl/VppModifier.java
+++ /dev/null
@@ -1,255 +0,0 @@
-/**
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- * <p>
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package io.fd.honeycomb.vbd.impl;
-
-import com.google.common.base.Optional;
-import com.google.common.util.concurrent.CheckedFuture;
-import com.google.common.util.concurrent.FutureCallback;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.SettableFuture;
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.Nullable;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
-import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
-import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
-import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
-import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.Interfaces;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.Interface1;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.Ipv4;
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ip.rev140616.interfaces._interface.ipv4.Address;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.external.reference.rev160129.ExternalReference;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.Vpp;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentation;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VppInterfaceAugmentationBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.VxlanTunnel;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.L2Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.Vxlan;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.interfaces._interface.VxlanBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.l2.base.attributes.interconnection.BridgeBasedBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.vpp.BridgeDomains;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.vpp.bridge.domains.BridgeDomainBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.vpp.bridge.domains.BridgeDomainKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TerminationPointVbridgeAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.TopologyVbridgeAugment;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.TunnelParameters;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.node.termination.point.InterfaceType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.node.termination.point._interface.type.UserInterface;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
-import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
-import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
-import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Class which is used for manipulation with VPP
- */
-final class VppModifier {
- private static final Long DEFAULT_ENCAP_VRF_ID = 0L;
-
- private static final Logger LOG = LoggerFactory.getLogger(BridgeDomain.class);
- private final MountPointService mountService;
- private final String bridgeDomainName;
- private TopologyVbridgeAugment config;
- private final InstanceIdentifier<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.vpp.bridge.domains.BridgeDomain> iiBridgeDomainOnVPP;
-
-
- VppModifier(final MountPointService mountService, final String bridgeDomainName) {
- this.mountService = mountService;
- this.bridgeDomainName = bridgeDomainName;
- this.iiBridgeDomainOnVPP = InstanceIdentifier.create(Vpp.class)
- .child(BridgeDomains.class)
- .child(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.vpp.bridge.domains.BridgeDomain.class, new BridgeDomainKey(bridgeDomainName));
- }
-
- /**
- * Tryies to read ipv4 addresses from all specified {@code iiToVpps } vpps.
- *
- * @param iiToVpps collection of instance identifiers which points to concrete mount points.
- * @return future which contains list of ip addreases in the same order as was specified in {@code iiToVpps}
- */
- @SafeVarargs
- final ListenableFuture<List<Optional<Ipv4AddressNoZone>>> readIpAddressesFromVpps(final KeyedInstanceIdentifier<Node, NodeKey>... iiToVpps) {
- final List<ListenableFuture<Optional<Ipv4AddressNoZone>>> ipv4Futures = new ArrayList<>(iiToVpps.length);
- for (final KeyedInstanceIdentifier<Node, NodeKey> iiToVpp : iiToVpps) {
- ipv4Futures.add(readIpAddressFromVpp(iiToVpp));
- }
- return Futures.successfulAsList(ipv4Futures);
- }
-
- /**
- * Passes through interfaces at mount point specified via {@code iiToVpp}.
- *
- * When first ipv4 address is found then it is returned.
- *
- * @param iiToVpp instance idenfifier which point to mounted vpp
- * @return if set ipv4 address is found at mounted vpp then it is returned as future. Otherwise absent value is returned
- * in future or exception which has been thrown
- */
- private ListenableFuture<Optional<Ipv4AddressNoZone>> readIpAddressFromVpp(final KeyedInstanceIdentifier<Node, NodeKey> iiToVpp) {
- final SettableFuture<Optional<Ipv4AddressNoZone>> resultFuture = SettableFuture.create();
-
- final DataBroker vppDataBroker = VbdUtil.resolveDataBrokerForMountPoint(iiToVpp, mountService);
- if (vppDataBroker != null) {
- final ReadOnlyTransaction rTx = vppDataBroker.newReadOnlyTransaction();
- final CheckedFuture<Optional<Interfaces>, ReadFailedException> interfaceStateFuture
- = rTx.read(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Interfaces.class));
-
- Futures.addCallback(interfaceStateFuture, new FutureCallback<Optional<Interfaces>>() {
- @Override
- public void onSuccess(final Optional<Interfaces> optInterfaces) {
- if (optInterfaces.isPresent()) {
- for (org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface intf : optInterfaces.get().getInterface()) {
- final Interface1 interface1 = intf.getAugmentation(Interface1.class);
- if (interface1 != null) {
- final Ipv4 ipv4 = interface1.getIpv4();
- if (ipv4 != null) {
- final List<Address> addresses = ipv4.getAddress();
- if (!addresses.isEmpty()) {
- final Ipv4AddressNoZone ip = addresses.iterator().next().getIp();
- if (ip != null) {
- resultFuture.set(Optional.of(ip));
- break;
- }
- }
- }
- }
- }
- } else {
- LOG.debug("There is no inferface with ipv4 address set at VPP {}.", iiToVpp);
- resultFuture.set(Optional.<Ipv4AddressNoZone>absent());
- }
- }
-
- @Override
- public void onFailure(Throwable t) {
- resultFuture.setException(t);
- }
- });
- } else {
- LOG.debug("Data broker for vpp {} is missing.", iiToVpp);
- resultFuture.set(Optional.<Ipv4AddressNoZone>absent());
- }
- return resultFuture;
- }
-
- void createVirtualInterfaceOnVpp(final Ipv4AddressNoZone ipSrc, final Ipv4AddressNoZone ipDst, final KeyedInstanceIdentifier<Node, NodeKey> iiToVpp,
- final Integer vxlanTunnelId) {
- final Vxlan vxlanData = prepareVxlan(ipSrc, ipDst);
- final Interface intfData = prepareVirtualInterfaceData(vxlanData, vxlanTunnelId);
-
- final DataBroker vppDataBroker = VbdUtil.resolveDataBrokerForMountPoint(iiToVpp, mountService);
- if (vppDataBroker != null) {
- final WriteTransaction wTx = vppDataBroker.newWriteOnlyTransaction();
- final KeyedInstanceIdentifier<Interface, InterfaceKey> iiToInterface
- = InstanceIdentifier.create(Interfaces.class).child(Interface.class, new InterfaceKey(VbdUtil.provideVxlanId(vxlanTunnelId)));
- wTx.put(LogicalDatastoreType.CONFIGURATION, iiToInterface, intfData);
- final CheckedFuture<Void, TransactionCommitFailedException> submitFuture = wTx.submit();
- Futures.addCallback(submitFuture, new FutureCallback<Void>() {
- @Override
- public void onSuccess(@Nullable Void result) {
- LOG.debug("Writing super virtual interface to {} finished successfully.",iiToVpp.getKey().getNodeId());
- }
-
- @Override
- public void onFailure(Throwable t) {
- LOG.debug("Writing super virtual interface to {} failed.", iiToVpp.getKey().getNodeId(), t);
- }
- });
- } else {
- LOG.debug("Writing virtual interface {} to VPP {} wasn't successfull because missing data broker.", VbdUtil.provideVxlanId(vxlanTunnelId), iiToVpp);
- }
- }
-
- private static Interface prepareVirtualInterfaceData(final Vxlan vxlan, Integer vxlanTunnelId) {
- final InterfaceBuilder interfaceBuilder = new InterfaceBuilder();
- //TODO implement tunnel counter
- interfaceBuilder.setName(VbdUtil.provideVxlanId(vxlanTunnelId));
- interfaceBuilder.setType(VxlanTunnel.class);
- VppInterfaceAugmentationBuilder vppInterfaceAugmentationBuilder = new VppInterfaceAugmentationBuilder();
- vppInterfaceAugmentationBuilder.setVxlan(vxlan);
- interfaceBuilder.addAugmentation(VppInterfaceAugmentation.class, vppInterfaceAugmentationBuilder.build());
- return interfaceBuilder.build();
- }
-
- private Vxlan prepareVxlan(final Ipv4AddressNoZone ipSrc, final Ipv4AddressNoZone ipDst) {
- final VxlanBuilder vxlanBuilder = new VxlanBuilder();
- vxlanBuilder.setSrc(new IpAddress(ipSrc));
- vxlanBuilder.setDst(new IpAddress(ipDst));
- final TunnelParameters tunnelParameters = config.getTunnelParameters();
- if (tunnelParameters instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.tunnel.parameters.Vxlan) {
- org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.tunnel.parameters.Vxlan vxlan =
- (org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbridge.topology.rev160129.network.topology.topology.tunnel.parameters.Vxlan) tunnelParameters;
- //TODO: handle NPE
- vxlanBuilder.setVni(vxlan.getVxlan().getVni());
- }
- vxlanBuilder.setEncapVrfId(DEFAULT_ENCAP_VRF_ID);
- return vxlanBuilder.build();
- }
-
- void addInterfaceToBridgeDomainOnVpp(final DataBroker vppDataBroker, final TerminationPointVbridgeAugment termPointVbridgeAug) {
- final InterfaceType interfaceType = termPointVbridgeAug.getInterfaceType();
- if (interfaceType instanceof UserInterface) {
- //REMARK: according contract in YANG model this should be URI to data on mount point (accroding to RESTCONF)
- //It was much more easier to just await concrete interface name, thus isn't necessary parse it (splitting on '/')
- final ExternalReference userInterface = ((UserInterface) interfaceType).getUserInterface();
- final KeyedInstanceIdentifier<Interface, InterfaceKey> iiToVpp =
- InstanceIdentifier.create(Interfaces.class)
- .child(Interface.class, new InterfaceKey(userInterface.getValue()));
- InstanceIdentifier<L2> iiToV3poL2 = iiToVpp.augmentation(VppInterfaceAugmentation.class).child(L2.class);
- LOG.debug("Writing L2 data to configuration DS to concrete interface.");
- final WriteTransaction wTx = vppDataBroker.newWriteOnlyTransaction();
- wTx.put(LogicalDatastoreType.CONFIGURATION, iiToV3poL2, prepareL2Data(), true);
- wTx.submit();
- }
- }
-
- ListenableFuture<Void> addVppToBridgeDomain(final KeyedInstanceIdentifier<Node, NodeKey> iiToVpp, final Node node) {
- final DataBroker vppDataBroker = VbdUtil.resolveDataBrokerForMountPoint(iiToVpp, mountService);
- if (vppDataBroker != null) {
- final WriteTransaction wTx = vppDataBroker.newWriteOnlyTransaction();
- wTx.put(LogicalDatastoreType.CONFIGURATION, iiBridgeDomainOnVPP, prepareNewBridgeDomainData(), true);
- return wTx.submit();
- }
- return Futures.immediateFailedFuture(new IllegalStateException("Data broker for vpp is missing"));
- }
-
- private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev150105.vpp.bridge.domains.BridgeDomain
- prepareNewBridgeDomainData() {
- final BridgeDomainBuilder bridgeDomainBuilder = new BridgeDomainBuilder(config);
- bridgeDomainBuilder.setName(bridgeDomainName);
- return bridgeDomainBuilder.build();
- }
-
-
-
- private L2 prepareL2Data() {
- final L2Builder l2Builder = new L2Builder();
- final BridgeBasedBuilder bridgeBasedBuilder = new BridgeBasedBuilder();
- bridgeBasedBuilder.setSplitHorizonGroup((short) 0);
- bridgeBasedBuilder.setBridgedVirtualInterface(false);
- bridgeBasedBuilder.setBridgeDomain(bridgeDomainName);
- l2Builder.setInterconnection(bridgeBasedBuilder.build());
- return l2Builder.build();
- }
-
- public void setConfig(final TopologyVbridgeAugment config) {
- this.config = config;
- }
-}
diff --git a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java
deleted file mode 100644
index 6157320d6..000000000
--- a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModule.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202;
-
-import io.fd.honeycomb.vbd.impl.VirtualBridgeDomainManager;
-import org.opendaylight.controller.md.sal.binding.api.DataBroker;
-import org.opendaylight.controller.md.sal.binding.api.MountPointService;
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-
-public class VbdModule extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202.AbstractVbdModule {
- public VbdModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver) {
- super(identifier, dependencyResolver);
- }
-
- public VbdModule(org.opendaylight.controller.config.api.ModuleIdentifier identifier, org.opendaylight.controller.config.api.DependencyResolver dependencyResolver, org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202.VbdModule oldModule, java.lang.AutoCloseable oldInstance) {
- super(identifier, dependencyResolver, oldModule, oldInstance);
- }
-
- @Override
- public void customValidation() {
- // add custom validation form module attributes here.
- }
-
- @Override
- public java.lang.AutoCloseable createInstance() {
- final BindingAwareBroker brokerDependency = getBrokerDependency();
- BindingAwareBroker.ProviderContext session = brokerDependency.registerProvider(new VbdProvider());
-
- DataBroker dataBroker = session.getSALService(DataBroker.class);
- MountPointService mountService = session.getSALService(MountPointService.class);
- return VirtualBridgeDomainManager.create(dataBroker, mountService);
- }
-
-}
diff --git a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java
deleted file mode 100644
index 4f87fe6a1..000000000
--- a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdModuleFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-/*
-* Generated file
-*
-* Generated from: yang module name: vbd-impl yang module local name: vbd
-* Generated by: org.opendaylight.controller.config.yangjmxgenerator.plugin.JMXGenerator
-* Generated at: Tue Feb 02 10:45:40 CET 2016
-*
-* Do not modify this file unless it is present under src/main directory
-*/
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202;
-public class VbdModuleFactory extends org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202.AbstractVbdModuleFactory {
-
-}
diff --git a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java b/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java
deleted file mode 100644
index a27aa1e5e..000000000
--- a/vbd/impl/src/main/java/org/opendaylight/yang/gen/v1/urn/opendaylight/params/xml/ns/yang/vbd/impl/rev160202/VbdProvider.java
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
- * <p>
- * This program and the accompanying materials are made available under the
- * terms of the Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- */
-package org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vbd.impl.rev160202;
-
-import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
-import org.opendaylight.controller.sal.binding.api.BindingAwareProvider;
-
-/**
- * Created by joe on 2.2.2016.
- */
-public class VbdProvider implements BindingAwareProvider {
-
- @Override
- public void onSessionInitiated(BindingAwareBroker.ProviderContext session) {
- // Intentional NOOP
- }
-}
diff --git a/vbd/impl/src/main/resources/config/vbd.xml b/vbd/impl/src/main/resources/config/vbd.xml
deleted file mode 100644
index c3f4c665b..000000000
--- a/vbd/impl/src/main/resources/config/vbd.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- vi: set et smarttab sw=4 tabstop=4: -->
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-<snapshot>
- <required-capabilities>
- <capability>urn:opendaylight:params:xml:ns:yang:vbd:impl?module=vbd-impl&amp;revision=2016-02-02</capability>
- <capability>urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding?module=opendaylight-md-sal-binding&amp;revision=2013-10-28</capability>
- </required-capabilities>
- <configuration>
-
- <data xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
- <modules xmlns="urn:opendaylight:params:xml:ns:yang:controller:config">
- <module>
- <type xmlns:prefix="urn:opendaylight:params:xml:ns:yang:vbd:impl">prefix:vbd</type>
- <name>vbd-name</name>
- <broker>
- <type xmlns:binding="urn:opendaylight:params:xml:ns:yang:controller:md:sal:binding">binding:binding-broker-osgi-registry</type>
- <name>binding-osgi-broker</name>
- </broker>
- </module>
- </modules>
- </data>
- </configuration>
-</snapshot>
diff --git a/vbd/impl/src/main/yang/vbd-impl.yang b/vbd/impl/src/main/yang/vbd-impl.yang
deleted file mode 100644
index d0c259500..000000000
--- a/vbd/impl/src/main/yang/vbd-impl.yang
+++ /dev/null
@@ -1,35 +0,0 @@
-module vbd-impl {
- yang-version 1;
- namespace "urn:opendaylight:params:xml:ns:yang:vbd:impl";
- prefix "vbd-impl";
-
- import config { prefix config; revision-date 2013-04-05; }
- import opendaylight-md-sal-binding { prefix md-sal-binding; revision-date 2013-10-28;}
-
- description
- "Service definition for vbd project";
-
- revision "2016-02-02" {
- description
- "Initial revision";
- }
-
- identity vbd {
- base config:module-type;
- config:java-name-prefix Vbd;
- }
-
- augment "/config:modules/config:module/config:configuration" {
- case vbd {
- when "/config:modules/config:module/config:type = 'vbd'";
- container broker {
- uses config:service-ref {
- refine type {
- mandatory true;
- config:required-identity md-sal-binding:binding-broker-osgi-registry;
- }
- }
- }
- }
- }
-}
diff --git a/vbd/impl/vbridge-workflow.txt b/vbd/impl/vbridge-workflow.txt
deleted file mode 100644
index 9f93e6fd4..000000000
--- a/vbd/impl/vbridge-workflow.txt
+++ /dev/null
@@ -1,104 +0,0 @@
-VPP Inventory/Topology
-----------------------
-
-- VPP management done through netconf-node-topology
-- Mount point management done by sal-netconf-connector
-
-
-Virtual Bridge Domain management
---------------------------------
-
-Prerequisite: configured netconf-node-topology
-
-1) Create a Virtual Bridge Domain:
-
- A) The UI creates a network topology instance in Controller Data Store
- with:
-
- - topology-types/vbridge-topology container
- - tunnel-type set to tunnel-type-vxlan
- - tunnel-parameters/vxlan/vni set to appropriate value
- - any bridge domain parameters from v3po:bridge-domain-attributes
-
- B) The Controller App receives a DataTreeChangeNotification about the
- topology instance being created
-
-2) Assign a VPP into a Virtual Bridge Domain
- Prerequisite: Virtual Bridge Domain exists
-
- A) The UI creates a 'node' within the VBD network topology in the
- Controller Data Store with:
-
- - bridge-member container
- - supporting-node pointing to the VPP node in the
- netconf-node-topology
-
- B) The Controller App receives a DataTreeChangeNotification about the
- node being added, and:
-
- - it looks at the supporting-node in the netconf topology and if the
- node is connected:
- - it creates a bridge domain with the name matching this VBD name,
- copying bridge domain parameters from VBD Topology configuration
- into the VPP
- - once that succeeds it creates the corresponding
- supporting-bridge-domain leaf in the Controller's operational
- datastore. The leaf contains a RESTCONF-encoded instance
- identifier of the bridge domain created in the VPP, relative to
- that VPP's mount point.
-
-3) Assigning a physical VPP interface into a Virtual Bridge Domain
- Prerequisite: The VPP itself has been added to the Virtual Bridge
- Domain
-
- A) The UI creates a 'termination-point' inside the 'node' added in 2),
- with:
-
- - interface name.
-
- B) The Controller App receives a notification of this being done and:
- - looks if the VPP is connected, if it is, the app will:
- - add the interface into the VPP's bridge domain configuration
-
-Inverse operations are achieved by the UI deleting the corresponding nodes in
-the Controller's configuration data store.
-
-
-Virtual Bridge Domain tunnel management
----------------------------------------
-
-Operation is triggered by adding more than one VPP into the virtual bridge
-domain, for sake of clarity this describes only one-way tunnel setup. The
-process is repeated until a full mesh is achieved (FUTURE: spanning tree?).
-The process is also simplified for demo purposes, real-world deployment would
-deal with day-1 configuration and multi-provider setups.
-
-Demo assumption: there is exactly one interface with a VRF and IP address
-assined, which is the interface to be used for tunnels
-
-The Controller App looks at the Source VPP:
-- it finds the only interface with VRF and IP addresses. It will use this VRF
- as the vxlan tunnel VRF. It will use the IP address as the vxlan tunnel
- source.
-
-The Controller App looks at the Destination VPP:
-- it finds the only interface with VRF and IP addresses. It will use the IP
- address as the vxlan tunnel destination.
-
-The Controller App sets up the tunnel on the source VPP, using the VNI
-configured for this Virtual Bridge Domain and IP addresses as detailed above.
-
-The controller app creates a new termination point within the VBD's the
-controller's operational data store, under the
-node representing the source VPP, with a generated ID (mechanism is TBD, must
-not conflict with VPP names) and 'tunnel-interface' leaf, which points to the
-vxlan interface created on the source VPP (e.g. VPP config state).
-
-This process is repeated in the reverse direction.
-
-Once that is done, the controller app will create a link from the newly-created
-source TP to the newly-created destination TP in the controller's operational
-data store, with leaf 'tunnel' pointing to the source VPP's interface operation
-state (e.g. VPP vxlan oper state). A reverse link will be created, with the
-'tunnel' leaf pointing to the destination VPP's interface state.
-
diff --git a/vbd/karaf/pom.xml b/vbd/karaf/pom.xml
deleted file mode 100644
index 8c11b8177..000000000
--- a/vbd/karaf/pom.xml
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-<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>io.fd.honeycomb.common</groupId>
- <artifactId>karaf-parent</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <relativePath>../../common/karaf-parent</relativePath>
- </parent>
- <modelVersion>4.0.0</modelVersion>
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-karaf</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <name>${project.artifactId}</name>
- <prerequisites>
- <maven>3.1.1</maven>
- </prerequisites>
- <properties>
- <karaf.localFeature>odl-vbd-ui</karaf.localFeature>
- </properties>
- <dependencyManagement>
- <dependencies>
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-artifacts</artifactId>
- <version>${project.version}</version>
- <type>pom</type>
- <scope>import</scope>
- </dependency>
- </dependencies>
- </dependencyManagement>
- <dependencies>
- <dependency>
- <!-- scope is compile so all features (there is only one) are installed
- into startup.properties and the feature repo itself is not installed -->
- <groupId>org.apache.karaf.features</groupId>
- <artifactId>framework</artifactId>
- <type>kar</type>
- </dependency>
-
- <dependency>
- <groupId>${project.groupId}</groupId>
- <artifactId>vbd-features</artifactId>
- <classifier>features</classifier>
- <type>xml</type>
- <scope>runtime</scope>
- </dependency>
- </dependencies>
- <!-- DO NOT install or deploy the karaf artifact -->
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>
diff --git a/vbd/pom.xml b/vbd/pom.xml
deleted file mode 100644
index 791f5e7ca..000000000
--- a/vbd/pom.xml
+++ /dev/null
@@ -1,65 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Copyright (c) 2015 Cisco and/or its affiliates.
- 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.
--->
-<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.opendaylight.odlparent</groupId>
- <artifactId>odlparent</artifactId>
- <version>1.6.2-Beryllium-SR2</version>
- <relativePath/>
- </parent>
-
- <groupId>io.fd.honeycomb.vbd</groupId>
- <artifactId>vbd-aggregator</artifactId>
- <version>1.0.0-SNAPSHOT</version>
- <name>Virtual Bridge Domain</name>
- <packaging>pom</packaging>
- <modelVersion>4.0.0</modelVersion>
- <prerequisites>
- <maven>3.1.1</maven>
- </prerequisites>
- <modules>
- <module>api</module>
- <module>artifacts</module>
- <module>gui</module>
- <module>features</module>
- <module>impl</module>
- <module>karaf</module>
-
- <!-- FIXME: these need to be enabled:
- <module>it</module>
- -->
- </modules>
- <!-- DO NOT install or deploy the repo root pom as it's only needed to initiate a build -->
- <build>
- <plugins>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-deploy-plugin</artifactId>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- <plugin>
- <groupId>org.apache.maven.plugins</groupId>
- <artifactId>maven-install-plugin</artifactId>
- <configuration>
- <skip>true</skip>
- </configuration>
- </plugin>
- </plugins>
- </build>
-</project>