diff --git a/tools/dev/bin/onos-build-selective.exclude b/tools/dev/bin/onos-build-selective.exclude
index ace399a..494a438 100644
--- a/tools/dev/bin/onos-build-selective.exclude
+++ b/tools/dev/bin/onos-build-selective.exclude
@@ -3,3 +3,4 @@
 .*/build/conf/.*
 .*/docs/.*
 .*/openflow/drivers/.*
+.*/cord-gui/.*
\ No newline at end of file
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
index d1cbcb4..fb83cdd 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/DeviceViewMessageHandler.java
@@ -121,6 +121,8 @@
             boolean available = ds.isAvailable(id);
             String iconId = available ? ICON_ID_ONLINE : ICON_ID_OFFLINE;
 
+            String protocol = dev.annotations().value(PROTOCOL);
+
             row.cell(ID, id)
                 .cell(AVAILABLE, available)
                 .cell(AVAILABLE_IID, iconId)
@@ -128,7 +130,7 @@
                 .cell(MFR, dev.manufacturer())
                 .cell(HW, dev.hwVersion())
                 .cell(SW, dev.swVersion())
-                .cell(PROTOCOL, dev.annotations().value(PROTOCOL))
+                .cell(PROTOCOL, protocol != null ? protocol : "")
                 .cell(NUM_PORTS, ds.getPorts(id).size())
                 .cell(MASTER_ID, ms.getMasterFor(id));
         }
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/GuiWebSocketServlet.java b/web/gui/src/main/java/org/onosproject/ui/impl/GuiWebSocketServlet.java
deleted file mode 100644
index 835058f..0000000
--- a/web/gui/src/main/java/org/onosproject/ui/impl/GuiWebSocketServlet.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * 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.
- */
-package org.onosproject.ui.impl;
-
-import org.eclipse.jetty.websocket.WebSocket;
-import org.eclipse.jetty.websocket.WebSocketServlet;
-import org.onlab.osgi.DefaultServiceDirectory;
-import org.onlab.osgi.ServiceDirectory;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-
-/**
- * Web socket servlet capable of creating various sockets for the user interface.
- */
-@Deprecated
-public class GuiWebSocketServlet extends WebSocketServlet {
-
-    private static final long PING_DELAY_MS = 5000;
-
-    private ServiceDirectory directory = new DefaultServiceDirectory();
-
-    private final Set<TopologyViewWebSocket> sockets = new HashSet<>();
-    private final Timer timer = new Timer();
-    private final TimerTask pruner = new Pruner();
-
-    @Override
-    public void init() throws ServletException {
-        super.init();
-        timer.schedule(pruner, PING_DELAY_MS, PING_DELAY_MS);
-    }
-
-    @Override
-    public WebSocket doWebSocketConnect(HttpServletRequest request, String protocol) {
-        TopologyViewWebSocket socket = new TopologyViewWebSocket(directory);
-        synchronized (sockets) {
-            sockets.add(socket);
-        }
-        return socket;
-    }
-
-    // Task for pruning web-sockets that are idle.
-    private class Pruner extends TimerTask {
-        @Override
-        public void run() {
-            synchronized (sockets) {
-                Iterator<TopologyViewWebSocket> it = sockets.iterator();
-                while (it.hasNext()) {
-                    TopologyViewWebSocket socket = it.next();
-                    if (socket.isIdle()) {
-                        it.remove();
-                        socket.close();
-                    }
-                }
-            }
-        }
-    }
-}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
index 2e37b6f..b71b9f8 100644
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
+++ b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyResource.java
@@ -52,7 +52,7 @@
         ArrayNode devices = mapper.createArrayNode();
         ArrayNode hosts = mapper.createArrayNode();
 
-        Map<String, ObjectNode> metaUi = TopologyViewMessages.getMetaUi();
+        Map<String, ObjectNode> metaUi = TopologyViewMessageHandler.getMetaUi();
         for (String id : metaUi.keySet()) {
             ObjectNode memento = metaUi.get(id);
             if (id.charAt(17) == '/') {
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessages.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessages.java
deleted file mode 100644
index 463f8b3..0000000
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewMessages.java
+++ /dev/null
@@ -1,885 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * 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.
- */
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.packet.IpAddress;
-import org.onosproject.cluster.ClusterEvent;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.cluster.NodeId;
-import org.onosproject.core.CoreService;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.Annotated;
-import org.onosproject.net.AnnotationKeys;
-import org.onosproject.net.Annotations;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.DefaultEdgeLink;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.EdgeLink;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Link;
-import org.onosproject.net.LinkKey;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.flow.instructions.Instruction;
-import org.onosproject.net.flow.instructions.Instructions.OutputInstruction;
-import org.onosproject.net.host.HostEvent;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.intent.LinkCollectionIntent;
-import org.onosproject.net.intent.OpticalConnectivityIntent;
-import org.onosproject.net.intent.OpticalPathIntent;
-import org.onosproject.net.intent.PathIntent;
-import org.onosproject.net.link.LinkEvent;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.statistic.Load;
-import org.onosproject.net.statistic.StatisticService;
-import org.onosproject.net.topology.Topology;
-import org.onosproject.net.topology.TopologyService;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_REMOVED;
-import static org.onosproject.cluster.ControllerNode.State.ACTIVE;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.HostId.hostId;
-import static org.onosproject.net.LinkKey.linkKey;
-import static org.onosproject.net.PortNumber.P0;
-import static org.onosproject.net.PortNumber.portNumber;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_REMOVED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_REMOVED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED;
-
-/**
- * Facility for creating messages bound for the topology viewer.
- */
-@Deprecated
-public abstract class TopologyViewMessages {
-
-    protected static final Logger log = LoggerFactory.getLogger(TopologyViewMessages.class);
-
-    private static final ProviderId PID = new ProviderId("core", "org.onosproject.core", true);
-    private static final String COMPACT = "%s/%s-%s/%s";
-
-    private static final double KB = 1024;
-    private static final double MB = 1024 * KB;
-    private static final double GB = 1024 * MB;
-
-    private static final String GB_UNIT = "GB";
-    private static final String MB_UNIT = "MB";
-    private static final String KB_UNIT = "KB";
-    private static final String B_UNIT = "B";
-
-    protected final ServiceDirectory directory;
-    protected final ClusterService clusterService;
-    protected final DeviceService deviceService;
-    protected final LinkService linkService;
-    protected final HostService hostService;
-    protected final MastershipService mastershipService;
-    protected final IntentService intentService;
-    protected final FlowRuleService flowService;
-    protected final StatisticService statService;
-    protected final TopologyService topologyService;
-
-    protected final ObjectMapper mapper = new ObjectMapper();
-    private final String version;
-
-    // TODO: extract into an external & durable state; good enough for now and demo
-    private static Map<String, ObjectNode> metaUi = new ConcurrentHashMap<>();
-
-    /**
-     * Returns read-only view of the meta-ui information.
-     *
-     * @return map of id to meta-ui mementos
-     */
-    static Map<String, ObjectNode> getMetaUi() {
-        return Collections.unmodifiableMap(metaUi);
-    }
-
-    /**
-     * Creates a messaging facility for creating messages for topology viewer.
-     *
-     * @param directory service directory
-     */
-    protected TopologyViewMessages(ServiceDirectory directory) {
-        this.directory = checkNotNull(directory, "Directory cannot be null");
-        clusterService = directory.get(ClusterService.class);
-        deviceService = directory.get(DeviceService.class);
-        linkService = directory.get(LinkService.class);
-        hostService = directory.get(HostService.class);
-        mastershipService = directory.get(MastershipService.class);
-        intentService = directory.get(IntentService.class);
-        flowService = directory.get(FlowRuleService.class);
-        statService = directory.get(StatisticService.class);
-        topologyService = directory.get(TopologyService.class);
-
-        String ver = directory.get(CoreService.class).version().toString();
-        version = ver.replace(".SNAPSHOT", "*").replaceFirst("~.*$", "");
-    }
-
-    // Retrieves the payload from the specified event.
-    protected ObjectNode payload(ObjectNode event) {
-        return (ObjectNode) event.path("payload");
-    }
-
-    // Returns the specified node property as a number
-    protected long number(ObjectNode node, String name) {
-        return node.path(name).asLong();
-    }
-
-    // Returns the specified node property as a string.
-    protected String string(ObjectNode node, String name) {
-        return node.path(name).asText();
-    }
-
-    // Returns the specified node property as a string.
-    protected String string(ObjectNode node, String name, String defaultValue) {
-        return node.path(name).asText(defaultValue);
-    }
-
-    // Returns the specified set of IP addresses as a string.
-    private String ip(Set<IpAddress> ipAddresses) {
-        Iterator<IpAddress> it = ipAddresses.iterator();
-        return it.hasNext() ? it.next().toString() : "unknown";
-    }
-
-    // Produces JSON structure from annotations.
-    private JsonNode props(Annotations annotations) {
-        ObjectNode props = mapper.createObjectNode();
-        if (annotations != null) {
-            for (String key : annotations.keys()) {
-                props.put(key, annotations.value(key));
-            }
-        }
-        return props;
-    }
-
-    // Produces an informational log message event bound to the client.
-    protected ObjectNode info(long id, String message) {
-        return message("info", id, message);
-    }
-
-    // Produces a warning log message event bound to the client.
-    protected ObjectNode warning(long id, String message) {
-        return message("warning", id, message);
-    }
-
-    // Produces an error log message event bound to the client.
-    protected ObjectNode error(long id, String message) {
-        return message("error", id, message);
-    }
-
-    // Produces a log message event bound to the client.
-    private ObjectNode message(String severity, long id, String message) {
-        return envelope("message", id,
-                        mapper.createObjectNode()
-                                .put("severity", severity)
-                                .put("message", message));
-    }
-
-    // Puts the payload into an envelope and returns it.
-    protected ObjectNode envelope(String type, long sid, ObjectNode payload) {
-        ObjectNode event = mapper.createObjectNode();
-        event.put("event", type);
-        if (sid > 0) {
-            event.put("sid", sid);
-        }
-        event.set("payload", payload);
-        return event;
-    }
-
-    // Produces a set of all hosts listed in the specified JSON array.
-    protected Set<Host> getHosts(ArrayNode array) {
-        Set<Host> hosts = new HashSet<>();
-        if (array != null) {
-            for (JsonNode node : array) {
-                try {
-                    addHost(hosts, hostId(node.asText()));
-                } catch (IllegalArgumentException e) {
-                    log.debug("Skipping ID {}", node.asText());
-                }
-            }
-        }
-        return hosts;
-    }
-
-    // Adds the specified host to the set of hosts.
-    private void addHost(Set<Host> hosts, HostId hostId) {
-        Host host = hostService.getHost(hostId);
-        if (host != null) {
-            hosts.add(host);
-        }
-    }
-
-
-    // Produces a set of all devices listed in the specified JSON array.
-    protected Set<Device> getDevices(ArrayNode array) {
-        Set<Device> devices = new HashSet<>();
-        if (array != null) {
-            for (JsonNode node : array) {
-                try {
-                    addDevice(devices, deviceId(node.asText()));
-                } catch (IllegalArgumentException e) {
-                    log.debug("Skipping ID {}", node.asText());
-                }
-            }
-        }
-        return devices;
-    }
-
-    private void addDevice(Set<Device> devices, DeviceId deviceId) {
-        Device device = deviceService.getDevice(deviceId);
-        if (device != null) {
-            devices.add(device);
-        }
-    }
-
-    protected void addHover(Set<Host> hosts, Set<Device> devices, String hover) {
-        try {
-            addHost(hosts, hostId(hover));
-        } catch (IllegalArgumentException e) {
-            try {
-                addDevice(devices, deviceId(hover));
-            } catch (IllegalArgumentException ne) {
-                log.debug("Skipping ID {}", hover);
-            }
-        }
-    }
-
-    // Produces a cluster instance message to the client.
-    protected ObjectNode instanceMessage(ClusterEvent event, String messageType) {
-        ControllerNode node = event.subject();
-        int switchCount = mastershipService.getDevicesOf(node.id()).size();
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", node.id().toString())
-                .put("ip", node.ip().toString())
-                .put("online", clusterService.getState(node.id()) == ACTIVE)
-                .put("uiAttached", event.subject().equals(clusterService.getLocalNode()))
-                .put("switches", switchCount);
-
-        ArrayNode labels = mapper.createArrayNode();
-        labels.add(node.id().toString());
-        labels.add(node.ip().toString());
-
-        // Add labels, props and stuff the payload into envelope.
-        payload.set("labels", labels);
-        addMetaUi(node.id().toString(), payload);
-
-        String type = messageType != null ? messageType :
-                ((event.type() == INSTANCE_ADDED) ? "addInstance" :
-                        ((event.type() == INSTANCE_REMOVED ? "removeInstance" :
-                                "addInstance")));
-        return envelope(type, 0, payload);
-    }
-
-    // Produces a device event message to the client.
-    protected ObjectNode deviceMessage(DeviceEvent event) {
-        Device device = event.subject();
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", device.id().toString())
-                .put("type", device.type().toString().toLowerCase())
-                .put("online", deviceService.isAvailable(device.id()))
-                .put("master", master(device.id()));
-
-        // Generate labels: id, chassis id, no-label, optional-name
-        String name = device.annotations().value(AnnotationKeys.NAME);
-        ArrayNode labels = mapper.createArrayNode();
-        labels.add("");
-        labels.add(isNullOrEmpty(name) ? device.id().toString() : name);
-        labels.add(device.id().toString());
-
-        // Add labels, props and stuff the payload into envelope.
-        payload.set("labels", labels);
-        payload.set("props", props(device.annotations()));
-        addGeoLocation(device, payload);
-        addMetaUi(device.id().toString(), payload);
-
-        String type = (event.type() == DEVICE_ADDED) ? "addDevice" :
-                ((event.type() == DEVICE_REMOVED) ? "removeDevice" : "updateDevice");
-        return envelope(type, 0, payload);
-    }
-
-    // Produces a link event message to the client.
-    protected ObjectNode linkMessage(LinkEvent event) {
-        Link link = event.subject();
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", compactLinkString(link))
-                .put("type", link.type().toString().toLowerCase())
-                .put("online", link.state() == Link.State.ACTIVE)
-                .put("linkWidth", 1.2)
-                .put("src", link.src().deviceId().toString())
-                .put("srcPort", link.src().port().toString())
-                .put("dst", link.dst().deviceId().toString())
-                .put("dstPort", link.dst().port().toString());
-        String type = (event.type() == LINK_ADDED) ? "addLink" :
-                ((event.type() == LINK_REMOVED) ? "removeLink" : "updateLink");
-        return envelope(type, 0, payload);
-    }
-
-    // Produces a host event message to the client.
-    protected ObjectNode hostMessage(HostEvent event) {
-        Host host = event.subject();
-        String hostType = host.annotations().value(AnnotationKeys.TYPE);
-        ObjectNode payload = mapper.createObjectNode()
-                .put("id", host.id().toString())
-                .put("type", isNullOrEmpty(hostType) ? "endstation" : hostType)
-                .put("ingress", compactLinkString(edgeLink(host, true)))
-                .put("egress", compactLinkString(edgeLink(host, false)));
-        payload.set("cp", hostConnect(mapper, host.location()));
-        payload.set("labels", labels(mapper, ip(host.ipAddresses()),
-                                     host.mac().toString()));
-        payload.set("props", props(host.annotations()));
-        addGeoLocation(host, payload);
-        addMetaUi(host.id().toString(), payload);
-
-        String type = (event.type() == HOST_ADDED) ? "addHost" :
-                ((event.type() == HOST_REMOVED) ? "removeHost" : "updateHost");
-        return envelope(type, 0, payload);
-    }
-
-    // Encodes the specified host location into a JSON object.
-    private ObjectNode hostConnect(ObjectMapper mapper, HostLocation location) {
-        return mapper.createObjectNode()
-                .put("device", location.deviceId().toString())
-                .put("port", location.port().toLong());
-    }
-
-    // Encodes the specified list of labels a JSON array.
-    private ArrayNode labels(ObjectMapper mapper, String... labels) {
-        ArrayNode json = mapper.createArrayNode();
-        for (String label : labels) {
-            json.add(label);
-        }
-        return json;
-    }
-
-    // Returns the name of the master node for the specified device id.
-    private String master(DeviceId deviceId) {
-        NodeId master = mastershipService.getMasterFor(deviceId);
-        return master != null ? master.toString() : "";
-    }
-
-    // Generates an edge link from the specified host location.
-    private EdgeLink edgeLink(Host host, boolean ingress) {
-        return new DefaultEdgeLink(PID, new ConnectPoint(host.id(), portNumber(0)),
-                                   host.location(), ingress);
-    }
-
-    // Adds meta UI information for the specified object.
-    private void addMetaUi(String id, ObjectNode payload) {
-        ObjectNode meta = metaUi.get(id);
-        if (meta != null) {
-            payload.set("metaUi", meta);
-        }
-    }
-
-    // Adds a geo location JSON to the specified payload object.
-    private void addGeoLocation(Annotated annotated, ObjectNode payload) {
-        Annotations annotations = annotated.annotations();
-        if (annotations == null) {
-            return;
-        }
-
-        String slat = annotations.value(AnnotationKeys.LATITUDE);
-        String slng = annotations.value(AnnotationKeys.LONGITUDE);
-        try {
-            if (slat != null && slng != null && !slat.isEmpty() && !slng.isEmpty()) {
-                double lat = Double.parseDouble(slat);
-                double lng = Double.parseDouble(slng);
-                ObjectNode loc = mapper.createObjectNode()
-                        .put("type", "latlng").put("lat", lat).put("lng", lng);
-                payload.set("location", loc);
-            }
-        } catch (NumberFormatException e) {
-            log.warn("Invalid geo data latitude={}; longiture={}", slat, slng);
-        }
-    }
-
-    // Updates meta UI information for the specified object.
-    protected void updateMetaUi(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        metaUi.put(string(payload, "id"), (ObjectNode) payload.path("memento"));
-    }
-
-    // Returns summary response.
-    protected ObjectNode summmaryMessage(long sid) {
-        Topology topology = topologyService.currentTopology();
-        return envelope("showSummary", sid,
-                        json("ONOS Summary", "node",
-                             new Prop("Devices", format(topology.deviceCount())),
-                             new Prop("Links", format(topology.linkCount())),
-                             new Prop("Hosts", format(hostService.getHostCount())),
-                             new Prop("Topology SCCs", format(topology.clusterCount())),
-                             new Separator(),
-                             new Prop("Intents", format(intentService.getIntentCount())),
-                             new Prop("Flows", format(flowService.getFlowRuleCount())),
-                             new Prop("Version", version)));
-    }
-
-    // Returns device details response.
-    protected ObjectNode deviceDetails(DeviceId deviceId, long sid) {
-        Device device = deviceService.getDevice(deviceId);
-        Annotations annot = device.annotations();
-        String name = annot.value(AnnotationKeys.NAME);
-        int portCount = deviceService.getPorts(deviceId).size();
-        int flowCount = getFlowCount(deviceId);
-        return envelope("showDetails", sid,
-                        json(isNullOrEmpty(name) ? deviceId.toString() : name,
-                             device.type().toString().toLowerCase(),
-                             new Prop("URI", deviceId.toString()),
-                             new Prop("Vendor", device.manufacturer()),
-                             new Prop("H/W Version", device.hwVersion()),
-                             new Prop("S/W Version", device.swVersion()),
-                             new Prop("Serial Number", device.serialNumber()),
-                             new Prop("Protocol", annot.value(AnnotationKeys.PROTOCOL)),
-                             new Separator(),
-                             new Prop("Master", master(deviceId)),
-                             new Prop("Latitude", annot.value(AnnotationKeys.LATITUDE)),
-                             new Prop("Longitude", annot.value(AnnotationKeys.LONGITUDE)),
-                             new Separator(),
-                             new Prop("Ports", Integer.toString(portCount)),
-                             new Prop("Flows", Integer.toString(flowCount))));
-    }
-
-    protected int getFlowCount(DeviceId deviceId) {
-        int count = 0;
-        Iterator<FlowEntry> it = flowService.getFlowEntries(deviceId).iterator();
-        while (it.hasNext()) {
-            count++;
-            it.next();
-        }
-        return count;
-    }
-
-    // Counts all entries that egress on the given device links.
-    protected Map<Link, Integer> getFlowCounts(DeviceId deviceId) {
-        List<FlowEntry> entries = new ArrayList<>();
-        Set<Link> links = new HashSet<>(linkService.getDeviceEgressLinks(deviceId));
-        Set<Host> hosts = hostService.getConnectedHosts(deviceId);
-        Iterator<FlowEntry> it = flowService.getFlowEntries(deviceId).iterator();
-        while (it.hasNext()) {
-            entries.add(it.next());
-        }
-
-        // Add all edge links to the set
-        if (hosts != null) {
-            for (Host host : hosts) {
-                links.add(new DefaultEdgeLink(host.providerId(),
-                                              new ConnectPoint(host.id(), P0),
-                                              host.location(), false));
-            }
-        }
-
-        Map<Link, Integer> counts = new HashMap<>();
-        for (Link link : links) {
-            counts.put(link, getEgressFlows(link, entries));
-        }
-        return counts;
-    }
-
-    // Counts all entries that egress on the link source port.
-    private Integer getEgressFlows(Link link, List<FlowEntry> entries) {
-        int count = 0;
-        PortNumber out = link.src().port();
-        for (FlowEntry entry : entries) {
-            TrafficTreatment treatment = entry.treatment();
-            for (Instruction instruction : treatment.allInstructions()) {
-                if (instruction.type() == Instruction.Type.OUTPUT &&
-                        ((OutputInstruction) instruction).port().equals(out)) {
-                    count++;
-                }
-            }
-        }
-        return count;
-    }
-
-
-    // Returns host details response.
-    protected ObjectNode hostDetails(HostId hostId, long sid) {
-        Host host = hostService.getHost(hostId);
-        Annotations annot = host.annotations();
-        String type = annot.value(AnnotationKeys.TYPE);
-        String name = annot.value(AnnotationKeys.NAME);
-        String vlan = host.vlan().toString();
-        return envelope("showDetails", sid,
-                        json(isNullOrEmpty(name) ? hostId.toString() : name,
-                             isNullOrEmpty(type) ? "endstation" : type,
-                             new Prop("MAC", host.mac().toString()),
-                             new Prop("IP", host.ipAddresses().toString().replaceAll("[\\[\\]]", "")),
-                             new Prop("VLAN", vlan.equals("-1") ? "none" : vlan),
-                             new Separator(),
-                             new Prop("Latitude", annot.value(AnnotationKeys.LATITUDE)),
-                             new Prop("Longitude", annot.value(AnnotationKeys.LONGITUDE))));
-    }
-
-
-    // Produces JSON message to trigger traffic overview visualization
-    protected ObjectNode trafficSummaryMessage(long sid) {
-        ObjectNode payload = mapper.createObjectNode();
-        ArrayNode paths = mapper.createArrayNode();
-        payload.set("paths", paths);
-
-        ObjectNode pathNodeN = mapper.createObjectNode();
-        ArrayNode linksNodeN = mapper.createArrayNode();
-        ArrayNode labelsN = mapper.createArrayNode();
-
-        pathNodeN.put("class", "plain").put("traffic", false);
-        pathNodeN.set("links", linksNodeN);
-        pathNodeN.set("labels", labelsN);
-        paths.add(pathNodeN);
-
-        ObjectNode pathNodeT = mapper.createObjectNode();
-        ArrayNode linksNodeT = mapper.createArrayNode();
-        ArrayNode labelsT = mapper.createArrayNode();
-
-        pathNodeT.put("class", "secondary").put("traffic", true);
-        pathNodeT.set("links", linksNodeT);
-        pathNodeT.set("labels", labelsT);
-        paths.add(pathNodeT);
-
-        for (BiLink link : consolidateLinks(linkService.getLinks())) {
-            boolean bi = link.two != null;
-            if (isInfrastructureEgress(link.one) ||
-                    (bi && isInfrastructureEgress(link.two))) {
-                link.addLoad(statService.load(link.one));
-                link.addLoad(bi ? statService.load(link.two) : null);
-                if (link.hasTraffic) {
-                    linksNodeT.add(compactLinkString(link.one));
-                    labelsT.add(formatBytes(link.bytes));
-                } else {
-                    linksNodeN.add(compactLinkString(link.one));
-                    labelsN.add("");
-                }
-            }
-        }
-        return envelope("showTraffic", sid, payload);
-    }
-
-    private Collection<BiLink> consolidateLinks(Iterable<Link> links) {
-        Map<LinkKey, BiLink> biLinks = new HashMap<>();
-        for (Link link : links) {
-            addLink(biLinks, link);
-        }
-        return biLinks.values();
-    }
-
-    // Produces JSON message to trigger flow overview visualization
-    protected ObjectNode flowSummaryMessage(long sid, Set<Device> devices) {
-        ObjectNode payload = mapper.createObjectNode();
-        ArrayNode paths = mapper.createArrayNode();
-        payload.set("paths", paths);
-
-        for (Device device : devices) {
-            Map<Link, Integer> counts = getFlowCounts(device.id());
-            for (Link link : counts.keySet()) {
-                addLinkFlows(link, paths, counts.get(link));
-            }
-        }
-        return envelope("showTraffic", sid, payload);
-    }
-
-    private void addLinkFlows(Link link, ArrayNode paths, Integer count) {
-        ObjectNode pathNode = mapper.createObjectNode();
-        ArrayNode linksNode = mapper.createArrayNode();
-        ArrayNode labels = mapper.createArrayNode();
-        boolean noFlows = count == null || count == 0;
-        pathNode.put("class", noFlows ? "secondary" : "primary");
-        pathNode.put("traffic", false);
-        pathNode.set("links", linksNode.add(compactLinkString(link)));
-        pathNode.set("labels", labels.add(noFlows ? "" : (count.toString() +
-                (count == 1 ? " flow" : " flows"))));
-        paths.add(pathNode);
-    }
-
-
-    // Produces JSON message to trigger traffic visualization
-    protected ObjectNode trafficMessage(long sid, TrafficClass... trafficClasses) {
-        ObjectNode payload = mapper.createObjectNode();
-        ArrayNode paths = mapper.createArrayNode();
-        payload.set("paths", paths);
-
-        // Classify links based on their traffic traffic first...
-        Map<LinkKey, BiLink> biLinks = classifyLinkTraffic(trafficClasses);
-
-        // Then separate the links into their respective classes and send them out.
-        Map<String, ObjectNode> pathNodes = new HashMap<>();
-        for (BiLink biLink : biLinks.values()) {
-            boolean hasTraffic = biLink.hasTraffic;
-            String tc = (biLink.classes + (hasTraffic ? " animated" : "")).trim();
-            ObjectNode pathNode = pathNodes.get(tc);
-            if (pathNode == null) {
-                pathNode = mapper.createObjectNode()
-                        .put("class", tc).put("traffic", hasTraffic);
-                pathNode.set("links", mapper.createArrayNode());
-                pathNode.set("labels", mapper.createArrayNode());
-                pathNodes.put(tc, pathNode);
-                paths.add(pathNode);
-            }
-            ((ArrayNode) pathNode.path("links")).add(compactLinkString(biLink.one));
-            ((ArrayNode) pathNode.path("labels")).add(hasTraffic ? formatBytes(biLink.bytes) : "");
-        }
-
-        return envelope("showTraffic", sid, payload);
-    }
-
-    // Classifies the link traffic according to the specified classes.
-    private Map<LinkKey, BiLink> classifyLinkTraffic(TrafficClass... trafficClasses) {
-        Map<LinkKey, BiLink> biLinks = new HashMap<>();
-        for (TrafficClass trafficClass : trafficClasses) {
-            for (Intent intent : trafficClass.intents) {
-                boolean isOptical = intent instanceof OpticalConnectivityIntent;
-                List<Intent> installables = intentService.getInstallableIntents(intent.key());
-                if (installables != null) {
-                    for (Intent installable : installables) {
-                        String type = isOptical ? trafficClass.type + " optical" : trafficClass.type;
-                        if (installable instanceof PathIntent) {
-                            classifyLinks(type, biLinks, trafficClass.showTraffic,
-                                          ((PathIntent) installable).path().links());
-                        } else if (installable instanceof LinkCollectionIntent) {
-                            classifyLinks(type, biLinks, trafficClass.showTraffic,
-                                          ((LinkCollectionIntent) installable).links());
-                        } else if (installable instanceof OpticalPathIntent) {
-                            classifyLinks(type, biLinks, trafficClass.showTraffic,
-                                    ((OpticalPathIntent) installable).path().links());
-                        }
-                    }
-                }
-            }
-        }
-        return biLinks;
-    }
-
-
-    // Adds the link segments (path or tree) associated with the specified
-    // connectivity intent
-    private void classifyLinks(String type, Map<LinkKey, BiLink> biLinks,
-                               boolean showTraffic, Iterable<Link> links) {
-        if (links != null) {
-            for (Link link : links) {
-                BiLink biLink = addLink(biLinks, link);
-                if (isInfrastructureEgress(link)) {
-                    if (showTraffic) {
-                        biLink.addLoad(statService.load(link));
-                    }
-                    biLink.addClass(type);
-                }
-            }
-        }
-    }
-
-
-    private BiLink addLink(Map<LinkKey, BiLink> biLinks, Link link) {
-        LinkKey key = canonicalLinkKey(link);
-        BiLink biLink = biLinks.get(key);
-        if (biLink != null) {
-            biLink.setOther(link);
-        } else {
-            biLink = new BiLink(key, link);
-            biLinks.put(key, biLink);
-        }
-        return biLink;
-    }
-
-
-    // Adds the link segments (path or tree) associated with the specified
-    // connectivity intent
-    protected void addPathTraffic(ArrayNode paths, String type, String trafficType,
-                                  Iterable<Link> links) {
-        ObjectNode pathNode = mapper.createObjectNode();
-        ArrayNode linksNode = mapper.createArrayNode();
-
-        if (links != null) {
-            ArrayNode labels = mapper.createArrayNode();
-            boolean hasTraffic = false;
-            for (Link link : links) {
-                if (isInfrastructureEgress(link)) {
-                    linksNode.add(compactLinkString(link));
-                    Load load = statService.load(link);
-                    String label = "";
-                    if (load.rate() > 0) {
-                        hasTraffic = true;
-                        label = formatBytes(load.latest());
-                    }
-                    labels.add(label);
-                }
-            }
-            pathNode.put("class", hasTraffic ? type + " " + trafficType : type);
-            pathNode.put("traffic", hasTraffic);
-            pathNode.set("links", linksNode);
-            pathNode.set("labels", labels);
-            paths.add(pathNode);
-        }
-    }
-
-    // Poor-mans formatting to get the labels with byte counts looking nice.
-    private String formatBytes(long bytes) {
-        String unit;
-        double value;
-        if (bytes > GB) {
-            value = bytes / GB;
-            unit = GB_UNIT;
-        } else if (bytes > MB) {
-            value = bytes / MB;
-            unit = MB_UNIT;
-        } else if (bytes > KB) {
-            value = bytes / KB;
-            unit = KB_UNIT;
-        } else {
-            value = bytes;
-            unit = B_UNIT;
-        }
-        DecimalFormat format = new DecimalFormat("#,###.##");
-        return format.format(value) + " " + unit;
-    }
-
-    // Formats the given number into a string.
-    private String format(Number number) {
-        DecimalFormat format = new DecimalFormat("#,###");
-        return format.format(number);
-    }
-
-    private boolean isInfrastructureEgress(Link link) {
-        return link.src().elementId() instanceof DeviceId;
-    }
-
-    // Produces compact string representation of a link.
-    private static String compactLinkString(Link link) {
-        return String.format(COMPACT, link.src().elementId(), link.src().port(),
-                             link.dst().elementId(), link.dst().port());
-    }
-
-    // Produces JSON property details.
-    private ObjectNode json(String id, String type, Prop... props) {
-        ObjectMapper mapper = new ObjectMapper();
-        ObjectNode result = mapper.createObjectNode()
-                .put("id", id).put("type", type);
-        ObjectNode pnode = mapper.createObjectNode();
-        ArrayNode porder = mapper.createArrayNode();
-        for (Prop p : props) {
-            porder.add(p.key);
-            pnode.put(p.key, p.value);
-        }
-        result.set("propOrder", porder);
-        result.set("props", pnode);
-        return result;
-    }
-
-    // Produces canonical link key, i.e. one that will match link and its inverse.
-    private LinkKey canonicalLinkKey(Link link) {
-        String sn = link.src().elementId().toString();
-        String dn = link.dst().elementId().toString();
-        return sn.compareTo(dn) < 0 ?
-                linkKey(link.src(), link.dst()) : linkKey(link.dst(), link.src());
-    }
-
-    // Representation of link and its inverse and any traffic data.
-    private class BiLink {
-        public final LinkKey key;
-        public final Link one;
-        public Link two;
-        public boolean hasTraffic = false;
-        public long bytes = 0;
-        public String classes = "";
-
-        BiLink(LinkKey key, Link link) {
-            this.key = key;
-            this.one = link;
-        }
-
-        void setOther(Link link) {
-            this.two = link;
-        }
-
-        void addLoad(Load load) {
-            if (load != null) {
-                this.hasTraffic = hasTraffic || load.rate() > 0;
-                this.bytes += load.latest();
-            }
-        }
-
-        void addClass(String trafficClass) {
-            classes = classes + " " + trafficClass;
-        }
-    }
-
-    // Auxiliary key/value carrier.
-    private class Prop {
-        public final String key;
-        public final String value;
-
-        protected Prop(String key, String value) {
-            this.key = key;
-            this.value = value;
-        }
-    }
-
-    // Auxiliary properties separator
-    private class Separator extends Prop {
-        protected Separator() {
-            super("-", "");
-        }
-    }
-
-    // Auxiliary carrier of data for requesting traffic message.
-    protected class TrafficClass {
-        public final boolean showTraffic;
-        public final String type;
-        public final Iterable<Intent> intents;
-
-        TrafficClass(String type, Iterable<Intent> intents) {
-            this(type, intents, false);
-        }
-
-        TrafficClass(String type, Iterable<Intent> intents, boolean showTraffic) {
-            this.type = type;
-            this.intents = intents;
-            this.showTraffic = showTraffic;
-        }
-    }
-
-}
diff --git a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewWebSocket.java b/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewWebSocket.java
deleted file mode 100644
index 16b0eb6..0000000
--- a/web/gui/src/main/java/org/onosproject/ui/impl/TopologyViewWebSocket.java
+++ /dev/null
@@ -1,752 +0,0 @@
-/*
- * Copyright 2014-2015 Open Networking Laboratory
- *
- * 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.
- */
-package org.onosproject.ui.impl;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.Timer;
-import java.util.TimerTask;
-
-import org.eclipse.jetty.websocket.WebSocket;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.util.AbstractAccumulator;
-import org.onlab.util.Accumulator;
-import org.onosproject.cluster.ClusterEvent;
-import org.onosproject.cluster.ClusterEventListener;
-import org.onosproject.cluster.ControllerNode;
-import org.onosproject.core.ApplicationId;
-import org.onosproject.core.CoreService;
-import org.onosproject.event.Event;
-import org.onosproject.mastership.MastershipAdminService;
-import org.onosproject.mastership.MastershipEvent;
-import org.onosproject.mastership.MastershipListener;
-import org.onosproject.net.ConnectPoint;
-import org.onosproject.net.Device;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Link;
-import org.onosproject.net.device.DeviceEvent;
-import org.onosproject.net.device.DeviceListener;
-import org.onosproject.net.flow.DefaultTrafficSelector;
-import org.onosproject.net.flow.DefaultTrafficTreatment;
-import org.onosproject.net.flow.FlowRuleEvent;
-import org.onosproject.net.flow.FlowRuleListener;
-import org.onosproject.net.flow.TrafficSelector;
-import org.onosproject.net.flow.TrafficTreatment;
-import org.onosproject.net.host.HostEvent;
-import org.onosproject.net.host.HostListener;
-import org.onosproject.net.intent.HostToHostIntent;
-import org.onosproject.net.intent.Intent;
-import org.onosproject.net.intent.IntentEvent;
-import org.onosproject.net.intent.IntentListener;
-import org.onosproject.net.intent.MultiPointToSinglePointIntent;
-import org.onosproject.net.link.LinkEvent;
-import org.onosproject.net.link.LinkListener;
-
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-import static org.onosproject.cluster.ClusterEvent.Type.INSTANCE_ADDED;
-import static org.onosproject.net.DeviceId.deviceId;
-import static org.onosproject.net.HostId.hostId;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_ADDED;
-import static org.onosproject.net.device.DeviceEvent.Type.DEVICE_UPDATED;
-import static org.onosproject.net.host.HostEvent.Type.HOST_ADDED;
-import static org.onosproject.net.link.LinkEvent.Type.LINK_ADDED;
-
-/**
- * Web socket capable of interacting with the GUI topology view.
- */
-@Deprecated
-public class TopologyViewWebSocket
-        extends TopologyViewMessages
-        implements WebSocket.OnTextMessage, WebSocket.OnControl {
-
-    private static final long MAX_AGE_MS = 15000;
-
-    private static final byte PING = 0x9;
-    private static final byte PONG = 0xA;
-    private static final byte[] PING_DATA = new byte[]{(byte) 0xde, (byte) 0xad};
-
-    private static final String APP_ID = "org.onosproject.gui";
-
-    private static final long TRAFFIC_FREQUENCY = 5000;
-    private static final long SUMMARY_FREQUENCY = 30000;
-
-    private static final Comparator<? super ControllerNode> NODE_COMPARATOR =
-            new Comparator<ControllerNode>() {
-                @Override
-                public int compare(ControllerNode o1, ControllerNode o2) {
-                    return o1.id().toString().compareTo(o2.id().toString());
-                }
-            };
-
-
-    private final Timer timer = new Timer("topology-view");
-
-    private static final int MAX_EVENTS = 1000;
-    private static final int MAX_BATCH_MS = 5000;
-    private static final int MAX_IDLE_MS = 1000;
-
-    private final ApplicationId appId;
-
-    private Connection connection;
-    private FrameConnection control;
-
-    private final ClusterEventListener clusterListener = new InternalClusterListener();
-    private final MastershipListener mastershipListener = new InternalMastershipListener();
-    private final DeviceListener deviceListener = new InternalDeviceListener();
-    private final LinkListener linkListener = new InternalLinkListener();
-    private final HostListener hostListener = new InternalHostListener();
-    private final IntentListener intentListener = new InternalIntentListener();
-    private final FlowRuleListener flowListener = new InternalFlowListener();
-
-    private final Accumulator<Event> eventAccummulator = new InternalEventAccummulator();
-
-    private TimerTask trafficTask;
-    private ObjectNode trafficEvent;
-
-    private TimerTask summaryTask;
-    private ObjectNode summaryEvent;
-
-    private long lastActive = System.currentTimeMillis();
-    private boolean listenersRemoved = false;
-
-    private TopologyViewIntentFilter intentFilter;
-
-    // Current selection context
-    private Set<Host> selectedHosts;
-    private Set<Device> selectedDevices;
-    private List<Intent> selectedIntents;
-    private int currentIntentIndex = -1;
-
-    /**
-     * Creates a new web-socket for serving data to GUI topology view.
-     *
-     * @param directory service directory
-     */
-    public TopologyViewWebSocket(ServiceDirectory directory) {
-        super(directory);
-        intentFilter = new TopologyViewIntentFilter(intentService, deviceService,
-                                                    hostService, linkService);
-        appId = directory.get(CoreService.class).registerApplication(APP_ID);
-    }
-
-    /**
-     * Issues a close on the connection.
-     */
-    synchronized void close() {
-        removeListeners();
-        if (connection.isOpen()) {
-            connection.close();
-        }
-    }
-
-    /**
-     * Indicates if this connection is idle.
-     *
-     * @return true if idle or closed
-     */
-    synchronized boolean isIdle() {
-        boolean idle = (System.currentTimeMillis() - lastActive) > MAX_AGE_MS;
-        if (idle || (connection != null && !connection.isOpen())) {
-            return true;
-        } else if (connection != null) {
-            try {
-                control.sendControl(PING, PING_DATA, 0, PING_DATA.length);
-            } catch (IOException e) {
-                log.warn("Unable to send ping message due to: ", e);
-            }
-        }
-        return false;
-    }
-
-    @Override
-    public void onOpen(Connection connection) {
-        log.info("Legacy GUI client connected");
-        this.connection = connection;
-        this.control = (FrameConnection) connection;
-        addListeners();
-
-        sendAllInstances(null);
-        sendAllDevices();
-        sendAllLinks();
-        sendAllHosts();
-    }
-
-    @Override
-    public synchronized void onClose(int closeCode, String message) {
-        removeListeners();
-        timer.cancel();
-        log.info("Legacy GUI client disconnected");
-    }
-
-    @Override
-    public boolean onControl(byte controlCode, byte[] data, int offset, int length) {
-        lastActive = System.currentTimeMillis();
-        return true;
-    }
-
-    @Override
-    public void onMessage(String data) {
-        lastActive = System.currentTimeMillis();
-        try {
-            processMessage((ObjectNode) mapper.reader().readTree(data));
-        } catch (Exception e) {
-            log.warn("Unable to parse GUI request {} due to {}", data, e);
-            log.debug("Boom!!!", e);
-        }
-    }
-
-    // Processes the specified event.
-    private void processMessage(ObjectNode event) {
-        String type = string(event, "event", "unknown");
-        if (type.equals("requestDetails")) {
-            requestDetails(event);
-        } else if (type.equals("updateMeta")) {
-            updateMetaUi(event);
-
-        } else if (type.equals("addHostIntent")) {
-            createHostIntent(event);
-        } else if (type.equals("addMultiSourceIntent")) {
-            createMultiSourceIntent(event);
-
-        } else if (type.equals("requestRelatedIntents")) {
-            stopTrafficMonitoring();
-            requestRelatedIntents(event);
-
-        } else if (type.equals("requestNextRelatedIntent")) {
-            stopTrafficMonitoring();
-            requestAnotherRelatedIntent(event, +1);
-        } else if (type.equals("requestPrevRelatedIntent")) {
-            stopTrafficMonitoring();
-            requestAnotherRelatedIntent(event, -1);
-        } else if (type.equals("requestSelectedIntentTraffic")) {
-            requestSelectedIntentTraffic(event);
-            startTrafficMonitoring(event);
-
-        } else if (type.equals("requestAllTraffic")) {
-            requestAllTraffic(event);
-            startTrafficMonitoring(event);
-
-        } else if (type.equals("requestDeviceLinkFlows")) {
-            requestDeviceLinkFlows(event);
-            startTrafficMonitoring(event);
-
-        } else if (type.equals("cancelTraffic")) {
-            cancelTraffic(event);
-
-        } else if (type.equals("requestSummary")) {
-            requestSummary(event);
-            startSummaryMonitoring(event);
-        } else if (type.equals("cancelSummary")) {
-            stopSummaryMonitoring();
-
-        } else if (type.equals("equalizeMasters")) {
-            equalizeMasters(event);
-        }
-    }
-
-    // Sends the specified data to the client.
-    protected synchronized void sendMessage(ObjectNode data) {
-        try {
-            if (connection.isOpen()) {
-                connection.sendMessage(data.toString());
-            }
-        } catch (IOException e) {
-            log.warn("Unable to send message {} to GUI due to {}", data, e);
-            log.debug("Boom!!!", e);
-        }
-    }
-
-    // Sends all controller nodes to the client as node-added messages.
-    private void sendAllInstances(String messageType) {
-        List<ControllerNode> nodes = new ArrayList<>(clusterService.getNodes());
-        Collections.sort(nodes, NODE_COMPARATOR);
-        for (ControllerNode node : nodes) {
-            sendMessage(instanceMessage(new ClusterEvent(INSTANCE_ADDED, node),
-                                        messageType));
-        }
-    }
-
-    // Sends all devices to the client as device-added messages.
-    private void sendAllDevices() {
-        // Send optical first, others later for layered rendering
-        for (Device device : deviceService.getDevices()) {
-            if (device.type() == Device.Type.ROADM) {
-                sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
-            }
-        }
-        for (Device device : deviceService.getDevices()) {
-            if (device.type() != Device.Type.ROADM) {
-                sendMessage(deviceMessage(new DeviceEvent(DEVICE_ADDED, device)));
-            }
-        }
-    }
-
-    // Sends all links to the client as link-added messages.
-    private void sendAllLinks() {
-        // Send optical first, others later for layered rendering
-        for (Link link : linkService.getLinks()) {
-            if (link.type() == Link.Type.OPTICAL) {
-                sendMessage(linkMessage(new LinkEvent(LINK_ADDED, link)));
-            }
-        }
-        for (Link link : linkService.getLinks()) {
-            if (link.type() != Link.Type.OPTICAL) {
-                sendMessage(linkMessage(new LinkEvent(LINK_ADDED, link)));
-            }
-        }
-    }
-
-    // Sends all hosts to the client as host-added messages.
-    private void sendAllHosts() {
-        for (Host host : hostService.getHosts()) {
-            sendMessage(hostMessage(new HostEvent(HOST_ADDED, host)));
-        }
-    }
-
-    // Sends back device or host details.
-    private void requestDetails(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        String type = string(payload, "class", "unknown");
-        long sid = number(event, "sid");
-
-        if (type.equals("device")) {
-            sendMessage(deviceDetails(deviceId(string(payload, "id")), sid));
-        } else if (type.equals("host")) {
-            sendMessage(hostDetails(hostId(string(payload, "id")), sid));
-        }
-    }
-
-
-    // Creates host-to-host intent.
-    private void createHostIntent(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        long id = number(event, "sid");
-        // TODO: add protection against device ids and non-existent hosts.
-        HostId one = hostId(string(payload, "one"));
-        HostId two = hostId(string(payload, "two"));
-
-        HostToHostIntent intent =
-                HostToHostIntent.builder()
-                        .appId(appId)
-                        .one(one)
-                        .two(two)
-                        .build();
-
-
-        intentService.submit(intent);
-        startMonitoringIntent(event, intent);
-    }
-
-    // Creates multi-source-to-single-dest intent.
-    private void createMultiSourceIntent(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        long id = number(event, "sid");
-        // TODO: add protection against device ids and non-existent hosts.
-        Set<HostId> src = getHostIds((ArrayNode) payload.path("src"));
-        HostId dst = hostId(string(payload, "dst"));
-        Host dstHost = hostService.getHost(dst);
-
-        Set<ConnectPoint> ingressPoints = getHostLocations(src);
-
-        // FIXME: clearly, this is not enough
-        TrafficSelector selector = DefaultTrafficSelector.builder()
-                .matchEthDst(dstHost.mac()).build();
-        TrafficTreatment treatment = DefaultTrafficTreatment.emptyTreatment();
-
-        MultiPointToSinglePointIntent intent =
-                MultiPointToSinglePointIntent.builder()
-                        .appId(appId)
-                        .selector(selector)
-                        .treatment(treatment)
-                        .ingressPoints(ingressPoints)
-                        .egressPoint(dstHost.location())
-                        .build();
-
-        intentService.submit(intent);
-        startMonitoringIntent(event, intent);
-    }
-
-
-    private synchronized void startMonitoringIntent(ObjectNode event, Intent intent) {
-        selectedHosts = new HashSet<>();
-        selectedDevices = new HashSet<>();
-        selectedIntents = new ArrayList<>();
-        selectedIntents.add(intent);
-        currentIntentIndex = -1;
-        requestAnotherRelatedIntent(event, +1);
-        requestSelectedIntentTraffic(event);
-    }
-
-
-    private Set<ConnectPoint> getHostLocations(Set<HostId> hostIds) {
-        Set<ConnectPoint> points = new HashSet<>();
-        for (HostId hostId : hostIds) {
-            points.add(getHostLocation(hostId));
-        }
-        return points;
-    }
-
-    private HostLocation getHostLocation(HostId hostId) {
-        return hostService.getHost(hostId).location();
-    }
-
-    // Produces a list of host ids from the specified JSON array.
-    private Set<HostId> getHostIds(ArrayNode ids) {
-        Set<HostId> hostIds = new HashSet<>();
-        for (JsonNode id : ids) {
-            hostIds.add(hostId(id.asText()));
-        }
-        return hostIds;
-    }
-
-
-    private synchronized long startTrafficMonitoring(ObjectNode event) {
-        stopTrafficMonitoring();
-        trafficEvent = event;
-        trafficTask = new TrafficMonitor();
-        timer.schedule(trafficTask, TRAFFIC_FREQUENCY, TRAFFIC_FREQUENCY);
-        return number(event, "sid");
-    }
-
-    private synchronized void stopTrafficMonitoring() {
-        if (trafficTask != null) {
-            trafficTask.cancel();
-            trafficTask = null;
-            trafficEvent = null;
-        }
-    }
-
-    // Subscribes for host traffic messages.
-    private synchronized void requestAllTraffic(ObjectNode event) {
-        long sid = startTrafficMonitoring(event);
-        sendMessage(trafficSummaryMessage(sid));
-    }
-
-    private void requestDeviceLinkFlows(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        long sid = startTrafficMonitoring(event);
-
-        // Get the set of selected hosts and their intents.
-        ArrayNode ids = (ArrayNode) payload.path("ids");
-        Set<Host> hosts = new HashSet<>();
-        Set<Device> devices = getDevices(ids);
-
-        // If there is a hover node, include it in the hosts and find intents.
-        String hover = string(payload, "hover");
-        if (!isNullOrEmpty(hover)) {
-            addHover(hosts, devices, hover);
-        }
-        sendMessage(flowSummaryMessage(sid, devices));
-    }
-
-
-    // Requests related intents message.
-    private synchronized void requestRelatedIntents(ObjectNode event) {
-        ObjectNode payload = payload(event);
-        if (!payload.has("ids")) {
-            return;
-        }
-
-        long sid = number(event, "sid");
-
-        // Cancel any other traffic monitoring mode.
-        stopTrafficMonitoring();
-
-        // Get the set of selected hosts and their intents.
-        ArrayNode ids = (ArrayNode) payload.path("ids");
-        selectedHosts = getHosts(ids);
-        selectedDevices = getDevices(ids);
-        selectedIntents = intentFilter.findPathIntents(selectedHosts, selectedDevices,
-                                                       intentService.getIntents());
-        currentIntentIndex = -1;
-
-        if (haveSelectedIntents()) {
-            // Send a message to highlight all links of all monitored intents.
-            sendMessage(trafficMessage(sid, new TrafficClass("primary", selectedIntents)));
-        }
-
-        // FIXME: Re-introduce one the client click vs hover gesture stuff is sorted out.
-//        String hover = string(payload, "hover");
-//        if (!isNullOrEmpty(hover)) {
-//            // If there is a hover node, include it in the selection and find intents.
-//            processHoverExtendedSelection(sid, hover);
-//        }
-    }
-
-    private boolean haveSelectedIntents() {
-        return selectedIntents != null && !selectedIntents.isEmpty();
-    }
-
-    // Processes the selection extended with hovered item to segregate items
-    // into primary (those including the hover) vs secondary highlights.
-    private void processHoverExtendedSelection(long sid, String hover) {
-        Set<Host> hoverSelHosts = new HashSet<>(selectedHosts);
-        Set<Device> hoverSelDevices = new HashSet<>(selectedDevices);
-        addHover(hoverSelHosts, hoverSelDevices, hover);
-
-        List<Intent> primary = selectedIntents == null ? new ArrayList<>() :
-                intentFilter.findPathIntents(hoverSelHosts, hoverSelDevices,
-                                             selectedIntents);
-        Set<Intent> secondary = new HashSet<>(selectedIntents);
-        secondary.removeAll(primary);
-
-        // Send a message to highlight all links of all monitored intents.
-        sendMessage(trafficMessage(sid, new TrafficClass("primary", primary),
-                                   new TrafficClass("secondary", secondary)));
-    }
-
-    // Requests next or previous related intent.
-    private void requestAnotherRelatedIntent(ObjectNode event, int offset) {
-        if (haveSelectedIntents()) {
-            currentIntentIndex = currentIntentIndex + offset;
-            if (currentIntentIndex < 0) {
-                currentIntentIndex = selectedIntents.size() - 1;
-            } else if (currentIntentIndex >= selectedIntents.size()) {
-                currentIntentIndex = 0;
-            }
-            sendSelectedIntent(event);
-        }
-    }
-
-    // Sends traffic information on the related intents with the currently
-    // selected intent highlighted.
-    private void sendSelectedIntent(ObjectNode event) {
-        Intent selectedIntent = selectedIntents.get(currentIntentIndex);
-        log.info("Requested next intent {}", selectedIntent.id());
-
-        Set<Intent> primary = new HashSet<>();
-        primary.add(selectedIntent);
-
-        Set<Intent> secondary = new HashSet<>(selectedIntents);
-        secondary.remove(selectedIntent);
-
-        // Send a message to highlight all links of the selected intent.
-        sendMessage(trafficMessage(number(event, "sid"),
-                                   new TrafficClass("primary", primary),
-                                   new TrafficClass("secondary", secondary)));
-    }
-
-    // Requests monitoring of traffic for the selected intent.
-    private void requestSelectedIntentTraffic(ObjectNode event) {
-        if (haveSelectedIntents()) {
-            if (currentIntentIndex < 0) {
-                currentIntentIndex = 0;
-            }
-            Intent selectedIntent = selectedIntents.get(currentIntentIndex);
-            log.info("Requested traffic for selected {}", selectedIntent.id());
-
-            Set<Intent> primary = new HashSet<>();
-            primary.add(selectedIntent);
-
-            // Send a message to highlight all links of the selected intent.
-            sendMessage(trafficMessage(number(event, "sid"),
-                                       new TrafficClass("primary", primary, true)));
-        }
-    }
-
-    // Cancels sending traffic messages.
-    private void cancelTraffic(ObjectNode event) {
-        selectedIntents = null;
-        sendMessage(trafficMessage(number(event, "sid")));
-        stopTrafficMonitoring();
-    }
-
-
-    private synchronized long startSummaryMonitoring(ObjectNode event) {
-        stopSummaryMonitoring();
-        summaryEvent = event;
-        summaryTask = new SummaryMonitor();
-        timer.schedule(summaryTask, SUMMARY_FREQUENCY, SUMMARY_FREQUENCY);
-        return number(event, "sid");
-    }
-
-    private synchronized void stopSummaryMonitoring() {
-        if (summaryEvent != null) {
-            summaryTask.cancel();
-            summaryTask = null;
-            summaryEvent = null;
-        }
-    }
-
-    // Subscribes for summary messages.
-    private synchronized void requestSummary(ObjectNode event) {
-        sendMessage(summmaryMessage(number(event, "sid")));
-    }
-
-
-    // Forces mastership role rebalancing.
-    private void equalizeMasters(ObjectNode event) {
-        directory.get(MastershipAdminService.class).balanceRoles();
-    }
-
-
-    // Adds all internal listeners.
-    private void addListeners() {
-        clusterService.addListener(clusterListener);
-        mastershipService.addListener(mastershipListener);
-        deviceService.addListener(deviceListener);
-        linkService.addListener(linkListener);
-        hostService.addListener(hostListener);
-        intentService.addListener(intentListener);
-        flowService.addListener(flowListener);
-    }
-
-    // Removes all internal listeners.
-    private synchronized void removeListeners() {
-        if (!listenersRemoved) {
-            listenersRemoved = true;
-            clusterService.removeListener(clusterListener);
-            mastershipService.removeListener(mastershipListener);
-            deviceService.removeListener(deviceListener);
-            linkService.removeListener(linkListener);
-            hostService.removeListener(hostListener);
-            intentService.removeListener(intentListener);
-            flowService.removeListener(flowListener);
-        }
-    }
-
-    // Cluster event listener.
-    private class InternalClusterListener implements ClusterEventListener {
-        @Override
-        public void event(ClusterEvent event) {
-            sendMessage(instanceMessage(event, null));
-        }
-    }
-
-    // Mastership change listener
-    private class InternalMastershipListener implements MastershipListener {
-        @Override
-        public void event(MastershipEvent event) {
-            sendAllInstances("updateInstance");
-            Device device = deviceService.getDevice(event.subject());
-            sendMessage(deviceMessage(new DeviceEvent(DEVICE_UPDATED, device)));
-        }
-    }
-
-    // Device event listener.
-    private class InternalDeviceListener implements DeviceListener {
-        @Override
-        public void event(DeviceEvent event) {
-            sendMessage(deviceMessage(event));
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Link event listener.
-    private class InternalLinkListener implements LinkListener {
-        @Override
-        public void event(LinkEvent event) {
-            sendMessage(linkMessage(event));
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Host event listener.
-    private class InternalHostListener implements HostListener {
-        @Override
-        public void event(HostEvent event) {
-            sendMessage(hostMessage(event));
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Intent event listener.
-    private class InternalIntentListener implements IntentListener {
-        @Override
-        public void event(IntentEvent event) {
-            if (trafficEvent != null) {
-                requestSelectedIntentTraffic(trafficEvent);
-            }
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Intent event listener.
-    private class InternalFlowListener implements FlowRuleListener {
-        @Override
-        public void event(FlowRuleEvent event) {
-            eventAccummulator.add(event);
-        }
-    }
-
-    // Periodic update of the traffic information
-    private class TrafficMonitor extends TimerTask {
-        @Override
-        public void run() {
-            try {
-                if (trafficEvent != null) {
-                    String type = string(trafficEvent, "event", "unknown");
-                    if (type.equals("requestAllTraffic")) {
-                        requestAllTraffic(trafficEvent);
-                    } else if (type.equals("requestDeviceLinkFlows")) {
-                        requestDeviceLinkFlows(trafficEvent);
-                    } else if (type.equals("requestSelectedIntentTraffic")) {
-                        requestSelectedIntentTraffic(trafficEvent);
-                    }
-                }
-            } catch (Exception e) {
-                log.warn("Unable to handle traffic request due to {}", e.getMessage());
-                log.debug("Boom!", e);
-            }
-        }
-    }
-
-    // Periodic update of the summary information
-    private class SummaryMonitor extends TimerTask {
-        @Override
-        public void run() {
-            try {
-                if (summaryEvent != null) {
-                    requestSummary(summaryEvent);
-                }
-            } catch (Exception e) {
-                log.warn("Unable to handle summary request due to {}", e.getMessage());
-                log.debug("Boom!", e);
-            }
-        }
-    }
-
-    // Accumulates events to drive methodic update of the summary pane.
-    private class InternalEventAccummulator extends AbstractAccumulator<Event> {
-        protected InternalEventAccummulator() {
-            super(new Timer("topo-summary"), MAX_EVENTS, MAX_BATCH_MS, MAX_IDLE_MS);
-        }
-
-        @Override
-        public void processItems(List<Event> items) {
-            try {
-                if (summaryEvent != null) {
-                    sendMessage(summmaryMessage(0));
-                }
-            } catch (Exception e) {
-                log.warn("Unable to handle summary request due to {}", e.getMessage());
-                log.debug("Boom!", e);
-            }
-        }
-    }
-}
-
diff --git a/web/gui/src/main/webapp/WEB-INF/web.xml b/web/gui/src/main/webapp/WEB-INF/web.xml
index ace06db..f03925b 100644
--- a/web/gui/src/main/webapp/WEB-INF/web.xml
+++ b/web/gui/src/main/webapp/WEB-INF/web.xml
@@ -161,15 +161,4 @@
         <url-pattern>/websock/*</url-pattern>
     </servlet-mapping>
 
-    <servlet>
-        <servlet-name>Legacy Web Socket Service</servlet-name>
-        <servlet-class>org.onosproject.ui.impl.GuiWebSocketServlet</servlet-class>
-        <load-on-startup>2</load-on-startup>
-    </servlet>
-
-    <servlet-mapping>
-        <servlet-name>Legacy Web Socket Service</servlet-name>
-        <url-pattern>/ws/*</url-pattern>
-    </servlet-mapping>
-
 </web-app>
diff --git a/web/gui/src/main/webapp/legacy/base.css b/web/gui/src/main/webapp/legacy/base.css
deleted file mode 100644
index bc5b240..0000000
--- a/web/gui/src/main/webapp/legacy/base.css
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Base CSS file
- */
-
-html {
-    font-family: sans-serif;
-    -webkit-text-size-adjust: 100%;
-    -ms-text-size-adjust: 100%;
-}
-
-body {
-    margin: 0;
-}
diff --git a/web/gui/src/main/webapp/legacy/continental_us.json b/web/gui/src/main/webapp/legacy/continental_us.json
deleted file mode 100644
index 978fbdf..0000000
--- a/web/gui/src/main/webapp/legacy/continental_us.json
+++ /dev/null
@@ -1,25782 +0,0 @@
-{
-  "type": "Topology",
-  "objects": {
-    "states": {
-      "type": "GeometryCollection",
-      "geometries": [
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                0
-              ]
-            ],
-            [
-              [
-                1,
-                2,
-                3,
-                4,
-                5
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              6,
-              7,
-              8,
-              9,
-              10,
-              11
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              12,
-              13,
-              14,
-              15,
-              16
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                17
-              ]
-            ],
-            [
-              [
-                18
-              ]
-            ],
-            [
-              [
-                19
-              ]
-            ],
-            [
-              [
-                20
-              ]
-            ],
-            [
-              [
-                21
-              ]
-            ],
-            [
-              [
-                22
-              ]
-            ],
-            [
-              [
-                23,
-                24,
-                -15,
-                25
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              26,
-              27,
-              28,
-              29,
-              30,
-              31
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              32,
-              33,
-              34,
-              35
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              36,
-              37
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              38,
-              39,
-              40
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                41
-              ]
-            ],
-            [
-              [
-                42
-              ]
-            ],
-            [
-              [
-                43
-              ]
-            ],
-            [
-              [
-                44
-              ]
-            ],
-            [
-              [
-                45
-              ]
-            ],
-            [
-              [
-                46
-              ]
-            ],
-            [
-              [
-                47
-              ]
-            ],
-            [
-              [
-                48
-              ]
-            ],
-            [
-              [
-                49
-              ]
-            ],
-            [
-              [
-                50
-              ]
-            ],
-            [
-              [
-                51
-              ]
-            ],
-            [
-              [
-                52,
-                -6,
-                53
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                54
-              ]
-            ],
-            [
-              [
-                55,
-                -54,
-                -5,
-                56,
-                57,
-                58
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              59,
-              60,
-              61,
-              62,
-              63,
-              64
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              65,
-              66,
-              67,
-              68,
-              69,
-              70,
-              71
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              72,
-              73,
-              74,
-              75,
-              -60,
-              76
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              77,
-              78,
-              -74,
-              79,
-              80
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              81,
-              -27,
-              82,
-              83
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                84,
-                85
-              ]
-            ],
-            [
-              [
-                86,
-                87,
-                88,
-                89,
-                -75,
-                -79,
-                90
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                91
-              ]
-            ],
-            [
-              [
-                92
-              ]
-            ],
-            [
-              [
-                93
-              ]
-            ],
-            [
-              [
-                94
-              ]
-            ],
-            [
-              [
-                95,
-                96,
-                -9,
-                97
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                98
-              ]
-            ],
-            [
-              [
-                99
-              ]
-            ],
-            [
-              [
-                100,
-                -36,
-                101,
-                102,
-                103,
-                104
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                105,
-                106
-              ]
-            ],
-            [
-              [
-                -40,
-                107,
-                108,
-                109,
-                -38,
-                110,
-                111,
-                112
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                113
-              ]
-            ],
-            [
-              [
-                114
-              ]
-            ],
-            [
-              [
-                115,
-                116
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                117
-              ]
-            ],
-            [
-              [
-                118
-              ]
-            ],
-            [
-              [
-                119,
-                -81,
-                120
-              ]
-            ],
-            [
-              [
-                121
-              ]
-            ],
-            [
-              [
-                122
-              ]
-            ],
-            [
-              [
-                123
-              ]
-            ],
-            [
-              [
-                124
-              ]
-            ],
-            [
-              [
-                125,
-                126
-              ]
-            ],
-            [
-              [
-                127
-              ]
-            ],
-            [
-              [
-                128
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              129,
-              -64,
-              130,
-              131,
-              132
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -76,
-              -90,
-              133,
-              -86,
-              134,
-              -12,
-              135,
-              -84,
-              136,
-              -61
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                137
-              ]
-            ],
-            [
-              [
-                138,
-                -98,
-                -8,
-                139,
-                -3
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              140,
-              141,
-              -72,
-              142,
-              143
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                144
-              ]
-            ],
-            [
-              [
-                145
-              ]
-            ],
-            [
-              [
-                146
-              ]
-            ],
-            [
-              [
-                147
-              ]
-            ],
-            [
-              [
-                148
-              ]
-            ],
-            [
-              [
-                149,
-                150
-              ]
-            ],
-            [
-              [
-                151,
-                -58,
-                152,
-                153,
-                154
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              155,
-              -144,
-              156,
-              -132
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -62,
-              -137,
-              -83,
-              -32,
-              157,
-              158
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              159,
-              -104,
-              160,
-              161,
-              -116
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                162
-              ]
-            ],
-            [
-              [
-                163,
-                164,
-                165
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              166,
-              167,
-              -13,
-              -29,
-              168
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -16,
-              -25,
-              169,
-              -68,
-              170
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                171
-              ]
-            ],
-            [
-              [
-                172
-              ]
-            ],
-            [
-              [
-                173
-              ]
-            ],
-            [
-              [
-                174
-              ]
-            ],
-            [
-              [
-                175
-              ]
-            ],
-            [
-              [
-                176,
-                -102,
-                -35,
-                177,
-                -165,
-                178,
-                179
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              180,
-              -91,
-              -78,
-              -120,
-              181,
-              182
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -11,
-              183,
-              -169,
-              -28,
-              -82,
-              -136
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              184,
-              -69,
-              -170,
-              -24,
-              185
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -164,
-              186,
-              -41,
-              -113,
-              187,
-              -183,
-              188,
-              -179
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                189
-              ]
-            ],
-            [
-              [
-                190
-              ]
-            ],
-            [
-              [
-                191,
-                -33,
-                -101
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              192,
-              -59,
-              -152
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -131,
-              -63,
-              -159,
-              193,
-              -141,
-              -156
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              194,
-              -153,
-              -57,
-              -4,
-              -140,
-              -7,
-              -135,
-              -85,
-              -134,
-              -89
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                195
-              ]
-            ],
-            [
-              [
-                196
-              ]
-            ],
-            [
-              [
-                197
-              ]
-            ],
-            [
-              [
-                198
-              ]
-            ],
-            [
-              [
-                199
-              ]
-            ],
-            [
-              [
-                -10,
-                -97,
-                200,
-                -167,
-                -184
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              201,
-              -30,
-              -17,
-              -171,
-              -67
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                -109,
-                202
-              ]
-            ],
-            [
-              [
-                -106,
-                203
-              ]
-            ],
-            [
-              [
-                -111,
-                -37,
-                204,
-                -150,
-                205,
-                -154,
-                -195,
-                -88,
-                206
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -103,
-              -177,
-              207,
-              -161
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                208
-              ]
-            ],
-            [
-              [
-                209
-              ]
-            ],
-            [
-              [
-                210
-              ]
-            ],
-            [
-              [
-                211
-              ]
-            ],
-            [
-              [
-                212
-              ]
-            ],
-            [
-              [
-                213
-              ]
-            ],
-            [
-              [
-                214
-              ]
-            ],
-            [
-              [
-                215
-              ]
-            ],
-            [
-              [
-                -185,
-                216,
-                -70
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "MultiPolygon",
-          "arcs": [
-            [
-              [
-                217
-              ]
-            ],
-            [
-              [
-                218
-              ]
-            ],
-            [
-              [
-                219
-              ]
-            ],
-            [
-              [
-                220
-              ]
-            ],
-            [
-              [
-                -126,
-                221,
-                -77,
-                -65,
-                -130,
-                222
-              ]
-            ],
-            [
-              [
-                223
-              ]
-            ],
-            [
-              [
-                224
-              ]
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -112,
-              -207,
-              -87,
-              -181,
-              -188
-            ]
-          ]
-        },
-        {
-          "type": "Polygon",
-          "arcs": [
-            [
-              -158,
-              -31,
-              -202,
-              -66,
-              -142,
-              -194
-            ]
-          ]
-        }
-      ]
-    }
-  },
-  "arcs": [
-    [
-      [
-        6347,
-        2300
-      ],
-      [
-        -16,
-        -9
-      ],
-      [
-        -22,
-        1
-      ],
-      [
-        -5,
-        3
-      ],
-      [
-        9,
-        6
-      ],
-      [
-        27,
-        7
-      ],
-      [
-        7,
-        -8
-      ]
-    ],
-    [
-      [
-        6447,
-        2350
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -19,
-        -41
-      ],
-      [
-        -66,
-        -14
-      ],
-      [
-        4,
-        9
-      ],
-      [
-        14,
-        2
-      ],
-      [
-        19,
-        14
-      ],
-      [
-        -4,
-        22
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        0,
-        45
-      ],
-      [
-        -4,
-        27
-      ],
-      [
-        -11,
-        27
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -8,
-        -46
-      ],
-      [
-        -6,
-        -61
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        -20,
-        -2
-      ],
-      [
-        -18,
-        4
-      ],
-      [
-        -8,
-        -1
-      ]
-    ],
-    [
-      [
-        6290,
-        2347
-      ],
-      [
-        -2,
-        83
-      ],
-      [
-        -2,
-        76
-      ],
-      [
-        -2,
-        75
-      ],
-      [
-        -2,
-        76
-      ],
-      [
-        -2,
-        76
-      ],
-      [
-        -2,
-        75
-      ],
-      [
-        -1,
-        76
-      ],
-      [
-        -2,
-        75
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        5,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        5,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        5,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        74
-      ],
-      [
-        4,
-        75
-      ],
-      [
-        2,
-        19
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        0,
-        10
-      ],
-      [
-        -15,
-        26
-      ]
-    ],
-    [
-      [
-        6329,
-        4211
-      ],
-      [
-        -3,
-        6
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        2,
-        1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        27,
-        -1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        27,
-        -1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        27,
-        -1
-      ],
-      [
-        28,
-        -1
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        28,
-        -1
-      ]
-    ],
-    [
-      [
-        6771,
-        4212
-      ],
-      [
-        4,
-        -51
-      ],
-      [
-        5,
-        -52
-      ],
-      [
-        4,
-        -51
-      ],
-      [
-        5,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        5,
-        -52
-      ],
-      [
-        4,
-        -51
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -52
-      ],
-      [
-        5,
-        -51
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        4,
-        -38
-      ],
-      [
-        24,
-        -112
-      ],
-      [
-        7,
-        -47
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        3,
-        -17
-      ],
-      [
-        8,
-        -13
-      ],
-      [
-        -1,
-        -16
-      ],
-      [
-        -11,
-        -18
-      ],
-      [
-        -7,
-        -22
-      ],
-      [
-        -5,
-        -39
-      ],
-      [
-        -11,
-        -69
-      ],
-      [
-        0,
-        -41
-      ],
-      [
-        10,
-        -57
-      ],
-      [
-        2,
-        -26
-      ],
-      [
-        -6,
-        -111
-      ],
-      [
-        4,
-        -72
-      ],
-      [
-        10,
-        -47
-      ]
-    ],
-    [
-      [
-        6877,
-        2601
-      ],
-      [
-        -55,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -57,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -56,
-        0
-      ],
-      [
-        -2,
-        -29
-      ],
-      [
-        1,
-        -27
-      ],
-      [
-        6,
-        -27
-      ],
-      [
-        25,
-        -49
-      ],
-      [
-        3,
-        -13
-      ],
-      [
-        -5,
-        -38
-      ],
-      [
-        1,
-        -28
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        -6,
-        -12
-      ],
-      [
-        -2,
-        -14
-      ]
-    ],
-    [
-      [
-        6064,
-        4615
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        3,
-        -16
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        -3,
-        -9
-      ],
-      [
-        -20,
-        -22
-      ],
-      [
-        -9,
-        -29
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        -7,
-        -36
-      ],
-      [
-        -17,
-        -35
-      ],
-      [
-        -7,
-        -41
-      ],
-      [
-        3,
-        -44
-      ],
-      [
-        -9,
-        -36
-      ],
-      [
-        -20,
-        -28
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        0,
-        -2
-      ]
-    ],
-    [
-      [
-        5962,
-        4212
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        -7,
-        -19
-      ],
-      [
-        -16,
-        -19
-      ],
-      [
-        -9,
-        -19
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        -4,
-        -27
-      ],
-      [
-        -4,
-        -63
-      ],
-      [
-        -8,
-        -36
-      ],
-      [
-        -15,
-        -9
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -1,
-        -20
-      ],
-      [
-        -9,
-        -22
-      ],
-      [
-        -16,
-        -26
-      ],
-      [
-        -5,
-        -24
-      ],
-      [
-        5,
-        -23
-      ],
-      [
-        -1,
-        -9
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        -17,
-        -11
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        4,
-        -12
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        -3,
-        -29
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -4,
-        -12
-      ],
-      [
-        -15,
-        -21
-      ],
-      [
-        -4,
-        -16
-      ],
-      [
-        7,
-        -11
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        7,
-        -9
-      ],
-      [
-        2,
-        -25
-      ],
-      [
-        -5,
-        -32
-      ],
-      [
-        1,
-        -26
-      ],
-      [
-        8,
-        -22
-      ],
-      [
-        2,
-        -9
-      ],
-      [
-        -8,
-        -71
-      ],
-      [
-        0,
-        -10
-      ]
-    ],
-    [
-      [
-        5813,
-        3413
-      ],
-      [
-        -34,
-        -1
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        -1
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ],
-      [
-        -31,
-        0
-      ]
-    ],
-    [
-      [
-        5313,
-        3411
-      ],
-      [
-        -1,
-        55
-      ],
-      [
-        0,
-        54
-      ],
-      [
-        0,
-        55
-      ],
-      [
-        0,
-        55
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -16,
-        4
-      ],
-      [
-        -9,
-        -3
-      ],
-      [
-        -9,
-        3
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -4,
-        -2
-      ],
-      [
-        -4,
-        2
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        -7,
-        6
-      ],
-      [
-        -9,
-        19
-      ]
-    ],
-    [
-      [
-        5236,
-        3667
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        43
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        43
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        43
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        1,
-        44
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -4,
-        56
-      ],
-      [
-        -3,
-        56
-      ]
-    ],
-    [
-      [
-        5213,
-        4816
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        7,
-        -31
-      ],
-      [
-        8,
-        -21
-      ],
-      [
-        1,
-        -15
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -12,
-        -33
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        -9,
-        -15
-      ],
-      [
-        -13,
-        -43
-      ],
-      [
-        28,
-        0
-      ],
-      [
-        29,
-        1
-      ],
-      [
-        28,
-        1
-      ],
-      [
-        32,
-        1
-      ]
-    ],
-    [
-      [
-        2713,
-        5018
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -142
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -142
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -142
-      ],
-      [
-        0,
-        -143
-      ],
-      [
-        0,
-        -143
-      ]
-    ],
-    [
-      [
-        2713,
-        2733
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -61,
-        -1
-      ],
-      [
-        -62,
-        0
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -61,
-        -1
-      ],
-      [
-        -83,
-        60
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -82,
-        59
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -82,
-        59
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -82,
-        60
-      ],
-      [
-        -83,
-        59
-      ],
-      [
-        9,
-        23
-      ],
-      [
-        11,
-        61
-      ]
-    ],
-    [
-      [
-        1730,
-        3292
-      ],
-      [
-        0,
-        3
-      ],
-      [
-        24,
-        4
-      ],
-      [
-        12,
-        16
-      ],
-      [
-        7,
-        28
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        -4,
-        29
-      ],
-      [
-        -10,
-        21
-      ],
-      [
-        -17,
-        14
-      ],
-      [
-        -10,
-        40
-      ],
-      [
-        -2,
-        65
-      ],
-      [
-        3,
-        35
-      ],
-      [
-        8,
-        5
-      ],
-      [
-        9,
-        16
-      ],
-      [
-        8,
-        26
-      ],
-      [
-        6,
-        29
-      ],
-      [
-        4,
-        31
-      ],
-      [
-        0,
-        40
-      ],
-      [
-        -2,
-        48
-      ],
-      [
-        16,
-        60
-      ],
-      [
-        15,
-        36
-      ],
-      [
-        29,
-        45
-      ],
-      [
-        6,
-        13
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        0,
-        2
-      ],
-      [
-        -6,
-        15
-      ],
-      [
-        -26,
-        31
-      ],
-      [
-        -11,
-        23
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        0,
-        1
-      ],
-      [
-        -4,
-        19
-      ],
-      [
-        -27,
-        83
-      ],
-      [
-        -10,
-        45
-      ],
-      [
-        0,
-        34
-      ]
-    ],
-    [
-      [
-        1749,
-        4208
-      ],
-      [
-        0,
-        3
-      ],
-      [
-        4,
-        143
-      ],
-      [
-        -10,
-        49
-      ],
-      [
-        -2,
-        28
-      ],
-      [
-        2,
-        35
-      ],
-      [
-        0,
-        21
-      ],
-      [
-        -5,
-        19
-      ],
-      [
-        -1,
-        33
-      ],
-      [
-        -1,
-        42
-      ],
-      [
-        -8,
-        27
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        4,
-        29
-      ],
-      [
-        8,
-        15
-      ],
-      [
-        14,
-        10
-      ],
-      [
-        15,
-        3
-      ],
-      [
-        17,
-        -3
-      ],
-      [
-        13,
-        -13
-      ],
-      [
-        8,
-        -22
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        12,
-        18
-      ],
-      [
-        10,
-        40
-      ],
-      [
-        3,
-        3
-      ],
-      [
-        0,
-        173
-      ],
-      [
-        0,
-        158
-      ]
-    ],
-    [
-      [
-        1848,
-        5019
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        -1
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ]
-    ],
-    [
-      [
-        1102,
-        3337
-      ],
-      [
-        -10,
-        -4
-      ],
-      [
-        -12,
-        8
-      ],
-      [
-        -9,
-        39
-      ],
-      [
-        -11,
-        31
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        8,
-        -29
-      ],
-      [
-        22,
-        -44
-      ],
-      [
-        6,
-        -9
-      ]
-    ],
-    [
-      [
-        913,
-        3494
-      ],
-      [
-        -7,
-        -1
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        -6,
-        21
-      ],
-      [
-        9,
-        2
-      ],
-      [
-        8,
-        -3
-      ],
-      [
-        7,
-        -17
-      ],
-      [
-        0,
-        -6
-      ]
-    ],
-    [
-      [
-        1102,
-        3562
-      ],
-      [
-        9,
-        -30
-      ],
-      [
-        -13,
-        4
-      ],
-      [
-        -13,
-        -2
-      ],
-      [
-        -4,
-        16
-      ],
-      [
-        -4,
-        23
-      ],
-      [
-        -3,
-        5
-      ],
-      [
-        -9,
-        2
-      ],
-      [
-        0,
-        2
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        2,
-        5
-      ],
-      [
-        28,
-        -25
-      ],
-      [
-        8,
-        -11
-      ]
-    ],
-    [
-      [
-        808,
-        3776
-      ],
-      [
-        -12,
-        -5
-      ],
-      [
-        -9,
-        5
-      ],
-      [
-        -15,
-        39
-      ],
-      [
-        31,
-        5
-      ],
-      [
-        14,
-        -17
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        -11,
-        -22
-      ]
-    ],
-    [
-      [
-        763,
-        3819
-      ],
-      [
-        -9,
-        -1
-      ],
-      [
-        -15,
-        4
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        8,
-        7
-      ],
-      [
-        3,
-        -6
-      ],
-      [
-        8,
-        -14
-      ]
-    ],
-    [
-      [
-        836,
-        3841
-      ],
-      [
-        36,
-        -21
-      ],
-      [
-        19,
-        10
-      ],
-      [
-        3,
-        -10
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        -43,
-        -16
-      ],
-      [
-        -13,
-        11
-      ],
-      [
-        -1,
-        15
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        6,
-        5
-      ]
-    ],
-    [
-      [
-        83,
-        7031
-      ],
-      [
-        48,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        45,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ]
-    ],
-    [
-      [
-        816,
-        7031
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        41,
-        -66
-      ],
-      [
-        41,
-        -66
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        41,
-        -65
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        41,
-        -66
-      ],
-      [
-        40,
-        -66
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        32,
-        -56
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        31,
-        -56
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        32,
-        -56
-      ],
-      [
-        32,
-        -55
-      ],
-      [
-        32,
-        -56
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        43,
-        -80
-      ],
-      [
-        44,
-        -79
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        44,
-        -80
-      ],
-      [
-        47,
-        -85
-      ]
-    ],
-    [
-      [
-        1730,
-        3292
-      ],
-      [
-        -20,
-        -5
-      ],
-      [
-        -50,
-        -8
-      ],
-      [
-        -49,
-        -9
-      ],
-      [
-        -50,
-        -9
-      ],
-      [
-        -49,
-        -8
-      ],
-      [
-        -50,
-        -9
-      ],
-      [
-        -50,
-        -8
-      ],
-      [
-        -49,
-        -9
-      ],
-      [
-        -50,
-        -9
-      ],
-      [
-        0,
-        3
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -8,
-        16
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -4,
-        57
-      ],
-      [
-        2,
-        27
-      ],
-      [
-        -1,
-        27
-      ],
-      [
-        -10,
-        65
-      ],
-      [
-        -25,
-        78
-      ],
-      [
-        -56,
-        98
-      ],
-      [
-        -28,
-        33
-      ],
-      [
-        -23,
-        41
-      ],
-      [
-        -14,
-        12
-      ],
-      [
-        -17,
-        3
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        -20,
-        13
-      ],
-      [
-        3,
-        46
-      ],
-      [
-        -19,
-        64
-      ],
-      [
-        -16,
-        7
-      ],
-      [
-        -41,
-        -4
-      ],
-      [
-        -54,
-        35
-      ],
-      [
-        -16,
-        21
-      ],
-      [
-        -5,
-        38
-      ],
-      [
-        -26,
-        32
-      ],
-      [
-        -33,
-        32
-      ],
-      [
-        -18,
-        -7
-      ],
-      [
-        -25,
-        5
-      ],
-      [
-        -34,
-        23
-      ],
-      [
-        -20,
-        3
-      ],
-      [
-        -40,
-        -7
-      ],
-      [
-        -14,
-        5
-      ],
-      [
-        -14,
-        29
-      ],
-      [
-        -15,
-        15
-      ],
-      [
-        3,
-        35
-      ],
-      [
-        -2,
-        33
-      ],
-      [
-        3,
-        25
-      ],
-      [
-        -7,
-        55
-      ],
-      [
-        5,
-        52
-      ],
-      [
-        -4,
-        18
-      ],
-      [
-        -9,
-        14
-      ],
-      [
-        -26,
-        21
-      ],
-      [
-        -4,
-        26
-      ],
-      [
-        4,
-        37
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -21,
-        22
-      ],
-      [
-        -20,
-        51
-      ],
-      [
-        -26,
-        28
-      ],
-      [
-        -10,
-        47
-      ],
-      [
-        -15,
-        29
-      ],
-      [
-        -6,
-        25
-      ],
-      [
-        -34,
-        92
-      ],
-      [
-        -37,
-        71
-      ],
-      [
-        -6,
-        41
-      ],
-      [
-        -1,
-        56
-      ],
-      [
-        14,
-        34
-      ],
-      [
-        8,
-        30
-      ],
-      [
-        -1,
-        28
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        -13,
-        36
-      ],
-      [
-        -49,
-        21
-      ],
-      [
-        -40,
-        87
-      ],
-      [
-        -2,
-        67
-      ],
-      [
-        -16,
-        68
-      ],
-      [
-        0,
-        44
-      ],
-      [
-        -3,
-        48
-      ],
-      [
-        12,
-        11
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        13,
-        -25
-      ],
-      [
-        12,
-        -12
-      ],
-      [
-        11,
-        -25
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        8,
-        -2
-      ],
-      [
-        -4,
-        16
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        -6,
-        34
-      ],
-      [
-        -11,
-        42
-      ],
-      [
-        -13,
-        24
-      ],
-      [
-        -6,
-        42
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        12,
-        19
-      ],
-      [
-        17,
-        13
-      ],
-      [
-        22,
-        4
-      ],
-      [
-        64,
-        -6
-      ],
-      [
-        14,
-        11
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        9,
-        1
-      ],
-      [
-        -18,
-        12
-      ],
-      [
-        -10,
-        -4
-      ],
-      [
-        -11,
-        2
-      ],
-      [
-        -23,
-        -2
-      ],
-      [
-        -9,
-        5
-      ],
-      [
-        -10,
-        13
-      ],
-      [
-        -7,
-        2
-      ],
-      [
-        -21,
-        -24
-      ],
-      [
-        -10,
-        3
-      ],
-      [
-        -22,
-        26
-      ],
-      [
-        -10,
-        3
-      ],
-      [
-        -15,
-        -14
-      ],
-      [
-        -2,
-        -63
-      ],
-      [
-        5,
-        -46
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        -11,
-        19
-      ],
-      [
-        -16,
-        12
-      ],
-      [
-        -14,
-        17
-      ],
-      [
-        -20,
-        32
-      ],
-      [
-        -10,
-        12
-      ],
-      [
-        -12,
-        -27
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        6,
-        31
-      ],
-      [
-        -2,
-        53
-      ],
-      [
-        18,
-        -42
-      ],
-      [
-        -6,
-        29
-      ],
-      [
-        -13,
-        33
-      ],
-      [
-        -11,
-        11
-      ],
-      [
-        -13,
-        58
-      ],
-      [
-        -29,
-        35
-      ],
-      [
-        -23,
-        56
-      ],
-      [
-        -48,
-        93
-      ],
-      [
-        -3,
-        82
-      ],
-      [
-        -18,
-        104
-      ],
-      [
-        7,
-        59
-      ],
-      [
-        -1,
-        42
-      ],
-      [
-        -8,
-        63
-      ],
-      [
-        -9,
-        34
-      ],
-      [
-        -39,
-        95
-      ],
-      [
-        -37,
-        63
-      ],
-      [
-        -6,
-        48
-      ],
-      [
-        -2,
-        48
-      ],
-      [
-        8,
-        43
-      ],
-      [
-        7,
-        46
-      ],
-      [
-        5,
-        12
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        -1,
-        -10
-      ],
-      [
-        5,
-        -3
-      ],
-      [
-        2,
-        20
-      ],
-      [
-        3,
-        10
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        1,
-        6
-      ],
-      [
-        3,
-        13
-      ],
-      [
-        12,
-        59
-      ],
-      [
-        -1,
-        75
-      ],
-      [
-        12,
-        92
-      ],
-      [
-        0,
-        30
-      ],
-      [
-        -8,
-        66
-      ],
-      [
-        -8,
-        39
-      ],
-      [
-        -14,
-        28
-      ],
-      [
-        6,
-        40
-      ],
-      [
-        -1,
-        39
-      ],
-      [
-        -3,
-        6
-      ]
-    ],
-    [
-      [
-        3930,
-        6226
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        1,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -75
-      ],
-      [
-        1,
-        -76
-      ],
-      [
-        0,
-        -75
-      ]
-    ],
-    [
-      [
-        3932,
-        5018
-      ],
-      [
-        -43,
-        0
-      ],
-      [
-        -43,
-        0
-      ],
-      [
-        -43,
-        0
-      ],
-      [
-        -42,
-        0
-      ]
-    ],
-    [
-      [
-        3761,
-        5018
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -66,
-        0
-      ]
-    ],
-    [
-      [
-        2713,
-        5018
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ]
-    ],
-    [
-      [
-        2713,
-        6629
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        54,
-        0
-      ],
-      [
-        55,
-        0
-      ]
-    ],
-    [
-      [
-        3584,
-        6629
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        -1
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ]
-    ],
-    [
-      [
-        9165,
-        7036
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        0,
-        -30
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        0,
-        -34
-      ],
-      [
-        0,
-        -32
-      ],
-      [
-        0,
-        -27
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        -1,
-        -25
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -2,
-        -23
-      ]
-    ],
-    [
-      [
-        9158,
-        6763
-      ],
-      [
-        -15,
-        3
-      ],
-      [
-        -25,
-        -6
-      ],
-      [
-        -33,
-        -14
-      ],
-      [
-        -19,
-        8
-      ],
-      [
-        -18,
-        -15
-      ],
-      [
-        -64,
-        -4
-      ],
-      [
-        -14,
-        8
-      ],
-      [
-        -17,
-        -28
-      ],
-      [
-        -27,
-        -16
-      ],
-      [
-        -70,
-        -62
-      ],
-      [
-        -8,
-        -12
-      ]
-    ],
-    [
-      [
-        8848,
-        6625
-      ],
-      [
-        -9,
-        25
-      ],
-      [
-        -7,
-        20
-      ],
-      [
-        14,
-        16
-      ],
-      [
-        11,
-        12
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        7,
-        7
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        1,
-        39
-      ],
-      [
-        2,
-        38
-      ],
-      [
-        1,
-        38
-      ],
-      [
-        2,
-        38
-      ],
-      [
-        1,
-        39
-      ],
-      [
-        1,
-        38
-      ],
-      [
-        2,
-        38
-      ],
-      [
-        1,
-        38
-      ]
-    ],
-    [
-      [
-        8874,
-        7053
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        7,
-        1
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        21,
-        0
-      ],
-      [
-        20,
-        -1
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        21,
-        0
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        20,
-        0
-      ],
-      [
-        21,
-        -1
-      ],
-      [
-        0,
-        -4
-      ]
-    ],
-    [
-      [
-        8259,
-        5778
-      ],
-      [
-        -4,
-        11
-      ],
-      [
-        -8,
-        8
-      ],
-      [
-        -4,
-        3
-      ]
-    ],
-    [
-      [
-        8243,
-        5800
-      ],
-      [
-        14,
-        27
-      ],
-      [
-        9,
-        -23
-      ],
-      [
-        10,
-        -26
-      ],
-      [
-        -15,
-        -33
-      ],
-      [
-        -2,
-        33
-      ]
-    ],
-    [
-      [
-        8538,
-        6151
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -7,
-        -25
-      ],
-      [
-        -15,
-        -31
-      ],
-      [
-        1,
-        -21
-      ],
-      [
-        3,
-        -15
-      ],
-      [
-        -1,
-        -30
-      ],
-      [
-        9,
-        -30
-      ],
-      [
-        18,
-        -49
-      ],
-      [
-        4,
-        -76
-      ],
-      [
-        14,
-        -51
-      ],
-      [
-        22,
-        -59
-      ],
-      [
-        17,
-        -17
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        -7,
-        -36
-      ],
-      [
-        -10,
-        -17
-      ],
-      [
-        13,
-        3
-      ],
-      [
-        6,
-        -8
-      ],
-      [
-        7,
-        -30
-      ],
-      [
-        -1,
-        -20
-      ]
-    ],
-    [
-      [
-        8604,
-        5603
-      ],
-      [
-        -18,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -17,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -1,
-        64
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -1,
-        63
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -2,
-        64
-      ],
-      [
-        -1,
-        64
-      ],
-      [
-        -2,
-        64
-      ]
-    ],
-    [
-      [
-        8475,
-        6114
-      ],
-      [
-        13,
-        32
-      ],
-      [
-        6,
-        10
-      ],
-      [
-        7,
-        5
-      ],
-      [
-        22,
-        1
-      ],
-      [
-        15,
-        -11
-      ]
-    ],
-    [
-      [
-        7436,
-        1
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        8,
-        8
-      ],
-      [
-        5,
-        -1
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -7,
-        -4
-      ]
-    ],
-    [
-      [
-        7473,
-        23
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        9,
-        16
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        6,
-        -19
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -6,
-        -6
-      ]
-    ],
-    [
-      [
-        7514,
-        44
-      ],
-      [
-        -6,
-        -9
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -7,
-        27
-      ],
-      [
-        0,
-        7
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        0,
-        -7
-      ],
-      [
-        -2,
-        -6
-      ]
-    ],
-    [
-      [
-        7564,
-        70
-      ],
-      [
-        -8,
-        -9
-      ],
-      [
-        -8,
-        7
-      ],
-      [
-        9,
-        9
-      ],
-      [
-        27,
-        10
-      ],
-      [
-        -10,
-        -12
-      ],
-      [
-        -10,
-        -5
-      ]
-    ],
-    [
-      [
-        7601,
-        105
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        2,
-        6
-      ],
-      [
-        6,
-        11
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -8,
-        -7
-      ]
-    ],
-    [
-      [
-        7634,
-        145
-      ],
-      [
-        -4,
-        -2
-      ],
-      [
-        6,
-        18
-      ],
-      [
-        2,
-        -2
-      ],
-      [
-        -4,
-        -14
-      ]
-    ],
-    [
-      [
-        7679,
-        242
-      ],
-      [
-        -35,
-        -76
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        14,
-        40
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        8,
-        21
-      ],
-      [
-        1,
-        26
-      ],
-      [
-        12,
-        18
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        -21,
-        -82
-      ]
-    ],
-    [
-      [
-        7392,
-        770
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -13,
-        8
-      ],
-      [
-        -7,
-        14
-      ],
-      [
-        -2,
-        27
-      ],
-      [
-        10,
-        -29
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        14,
-        -3
-      ]
-    ],
-    [
-      [
-        7384,
-        810
-      ],
-      [
-        0,
-        -24
-      ],
-      [
-        -9,
-        39
-      ],
-      [
-        -6,
-        44
-      ],
-      [
-        8,
-        -14
-      ],
-      [
-        7,
-        -45
-      ]
-    ],
-    [
-      [
-        7712,
-        1102
-      ],
-      [
-        3,
-        -30
-      ],
-      [
-        -16,
-        69
-      ],
-      [
-        -19,
-        108
-      ],
-      [
-        -11,
-        83
-      ],
-      [
-        7,
-        -22
-      ],
-      [
-        7,
-        -47
-      ],
-      [
-        29,
-        -161
-      ]
-    ],
-    [
-      [
-        6895,
-        2054
-      ],
-      [
-        -18,
-        -14
-      ],
-      [
-        -18,
-        10
-      ],
-      [
-        11,
-        2
-      ],
-      [
-        9,
-        -4
-      ],
-      [
-        21,
-        21
-      ],
-      [
-        11,
-        15
-      ],
-      [
-        13,
-        6
-      ],
-      [
-        -29,
-        -36
-      ]
-    ],
-    [
-      [
-        7484,
-        2493
-      ],
-      [
-        8,
-        -37
-      ],
-      [
-        13,
-        -149
-      ],
-      [
-        8,
-        -52
-      ],
-      [
-        15,
-        -140
-      ],
-      [
-        26,
-        -136
-      ],
-      [
-        35,
-        -164
-      ],
-      [
-        58,
-        -198
-      ],
-      [
-        7,
-        -29
-      ],
-      [
-        -8,
-        -24
-      ],
-      [
-        -2,
-        -25
-      ],
-      [
-        0,
-        -37
-      ],
-      [
-        2,
-        -37
-      ],
-      [
-        6,
-        -44
-      ],
-      [
-        14,
-        -68
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        -19,
-        98
-      ],
-      [
-        -2,
-        58
-      ],
-      [
-        3,
-        81
-      ],
-      [
-        -5,
-        -2
-      ],
-      [
-        -3,
-        -26
-      ],
-      [
-        -2,
-        -31
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        -7,
-        48
-      ],
-      [
-        1,
-        21
-      ],
-      [
-        7,
-        26
-      ],
-      [
-        -2,
-        9
-      ],
-      [
-        -12,
-        12
-      ],
-      [
-        -2,
-        21
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        -5,
-        0
-      ],
-      [
-        3,
-        -49
-      ],
-      [
-        5,
-        -31
-      ],
-      [
-        7,
-        -72
-      ],
-      [
-        11,
-        -44
-      ],
-      [
-        6,
-        -37
-      ],
-      [
-        74,
-        -392
-      ],
-      [
-        17,
-        -50
-      ],
-      [
-        6,
-        -36
-      ],
-      [
-        7,
-        -75
-      ],
-      [
-        2,
-        -96
-      ],
-      [
-        -12,
-        -176
-      ],
-      [
-        -3,
-        -120
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -10,
-        -55
-      ],
-      [
-        -14,
-        -50
-      ],
-      [
-        -5,
-        -77
-      ],
-      [
-        -7,
-        -38
-      ],
-      [
-        -20,
-        -41
-      ],
-      [
-        -13,
-        1
-      ],
-      [
-        -31,
-        -31
-      ],
-      [
-        -22,
-        8
-      ],
-      [
-        -25,
-        -17
-      ],
-      [
-        -18,
-        2
-      ],
-      [
-        -9,
-        36
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        23,
-        -38
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        -7,
-        19
-      ],
-      [
-        -13,
-        11
-      ],
-      [
-        -10,
-        11
-      ],
-      [
-        -20,
-        87
-      ],
-      [
-        -20,
-        60
-      ],
-      [
-        -4,
-        40
-      ],
-      [
-        -35,
-        24
-      ],
-      [
-        -25,
-        37
-      ],
-      [
-        -17,
-        66
-      ],
-      [
-        -9,
-        116
-      ],
-      [
-        -12,
-        13
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        10,
-        44
-      ],
-      [
-        12,
-        36
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -8,
-        -32
-      ],
-      [
-        -7,
-        -5
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -7,
-        62
-      ],
-      [
-        2,
-        75
-      ],
-      [
-        9,
-        28
-      ],
-      [
-        -14,
-        1
-      ],
-      [
-        -15,
-        -11
-      ],
-      [
-        2,
-        -25
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -11,
-        26
-      ],
-      [
-        -15,
-        50
-      ],
-      [
-        -31,
-        137
-      ],
-      [
-        -6,
-        20
-      ],
-      [
-        -10,
-        20
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        9,
-        4
-      ],
-      [
-        20,
-        62
-      ],
-      [
-        16,
-        37
-      ],
-      [
-        5,
-        26
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -7,
-        16
-      ],
-      [
-        -9,
-        -14
-      ],
-      [
-        -4,
-        4
-      ],
-      [
-        -10,
-        33
-      ],
-      [
-        -10,
-        9
-      ],
-      [
-        -7,
-        -7
-      ],
-      [
-        8,
-        -27
-      ],
-      [
-        6,
-        -10
-      ],
-      [
-        -2,
-        -38
-      ],
-      [
-        -3,
-        -13
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -10,
-        6
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -6,
-        11
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -7,
-        28
-      ],
-      [
-        17,
-        157
-      ],
-      [
-        15,
-        100
-      ],
-      [
-        2,
-        115
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -1,
-        30
-      ],
-      [
-        -21,
-        66
-      ],
-      [
-        -90,
-        161
-      ],
-      [
-        -70,
-        191
-      ],
-      [
-        -61,
-        72
-      ],
-      [
-        -46,
-        -16
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -13,
-        1
-      ],
-      [
-        -16,
-        -5
-      ],
-      [
-        -44,
-        -50
-      ],
-      [
-        -15,
-        1
-      ],
-      [
-        -14,
-        -13
-      ],
-      [
-        -10,
-        -9
-      ],
-      [
-        -28,
-        -6
-      ],
-      [
-        -23,
-        -11
-      ],
-      [
-        -9,
-        6
-      ],
-      [
-        -7,
-        29
-      ],
-      [
-        0,
-        31
-      ],
-      [
-        5,
-        -24
-      ],
-      [
-        8,
-        -18
-      ],
-      [
-        4,
-        8
-      ],
-      [
-        2,
-        16
-      ],
-      [
-        -9,
-        31
-      ],
-      [
-        -26,
-        40
-      ],
-      [
-        -29,
-        59
-      ],
-      [
-        9,
-        -2
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        -9,
-        16
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        6,
-        21
-      ],
-      [
-        -12,
-        -3
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -11,
-        17
-      ],
-      [
-        -56,
-        48
-      ],
-      [
-        -48,
-        27
-      ],
-      [
-        37,
-        12
-      ],
-      [
-        20,
-        -10
-      ],
-      [
-        -2,
-        15
-      ],
-      [
-        -5,
-        9
-      ],
-      [
-        -16,
-        12
-      ],
-      [
-        -20,
-        -5
-      ],
-      [
-        -13,
-        6
-      ],
-      [
-        -13,
-        -12
-      ],
-      [
-        -14,
-        -17
-      ],
-      [
-        -13,
-        -9
-      ],
-      [
-        -50,
-        -12
-      ],
-      [
-        -41,
-        -13
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        7,
-        9
-      ],
-      [
-        24,
-        14
-      ],
-      [
-        3,
-        28
-      ],
-      [
-        -5,
-        28
-      ],
-      [
-        -7,
-        -7
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        -8,
-        15
-      ],
-      [
-        -9,
-        0
-      ],
-      [
-        -3,
-        -34
-      ],
-      [
-        -11,
-        -23
-      ],
-      [
-        -5,
-        -23
-      ],
-      [
-        -34,
-        -18
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        9,
-        22
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -8,
-        -7
-      ]
-    ],
-    [
-      [
-        6877,
-        2601
-      ],
-      [
-        8,
-        -31
-      ],
-      [
-        13,
-        -66
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        16,
-        -2
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -3
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -3
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -4
-      ],
-      [
-        28,
-        -3
-      ],
-      [
-        27,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        27,
-        -3
-      ],
-      [
-        28,
-        -4
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        5,
-        -21
-      ],
-      [
-        1,
-        -24
-      ],
-      [
-        2,
-        -12
-      ],
-      [
-        5,
-        -7
-      ],
-      [
-        9,
-        -1
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        5,
-        29
-      ],
-      [
-        2,
-        34
-      ],
-      [
-        -4,
-        37
-      ],
-      [
-        1,
-        32
-      ],
-      [
-        4,
-        18
-      ],
-      [
-        5,
-        5
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        9,
-        -5
-      ],
-      [
-        36,
-        -27
-      ],
-      [
-        29,
-        -3
-      ]
-    ],
-    [
-      [
-        7499,
-        2589
-      ],
-      [
-        -8,
-        -98
-      ],
-      [
-        -3,
-        35
-      ],
-      [
-        0,
-        34
-      ],
-      [
-        6,
-        20
-      ],
-      [
-        5,
-        9
-      ]
-    ],
-    [
-      [
-        7594,
-        3015
-      ],
-      [
-        -9,
-        -34
-      ],
-      [
-        -21,
-        -21
-      ],
-      [
-        -7,
-        1
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        3,
-        -16
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        0,
-        -10
-      ],
-      [
-        -5,
-        -14
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        2,
-        -15
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        -1,
-        -14
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        6,
-        -4
-      ],
-      [
-        5,
-        4
-      ],
-      [
-        3,
-        -3
-      ],
-      [
-        -7,
-        -24
-      ],
-      [
-        -7,
-        -15
-      ],
-      [
-        -6,
-        -26
-      ],
-      [
-        -15,
-        -7
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        7,
-        -20
-      ],
-      [
-        -14,
-        -37
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -5,
-        8
-      ],
-      [
-        -3,
-        -29
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        -3,
-        -32
-      ],
-      [
-        -5,
-        -38
-      ],
-      [
-        -4,
-        -16
-      ],
-      [
-        1,
-        -29
-      ],
-      [
-        2,
-        -28
-      ]
-    ],
-    [
-      [
-        6771,
-        4212
-      ],
-      [
-        56,
-        -1
-      ],
-      [
-        56,
-        -1
-      ],
-      [
-        56,
-        -2
-      ],
-      [
-        57,
-        -1
-      ]
-    ],
-    [
-      [
-        6996,
-        4207
-      ],
-      [
-        52,
-        1
-      ],
-      [
-        52,
-        2
-      ],
-      [
-        53,
-        1
-      ],
-      [
-        52,
-        1
-      ]
-    ],
-    [
-      [
-        7205,
-        4212
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -8,
-        -27
-      ],
-      [
-        -26,
-        -52
-      ],
-      [
-        -6,
-        -39
-      ],
-      [
-        32,
-        -44
-      ],
-      [
-        20,
-        -35
-      ],
-      [
-        13,
-        -14
-      ],
-      [
-        14,
-        -4
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        5,
-        -29
-      ],
-      [
-        39,
-        -140
-      ],
-      [
-        41,
-        -72
-      ],
-      [
-        17,
-        -36
-      ],
-      [
-        8,
-        -34
-      ],
-      [
-        35,
-        -57
-      ],
-      [
-        12,
-        -31
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        4,
-        -16
-      ],
-      [
-        8,
-        -10
-      ],
-      [
-        7,
-        -20
-      ],
-      [
-        7,
-        -32
-      ],
-      [
-        14,
-        -28
-      ],
-      [
-        21,
-        -23
-      ],
-      [
-        16,
-        -54
-      ],
-      [
-        9,
-        -83
-      ],
-      [
-        10,
-        -49
-      ],
-      [
-        15,
-        -20
-      ],
-      [
-        21,
-        -71
-      ],
-      [
-        7,
-        -43
-      ],
-      [
-        -1,
-        -37
-      ],
-      [
-        11,
-        -29
-      ],
-      [
-        35,
-        -33
-      ]
-    ],
-    [
-      [
-        5900,
-        7238
-      ],
-      [
-        10,
-        -28
-      ],
-      [
-        19,
-        -25
-      ],
-      [
-        10,
-        -23
-      ],
-      [
-        2,
-        -21
-      ],
-      [
-        12,
-        -24
-      ],
-      [
-        19,
-        -24
-      ],
-      [
-        12,
-        -22
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        -1,
-        -30
-      ],
-      [
-        -4,
-        -39
-      ],
-      [
-        -7,
-        -28
-      ],
-      [
-        -10,
-        -18
-      ],
-      [
-        -8,
-        -24
-      ],
-      [
-        -5,
-        -31
-      ],
-      [
-        -15,
-        -29
-      ],
-      [
-        -26,
-        -27
-      ],
-      [
-        -29,
-        -18
-      ],
-      [
-        -32,
-        -9
-      ],
-      [
-        -19,
-        -23
-      ],
-      [
-        -6,
-        -36
-      ],
-      [
-        3,
-        -30
-      ],
-      [
-        11,
-        -24
-      ],
-      [
-        7,
-        -26
-      ],
-      [
-        1,
-        -27
-      ],
-      [
-        -8,
-        -44
-      ],
-      [
-        -17,
-        -63
-      ],
-      [
-        -20,
-        -40
-      ],
-      [
-        -21,
-        -18
-      ],
-      [
-        -10,
-        -27
-      ],
-      [
-        2,
-        -36
-      ],
-      [
-        -1,
-        -21
-      ],
-      [
-        -9,
-        -7
-      ]
-    ],
-    [
-      [
-        5763,
-        6378
-      ],
-      [
-        -15,
-        22
-      ],
-      [
-        -3,
-        14
-      ],
-      [
-        -12,
-        16
-      ],
-      [
-        -2,
-        9
-      ],
-      [
-        -10,
-        9
-      ],
-      [
-        -8,
-        29
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -43,
-        -1
-      ],
-      [
-        -44,
-        0
-      ],
-      [
-        -44,
-        -1
-      ],
-      [
-        -43,
-        0
-      ]
-    ],
-    [
-      [
-        5014,
-        6468
-      ],
-      [
-        -11,
-        30
-      ],
-      [
-        -5,
-        28
-      ],
-      [
-        3,
-        13
-      ],
-      [
-        1,
-        45
-      ],
-      [
-        -2,
-        77
-      ],
-      [
-        -4,
-        43
-      ],
-      [
-        -7,
-        10
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        4,
-        17
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -2,
-        15
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        -2,
-        14
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        -4,
-        7
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -3,
-        26
-      ],
-      [
-        1,
-        50
-      ],
-      [
-        -3,
-        35
-      ],
-      [
-        -7,
-        21
-      ],
-      [
-        -4,
-        19
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        -9,
-        28
-      ],
-      [
-        -16,
-        39
-      ],
-      [
-        -10,
-        52
-      ],
-      [
-        -5,
-        63
-      ],
-      [
-        -12,
-        36
-      ],
-      [
-        -5,
-        2
-      ]
-    ],
-    [
-      [
-        4890,
-        7237
-      ],
-      [
-        -4,
-        33
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -14,
-        29
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        2,
-        14
-      ],
-      [
-        9,
-        27
-      ],
-      [
-        8,
-        44
-      ],
-      [
-        2,
-        30
-      ],
-      [
-        7,
-        23
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -1,
-        16
-      ],
-      [
-        -4,
-        14
-      ],
-      [
-        -11,
-        11
-      ],
-      [
-        -1,
-        4
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        2,
-        12
-      ],
-      [
-        -2,
-        14
-      ],
-      [
-        -6,
-        25
-      ],
-      [
-        -3,
-        25
-      ],
-      [
-        25,
-        2
-      ]
-    ],
-    [
-      [
-        4895,
-        7636
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        57,
-        0
-      ],
-      [
-        57,
-        0
-      ]
-    ],
-    [
-      [
-        5797,
-        7636
-      ],
-      [
-        1,
-        -25
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        11,
-        -11
-      ],
-      [
-        2,
-        -21
-      ],
-      [
-        -7,
-        -32
-      ],
-      [
-        -3,
-        -39
-      ],
-      [
-        3,
-        -47
-      ],
-      [
-        5,
-        -42
-      ],
-      [
-        8,
-        -37
-      ],
-      [
-        19,
-        -28
-      ],
-      [
-        30,
-        -17
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        6,
-        -36
-      ],
-      [
-        1,
-        -3
-      ]
-    ],
-    [
-      [
-        2366,
-        8037
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ]
-    ],
-    [
-      [
-        2366,
-        7031
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ]
-    ],
-    [
-      [
-        1848,
-        7031
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -65,
-        0
-      ],
-      [
-        -64,
-        0
-      ],
-      [
-        -64,
-        0
-      ]
-    ],
-    [
-      [
-        1333,
-        7031
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        -1,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        89
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        99
-      ],
-      [
-        0,
-        2
-      ],
-      [
-        11,
-        61
-      ],
-      [
-        2,
-        30
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        2,
-        16
-      ],
-      [
-        7,
-        16
-      ],
-      [
-        0,
-        17
-      ],
-      [
-        -7,
-        18
-      ],
-      [
-        -13,
-        12
-      ],
-      [
-        -20,
-        6
-      ],
-      [
-        -10,
-        22
-      ],
-      [
-        0,
-        37
-      ],
-      [
-        14,
-        57
-      ],
-      [
-        29,
-        78
-      ],
-      [
-        17,
-        54
-      ],
-      [
-        2,
-        32
-      ],
-      [
-        18,
-        74
-      ],
-      [
-        33,
-        116
-      ],
-      [
-        12,
-        74
-      ],
-      [
-        -7,
-        33
-      ],
-      [
-        -17,
-        31
-      ],
-      [
-        -26,
-        30
-      ],
-      [
-        -18,
-        34
-      ],
-      [
-        -5,
-        18
-      ]
-    ],
-    [
-      [
-        1353,
-        8643
-      ],
-      [
-        -5,
-        21
-      ],
-      [
-        -3,
-        28
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        -4,
-        27
-      ],
-      [
-        -11,
-        40
-      ],
-      [
-        -5,
-        27
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        -1,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        -1,
-        65
-      ],
-      [
-        0,
-        65
-      ],
-      [
-        0,
-        64
-      ],
-      [
-        0,
-        64
-      ]
-    ],
-    [
-      [
-        1329,
-        9847
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        42,
-        0
-      ]
-    ],
-    [
-      [
-        1500,
-        9847
-      ],
-      [
-        0,
-        -99
-      ],
-      [
-        0,
-        -100
-      ],
-      [
-        0,
-        -99
-      ],
-      [
-        0,
-        -100
-      ],
-      [
-        19,
-        -40
-      ],
-      [
-        14,
-        -25
-      ],
-      [
-        8,
-        -27
-      ],
-      [
-        14,
-        -28
-      ],
-      [
-        3,
-        -10
-      ],
-      [
-        4,
-        -30
-      ],
-      [
-        -3,
-        -22
-      ],
-      [
-        7,
-        -22
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -6,
-        -5
-      ],
-      [
-        -1,
-        -2
-      ],
-      [
-        0,
-        -2
-      ],
-      [
-        2,
-        -4
-      ],
-      [
-        19,
-        -21
-      ],
-      [
-        19,
-        -30
-      ],
-      [
-        23,
-        -20
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        31,
-        -59
-      ],
-      [
-        16,
-        -38
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        9,
-        -32
-      ],
-      [
-        17,
-        -27
-      ],
-      [
-        4,
-        -14
-      ],
-      [
-        2,
-        -3
-      ],
-      [
-        2,
-        -1
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        4,
-        -7
-      ],
-      [
-        7,
-        -4
-      ],
-      [
-        7,
-        -1
-      ],
-      [
-        24,
-        8
-      ],
-      [
-        5,
-        0
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        0,
-        -15
-      ],
-      [
-        -3,
-        -20
-      ],
-      [
-        -7,
-        -21
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        -5,
-        -44
-      ],
-      [
-        -6,
-        -29
-      ],
-      [
-        0,
-        -29
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        4,
-        -20
-      ],
-      [
-        -3,
-        -30
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        8,
-        -14
-      ],
-      [
-        3,
-        -37
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -15,
-        -14
-      ],
-      [
-        -5,
-        -10
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        6,
-        -39
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        -1,
-        -18
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        14,
-        -10
-      ],
-      [
-        17,
-        -22
-      ],
-      [
-        5,
-        -4
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        7,
-        7
-      ],
-      [
-        8,
-        15
-      ],
-      [
-        16,
-        14
-      ],
-      [
-        19,
-        32
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        2,
-        5
-      ],
-      [
-        2,
-        0
-      ],
-      [
-        6,
-        -4
-      ],
-      [
-        12,
-        -20
-      ],
-      [
-        11,
-        -10
-      ],
-      [
-        1,
-        -3
-      ],
-      [
-        1,
-        -5
-      ],
-      [
-        0,
-        -19
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        1,
-        -25
-      ],
-      [
-        6,
-        -25
-      ],
-      [
-        5,
-        -30
-      ],
-      [
-        15,
-        -39
-      ],
-      [
-        9,
-        -27
-      ],
-      [
-        9,
-        -13
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        -6,
-        -26
-      ],
-      [
-        2,
-        -11
-      ],
-      [
-        5,
-        -12
-      ],
-      [
-        16,
-        -26
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        15,
-        3
-      ],
-      [
-        8,
-        -5
-      ],
-      [
-        8,
-        -13
-      ],
-      [
-        8,
-        -20
-      ],
-      [
-        6,
-        -21
-      ],
-      [
-        1,
-        -24
-      ],
-      [
-        8,
-        -26
-      ],
-      [
-        2,
-        -24
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        10,
-        -14
-      ],
-      [
-        10,
-        -8
-      ],
-      [
-        4,
-        -1
-      ],
-      [
-        2,
-        4
-      ],
-      [
-        1,
-        13
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        11,
-        0
-      ],
-      [
-        45,
-        -12
-      ],
-      [
-        3,
-        1
-      ],
-      [
-        2,
-        4
-      ],
-      [
-        7,
-        21
-      ],
-      [
-        6,
-        9
-      ],
-      [
-        10,
-        2
-      ],
-      [
-        27,
-        -5
-      ],
-      [
-        31,
-        3
-      ],
-      [
-        17,
-        -6
-      ],
-      [
-        24,
-        8
-      ],
-      [
-        27,
-        -6
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        0,
-        16
-      ],
-      [
-        5,
-        19
-      ],
-      [
-        2,
-        16
-      ],
-      [
-        6,
-        9
-      ],
-      [
-        7,
-        5
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        6,
-        -8
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        12,
-        -39
-      ],
-      [
-        6,
-        -14
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        11,
-        -11
-      ]
-    ],
-    [
-      [
-        6392,
-        7231
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        2,
-        -52
-      ],
-      [
-        5,
-        -23
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        7,
-        -11
-      ],
-      [
-        7,
-        -34
-      ],
-      [
-        9,
-        -57
-      ],
-      [
-        8,
-        -37
-      ],
-      [
-        6,
-        -16
-      ]
-    ],
-    [
-      [
-        6442,
-        6921
-      ],
-      [
-        0,
-        -107
-      ],
-      [
-        0,
-        -121
-      ],
-      [
-        -1,
-        -121
-      ],
-      [
-        0,
-        -120
-      ],
-      [
-        0,
-        -121
-      ],
-      [
-        -1,
-        -121
-      ],
-      [
-        0,
-        -121
-      ],
-      [
-        0,
-        -114
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        -8,
-        -13
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        2,
-        -23
-      ],
-      [
-        -2,
-        -16
-      ],
-      [
-        -6,
-        -10
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        11,
-        -40
-      ],
-      [
-        6,
-        -40
-      ],
-      [
-        3,
-        -39
-      ],
-      [
-        -2,
-        -28
-      ],
-      [
-        -10,
-        -25
-      ],
-      [
-        -9,
-        -56
-      ],
-      [
-        -8,
-        -22
-      ],
-      [
-        -9,
-        -7
-      ],
-      [
-        -9,
-        -20
-      ],
-      [
-        -7,
-        -34
-      ],
-      [
-        -8,
-        -16
-      ],
-      [
-        -8,
-        1
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -4,
-        -14
-      ],
-      [
-        1,
-        -14
-      ],
-      [
-        5,
-        -14
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -8,
-        -12
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -4,
-        -19
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        -3,
-        -15
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        9,
-        -35
-      ]
-    ],
-    [
-      [
-        6352,
-        5335
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -9,
-        -29
-      ],
-      [
-        -2,
-        -32
-      ],
-      [
-        5,
-        -35
-      ],
-      [
-        -14,
-        -28
-      ],
-      [
-        -34,
-        -21
-      ],
-      [
-        -19,
-        -19
-      ],
-      [
-        -2,
-        -16
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        7,
-        -34
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        -24,
-        9
-      ],
-      [
-        -45,
-        30
-      ],
-      [
-        -30,
-        -1
-      ],
-      [
-        -15,
-        -33
-      ],
-      [
-        -6,
-        -24
-      ],
-      [
-        2,
-        -20
-      ]
-    ],
-    [
-      [
-        6159,
-        5014
-      ],
-      [
-        -12,
-        24
-      ],
-      [
-        -8,
-        11
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -2,
-        -3
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        0,
-        -5
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -9,
-        10
-      ],
-      [
-        -11,
-        26
-      ],
-      [
-        -13,
-        45
-      ],
-      [
-        -2,
-        35
-      ],
-      [
-        7,
-        26
-      ],
-      [
-        0,
-        28
-      ],
-      [
-        -7,
-        29
-      ],
-      [
-        -4,
-        28
-      ],
-      [
-        0,
-        28
-      ],
-      [
-        -17,
-        41
-      ],
-      [
-        -35,
-        55
-      ],
-      [
-        -25,
-        34
-      ],
-      [
-        -16,
-        13
-      ],
-      [
-        -19,
-        28
-      ],
-      [
-        -22,
-        42
-      ],
-      [
-        -12,
-        32
-      ],
-      [
-        -1,
-        23
-      ],
-      [
-        10,
-        59
-      ],
-      [
-        28,
-        130
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        -2,
-        6
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -13,
-        15
-      ],
-      [
-        -23,
-        14
-      ],
-      [
-        -21,
-        7
-      ],
-      [
-        -17,
-        -16
-      ],
-      [
-        -15,
-        32
-      ],
-      [
-        -13,
-        78
-      ],
-      [
-        -32,
-        83
-      ],
-      [
-        -50,
-        86
-      ],
-      [
-        -29,
-        60
-      ],
-      [
-        -8,
-        31
-      ],
-      [
-        -7,
-        46
-      ],
-      [
-        -7,
-        63
-      ],
-      [
-        1,
-        51
-      ],
-      [
-        10,
-        62
-      ]
-    ],
-    [
-      [
-        5900,
-        7238
-      ],
-      [
-        80,
-        -2
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        78,
-        -1
-      ],
-      [
-        22,
-        0
-      ]
-    ],
-    [
-      [
-        6914,
-        6911
-      ],
-      [
-        -1,
-        -131
-      ],
-      [
-        0,
-        -131
-      ],
-      [
-        -1,
-        -131
-      ],
-      [
-        0,
-        -131
-      ],
-      [
-        -1,
-        -132
-      ],
-      [
-        -1,
-        -131
-      ],
-      [
-        0,
-        -131
-      ],
-      [
-        0,
-        -133
-      ]
-    ],
-    [
-      [
-        6910,
-        5860
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -4,
-        -17
-      ],
-      [
-        4,
-        -18
-      ],
-      [
-        0,
-        -14
-      ],
-      [
-        -5,
-        -11
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        8,
-        -6
-      ],
-      [
-        3,
-        -12
-      ],
-      [
-        -2,
-        -20
-      ],
-      [
-        -17,
-        -20
-      ],
-      [
-        -34,
-        -23
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -10,
-        4
-      ],
-      [
-        -18,
-        -3
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        -6,
-        -26
-      ],
-      [
-        -15,
-        -19
-      ],
-      [
-        -11,
-        -25
-      ],
-      [
-        -6,
-        -30
-      ],
-      [
-        -11,
-        -19
-      ],
-      [
-        -14,
-        -6
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -9,
-        -50
-      ],
-      [
-        -10,
-        -31
-      ],
-      [
-        -10,
-        -12
-      ],
-      [
-        -14,
-        3
-      ],
-      [
-        -18,
-        18
-      ],
-      [
-        -11,
-        18
-      ],
-      [
-        -3,
-        19
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        -5,
-        6
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        0,
-        -3
-      ],
-      [
-        1,
-        -5
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        -11,
-        -2
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -3,
-        -10
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -5,
-        -18
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -13,
-        5
-      ],
-      [
-        -17,
-        29
-      ],
-      [
-        -17,
-        6
-      ],
-      [
-        -17,
-        -15
-      ],
-      [
-        -13,
-        -21
-      ],
-      [
-        -9,
-        -26
-      ],
-      [
-        -8,
-        -6
-      ],
-      [
-        -12,
-        20
-      ],
-      [
-        -28,
-        27
-      ],
-      [
-        -15,
-        6
-      ],
-      [
-        -11,
-        -7
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        -1,
-        3
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        0,
-        -24
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        -6,
-        6
-      ],
-      [
-        -10,
-        -6
-      ],
-      [
-        -10,
-        2
-      ],
-      [
-        -8,
-        10
-      ],
-      [
-        -3,
-        -1
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        1,
-        -18
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -3,
-        -5
-      ]
-    ],
-    [
-      [
-        6442,
-        6921
-      ],
-      [
-        1,
-        -3
-      ],
-      [
-        7,
-        -10
-      ],
-      [
-        5,
-        -6
-      ],
-      [
-        4,
-        -1
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        10,
-        -6
-      ],
-      [
-        17,
-        -2
-      ],
-      [
-        17,
-        4
-      ],
-      [
-        15,
-        9
-      ],
-      [
-        36,
-        37
-      ]
-    ],
-    [
-      [
-        6556,
-        6935
-      ],
-      [
-        43,
-        -1
-      ],
-      [
-        52,
-        0
-      ],
-      [
-        53,
-        0
-      ],
-      [
-        52,
-        0
-      ],
-      [
-        53,
-        0
-      ],
-      [
-        52,
-        0
-      ],
-      [
-        53,
-        0
-      ],
-      [
-        0,
-        -23
-      ]
-    ],
-    [
-      [
-        5213,
-        5018
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ]
-    ],
-    [
-      [
-        3930,
-        6226
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        37,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        36,
-        0
-      ],
-      [
-        31,
-        0
-      ]
-    ],
-    [
-      [
-        5086,
-        6226
-      ],
-      [
-        40,
-        -52
-      ],
-      [
-        11,
-        -1
-      ],
-      [
-        12,
-        9
-      ],
-      [
-        10,
-        -12
-      ],
-      [
-        6,
-        -32
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        -10,
-        -20
-      ],
-      [
-        -13,
-        -38
-      ],
-      [
-        3,
-        -35
-      ],
-      [
-        19,
-        -34
-      ],
-      [
-        12,
-        -33
-      ],
-      [
-        6,
-        -34
-      ],
-      [
-        12,
-        -26
-      ],
-      [
-        27,
-        -28
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        1,
-        -52
-      ],
-      [
-        0,
-        -53
-      ],
-      [
-        0,
-        -52
-      ]
-    ],
-    [
-      [
-        6101,
-        4817
-      ],
-      [
-        -12,
-        -1
-      ]
-    ],
-    [
-      [
-        6089,
-        4816
-      ],
-      [
-        0,
-        5
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        2,
-        1
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        4,
-        -11
-      ],
-      [
-        1,
-        -10
-      ]
-    ],
-    [
-      [
-        7292,
-        5600
-      ],
-      [
-        4,
-        -11
-      ],
-      [
-        2,
-        -59
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        -6,
-        -25
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        5,
-        -20
-      ],
-      [
-        19,
-        -47
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        7,
-        -18
-      ],
-      [
-        6,
-        -26
-      ],
-      [
-        20,
-        -57
-      ],
-      [
-        30,
-        -47
-      ],
-      [
-        24,
-        -12
-      ]
-    ],
-    [
-      [
-        7404,
-        5235
-      ],
-      [
-        -65,
-        -98
-      ],
-      [
-        -30,
-        -36
-      ],
-      [
-        -29,
-        -28
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -6,
-        -31
-      ],
-      [
-        -18,
-        -28
-      ],
-      [
-        -11,
-        -29
-      ],
-      [
-        -25,
-        -25
-      ],
-      [
-        -19,
-        -33
-      ],
-      [
-        -46,
-        -33
-      ],
-      [
-        -26,
-        -12
-      ],
-      [
-        -17,
-        -19
-      ]
-    ],
-    [
-      [
-        7110,
-        4858
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -1,
-        -1
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -61,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        3
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -60,
-        4
-      ],
-      [
-        -58,
-        -2
-      ],
-      [
-        -58,
-        -2
-      ],
-      [
-        -57,
-        -2
-      ],
-      [
-        -58,
-        -2
-      ],
-      [
-        -5,
-        12
-      ],
-      [
-        -15,
-        3
-      ],
-      [
-        -24,
-        4
-      ],
-      [
-        -1,
-        1
-      ],
-      [
-        7,
-        -42
-      ],
-      [
-        0,
-        -36
-      ],
-      [
-        -27,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -30,
-        0
-      ],
-      [
-        -34,
-        0
-      ]
-    ],
-    [
-      [
-        6108,
-        4816
-      ],
-      [
-        9,
-        35
-      ],
-      [
-        8,
-        10
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        4,
-        -2
-      ],
-      [
-        10,
-        12
-      ],
-      [
-        8,
-        37
-      ],
-      [
-        4,
-        38
-      ],
-      [
-        2,
-        41
-      ],
-      [
-        -6,
-        32
-      ]
-    ],
-    [
-      [
-        6910,
-        5860
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        10,
-        2
-      ],
-      [
-        9,
-        -14
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        15,
-        7
-      ],
-      [
-        13,
-        -5
-      ],
-      [
-        13,
-        -16
-      ],
-      [
-        12,
-        -30
-      ],
-      [
-        11,
-        -45
-      ],
-      [
-        19,
-        -26
-      ],
-      [
-        29,
-        -10
-      ],
-      [
-        21,
-        -18
-      ],
-      [
-        13,
-        -24
-      ],
-      [
-        11,
-        -8
-      ],
-      [
-        12,
-        13
-      ],
-      [
-        14,
-        7
-      ],
-      [
-        13,
-        -8
-      ],
-      [
-        18,
-        -21
-      ],
-      [
-        27,
-        4
-      ],
-      [
-        35,
-        31
-      ],
-      [
-        21,
-        -2
-      ],
-      [
-        6,
-        -33
-      ],
-      [
-        15,
-        -35
-      ],
-      [
-        24,
-        -37
-      ],
-      [
-        1,
-        -1
-      ]
-    ],
-    [
-      [
-        5702,
-        1997
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -28,
-        35
-      ],
-      [
-        -2,
-        15
-      ],
-      [
-        14,
-        14
-      ],
-      [
-        9,
-        -2
-      ],
-      [
-        13,
-        -17
-      ],
-      [
-        5,
-        -5
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        -2,
-        -12
-      ],
-      [
-        -5,
-        -15
-      ]
-    ],
-    [
-      [
-        6205,
-        2082
-      ],
-      [
-        -9,
-        -21
-      ],
-      [
-        0,
-        8
-      ],
-      [
-        7,
-        21
-      ],
-      [
-        5,
-        9
-      ],
-      [
-        -3,
-        -17
-      ]
-    ],
-    [
-      [
-        6216,
-        2121
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        5,
-        61
-      ],
-      [
-        -7,
-        52
-      ],
-      [
-        7,
-        -23
-      ],
-      [
-        2,
-        -27
-      ],
-      [
-        -2,
-        -50
-      ]
-    ],
-    [
-      [
-        6147,
-        2232
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -12,
-        1
-      ],
-      [
-        5,
-        7
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        2,
-        7
-      ],
-      [
-        16,
-        23
-      ],
-      [
-        -5,
-        -17
-      ],
-      [
-        -2,
-        -17
-      ]
-    ],
-    [
-      [
-        6096,
-        2276
-      ],
-      [
-        -12,
-        -11
-      ],
-      [
-        -63,
-        41
-      ],
-      [
-        -16,
-        34
-      ],
-      [
-        -14,
-        7
-      ],
-      [
-        -17,
-        4
-      ],
-      [
-        -19,
-        -41
-      ],
-      [
-        -14,
-        -55
-      ],
-      [
-        22,
-        -31
-      ],
-      [
-        19,
-        -14
-      ],
-      [
-        32,
-        12
-      ],
-      [
-        17,
-        27
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        7,
-        5
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        12,
-        -11
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        -9,
-        -15
-      ],
-      [
-        -11,
-        -14
-      ],
-      [
-        -6,
-        -15
-      ],
-      [
-        12,
-        -31
-      ],
-      [
-        19,
-        -11
-      ],
-      [
-        8,
-        5
-      ],
-      [
-        4,
-        35
-      ],
-      [
-        12,
-        22
-      ],
-      [
-        16,
-        -4
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        8,
-        -23
-      ],
-      [
-        -1,
-        -32
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        -17,
-        -15
-      ],
-      [
-        -13,
-        -5
-      ],
-      [
-        -11,
-        -19
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        -11,
-        -9
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -2,
-        -12
-      ],
-      [
-        -5,
-        -10
-      ],
-      [
-        8,
-        -33
-      ],
-      [
-        16,
-        -21
-      ],
-      [
-        12,
-        -27
-      ],
-      [
-        46,
-        -35
-      ],
-      [
-        12,
-        1
-      ],
-      [
-        11,
-        -35
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        8,
-        -6
-      ],
-      [
-        -1,
-        -24
-      ],
-      [
-        -15,
-        -18
-      ],
-      [
-        -4,
-        -21
-      ],
-      [
-        -4,
-        -12
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -7,
-        11
-      ],
-      [
-        -16,
-        -33
-      ],
-      [
-        -8,
-        -7
-      ],
-      [
-        4,
-        36
-      ],
-      [
-        -7,
-        14
-      ],
-      [
-        -9,
-        35
-      ],
-      [
-        -14,
-        23
-      ],
-      [
-        -9,
-        7
-      ],
-      [
-        -8,
-        14
-      ],
-      [
-        -9,
-        6
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -13,
-        8
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        -4,
-        14
-      ],
-      [
-        -10,
-        17
-      ],
-      [
-        -49,
-        32
-      ],
-      [
-        0,
-        -14
-      ],
-      [
-        3,
-        -9
-      ],
-      [
-        7,
-        -7
-      ],
-      [
-        9,
-        -13
-      ],
-      [
-        -1,
-        -38
-      ],
-      [
-        -3,
-        -16
-      ],
-      [
-        -2,
-        -23
-      ],
-      [
-        -3,
-        -23
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        -13,
-        -12
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        -10,
-        50
-      ],
-      [
-        -13,
-        16
-      ],
-      [
-        -21,
-        2
-      ],
-      [
-        -15,
-        -11
-      ],
-      [
-        -16,
-        -49
-      ],
-      [
-        -12,
-        -8
-      ],
-      [
-        -44,
-        25
-      ],
-      [
-        -50,
-        39
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        8,
-        5
-      ],
-      [
-        15,
-        -6
-      ],
-      [
-        -1,
-        14
-      ],
-      [
-        -15,
-        42
-      ],
-      [
-        -3,
-        20
-      ],
-      [
-        2,
-        24
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -9,
-        -20
-      ],
-      [
-        -32,
-        17
-      ],
-      [
-        -8,
-        20
-      ],
-      [
-        -19,
-        57
-      ],
-      [
-        -26,
-        2
-      ],
-      [
-        -12,
-        34
-      ],
-      [
-        -22,
-        -14
-      ],
-      [
-        -11,
-        -16
-      ],
-      [
-        -9,
-        -25
-      ],
-      [
-        3,
-        -13
-      ],
-      [
-        10,
-        -20
-      ],
-      [
-        -4,
-        -10
-      ],
-      [
-        -31,
-        -14
-      ],
-      [
-        -71,
-        16
-      ],
-      [
-        -21,
-        15
-      ],
-      [
-        -28,
-        32
-      ],
-      [
-        -39,
-        26
-      ],
-      [
-        -18,
-        4
-      ],
-      [
-        -18,
-        -5
-      ],
-      [
-        -53,
-        -3
-      ],
-      [
-        -13,
-        -7
-      ],
-      [
-        -10,
-        -11
-      ],
-      [
-        -7,
-        13
-      ],
-      [
-        -3,
-        22
-      ],
-      [
-        6,
-        3
-      ],
-      [
-        7,
-        13
-      ],
-      [
-        6,
-        25
-      ],
-      [
-        1,
-        16
-      ],
-      [
-        -5,
-        10
-      ]
-    ],
-    [
-      [
-        5355,
-        2189
-      ],
-      [
-        12,
-        40
-      ],
-      [
-        3,
-        14
-      ],
-      [
-        -2,
-        69
-      ],
-      [
-        -5,
-        25
-      ],
-      [
-        1,
-        14
-      ],
-      [
-        5,
-        38
-      ],
-      [
-        -1,
-        34
-      ],
-      [
-        10,
-        41
-      ],
-      [
-        7,
-        22
-      ],
-      [
-        8,
-        44
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        4,
-        22
-      ],
-      [
-        -3,
-        23
-      ],
-      [
-        6,
-        16
-      ],
-      [
-        -4,
-        24
-      ],
-      [
-        -1,
-        30
-      ],
-      [
-        -6,
-        12
-      ],
-      [
-        -12,
-        46
-      ],
-      [
-        0,
-        20
-      ],
-      [
-        -13,
-        42
-      ],
-      [
-        0,
-        15
-      ],
-      [
-        -12,
-        22
-      ],
-      [
-        -2,
-        14
-      ],
-      [
-        -1,
-        59
-      ],
-      [
-        -4,
-        17
-      ],
-      [
-        -10,
-        34
-      ],
-      [
-        -24,
-        49
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        1,
-        51
-      ],
-      [
-        0,
-        51
-      ]
-    ],
-    [
-      [
-        5813,
-        3413
-      ],
-      [
-        1,
-        -20
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -7,
-        -31
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        7,
-        -12
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        -8,
-        -13
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        -1,
-        -21
-      ],
-      [
-        8,
-        -27
-      ],
-      [
-        12,
-        -17
-      ],
-      [
-        8,
-        -20
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -9,
-        -22
-      ],
-      [
-        -8,
-        -16
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -2,
-        -11
-      ],
-      [
-        -1,
-        -23
-      ],
-      [
-        -11,
-        -30
-      ],
-      [
-        -22,
-        -35
-      ],
-      [
-        -15,
-        -45
-      ],
-      [
-        -7,
-        -53
-      ],
-      [
-        -8,
-        -35
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        -4,
-        -28
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        -5,
-        -23
-      ],
-      [
-        -11,
-        -5
-      ],
-      [
-        -2,
-        -24
-      ],
-      [
-        6,
-        -43
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        -5,
-        -46
-      ],
-      [
-        -12,
-        -63
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        3,
-        -20
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        10,
-        -17
-      ],
-      [
-        9,
-        -26
-      ],
-      [
-        8,
-        -45
-      ],
-      [
-        2,
-        -22
-      ],
-      [
-        6,
-        -29
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        4,
-        -3
-      ],
-      [
-        5,
-        -3
-      ]
-    ],
-    [
-      [
-        9481,
-        6735
-      ],
-      [
-        -13,
-        -6
-      ],
-      [
-        -31,
-        15
-      ],
-      [
-        25,
-        12
-      ],
-      [
-        4,
-        4
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        0,
-        9
-      ],
-      [
-        10,
-        -40
-      ],
-      [
-        1,
-        -13
-      ]
-    ],
-    [
-      [
-        9389,
-        6780
-      ],
-      [
-        -48,
-        -20
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        12,
-        6
-      ],
-      [
-        15,
-        30
-      ],
-      [
-        10,
-        3
-      ],
-      [
-        16,
-        -17
-      ],
-      [
-        3,
-        -15
-      ]
-    ],
-    [
-      [
-        9263,
-        6913
-      ],
-      [
-        -6,
-        18
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -6,
-        10
-      ],
-      [
-        0,
-        15
-      ],
-      [
-        0,
-        22
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -1,
-        28
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -11,
-        0
-      ],
-      [
-        -17,
-        0
-      ],
-      [
-        -18,
-        -1
-      ],
-      [
-        -13,
-        0
-      ]
-    ],
-    [
-      [
-        8874,
-        7053
-      ],
-      [
-        -4,
-        10
-      ],
-      [
-        5,
-        34
-      ],
-      [
-        6,
-        34
-      ],
-      [
-        5,
-        34
-      ],
-      [
-        6,
-        34
-      ],
-      [
-        5,
-        33
-      ],
-      [
-        6,
-        34
-      ],
-      [
-        5,
-        34
-      ],
-      [
-        6,
-        34
-      ]
-    ],
-    [
-      [
-        8914,
-        7334
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -2
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ],
-      [
-        17,
-        -1
-      ]
-    ],
-    [
-      [
-        9050,
-        7325
-      ],
-      [
-        24,
-        -1
-      ],
-      [
-        25,
-        -2
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        24,
-        -2
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        24,
-        -2
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        15,
-        11
-      ],
-      [
-        18,
-        31
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        17,
-        19
-      ],
-      [
-        9,
-        4
-      ],
-      [
-        20,
-        -2
-      ]
-    ],
-    [
-      [
-        9337,
-        7384
-      ],
-      [
-        -4,
-        -21
-      ],
-      [
-        5,
-        -20
-      ],
-      [
-        4,
-        -22
-      ],
-      [
-        8,
-        -21
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        8,
-        3
-      ],
-      [
-        5,
-        -1
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -8,
-        -3
-      ],
-      [
-        -16,
-        -18
-      ],
-      [
-        -14,
-        -8
-      ],
-      [
-        -7,
-        -22
-      ],
-      [
-        -10,
-        -26
-      ],
-      [
-        -20,
-        -41
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        31,
-        -14
-      ],
-      [
-        14,
-        -15
-      ],
-      [
-        21,
-        -76
-      ],
-      [
-        -5,
-        -7
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        19,
-        -20
-      ],
-      [
-        6,
-        -54
-      ],
-      [
-        15,
-        -19
-      ],
-      [
-        23,
-        -11
-      ],
-      [
-        28,
-        16
-      ],
-      [
-        23,
-        23
-      ],
-      [
-        -1,
-        19
-      ],
-      [
-        -15,
-        43
-      ],
-      [
-        -3,
-        20
-      ],
-      [
-        -11,
-        13
-      ],
-      [
-        -4,
-        -11
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        7,
-        -2
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        23,
-        -47
-      ],
-      [
-        6,
-        -61
-      ],
-      [
-        2,
-        -40
-      ],
-      [
-        -3,
-        -13
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -12,
-        -3
-      ],
-      [
-        -60,
-        -20
-      ],
-      [
-        -13,
-        -18
-      ],
-      [
-        -31,
-        -20
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        3,
-        20
-      ],
-      [
-        -2,
-        41
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -48,
-        -67
-      ],
-      [
-        -18,
-        -4
-      ],
-      [
-        -15,
-        -20
-      ],
-      [
-        -4,
-        11
-      ],
-      [
-        -3,
-        50
-      ],
-      [
-        10,
-        43
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -10,
-        -15
-      ]
-    ],
-    [
-      [
-        8572,
-        5436
-      ],
-      [
-        -5,
-        -1
-      ]
-    ],
-    [
-      [
-        8567,
-        5435
-      ],
-      [
-        5,
-        14
-      ],
-      [
-        15,
-        68
-      ],
-      [
-        7,
-        23
-      ],
-      [
-        -7,
-        -47
-      ],
-      [
-        -11,
-        -44
-      ],
-      [
-        -4,
-        -13
-      ]
-    ],
-    [
-      [
-        8604,
-        5603
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -4,
-        -7
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        -3,
-        6
-      ],
-      [
-        -4,
-        -7
-      ],
-      [
-        -3,
-        -9
-      ],
-      [
-        -2,
-        -35
-      ],
-      [
-        -3,
-        -17
-      ],
-      [
-        -11,
-        -5
-      ],
-      [
-        -12,
-        -46
-      ],
-      [
-        -10,
-        -26
-      ],
-      [
-        -4,
-        -16
-      ]
-    ],
-    [
-      [
-        8546,
-        5430
-      ],
-      [
-        -16,
-        -4
-      ],
-      [
-        -26,
-        -6
-      ],
-      [
-        -7,
-        -19
-      ]
-    ],
-    [
-      [
-        8497,
-        5401
-      ],
-      [
-        -13,
-        8
-      ],
-      [
-        -20,
-        0
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        6,
-        22
-      ],
-      [
-        -10,
-        21
-      ],
-      [
-        -6,
-        3
-      ],
-      [
-        -7,
-        9
-      ],
-      [
-        8,
-        18
-      ],
-      [
-        3,
-        19
-      ],
-      [
-        -2,
-        23
-      ],
-      [
-        3,
-        18
-      ],
-      [
-        -5,
-        -3
-      ],
-      [
-        -8,
-        -18
-      ],
-      [
-        -6,
-        -8
-      ],
-      [
-        -3,
-        17
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -11,
-        15
-      ],
-      [
-        -17,
-        17
-      ],
-      [
-        -9,
-        31
-      ],
-      [
-        -5,
-        23
-      ],
-      [
-        5,
-        43
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        15,
-        -7
-      ],
-      [
-        20,
-        0
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -21,
-        35
-      ],
-      [
-        -6,
-        20
-      ],
-      [
-        -11,
-        6
-      ],
-      [
-        -6,
-        -20
-      ],
-      [
-        -5,
-        -5
-      ],
-      [
-        7,
-        43
-      ],
-      [
-        9,
-        2
-      ],
-      [
-        14,
-        12
-      ],
-      [
-        -4,
-        26
-      ],
-      [
-        -9,
-        11
-      ],
-      [
-        -16,
-        -14
-      ],
-      [
-        1,
-        18
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        11,
-        0
-      ],
-      [
-        11,
-        -7
-      ],
-      [
-        8,
-        37
-      ],
-      [
-        1,
-        16
-      ],
-      [
-        -15,
-        -24
-      ],
-      [
-        -3,
-        52
-      ],
-      [
-        14,
-        50
-      ],
-      [
-        14,
-        21
-      ],
-      [
-        17,
-        0
-      ],
-      [
-        17,
-        3
-      ],
-      [
-        -11,
-        9
-      ],
-      [
-        -11,
-        5
-      ],
-      [
-        9,
-        20
-      ],
-      [
-        7,
-        3
-      ],
-      [
-        7,
-        17
-      ],
-      [
-        -17,
-        -2
-      ],
-      [
-        2,
-        32
-      ],
-      [
-        -8,
-        -6
-      ],
-      [
-        -10,
-        -3
-      ],
-      [
-        -4,
-        -14
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -3,
-        -15
-      ],
-      [
-        -8,
-        -12
-      ],
-      [
-        -13,
-        -9
-      ],
-      [
-        -1,
-        16
-      ],
-      [
-        -4,
-        7
-      ],
-      [
-        -2,
-        -34
-      ],
-      [
-        -3,
-        -12
-      ],
-      [
-        -10,
-        32
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -2,
-        -17
-      ],
-      [
-        -9,
-        -8
-      ],
-      [
-        1,
-        -20
-      ],
-      [
-        -3,
-        -12
-      ],
-      [
-        -26,
-        18
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        15,
-        -38
-      ],
-      [
-        11,
-        -14
-      ],
-      [
-        1,
-        -21
-      ],
-      [
-        -9,
-        -17
-      ],
-      [
-        -13,
-        15
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        7,
-        -26
-      ],
-      [
-        4,
-        -22
-      ],
-      [
-        -4,
-        -19
-      ],
-      [
-        0,
-        -23
-      ],
-      [
-        -1,
-        -22
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        6,
-        -85
-      ],
-      [
-        7,
-        -23
-      ],
-      [
-        8,
-        -22
-      ],
-      [
-        3,
-        -20
-      ],
-      [
-        -7,
-        -3
-      ],
-      [
-        -13,
-        17
-      ],
-      [
-        -10,
-        12
-      ],
-      [
-        -13,
-        42
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        -4,
-        13
-      ],
-      [
-        2,
-        -30
-      ],
-      [
-        5,
-        -33
-      ],
-      [
-        40,
-        -75
-      ],
-      [
-        7,
-        -29
-      ],
-      [
-        6,
-        -22
-      ],
-      [
-        -1,
-        -22
-      ],
-      [
-        -11,
-        15
-      ],
-      [
-        -9,
-        20
-      ],
-      [
-        -24,
-        22
-      ],
-      [
-        -30,
-        14
-      ],
-      [
-        -18,
-        51
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -3,
-        -18
-      ],
-      [
-        -11,
-        22
-      ],
-      [
-        -6,
-        19
-      ],
-      [
-        -3,
-        20
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -13,
-        -18
-      ],
-      [
-        -14,
-        4
-      ],
-      [
-        -1,
-        35
-      ],
-      [
-        3,
-        19
-      ],
-      [
-        15,
-        44
-      ],
-      [
-        14,
-        22
-      ],
-      [
-        6,
-        29
-      ],
-      [
-        -2,
-        45
-      ]
-    ],
-    [
-      [
-        8243,
-        5800
-      ],
-      [
-        -11,
-        10
-      ],
-      [
-        -20,
-        34
-      ],
-      [
-        -31,
-        24
-      ],
-      [
-        -4,
-        12
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        5,
-        19
-      ],
-      [
-        -10,
-        18
-      ],
-      [
-        -23,
-        17
-      ],
-      [
-        -10,
-        15
-      ]
-    ],
-    [
-      [
-        8139,
-        5962
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -1,
-        19
-      ],
-      [
-        -3,
-        12
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        3,
-        10
-      ],
-      [
-        -3,
-        12
-      ],
-      [
-        -9,
-        13
-      ],
-      [
-        -4,
-        11
-      ],
-      [
-        3,
-        9
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -12,
-        9
-      ],
-      [
-        -13,
-        19
-      ],
-      [
-        -14,
-        3
-      ],
-      [
-        -25,
-        -19
-      ],
-      [
-        -14,
-        -4
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -3,
-        -18
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -13,
-        -1
-      ],
-      [
-        -2,
-        1
-      ],
-      [
-        -16,
-        6
-      ],
-      [
-        -11,
-        11
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -3,
-        -17
-      ],
-      [
-        -27,
-        -47
-      ],
-      [
-        -13,
-        10
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -38,
-        -66
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -22,
-        -30
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        52
-      ],
-      [
-        1,
-        51
-      ],
-      [
-        0,
-        52
-      ]
-    ],
-    [
-      [
-        7835,
-        6114
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        40,
-        0
-      ]
-    ],
-    [
-      [
-        9716,
-        7915
-      ],
-      [
-        -7,
-        -8
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        0,
-        20
-      ],
-      [
-        2,
-        7
-      ],
-      [
-        2,
-        3
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        6,
-        -19
-      ]
-    ],
-    [
-      [
-        9791,
-        7970
-      ],
-      [
-        -10,
-        -8
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        0,
-        -21
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        10,
-        27
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        10,
-        -7
-      ],
-      [
-        8,
-        -30
-      ],
-      [
-        1,
-        -13
-      ]
-    ],
-    [
-      [
-        9350,
-        7462
-      ],
-      [
-        -14,
-        38
-      ],
-      [
-        -3,
-        30
-      ],
-      [
-        -15,
-        36
-      ],
-      [
-        -6,
-        24
-      ],
-      [
-        -3,
-        28
-      ],
-      [
-        1,
-        30
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        44
-      ],
-      [
-        -1,
-        45
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -1,
-        40
-      ]
-    ],
-    [
-      [
-        9289,
-        8358
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        -2
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        5,
-        16
-      ],
-      [
-        0,
-        23
-      ],
-      [
-        7,
-        15
-      ],
-      [
-        8,
-        3
-      ],
-      [
-        7,
-        -1
-      ],
-      [
-        4,
-        8
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -2,
-        17
-      ],
-      [
-        0,
-        21
-      ],
-      [
-        19,
-        38
-      ],
-      [
-        22,
-        25
-      ],
-      [
-        8,
-        12
-      ],
-      [
-        2,
-        26
-      ],
-      [
-        13,
-        27
-      ],
-      [
-        7,
-        15
-      ],
-      [
-        1,
-        13
-      ],
-      [
-        -3,
-        17
-      ],
-      [
-        0,
-        31
-      ],
-      [
-        5,
-        37
-      ],
-      [
-        5,
-        41
-      ],
-      [
-        12,
-        37
-      ],
-      [
-        19,
-        40
-      ],
-      [
-        5,
-        52
-      ],
-      [
-        6,
-        55
-      ],
-      [
-        23,
-        54
-      ],
-      [
-        27,
-        62
-      ],
-      [
-        15,
-        34
-      ],
-      [
-        28,
-        64
-      ],
-      [
-        19,
-        45
-      ],
-      [
-        10,
-        21
-      ],
-      [
-        10,
-        24
-      ],
-      [
-        17,
-        -7
-      ],
-      [
-        17,
-        -8
-      ],
-      [
-        -3,
-        -35
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        8,
-        -15
-      ],
-      [
-        11,
-        -10
-      ],
-      [
-        9,
-        -4
-      ],
-      [
-        10,
-        1
-      ],
-      [
-        28,
-        20
-      ],
-      [
-        32,
-        13
-      ],
-      [
-        18,
-        12
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        8,
-        4
-      ],
-      [
-        13,
-        -3
-      ],
-      [
-        24,
-        -29
-      ],
-      [
-        28,
-        -43
-      ],
-      [
-        22,
-        -34
-      ],
-      [
-        1,
-        -59
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        1,
-        -66
-      ],
-      [
-        0,
-        -47
-      ],
-      [
-        0,
-        -65
-      ],
-      [
-        1,
-        -52
-      ],
-      [
-        1,
-        -67
-      ],
-      [
-        0,
-        -36
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        0,
-        -5
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        -1,
-        -9
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -2,
-        -11
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -11,
-        -6
-      ],
-      [
-        15,
-        -28
-      ],
-      [
-        26,
-        -27
-      ],
-      [
-        20,
-        -5
-      ],
-      [
-        11,
-        7
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        3,
-        -15
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -5,
-        -7
-      ],
-      [
-        -6,
-        -5
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        4,
-        -10
-      ],
-      [
-        5,
-        -18
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        10,
-        -15
-      ],
-      [
-        5,
-        -15
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        4,
-        7
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        6,
-        -3
-      ],
-      [
-        7,
-        -5
-      ],
-      [
-        8,
-        -5
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        5,
-        -21
-      ],
-      [
-        4,
-        -39
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        1,
-        -24
-      ],
-      [
-        16,
-        -7
-      ],
-      [
-        4,
-        -7
-      ],
-      [
-        1,
-        -9
-      ],
-      [
-        -35,
-        -62
-      ],
-      [
-        -30,
-        9
-      ],
-      [
-        -17,
-        -16
-      ],
-      [
-        -17,
-        -5
-      ],
-      [
-        -7,
-        -27
-      ],
-      [
-        -9,
-        -6
-      ],
-      [
-        -13,
-        2
-      ],
-      [
-        -11,
-        7
-      ],
-      [
-        -9,
-        -4
-      ],
-      [
-        -11,
-        -49
-      ],
-      [
-        -10,
-        4
-      ],
-      [
-        -4,
-        -17
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        -7,
-        -7
-      ],
-      [
-        -7,
-        22
-      ],
-      [
-        -4,
-        21
-      ],
-      [
-        -6,
-        5
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -6,
-        -14
-      ],
-      [
-        -10,
-        -11
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -5,
-        -25
-      ],
-      [
-        -7,
-        -26
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        -3,
-        -18
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -20,
-        13
-      ],
-      [
-        -15,
-        -1
-      ],
-      [
-        3,
-        17
-      ],
-      [
-        15,
-        25
-      ],
-      [
-        -5,
-        4
-      ],
-      [
-        -7,
-        -3
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        5,
-        23
-      ],
-      [
-        0,
-        24
-      ],
-      [
-        -6,
-        -8
-      ],
-      [
-        -8,
-        -26
-      ],
-      [
-        -20,
-        -21
-      ],
-      [
-        1,
-        -34
-      ],
-      [
-        -19,
-        -71
-      ],
-      [
-        -1,
-        -30
-      ],
-      [
-        -11,
-        -24
-      ],
-      [
-        -16,
-        -21
-      ],
-      [
-        -20,
-        6
-      ],
-      [
-        -16,
-        -18
-      ],
-      [
-        -8,
-        -21
-      ],
-      [
-        -7,
-        -3
-      ],
-      [
-        -3,
-        26
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        -6,
-        -38
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -2,
-        28
-      ],
-      [
-        -3,
-        18
-      ],
-      [
-        -8,
-        -16
-      ],
-      [
-        -5,
-        -41
-      ],
-      [
-        -6,
-        3
-      ],
-      [
-        -1,
-        16
-      ],
-      [
-        -4,
-        4
-      ],
-      [
-        -2,
-        -17
-      ],
-      [
-        2,
-        -25
-      ],
-      [
-        -3,
-        -13
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        -6,
-        12
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -8,
-        -4
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        2,
-        15
-      ],
-      [
-        -17,
-        -8
-      ],
-      [
-        -20,
-        -28
-      ],
-      [
-        -16,
-        -38
-      ],
-      [
-        6,
-        -6
-      ],
-      [
-        6,
-        -12
-      ],
-      [
-        -27,
-        -59
-      ],
-      [
-        -28,
-        -53
-      ],
-      [
-        -21,
-        -86
-      ],
-      [
-        -9,
-        -10
-      ],
-      [
-        -7,
-        -16
-      ]
-    ],
-    [
-      [
-        6710,
-        8280
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -5,
-        0
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -4,
-        17
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        10,
-        -2
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        1,
-        -12
-      ]
-    ],
-    [
-      [
-        6783,
-        8482
-      ],
-      [
-        -6,
-        -2
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        6,
-        33
-      ],
-      [
-        6,
-        15
-      ],
-      [
-        8,
-        -6
-      ],
-      [
-        -1,
-        -4
-      ],
-      [
-        1,
-        -35
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        -8,
-        -9
-      ]
-    ],
-    [
-      [
-        7146,
-        6928
-      ],
-      [
-        -1,
-        -2
-      ],
-      [
-        -58,
-        -4
-      ],
-      [
-        -58,
-        -4
-      ],
-      [
-        -57,
-        -3
-      ],
-      [
-        -58,
-        -4
-      ]
-    ],
-    [
-      [
-        6556,
-        6935
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        19,
-        26
-      ],
-      [
-        10,
-        23
-      ],
-      [
-        10,
-        31
-      ],
-      [
-        9,
-        38
-      ],
-      [
-        20,
-        57
-      ],
-      [
-        9,
-        35
-      ],
-      [
-        10,
-        43
-      ],
-      [
-        7,
-        46
-      ],
-      [
-        4,
-        48
-      ],
-      [
-        2,
-        49
-      ],
-      [
-        0,
-        52
-      ],
-      [
-        -5,
-        51
-      ],
-      [
-        -9,
-        52
-      ],
-      [
-        -5,
-        27
-      ],
-      [
-        -1,
-        7
-      ],
-      [
-        -17,
-        67
-      ],
-      [
-        -18,
-        92
-      ],
-      [
-        0,
-        8
-      ],
-      [
-        17,
-        56
-      ],
-      [
-        1,
-        7
-      ],
-      [
-        -2,
-        45
-      ],
-      [
-        -4,
-        22
-      ],
-      [
-        -9,
-        30
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        18,
-        39
-      ],
-      [
-        10,
-        29
-      ],
-      [
-        10,
-        36
-      ],
-      [
-        7,
-        41
-      ],
-      [
-        3,
-        47
-      ],
-      [
-        -1,
-        32
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        3,
-        8
-      ],
-      [
-        20,
-        12
-      ],
-      [
-        6,
-        18
-      ],
-      [
-        2,
-        33
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        6,
-        0
-      ],
-      [
-        6,
-        7
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        9,
-        -6
-      ],
-      [
-        13,
-        20
-      ],
-      [
-        16,
-        47
-      ],
-      [
-        13,
-        26
-      ],
-      [
-        9,
-        5
-      ],
-      [
-        1,
-        -4
-      ],
-      [
-        -5,
-        -14
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        2,
-        -17
-      ],
-      [
-        -1,
-        -16
-      ],
-      [
-        -5,
-        -22
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        -7,
-        -36
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        4,
-        -14
-      ],
-      [
-        5,
-        5
-      ],
-      [
-        6,
-        23
-      ],
-      [
-        2,
-        12
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        4,
-        18
-      ],
-      [
-        4,
-        9
-      ],
-      [
-        3,
-        -1
-      ],
-      [
-        1,
-        -10
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        -10,
-        -43
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        3,
-        -4
-      ],
-      [
-        11,
-        28
-      ],
-      [
-        9,
-        44
-      ],
-      [
-        7,
-        33
-      ],
-      [
-        2,
-        19
-      ],
-      [
-        -3,
-        47
-      ],
-      [
-        1,
-        19
-      ],
-      [
-        3,
-        14
-      ],
-      [
-        9,
-        15
-      ],
-      [
-        17,
-        17
-      ],
-      [
-        17,
-        9
-      ],
-      [
-        16,
-        1
-      ],
-      [
-        11,
-        4
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -11,
-        5
-      ],
-      [
-        -9,
-        10
-      ],
-      [
-        -5,
-        16
-      ],
-      [
-        -2,
-        19
-      ],
-      [
-        2,
-        21
-      ],
-      [
-        7,
-        21
-      ],
-      [
-        12,
-        20
-      ],
-      [
-        3,
-        15
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        15,
-        -2
-      ],
-      [
-        10,
-        2
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        14,
-        -8
-      ],
-      [
-        22,
-        -25
-      ],
-      [
-        21,
-        -14
-      ],
-      [
-        20,
-        -5
-      ],
-      [
-        15,
-        -8
-      ],
-      [
-        9,
-        -14
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        4,
-        -16
-      ],
-      [
-        9,
-        -10
-      ],
-      [
-        15,
-        -2
-      ],
-      [
-        12,
-        -7
-      ],
-      [
-        9,
-        -12
-      ],
-      [
-        47,
-        -31
-      ],
-      [
-        20,
-        -16
-      ],
-      [
-        11,
-        -16
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        -1,
-        -10
-      ],
-      [
-        2,
-        -11
-      ],
-      [
-        8,
-        -21
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        0,
-        -18
-      ],
-      [
-        3,
-        -13
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        -3,
-        -3
-      ],
-      [
-        -14,
-        11
-      ],
-      [
-        -9,
-        -3
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        -1,
-        -13
-      ],
-      [
-        3,
-        -12
-      ],
-      [
-        18,
-        -38
-      ],
-      [
-        5,
-        -33
-      ],
-      [
-        1,
-        -41
-      ],
-      [
-        -2,
-        -16
-      ],
-      [
-        -2,
-        -35
-      ],
-      [
-        -2,
-        -55
-      ],
-      [
-        0,
-        -19
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -17,
-        -26
-      ],
-      [
-        0,
-        5
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -6,
-        -22
-      ],
-      [
-        -5,
-        -41
-      ],
-      [
-        -6,
-        -22
-      ],
-      [
-        -8,
-        -4
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -8,
-        -5
-      ],
-      [
-        -14,
-        -3
-      ],
-      [
-        -10,
-        -13
-      ],
-      [
-        -7,
-        -35
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        -4,
-        -21
-      ],
-      [
-        1,
-        -18
-      ],
-      [
-        4,
-        -15
-      ],
-      [
-        11,
-        -15
-      ],
-      [
-        20,
-        -15
-      ],
-      [
-        11,
-        -2
-      ],
-      [
-        9,
-        6
-      ],
-      [
-        8,
-        24
-      ],
-      [
-        8,
-        10
-      ],
-      [
-        10,
-        4
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        16,
-        49
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        1,
-        3
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        6,
-        6
-      ],
-      [
-        6,
-        11
-      ],
-      [
-        10,
-        9
-      ],
-      [
-        24,
-        13
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        12,
-        -7
-      ],
-      [
-        16,
-        -18
-      ],
-      [
-        12,
-        -26
-      ],
-      [
-        9,
-        -34
-      ],
-      [
-        12,
-        -89
-      ],
-      [
-        14,
-        -143
-      ],
-      [
-        9,
-        -80
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        -12,
-        -112
-      ],
-      [
-        -10,
-        -46
-      ],
-      [
-        -17,
-        -27
-      ],
-      [
-        1,
-        6
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        0,
-        27
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -8,
-        -3
-      ],
-      [
-        -9,
-        -10
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        4,
-        -10
-      ],
-      [
-        -2,
-        -10
-      ],
-      [
-        -8,
-        -8
-      ],
-      [
-        -5,
-        -20
-      ],
-      [
-        -3,
-        -31
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        -4,
-        -8
-      ],
-      [
-        -16,
-        -11
-      ],
-      [
-        -8,
-        -10
-      ],
-      [
-        -7,
-        -15
-      ],
-      [
-        -6,
-        -23
-      ],
-      [
-        -6,
-        -33
-      ],
-      [
-        -2,
-        -25
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        -5,
-        -9
-      ],
-      [
-        -9,
-        -17
-      ],
-      [
-        -2,
-        -6
-      ],
-      [
-        1,
-        -10
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -4,
-        0
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -13,
-        -46
-      ],
-      [
-        -3,
-        -9
-      ]
-    ],
-    [
-      [
-        6955,
-        8570
-      ],
-      [
-        23,
-        -6
-      ],
-      [
-        2,
-        3
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        1,
-        -9
-      ],
-      [
-        -3,
-        -7
-      ],
-      [
-        -3,
-        -4
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -8,
-        8
-      ],
-      [
-        -14,
-        20
-      ],
-      [
-        1,
-        7
-      ]
-    ],
-    [
-      [
-        7138,
-        8647
-      ],
-      [
-        2,
-        -9
-      ],
-      [
-        -5,
-        -13
-      ],
-      [
-        -12,
-        -7
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -16,
-        5
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -1,
-        5
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        5,
-        -6
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        0,
-        5
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        3,
-        5
-      ],
-      [
-        13,
-        -4
-      ],
-      [
-        5,
-        -7
-      ],
-      [
-        9,
-        -23
-      ],
-      [
-        4,
-        -4
-      ]
-    ],
-    [
-      [
-        7031,
-        8741
-      ],
-      [
-        -2,
-        -2
-      ],
-      [
-        -9,
-        15
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        5,
-        -8
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        1,
-        -10
-      ],
-      [
-        -1,
-        -6
-      ]
-    ],
-    [
-      [
-        7029,
-        8788
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -5,
-        2
-      ],
-      [
-        -5,
-        6
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        -5,
-        24
-      ],
-      [
-        -7,
-        17
-      ],
-      [
-        11,
-        20
-      ],
-      [
-        6,
-        2
-      ],
-      [
-        6,
-        -4
-      ],
-      [
-        1,
-        -12
-      ],
-      [
-        -5,
-        -18
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        5,
-        -19
-      ]
-    ],
-    [
-      [
-        6427,
-        8283
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        -7,
-        16
-      ],
-      [
-        -4,
-        16
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        10,
-        41
-      ],
-      [
-        1,
-        7
-      ],
-      [
-        -1,
-        4
-      ],
-      [
-        -5,
-        4
-      ],
-      [
-        -13,
-        -7
-      ],
-      [
-        -13,
-        -2
-      ],
-      [
-        -4,
-        3
-      ],
-      [
-        -1,
-        7
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        2,
-        14
-      ],
-      [
-        8,
-        24
-      ],
-      [
-        0,
-        23
-      ],
-      [
-        4,
-        13
-      ],
-      [
-        -4,
-        25
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        -5,
-        13
-      ],
-      [
-        -15,
-        17
-      ],
-      [
-        -33,
-        23
-      ],
-      [
-        3,
-        25
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        -8,
-        16
-      ],
-      [
-        -35,
-        19
-      ],
-      [
-        -24,
-        8
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -17,
-        6
-      ],
-      [
-        -19,
-        3
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -13,
-        12
-      ],
-      [
-        -12,
-        11
-      ],
-      [
-        -21,
-        10
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -22,
-        10
-      ],
-      [
-        -21,
-        10
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -22,
-        10
-      ],
-      [
-        -21,
-        10
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -4,
-        17
-      ],
-      [
-        -5,
-        17
-      ],
-      [
-        -10,
-        7
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        -3,
-        9
-      ],
-      [
-        -9,
-        -4
-      ],
-      [
-        -4,
-        15
-      ],
-      [
-        1,
-        3
-      ]
-    ],
-    [
-      [
-        5942,
-        8881
-      ],
-      [
-        11,
-        4
-      ],
-      [
-        33,
-        20
-      ],
-      [
-        28,
-        26
-      ],
-      [
-        23,
-        30
-      ],
-      [
-        28,
-        19
-      ],
-      [
-        35,
-        6
-      ],
-      [
-        24,
-        11
-      ],
-      [
-        15,
-        15
-      ],
-      [
-        20,
-        28
-      ],
-      [
-        11,
-        8
-      ],
-      [
-        14,
-        3
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        19
-      ],
-      [
-        13,
-        22
-      ],
-      [
-        20,
-        25
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        3,
-        -5
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        -1,
-        -13
-      ],
-      [
-        5,
-        -10
-      ],
-      [
-        11,
-        -8
-      ],
-      [
-        5,
-        -11
-      ],
-      [
-        -1,
-        -13
-      ],
-      [
-        3,
-        -11
-      ],
-      [
-        6,
-        -9
-      ],
-      [
-        2,
-        -20
-      ],
-      [
-        -3,
-        -31
-      ],
-      [
-        0,
-        -20
-      ],
-      [
-        2,
-        -9
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        4,
-        5
-      ],
-      [
-        5,
-        11
-      ],
-      [
-        2,
-        6
-      ],
-      [
-        1,
-        7
-      ],
-      [
-        29,
-        31
-      ],
-      [
-        5,
-        2
-      ],
-      [
-        10,
-        -8
-      ],
-      [
-        43,
-        -12
-      ],
-      [
-        18,
-        -8
-      ],
-      [
-        18,
-        -17
-      ],
-      [
-        6,
-        -7
-      ],
-      [
-        22,
-        -58
-      ],
-      [
-        10,
-        -22
-      ],
-      [
-        6,
-        -7
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        3,
-        -6
-      ],
-      [
-        33,
-        -4
-      ],
-      [
-        14,
-        3
-      ],
-      [
-        9,
-        9
-      ],
-      [
-        10,
-        -6
-      ],
-      [
-        11,
-        -18
-      ],
-      [
-        11,
-        -6
-      ],
-      [
-        11,
-        9
-      ],
-      [
-        10,
-        -1
-      ],
-      [
-        9,
-        -9
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        19,
-        29
-      ],
-      [
-        22,
-        26
-      ],
-      [
-        29,
-        27
-      ],
-      [
-        18,
-        13
-      ],
-      [
-        4,
-        -4
-      ],
-      [
-        28,
-        10
-      ],
-      [
-        24,
-        1
-      ],
-      [
-        33,
-        -6
-      ],
-      [
-        30,
-        6
-      ],
-      [
-        28,
-        19
-      ],
-      [
-        25,
-        10
-      ],
-      [
-        21,
-        2
-      ],
-      [
-        8,
-        -5
-      ],
-      [
-        -5,
-        -12
-      ],
-      [
-        -3,
-        -22
-      ],
-      [
-        0,
-        -30
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        -3,
-        -8
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        3,
-        -7
-      ],
-      [
-        21,
-        -5
-      ],
-      [
-        11,
-        -10
-      ],
-      [
-        12,
-        0
-      ],
-      [
-        14,
-        9
-      ],
-      [
-        11,
-        -4
-      ],
-      [
-        7,
-        -16
-      ],
-      [
-        11,
-        -2
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        11
-      ],
-      [
-        7,
-        4
-      ],
-      [
-        5,
-        1
-      ],
-      [
-        5,
-        -5
-      ],
-      [
-        4,
-        -9
-      ],
-      [
-        9,
-        -25
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        0,
-        -15
-      ],
-      [
-        -6,
-        -10
-      ],
-      [
-        -2,
-        -7
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        20,
-        -2
-      ],
-      [
-        9,
-        -8
-      ],
-      [
-        4,
-        -9
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        5,
-        -10
-      ],
-      [
-        16,
-        -17
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -5,
-        -5
-      ],
-      [
-        -8,
-        -3
-      ],
-      [
-        -63,
-        16
-      ],
-      [
-        -19,
-        2
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        -6,
-        6
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -8,
-        -8
-      ],
-      [
-        -9,
-        -30
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -8,
-        4
-      ],
-      [
-        -29,
-        46
-      ],
-      [
-        -23,
-        24
-      ],
-      [
-        -27,
-        16
-      ],
-      [
-        -22,
-        9
-      ],
-      [
-        -16,
-        -1
-      ],
-      [
-        -13,
-        -12
-      ],
-      [
-        -11,
-        -23
-      ],
-      [
-        -16,
-        -13
-      ],
-      [
-        -22,
-        -3
-      ],
-      [
-        -12,
-        -7
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -7,
-        0
-      ],
-      [
-        -14,
-        9
-      ],
-      [
-        -15,
-        2
-      ],
-      [
-        -15,
-        -3
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -2,
-        -14
-      ],
-      [
-        -9,
-        -12
-      ],
-      [
-        -22,
-        -20
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -12,
-        -21
-      ],
-      [
-        -3,
-        -12
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        7,
-        22
-      ],
-      [
-        6,
-        11
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        -6,
-        -9
-      ],
-      [
-        -7,
-        -1
-      ],
-      [
-        -9,
-        4
-      ],
-      [
-        -8,
-        -11
-      ],
-      [
-        -7,
-        -27
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -3,
-        27
-      ],
-      [
-        0,
-        21
-      ],
-      [
-        3,
-        26
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -6,
-        -21
-      ],
-      [
-        -7,
-        -46
-      ],
-      [
-        -5,
-        -15
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -15,
-        -50
-      ],
-      [
-        -17,
-        -48
-      ],
-      [
-        -18,
-        -47
-      ],
-      [
-        -12,
-        -25
-      ],
-      [
-        -3,
-        -3
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        -1,
-        -19
-      ]
-    ],
-    [
-      [
-        6321,
-        9129
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        -21,
-        -35
-      ],
-      [
-        -8,
-        -22
-      ],
-      [
-        -6,
-        -3
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        5,
-        9
-      ],
-      [
-        5,
-        13
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        4,
-        -4
-      ],
-      [
-        1,
-        -2
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        -24,
-        8
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        2,
-        17
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        29,
-        47
-      ],
-      [
-        13,
-        13
-      ],
-      [
-        36,
-        21
-      ],
-      [
-        20,
-        5
-      ],
-      [
-        20,
-        0
-      ],
-      [
-        15,
-        -7
-      ],
-      [
-        9,
-        -14
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -40,
-        -7
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        1,
-        -5
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -35,
-        -45
-      ]
-    ],
-    [
-      [
-        6194,
-        9418
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        6,
-        -2
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -19,
-        -13
-      ],
-      [
-        -13,
-        -4
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        6,
-        12
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        -6,
-        0
-      ],
-      [
-        1,
-        5
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        68,
-        61
-      ],
-      [
-        29,
-        22
-      ],
-      [
-        16,
-        7
-      ],
-      [
-        2,
-        -3
-      ],
-      [
-        -17,
-        -23
-      ],
-      [
-        -2,
-        -9
-      ],
-      [
-        0,
-        -7
-      ],
-      [
-        -5,
-        -12
-      ],
-      [
-        -50,
-        -42
-      ],
-      [
-        -7,
-        -4
-      ]
-    ],
-    [
-      [
-        5648,
-        8949
-      ],
-      [
-        -4,
-        0
-      ],
-      [
-        -12,
-        -22
-      ],
-      [
-        -5,
-        -15
-      ],
-      [
-        -11,
-        -4
-      ],
-      [
-        0,
-        -58
-      ],
-      [
-        0,
-        -58
-      ],
-      [
-        0,
-        -58
-      ],
-      [
-        -1,
-        -58
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -7,
-        -14
-      ],
-      [
-        -10,
-        -3
-      ],
-      [
-        -47,
-        -48
-      ],
-      [
-        -8,
-        -14
-      ],
-      [
-        -8,
-        -31
-      ],
-      [
-        -15,
-        -36
-      ],
-      [
-        -4,
-        -20
-      ],
-      [
-        1,
-        -25
-      ],
-      [
-        23,
-        -21
-      ],
-      [
-        9,
-        -20
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        -1,
-        -22
-      ],
-      [
-        -11,
-        -41
-      ],
-      [
-        -3,
-        -17
-      ],
-      [
-        2,
-        -50
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        5,
-        -41
-      ],
-      [
-        0,
-        -14
-      ],
-      [
-        -4,
-        -45
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        1,
-        -2
-      ],
-      [
-        22,
-        -33
-      ],
-      [
-        18,
-        -18
-      ],
-      [
-        17,
-        -5
-      ],
-      [
-        13,
-        -14
-      ],
-      [
-        9,
-        -22
-      ],
-      [
-        13,
-        -14
-      ],
-      [
-        15,
-        -7
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        24,
-        -44
-      ],
-      [
-        13,
-        -38
-      ],
-      [
-        21,
-        -28
-      ],
-      [
-        35,
-        -29
-      ],
-      [
-        23,
-        -25
-      ],
-      [
-        11,
-        -22
-      ],
-      [
-        7,
-        -56
-      ],
-      [
-        6,
-        -119
-      ]
-    ],
-    [
-      [
-        4895,
-        7636
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        91
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        91
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        90
-      ],
-      [
-        0,
-        91
-      ],
-      [
-        -14,
-        30
-      ],
-      [
-        -28,
-        24
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -14,
-        36
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        26,
-        38
-      ],
-      [
-        9,
-        18
-      ],
-      [
-        4,
-        18
-      ],
-      [
-        6,
-        40
-      ]
-    ],
-    [
-      [
-        4877,
-        8619
-      ],
-      [
-        -3,
-        31
-      ],
-      [
-        2,
-        48
-      ],
-      [
-        -5,
-        36
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        -4,
-        23
-      ],
-      [
-        -19,
-        58
-      ],
-      [
-        -5,
-        48
-      ],
-      [
-        -5,
-        23
-      ],
-      [
-        -2,
-        60
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        4,
-        32
-      ],
-      [
-        -8,
-        22
-      ],
-      [
-        -2,
-        18
-      ],
-      [
-        -4,
-        143
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        1,
-        67
-      ],
-      [
-        -16,
-        69
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -4,
-        29
-      ],
-      [
-        1,
-        13
-      ],
-      [
-        -13,
-        48
-      ],
-      [
-        -8,
-        52
-      ],
-      [
-        1,
-        46
-      ],
-      [
-        -3,
-        34
-      ],
-      [
-        1,
-        27
-      ],
-      [
-        -2,
-        40
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        0,
-        36
-      ],
-      [
-        -17,
-        125
-      ]
-    ],
-    [
-      [
-        4761,
-        9847
-      ],
-      [
-        21,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        40,
-        0
-      ],
-      [
-        1,
-        85
-      ],
-      [
-        1,
-        67
-      ],
-      [
-        37,
-        -8
-      ],
-      [
-        11,
-        -12
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        3,
-        -56
-      ],
-      [
-        7,
-        -47
-      ],
-      [
-        15,
-        -56
-      ],
-      [
-        2,
-        -22
-      ],
-      [
-        5,
-        -14
-      ],
-      [
-        9,
-        -13
-      ],
-      [
-        36,
-        -15
-      ],
-      [
-        62,
-        -18
-      ],
-      [
-        35,
-        -21
-      ],
-      [
-        9,
-        -24
-      ],
-      [
-        16,
-        -9
-      ],
-      [
-        25,
-        5
-      ],
-      [
-        18,
-        9
-      ],
-      [
-        14,
-        23
-      ],
-      [
-        21,
-        5
-      ],
-      [
-        18,
-        -2
-      ],
-      [
-        18,
-        -2
-      ],
-      [
-        10,
-        -3
-      ],
-      [
-        27,
-        -18
-      ],
-      [
-        18,
-        -14
-      ],
-      [
-        26,
-        -27
-      ],
-      [
-        14,
-        -12
-      ],
-      [
-        7,
-        -28
-      ],
-      [
-        8,
-        -36
-      ],
-      [
-        12,
-        0
-      ],
-      [
-        8,
-        21
-      ],
-      [
-        22,
-        4
-      ],
-      [
-        29,
-        -15
-      ],
-      [
-        26,
-        -42
-      ],
-      [
-        36,
-        -37
-      ],
-      [
-        23,
-        -19
-      ],
-      [
-        22,
-        0
-      ],
-      [
-        29,
-        19
-      ],
-      [
-        31,
-        35
-      ],
-      [
-        22,
-        7
-      ],
-      [
-        13,
-        -4
-      ],
-      [
-        7,
-        -28
-      ],
-      [
-        10,
-        -10
-      ],
-      [
-        23,
-        3
-      ],
-      [
-        50,
-        -6
-      ],
-      [
-        40,
-        8
-      ],
-      [
-        9,
-        -16
-      ],
-      [
-        8,
-        -25
-      ],
-      [
-        16,
-        -8
-      ],
-      [
-        22,
-        8
-      ],
-      [
-        34,
-        -6
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -8,
-        -13
-      ],
-      [
-        -19,
-        -19
-      ],
-      [
-        -29,
-        -24
-      ],
-      [
-        -35,
-        -22
-      ],
-      [
-        -69,
-        -39
-      ],
-      [
-        -43,
-        -42
-      ],
-      [
-        -19,
-        -24
-      ],
-      [
-        -75,
-        -125
-      ],
-      [
-        -44,
-        -66
-      ],
-      [
-        -73,
-        -93
-      ],
-      [
-        -7,
-        -12
-      ],
-      [
-        0,
-        -11
-      ]
-    ],
-    [
-      [
-        6108,
-        4816
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -1,
-        2
-      ]
-    ],
-    [
-      [
-        6089,
-        4816
-      ],
-      [
-        3,
-        -30
-      ],
-      [
-        -2,
-        -21
-      ],
-      [
-        -9,
-        -9
-      ],
-      [
-        -1,
-        -12
-      ],
-      [
-        5,
-        -14
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -2,
-        -5
-      ],
-      [
-        -6,
-        -2
-      ],
-      [
-        -4,
-        -3
-      ],
-      [
-        -4,
-        -11
-      ],
-      [
-        7,
-        -21
-      ],
-      [
-        -1,
-        -25
-      ],
-      [
-        -10,
-        -30
-      ],
-      [
-        -1,
-        -12
-      ]
-    ],
-    [
-      [
-        5213,
-        4816
-      ],
-      [
-        0,
-        51
-      ],
-      [
-        0,
-        50
-      ],
-      [
-        0,
-        50
-      ],
-      [
-        0,
-        51
-      ]
-    ],
-    [
-      [
-        5086,
-        6226
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -13,
-        34
-      ],
-      [
-        -5,
-        41
-      ],
-      [
-        -10,
-        27
-      ],
-      [
-        -15,
-        12
-      ],
-      [
-        -9,
-        28
-      ],
-      [
-        -4,
-        41
-      ],
-      [
-        -10,
-        42
-      ],
-      [
-        -4,
-        13
-      ]
-    ],
-    [
-      [
-        6262,
-        2285
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -15,
-        8
-      ],
-      [
-        -9,
-        8
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        26,
-        -14
-      ],
-      [
-        2,
-        -5
-      ]
-    ],
-    [
-      [
-        6290,
-        2347
-      ],
-      [
-        -51,
-        -6
-      ],
-      [
-        -22,
-        21
-      ],
-      [
-        -9,
-        4
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        -26,
-        -19
-      ],
-      [
-        -29,
-        -14
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -21,
-        -49
-      ],
-      [
-        -13,
-        -12
-      ]
-    ],
-    [
-      [
-        5962,
-        4212
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        -1
-      ],
-      [
-        47,
-        0
-      ]
-    ],
-    [
-      [
-        3586,
-        8619
-      ],
-      [
-        0,
-        -94
-      ],
-      [
-        0,
-        -93
-      ],
-      [
-        0,
-        -94
-      ],
-      [
-        1,
-        -93
-      ],
-      [
-        0,
-        -2
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -1,
-        0
-      ]
-    ],
-    [
-      [
-        3581,
-        8240
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -37,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ]
-    ],
-    [
-      [
-        1500,
-        9847
-      ],
-      [
-        32,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        16,
-        0
-      ],
-      [
-        58,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        56,
-        0
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        55,
-        0
-      ]
-    ],
-    [
-      [
-        3582,
-        9847
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -77
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -77
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        0,
-        -76
-      ],
-      [
-        0,
-        -77
-      ],
-      [
-        1,
-        -77
-      ]
-    ],
-    [
-      [
-        8343,
-        4073
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -2,
-        6
-      ],
-      [
-        9,
-        -2
-      ],
-      [
-        13,
-        -16
-      ]
-    ],
-    [
-      [
-        8350,
-        4068
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        16,
-        51
-      ],
-      [
-        31,
-        63
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        -26,
-        -54
-      ],
-      [
-        -26,
-        -65
-      ]
-    ],
-    [
-      [
-        8476,
-        4288
-      ],
-      [
-        -32,
-        -28
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        21,
-        21
-      ],
-      [
-        15,
-        6
-      ]
-    ],
-    [
-      [
-        8517,
-        4308
-      ],
-      [
-        -24,
-        -11
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        27,
-        23
-      ],
-      [
-        8,
-        81
-      ],
-      [
-        2,
-        37
-      ],
-      [
-        -4,
-        66
-      ],
-      [
-        0,
-        14
-      ],
-      [
-        4,
-        -22
-      ],
-      [
-        4,
-        -61
-      ],
-      [
-        -2,
-        -47
-      ],
-      [
-        -7,
-        -67
-      ],
-      [
-        -6,
-        -17
-      ]
-    ],
-    [
-      [
-        8501,
-        4556
-      ],
-      [
-        -3,
-        -8
-      ],
-      [
-        -11,
-        45
-      ],
-      [
-        12,
-        -15
-      ],
-      [
-        2,
-        -12
-      ],
-      [
-        0,
-        -10
-      ]
-    ],
-    [
-      [
-        8457,
-        4836
-      ],
-      [
-        5,
-        0
-      ]
-    ],
-    [
-      [
-        8462,
-        4836
-      ],
-      [
-        18,
-        -129
-      ],
-      [
-        34,
-        -141
-      ],
-      [
-        4,
-        -24
-      ],
-      [
-        -8,
-        21
-      ],
-      [
-        -25,
-        93
-      ],
-      [
-        -14,
-        68
-      ],
-      [
-        -14,
-        112
-      ]
-    ],
-    [
-      [
-        7994,
-        3759
-      ],
-      [
-        -25,
-        49
-      ],
-      [
-        -24,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -24,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -24,
-        46
-      ],
-      [
-        -23,
-        46
-      ],
-      [
-        -25,
-        1
-      ],
-      [
-        -24,
-        2
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -24,
-        2
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -1,
-        31
-      ],
-      [
-        -1,
-        23
-      ],
-      [
-        -15,
-        38
-      ],
-      [
-        -9,
-        23
-      ],
-      [
-        -19,
-        -20
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        -27,
-        3
-      ],
-      [
-        -27,
-        2
-      ],
-      [
-        -28,
-        2
-      ],
-      [
-        -27,
-        3
-      ],
-      [
-        -28,
-        2
-      ],
-      [
-        -27,
-        2
-      ],
-      [
-        -28,
-        3
-      ],
-      [
-        -27,
-        2
-      ],
-      [
-        -7,
-        4
-      ],
-      [
-        -12,
-        -14
-      ],
-      [
-        -32,
-        -20
-      ],
-      [
-        -16,
-        -17
-      ],
-      [
-        -6,
-        1
-      ],
-      [
-        -28,
-        -17
-      ],
-      [
-        -28,
-        -18
-      ],
-      [
-        -3,
-        0
-      ]
-    ],
-    [
-      [
-        6996,
-        4207
-      ],
-      [
-        6,
-        86
-      ],
-      [
-        5,
-        19
-      ],
-      [
-        5,
-        5
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        10,
-        52
-      ],
-      [
-        23,
-        40
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        15,
-        8
-      ],
-      [
-        37,
-        10
-      ],
-      [
-        39,
-        39
-      ],
-      [
-        28,
-        38
-      ],
-      [
-        23,
-        10
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        5,
-        18
-      ],
-      [
-        3,
-        24
-      ],
-      [
-        3,
-        5
-      ],
-      [
-        13,
-        -2
-      ],
-      [
-        10,
-        21
-      ],
-      [
-        9,
-        12
-      ],
-      [
-        10,
-        7
-      ],
-      [
-        6,
-        1
-      ],
-      [
-        2,
-        -7
-      ],
-      [
-        1,
-        -18
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        5,
-        0
-      ],
-      [
-        5,
-        4
-      ],
-      [
-        8,
-        12
-      ],
-      [
-        19,
-        36
-      ],
-      [
-        12,
-        13
-      ],
-      [
-        20,
-        8
-      ],
-      [
-        14,
-        -19
-      ],
-      [
-        8,
-        7
-      ],
-      [
-        25,
-        74
-      ],
-      [
-        10,
-        13
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        12,
-        1
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        4,
-        31
-      ],
-      [
-        1,
-        21
-      ],
-      [
-        7,
-        30
-      ]
-    ],
-    [
-      [
-        7457,
-        4860
-      ],
-      [
-        3,
-        -6
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        62,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -2
-      ],
-      [
-        62,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        62,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        62,
-        -2
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        63,
-        -1
-      ],
-      [
-        43,
-        0
-      ]
-    ],
-    [
-      [
-        8444,
-        4837
-      ],
-      [
-        -5,
-        -32
-      ],
-      [
-        2,
-        -18
-      ],
-      [
-        10,
-        -18
-      ],
-      [
-        10,
-        -47
-      ],
-      [
-        8,
-        -62
-      ],
-      [
-        -11,
-        25
-      ],
-      [
-        -12,
-        14
-      ],
-      [
-        -18,
-        10
-      ],
-      [
-        -16,
-        18
-      ],
-      [
-        1,
-        -26
-      ],
-      [
-        -1,
-        -28
-      ],
-      [
-        -13,
-        9
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        7,
-        -30
-      ],
-      [
-        -16,
-        9
-      ],
-      [
-        -11,
-        -2
-      ],
-      [
-        -7,
-        -26
-      ],
-      [
-        -9,
-        -16
-      ],
-      [
-        -14,
-        -5
-      ],
-      [
-        -21,
-        24
-      ],
-      [
-        -7,
-        29
-      ],
-      [
-        -2,
-        33
-      ],
-      [
-        -1,
-        -39
-      ],
-      [
-        3,
-        -40
-      ],
-      [
-        -1,
-        -31
-      ],
-      [
-        20,
-        -5
-      ],
-      [
-        19,
-        5
-      ],
-      [
-        25,
-        -1
-      ],
-      [
-        16,
-        5
-      ],
-      [
-        10,
-        10
-      ],
-      [
-        24,
-        -8
-      ],
-      [
-        1,
-        -37
-      ],
-      [
-        -2,
-        -37
-      ],
-      [
-        -2,
-        -39
-      ],
-      [
-        7,
-        0
-      ],
-      [
-        8,
-        13
-      ],
-      [
-        3,
-        70
-      ],
-      [
-        22,
-        25
-      ],
-      [
-        7,
-        -1
-      ],
-      [
-        7,
-        -23
-      ],
-      [
-        3,
-        -23
-      ],
-      [
-        2,
-        -31
-      ],
-      [
-        -5,
-        -48
-      ],
-      [
-        -33,
-        -56
-      ],
-      [
-        -24,
-        -51
-      ],
-      [
-        -12,
-        -11
-      ],
-      [
-        -18,
-        6
-      ],
-      [
-        -20,
-        13
-      ],
-      [
-        -10,
-        3
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        -5,
-        16
-      ],
-      [
-        -2,
-        29
-      ],
-      [
-        -8,
-        9
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        -4,
-        -31
-      ],
-      [
-        -19,
-        -8
-      ],
-      [
-        -25,
-        12
-      ],
-      [
-        -26,
-        26
-      ],
-      [
-        11,
-        -28
-      ],
-      [
-        66,
-        -51
-      ],
-      [
-        7,
-        -10
-      ],
-      [
-        7,
-        -14
-      ],
-      [
-        -9,
-        -23
-      ],
-      [
-        -7,
-        -25
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        -26,
-        -33
-      ],
-      [
-        -14,
-        6
-      ],
-      [
-        -37,
-        60
-      ],
-      [
-        17,
-        -52
-      ],
-      [
-        13,
-        -22
-      ],
-      [
-        27,
-        -12
-      ],
-      [
-        50,
-        19
-      ],
-      [
-        16,
-        -21
-      ],
-      [
-        -13,
-        -38
-      ],
-      [
-        -14,
-        -26
-      ],
-      [
-        -17,
-        -3
-      ],
-      [
-        -16,
-        -7
-      ],
-      [
-        -4,
-        -18
-      ],
-      [
-        -11,
-        -1
-      ],
-      [
-        -17,
-        -1
-      ],
-      [
-        -27,
-        -2
-      ],
-      [
-        -15,
-        4
-      ],
-      [
-        -20,
-        -37
-      ],
-      [
-        -8,
-        -5
-      ],
-      [
-        -11,
-        7
-      ],
-      [
-        -4,
-        30
-      ],
-      [
-        -5,
-        14
-      ],
-      [
-        0,
-        -56
-      ],
-      [
-        2,
-        -15
-      ],
-      [
-        4,
-        -11
-      ],
-      [
-        -24,
-        -30
-      ],
-      [
-        -23,
-        -38
-      ],
-      [
-        -8,
-        -10
-      ],
-      [
-        -10,
-        -19
-      ],
-      [
-        -19,
-        -55
-      ],
-      [
-        -4,
-        -40
-      ],
-      [
-        -7,
-        -44
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        1,
-        33
-      ],
-      [
-        -5,
-        39
-      ],
-      [
-        -3,
-        -71
-      ],
-      [
-        -7,
-        -33
-      ],
-      [
-        -68,
-        3
-      ],
-      [
-        -27,
-        -17
-      ]
-    ],
-    [
-      [
-        4877,
-        8619
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -41,
-        0
-      ],
-      [
-        -40,
-        0
-      ],
-      [
-        -40,
-        0
-      ]
-    ],
-    [
-      [
-        3582,
-        9847
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        53,
-        0
-      ]
-    ],
-    [
-      [
-        3584,
-        6629
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        -1,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        -1,
-        100
-      ]
-    ],
-    [
-      [
-        3582,
-        7434
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        60,
-        0
-      ],
-      [
-        68,
-        0
-      ],
-      [
-        52,
-        -60
-      ],
-      [
-        31,
-        -19
-      ],
-      [
-        14,
-        18
-      ],
-      [
-        32,
-        10
-      ],
-      [
-        49,
-        3
-      ],
-      [
-        31,
-        -8
-      ],
-      [
-        13,
-        -20
-      ],
-      [
-        25,
-        -21
-      ],
-      [
-        37,
-        -24
-      ],
-      [
-        22,
-        -25
-      ],
-      [
-        8,
-        -28
-      ],
-      [
-        13,
-        -18
-      ],
-      [
-        13,
-        -5
-      ]
-    ],
-    [
-      [
-        9350,
-        7462
-      ],
-      [
-        -8,
-        -52
-      ],
-      [
-        -5,
-        -26
-      ]
-    ],
-    [
-      [
-        9050,
-        7325
-      ],
-      [
-        -3,
-        15
-      ],
-      [
-        -10,
-        25
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        6,
-        32
-      ],
-      [
-        4,
-        10
-      ],
-      [
-        4,
-        19
-      ],
-      [
-        6,
-        75
-      ],
-      [
-        5,
-        43
-      ],
-      [
-        4,
-        80
-      ],
-      [
-        4,
-        23
-      ],
-      [
-        4,
-        14
-      ],
-      [
-        7,
-        38
-      ],
-      [
-        13,
-        30
-      ],
-      [
-        9,
-        38
-      ],
-      [
-        10,
-        32
-      ],
-      [
-        1,
-        20
-      ],
-      [
-        8,
-        41
-      ],
-      [
-        5,
-        75
-      ],
-      [
-        5,
-        11
-      ],
-      [
-        24,
-        10
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        25,
-        31
-      ],
-      [
-        7,
-        12
-      ],
-      [
-        5,
-        13
-      ],
-      [
-        4,
-        21
-      ],
-      [
-        3,
-        6
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        -8,
-        49
-      ],
-      [
-        -1,
-        17
-      ],
-      [
-        19,
-        55
-      ],
-      [
-        -4,
-        32
-      ],
-      [
-        3,
-        8
-      ]
-    ],
-    [
-      [
-        9214,
-        8242
-      ],
-      [
-        17,
-        78
-      ],
-      [
-        16,
-        36
-      ],
-      [
-        22,
-        -12
-      ],
-      [
-        12,
-        1
-      ],
-      [
-        8,
-        13
-      ]
-    ],
-    [
-      [
-        8761,
-        6097
-      ],
-      [
-        -20,
-        -61
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        26,
-        75
-      ],
-      [
-        -5,
-        -26
-      ]
-    ],
-    [
-      [
-        8598,
-        6219
-      ],
-      [
-        9,
-        13
-      ],
-      [
-        20,
-        25
-      ],
-      [
-        30,
-        31
-      ],
-      [
-        -42,
-        101
-      ],
-      [
-        -10,
-        6
-      ],
-      [
-        -11,
-        49
-      ],
-      [
-        -13,
-        14
-      ],
-      [
-        -3,
-        7
-      ],
-      [
-        0,
-        38
-      ],
-      [
-        1,
-        22
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        6,
-        22
-      ],
-      [
-        0,
-        12
-      ],
-      [
-        -8,
-        35
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        16,
-        21
-      ],
-      [
-        20,
-        42
-      ],
-      [
-        12,
-        45
-      ],
-      [
-        5,
-        14
-      ],
-      [
-        6,
-        9
-      ],
-      [
-        14,
-        13
-      ]
-    ],
-    [
-      [
-        8663,
-        6772
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        18,
-        -18
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -19
-      ],
-      [
-        17,
-        -18
-      ]
-    ],
-    [
-      [
-        8800,
-        6625
-      ],
-      [
-        -3,
-        -31
-      ],
-      [
-        -17,
-        -64
-      ],
-      [
-        -7,
-        -15
-      ],
-      [
-        -9,
-        -13
-      ],
-      [
-        -6,
-        -5
-      ],
-      [
-        -6,
-        -11
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -7,
-        -32
-      ],
-      [
-        4,
-        -29
-      ],
-      [
-        34,
-        -10
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        5,
-        -21
-      ],
-      [
-        3,
-        -29
-      ],
-      [
-        -3,
-        -32
-      ],
-      [
-        -6,
-        -32
-      ],
-      [
-        -4,
-        -39
-      ],
-      [
-        -3,
-        -61
-      ],
-      [
-        -6,
-        -54
-      ],
-      [
-        0,
-        17
-      ],
-      [
-        3,
-        66
-      ],
-      [
-        -5,
-        -7
-      ],
-      [
-        -4,
-        -15
-      ],
-      [
-        -10,
-        -86
-      ],
-      [
-        -14,
-        -45
-      ],
-      [
-        -13,
-        -31
-      ],
-      [
-        -13,
-        5
-      ],
-      [
-        3,
-        -25
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -3,
-        -27
-      ],
-      [
-        -8,
-        -18
-      ],
-      [
-        -7,
-        1
-      ],
-      [
-        -11,
-        -12
-      ],
-      [
-        -4,
-        -9
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -25,
-        -83
-      ],
-      [
-        -23,
-        -24
-      ],
-      [
-        -5,
-        4
-      ],
-      [
-        6,
-        39
-      ],
-      [
-        4,
-        39
-      ],
-      [
-        -14,
-        18
-      ],
-      [
-        -13,
-        9
-      ],
-      [
-        -15,
-        -2
-      ],
-      [
-        -16,
-        31
-      ],
-      [
-        -21,
-        23
-      ],
-      [
-        -30,
-        60
-      ],
-      [
-        1,
-        17
-      ],
-      [
-        -1,
-        28
-      ],
-      [
-        9,
-        45
-      ],
-      [
-        9,
-        31
-      ],
-      [
-        12,
-        16
-      ],
-      [
-        34,
-        16
-      ],
-      [
-        9,
-        25
-      ],
-      [
-        5,
-        21
-      ]
-    ],
-    [
-      [
-        3761,
-        4816
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -114
-      ],
-      [
-        -1,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        -1,
-        -114
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        -1,
-        -114
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        0,
-        -113
-      ],
-      [
-        -1,
-        -113
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -39,
-        -1
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -1,
-        0
-      ],
-      [
-        18,
-        -73
-      ],
-      [
-        21,
-        -21
-      ]
-    ],
-    [
-      [
-        3164,
-        2910
-      ],
-      [
-        -1,
-        1
-      ],
-      [
-        -39,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        -38,
-        0
-      ],
-      [
-        -38,
-        1
-      ],
-      [
-        0,
-        -46
-      ],
-      [
-        0,
-        -45
-      ],
-      [
-        0,
-        -45
-      ],
-      [
-        -1,
-        -46
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -61,
-        0
-      ],
-      [
-        -22,
-        0
-      ]
-    ],
-    [
-      [
-        3761,
-        5018
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ]
-    ],
-    [
-      [
-        816,
-        7031
-      ],
-      [
-        64,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        64,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        64,
-        0
-      ],
-      [
-        65,
-        0
-      ],
-      [
-        65,
-        0
-      ]
-    ],
-    [
-      [
-        1848,
-        7031
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -62
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ],
-      [
-        0,
-        -63
-      ]
-    ],
-    [
-      [
-        8752,
-        6436
-      ],
-      [
-        -9,
-        -2
-      ],
-      [
-        9,
-        39
-      ],
-      [
-        15,
-        18
-      ],
-      [
-        5,
-        -4
-      ],
-      [
-        1,
-        -14
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        -10,
-        -18
-      ],
-      [
-        -8,
-        -8
-      ]
-    ],
-    [
-      [
-        9042,
-        6623
-      ],
-      [
-        -12,
-        -26
-      ],
-      [
-        11,
-        -3
-      ],
-      [
-        10,
-        8
-      ],
-      [
-        9,
-        15
-      ],
-      [
-        21,
-        21
-      ],
-      [
-        18,
-        9
-      ],
-      [
-        5,
-        2
-      ],
-      [
-        9,
-        -15
-      ],
-      [
-        17,
-        12
-      ],
-      [
-        17,
-        7
-      ],
-      [
-        -75,
-        -67
-      ],
-      [
-        -16,
-        -8
-      ],
-      [
-        -22,
-        -20
-      ],
-      [
-        -20,
-        -14
-      ],
-      [
-        -16,
-        -5
-      ],
-      [
-        -74,
-        -50
-      ],
-      [
-        -6,
-        -1
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -61,
-        -26
-      ],
-      [
-        -25,
-        -3
-      ],
-      [
-        -23,
-        -9
-      ],
-      [
-        17,
-        21
-      ],
-      [
-        0,
-        8
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -9,
-        -2
-      ],
-      [
-        -10,
-        -21
-      ],
-      [
-        -14,
-        -7
-      ],
-      [
-        -3,
-        23
-      ],
-      [
-        5,
-        18
-      ],
-      [
-        6,
-        17
-      ],
-      [
-        15,
-        26
-      ],
-      [
-        21,
-        17
-      ],
-      [
-        11,
-        15
-      ],
-      [
-        7,
-        -13
-      ],
-      [
-        2,
-        17
-      ],
-      [
-        6,
-        10
-      ],
-      [
-        6,
-        6
-      ],
-      [
-        15,
-        0
-      ],
-      [
-        8,
-        3
-      ],
-      [
-        6,
-        5
-      ],
-      [
-        6,
-        2
-      ],
-      [
-        16,
-        -8
-      ],
-      [
-        16,
-        2
-      ],
-      [
-        13,
-        11
-      ],
-      [
-        14,
-        3
-      ],
-      [
-        35,
-        3
-      ],
-      [
-        35,
-        8
-      ],
-      [
-        14,
-        14
-      ],
-      [
-        30,
-        40
-      ],
-      [
-        17,
-        11
-      ],
-      [
-        -26,
-        -46
-      ],
-      [
-        -15,
-        -21
-      ]
-    ],
-    [
-      [
-        7930,
-        7443
-      ],
-      [
-        -5,
-        -14
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        1,
-        11
-      ],
-      [
-        4,
-        5
-      ],
-      [
-        13,
-        -4
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -3,
-        -8
-      ]
-    ],
-    [
-      [
-        8392,
-        7832
-      ],
-      [
-        -2,
-        -1
-      ],
-      [
-        0,
-        9
-      ],
-      [
-        3,
-        5
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        0,
-        -4
-      ],
-      [
-        -6,
-        -12
-      ]
-    ],
-    [
-      [
-        8418,
-        7948
-      ],
-      [
-        -5,
-        -3
-      ],
-      [
-        -1,
-        5
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        -1,
-        -5
-      ],
-      [
-        -6,
-        -7
-      ]
-    ],
-    [
-      [
-        8896,
-        8241
-      ],
-      [
-        2,
-        -26
-      ],
-      [
-        -4,
-        -32
-      ],
-      [
-        3,
-        -34
-      ],
-      [
-        -4,
-        -72
-      ],
-      [
-        11,
-        -55
-      ],
-      [
-        -3,
-        -37
-      ],
-      [
-        1,
-        -40
-      ],
-      [
-        -2,
-        -10
-      ],
-      [
-        -9,
-        -23
-      ],
-      [
-        -5,
-        -23
-      ],
-      [
-        -2,
-        -22
-      ],
-      [
-        0,
-        -15
-      ],
-      [
-        7,
-        -66
-      ],
-      [
-        1,
-        -28
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        -6,
-        -54
-      ],
-      [
-        -1,
-        -16
-      ],
-      [
-        2,
-        -4
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        7,
-        17
-      ],
-      [
-        3,
-        2
-      ],
-      [
-        4,
-        -4
-      ],
-      [
-        11,
-        -26
-      ],
-      [
-        -1,
-        -45
-      ],
-      [
-        0,
-        -33
-      ],
-      [
-        -1,
-        -37
-      ],
-      [
-        0,
-        -56
-      ],
-      [
-        -1,
-        -40
-      ],
-      [
-        0,
-        -37
-      ],
-      [
-        -1,
-        -29
-      ],
-      [
-        -2,
-        -21
-      ],
-      [
-        5,
-        -24
-      ]
-    ],
-    [
-      [
-        8848,
-        6625
-      ],
-      [
-        -7,
-        -11
-      ],
-      [
-        -19,
-        -35
-      ],
-      [
-        -12,
-        -19
-      ],
-      [
-        -10,
-        -6
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -7,
-        -10
-      ],
-      [
-        7,
-        35
-      ],
-      [
-        7,
-        30
-      ],
-      [
-        6,
-        57
-      ],
-      [
-        -1,
-        47
-      ],
-      [
-        -8,
-        19
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        9,
-        -46
-      ],
-      [
-        2,
-        -56
-      ],
-      [
-        0,
-        -2
-      ]
-    ],
-    [
-      [
-        8663,
-        6772
-      ],
-      [
-        -4,
-        15
-      ],
-      [
-        -6,
-        12
-      ],
-      [
-        -31,
-        20
-      ],
-      [
-        -8,
-        14
-      ],
-      [
-        -7,
-        18
-      ],
-      [
-        -5,
-        22
-      ],
-      [
-        -3,
-        24
-      ],
-      [
-        0,
-        18
-      ],
-      [
-        3,
-        21
-      ],
-      [
-        -7,
-        14
-      ],
-      [
-        -1,
-        13
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        -20,
-        16
-      ],
-      [
-        -6,
-        21
-      ],
-      [
-        -14,
-        21
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        1
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        -24,
-        0
-      ],
-      [
-        0,
-        55
-      ],
-      [
-        0,
-        54
-      ],
-      [
-        0,
-        2
-      ]
-    ],
-    [
-      [
-        7786,
-        7142
-      ],
-      [
-        10,
-        10
-      ],
-      [
-        33,
-        36
-      ],
-      [
-        17,
-        27
-      ],
-      [
-        17,
-        22
-      ],
-      [
-        19,
-        18
-      ],
-      [
-        14,
-        22
-      ],
-      [
-        11,
-        28
-      ],
-      [
-        12,
-        20
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        1,
-        15
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        -6,
-        25
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        4,
-        14
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        -27,
-        14
-      ],
-      [
-        1,
-        70
-      ],
-      [
-        -1,
-        2
-      ],
-      [
-        2,
-        0
-      ],
-      [
-        63,
-        31
-      ],
-      [
-        40,
-        11
-      ],
-      [
-        49,
-        3
-      ],
-      [
-        58,
-        -16
-      ],
-      [
-        23,
-        -13
-      ],
-      [
-        14,
-        -18
-      ],
-      [
-        17,
-        -5
-      ],
-      [
-        19,
-        9
-      ],
-      [
-        26,
-        2
-      ],
-      [
-        33,
-        -2
-      ],
-      [
-        18,
-        -5
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        2,
-        2
-      ],
-      [
-        2,
-        8
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        25,
-        15
-      ],
-      [
-        4,
-        -3
-      ],
-      [
-        5,
-        7
-      ],
-      [
-        7,
-        18
-      ],
-      [
-        12,
-        19
-      ],
-      [
-        19,
-        22
-      ],
-      [
-        17,
-        11
-      ],
-      [
-        15,
-        1
-      ],
-      [
-        10,
-        5
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        1,
-        9
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        -1,
-        4
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -1,
-        35
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        -4,
-        13
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        0,
-        9
-      ],
-      [
-        9,
-        10
-      ],
-      [
-        0,
-        -10
-      ],
-      [
-        2,
-        -2
-      ],
-      [
-        4,
-        4
-      ],
-      [
-        10,
-        21
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        5,
-        13
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -13,
-        -4
-      ],
-      [
-        -3,
-        4
-      ],
-      [
-        7,
-        17
-      ],
-      [
-        -1,
-        9
-      ],
-      [
-        -2,
-        4
-      ],
-      [
-        -4,
-        2
-      ],
-      [
-        -15,
-        -15
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        -7,
-        17
-      ],
-      [
-        20,
-        31
-      ],
-      [
-        70,
-        86
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        3,
-        11
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        1,
-        3
-      ],
-      [
-        67,
-        110
-      ],
-      [
-        39,
-        52
-      ],
-      [
-        32,
-        28
-      ],
-      [
-        24,
-        14
-      ],
-      [
-        16,
-        -2
-      ],
-      [
-        9,
-        2
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        41,
-        0
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        42,
-        0
-      ]
-    ],
-    [
-      [
-        7655,
-        6486
-      ],
-      [
-        -21,
-        -18
-      ],
-      [
-        -3,
-        -16
-      ],
-      [
-        6,
-        -21
-      ],
-      [
-        3,
-        -26
-      ],
-      [
-        1,
-        -33
-      ],
-      [
-        -12,
-        -72
-      ],
-      [
-        -23,
-        -111
-      ],
-      [
-        -12,
-        -70
-      ],
-      [
-        -1,
-        -29
-      ],
-      [
-        -15,
-        -37
-      ],
-      [
-        -30,
-        -47
-      ],
-      [
-        -22,
-        -28
-      ],
-      [
-        -12,
-        -9
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -9,
-        11
-      ],
-      [
-        -9,
-        -8
-      ],
-      [
-        -10,
-        -26
-      ],
-      [
-        -9,
-        -14
-      ],
-      [
-        -9,
-        -1
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -6,
-        -33
-      ],
-      [
-        -6,
-        -19
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        5,
-        -28
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -6,
-        -16
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        -1,
-        21
-      ],
-      [
-        -6,
-        14
-      ],
-      [
-        -9,
-        9
-      ],
-      [
-        -12,
-        -19
-      ],
-      [
-        -16,
-        -48
-      ],
-      [
-        -7,
-        -31
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        1,
-        -31
-      ],
-      [
-        -4,
-        -13
-      ],
-      [
-        -8,
-        -5
-      ],
-      [
-        -7,
-        -17
-      ],
-      [
-        -5,
-        -29
-      ],
-      [
-        -12,
-        -18
-      ],
-      [
-        -19,
-        -8
-      ],
-      [
-        -20,
-        13
-      ]
-    ],
-    [
-      [
-        7146,
-        6928
-      ],
-      [
-        0,
-        -1
-      ],
-      [
-        2,
-        -7
-      ],
-      [
-        16,
-        -4
-      ],
-      [
-        11,
-        -9
-      ],
-      [
-        8,
-        -12
-      ],
-      [
-        30,
-        -25
-      ],
-      [
-        9,
-        -15
-      ],
-      [
-        10,
-        -9
-      ],
-      [
-        9,
-        -1
-      ],
-      [
-        6,
-        5
-      ],
-      [
-        3,
-        11
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        6,
-        -10
-      ],
-      [
-        17,
-        -11
-      ],
-      [
-        0,
-        -3
-      ],
-      [
-        -47,
-        -18
-      ],
-      [
-        -10,
-        -9
-      ],
-      [
-        12,
-        -6
-      ],
-      [
-        12,
-        2
-      ],
-      [
-        12,
-        9
-      ],
-      [
-        14,
-        -1
-      ],
-      [
-        12,
-        -4
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        1,
-        2
-      ],
-      [
-        21,
-        -24
-      ],
-      [
-        7,
-        -3
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        18,
-        12
-      ],
-      [
-        28,
-        15
-      ],
-      [
-        27,
-        6
-      ],
-      [
-        26,
-        -3
-      ],
-      [
-        16,
-        4
-      ],
-      [
-        15,
-        15
-      ],
-      [
-        33,
-        50
-      ],
-      [
-        38,
-        39
-      ],
-      [
-        62,
-        50
-      ],
-      [
-        61,
-        39
-      ]
-    ],
-    [
-      [
-        7655,
-        7027
-      ],
-      [
-        0,
-        -34
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -43
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -43
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -42
-      ],
-      [
-        0,
-        -43
-      ]
-    ],
-    [
-      [
-        5236,
-        3667
-      ],
-      [
-        -39,
-        21
-      ],
-      [
-        -10,
-        13
-      ],
-      [
-        -18,
-        15
-      ],
-      [
-        -16,
-        30
-      ],
-      [
-        -32,
-        37
-      ],
-      [
-        -12,
-        9
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -17,
-        -15
-      ],
-      [
-        -10,
-        0
-      ],
-      [
-        -16,
-        5
-      ],
-      [
-        -3,
-        5
-      ],
-      [
-        -3,
-        11
-      ],
-      [
-        -6,
-        8
-      ],
-      [
-        -5,
-        -6
-      ],
-      [
-        -25,
-        -16
-      ],
-      [
-        -3,
-        -11
-      ],
-      [
-        -14,
-        0
-      ],
-      [
-        -14,
-        8
-      ],
-      [
-        -34,
-        -25
-      ],
-      [
-        -12,
-        -19
-      ],
-      [
-        -12,
-        -7
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -4,
-        2
-      ],
-      [
-        -13,
-        23
-      ],
-      [
-        -13,
-        7
-      ],
-      [
-        -18,
-        23
-      ],
-      [
-        -1,
-        20
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -4,
-        -2
-      ],
-      [
-        -8,
-        -17
-      ],
-      [
-        -4,
-        -4
-      ],
-      [
-        -5,
-        0
-      ],
-      [
-        -18,
-        12
-      ],
-      [
-        -7,
-        21
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -7,
-        -6
-      ],
-      [
-        -4,
-        -23
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -6,
-        -32
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -5,
-        8
-      ],
-      [
-        -3,
-        11
-      ],
-      [
-        -2,
-        10
-      ],
-      [
-        3,
-        25
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -9,
-        -12
-      ],
-      [
-        -7,
-        0
-      ],
-      [
-        -10,
-        -11
-      ],
-      [
-        -6,
-        -4
-      ],
-      [
-        -5,
-        3
-      ],
-      [
-        -9,
-        19
-      ],
-      [
-        -16,
-        12
-      ],
-      [
-        -6,
-        23
-      ],
-      [
-        -3,
-        6
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        -3,
-        -1
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -18,
-        -30
-      ],
-      [
-        -8,
-        -9
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -4,
-        8
-      ],
-      [
-        -1,
-        29
-      ],
-      [
-        -4,
-        9
-      ],
-      [
-        -16,
-        19
-      ],
-      [
-        -4,
-        18
-      ],
-      [
-        -1,
-        24
-      ],
-      [
-        -20,
-        -3
-      ],
-      [
-        -25,
-        2
-      ],
-      [
-        -11,
-        -22
-      ],
-      [
-        -6,
-        -4
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -20,
-        29
-      ],
-      [
-        -21,
-        -6
-      ],
-      [
-        -12,
-        3
-      ],
-      [
-        -29,
-        22
-      ],
-      [
-        -23,
-        2
-      ],
-      [
-        -10,
-        4
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -2,
-        33
-      ],
-      [
-        -9,
-        28
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        -16,
-        20
-      ],
-      [
-        -2,
-        0
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -4,
-        -22
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -18,
-        6
-      ],
-      [
-        -17,
-        -7
-      ],
-      [
-        -9,
-        11
-      ],
-      [
-        -32,
-        52
-      ],
-      [
-        -12,
-        13
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        49
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        49
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        49
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        0,
-        48
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -32,
-        0
-      ],
-      [
-        -33,
-        0
-      ],
-      [
-        -32,
-        0
-      ]
-    ],
-    [
-      [
-        258,
-        8704
-      ],
-      [
-        17,
-        10
-      ],
-      [
-        14,
-        -8
-      ],
-      [
-        17,
-        -18
-      ],
-      [
-        17,
-        -55
-      ],
-      [
-        17,
-        -92
-      ],
-      [
-        4,
-        -30
-      ],
-      [
-        13,
-        -19
-      ],
-      [
-        15,
-        -1
-      ],
-      [
-        62,
-        -14
-      ],
-      [
-        9,
-        1
-      ],
-      [
-        12,
-        4
-      ],
-      [
-        35,
-        35
-      ],
-      [
-        38,
-        11
-      ],
-      [
-        45,
-        -2
-      ],
-      [
-        28,
-        -10
-      ],
-      [
-        10,
-        -18
-      ],
-      [
-        24,
-        -1
-      ],
-      [
-        57,
-        20
-      ],
-      [
-        63,
-        14
-      ],
-      [
-        34,
-        15
-      ],
-      [
-        38,
-        31
-      ],
-      [
-        88,
-        38
-      ],
-      [
-        43,
-        5
-      ],
-      [
-        22,
-        14
-      ],
-      [
-        6,
-        8
-      ],
-      [
-        3,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        1
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        46,
-        0
-      ],
-      [
-        42,
-        0
-      ]
-    ],
-    [
-      [
-        83,
-        7031
-      ],
-      [
-        -22,
-        49
-      ],
-      [
-        -9,
-        74
-      ],
-      [
-        -2,
-        30
-      ],
-      [
-        3,
-        82
-      ],
-      [
-        -7,
-        35
-      ],
-      [
-        -16,
-        57
-      ],
-      [
-        7,
-        50
-      ],
-      [
-        7,
-        31
-      ],
-      [
-        19,
-        132
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        14,
-        22
-      ],
-      [
-        -6,
-        5
-      ],
-      [
-        -10,
-        -10
-      ],
-      [
-        9,
-        52
-      ],
-      [
-        9,
-        45
-      ],
-      [
-        6,
-        16
-      ],
-      [
-        3,
-        147
-      ],
-      [
-        6,
-        112
-      ],
-      [
-        9,
-        37
-      ],
-      [
-        -3,
-        38
-      ],
-      [
-        3,
-        51
-      ],
-      [
-        -2,
-        53
-      ],
-      [
-        19,
-        251
-      ],
-      [
-        -3,
-        30
-      ],
-      [
-        6,
-        41
-      ],
-      [
-        -5,
-        107
-      ],
-      [
-        2,
-        120
-      ],
-      [
-        -5,
-        15
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        9,
-        -18
-      ],
-      [
-        42,
-        0
-      ],
-      [
-        26,
-        17
-      ],
-      [
-        9,
-        -6
-      ],
-      [
-        12,
-        -22
-      ],
-      [
-        14,
-        -4
-      ],
-      [
-        17,
-        4
-      ]
-    ],
-    [
-      [
-        8598,
-        6219
-      ],
-      [
-        -17,
-        -36
-      ],
-      [
-        -26,
-        -12
-      ],
-      [
-        -13,
-        -13
-      ],
-      [
-        -4,
-        -7
-      ]
-    ],
-    [
-      [
-        7835,
-        6114
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -23,
-        0
-      ],
-      [
-        -22,
-        0
-      ],
-      [
-        0,
-        46
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        46
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        46
-      ],
-      [
-        0,
-        47
-      ],
-      [
-        0,
-        46
-      ]
-    ],
-    [
-      [
-        7655,
-        7027
-      ],
-      [
-        32,
-        20
-      ],
-      [
-        14,
-        14
-      ],
-      [
-        15,
-        14
-      ],
-      [
-        7,
-        8
-      ],
-      [
-        9,
-        7
-      ],
-      [
-        54,
-        52
-      ]
-    ],
-    [
-      [
-        9241,
-        6824
-      ],
-      [
-        -5,
-        -8
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        4,
-        0
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        -1,
-        -23
-      ]
-    ],
-    [
-      [
-        9262,
-        6826
-      ],
-      [
-        -9,
-        -11
-      ],
-      [
-        -9,
-        2
-      ],
-      [
-        5,
-        15
-      ],
-      [
-        2,
-        22
-      ],
-      [
-        4,
-        24
-      ],
-      [
-        3,
-        7
-      ],
-      [
-        6,
-        7
-      ],
-      [
-        -2,
-        -66
-      ]
-    ],
-    [
-      [
-        9263,
-        6913
-      ],
-      [
-        -6,
-        -10
-      ],
-      [
-        -7,
-        15
-      ],
-      [
-        -3,
-        17
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        5,
-        -38
-      ],
-      [
-        -11,
-        -28
-      ],
-      [
-        -3,
-        -72
-      ],
-      [
-        -14,
-        -30
-      ],
-      [
-        -42,
-        -20
-      ],
-      [
-        -13,
-        2
-      ]
-    ],
-    [
-      [
-        7994,
-        3759
-      ],
-      [
-        -3,
-        -1
-      ],
-      [
-        -45,
-        -60
-      ],
-      [
-        -14,
-        -26
-      ],
-      [
-        -38,
-        -102
-      ],
-      [
-        -10,
-        -65
-      ],
-      [
-        -7,
-        27
-      ],
-      [
-        2,
-        21
-      ],
-      [
-        0,
-        16
-      ],
-      [
-        -10,
-        -36
-      ],
-      [
-        9,
-        -52
-      ],
-      [
-        -8,
-        -20
-      ],
-      [
-        -25,
-        -38
-      ],
-      [
-        -13,
-        -6
-      ],
-      [
-        -16,
-        -10
-      ],
-      [
-        -4,
-        -37
-      ],
-      [
-        -21,
-        -34
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -23,
-        9
-      ],
-      [
-        7,
-        -33
-      ],
-      [
-        -8,
-        -25
-      ],
-      [
-        -14,
-        -19
-      ],
-      [
-        -17,
-        -12
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -9,
-        -6
-      ],
-      [
-        -7,
-        -16
-      ],
-      [
-        -16,
-        -15
-      ],
-      [
-        -17,
-        8
-      ],
-      [
-        -19,
-        5
-      ],
-      [
-        -11,
-        -8
-      ],
-      [
-        18,
-        -15
-      ],
-      [
-        10,
-        -21
-      ],
-      [
-        -2,
-        -29
-      ],
-      [
-        -5,
-        -11
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -5,
-        2
-      ],
-      [
-        -3,
-        14
-      ],
-      [
-        -3,
-        28
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        -5,
-        -5
-      ],
-      [
-        -16,
-        45
-      ],
-      [
-        1,
-        -34
-      ],
-      [
-        5,
-        -26
-      ],
-      [
-        6,
-        -14
-      ],
-      [
-        5,
-        -7
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -11,
-        -29
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        2,
-        -16
-      ]
-    ],
-    [
-      [
-        3582,
-        7434
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        -1,
-        100
-      ],
-      [
-        0,
-        101
-      ],
-      [
-        0,
-        101
-      ]
-    ],
-    [
-      [
-        7110,
-        4858
-      ],
-      [
-        39,
-        0
-      ],
-      [
-        84,
-        -1
-      ],
-      [
-        59,
-        -1
-      ],
-      [
-        49,
-        0
-      ],
-      [
-        29,
-        0
-      ],
-      [
-        37,
-        -1
-      ],
-      [
-        8,
-        9
-      ],
-      [
-        18,
-        -2
-      ],
-      [
-        24,
-        -2
-      ]
-    ],
-    [
-      [
-        4770,
-        651
-      ],
-      [
-        -2,
-        -18
-      ],
-      [
-        -14,
-        87
-      ],
-      [
-        -24,
-        198
-      ],
-      [
-        0,
-        112
-      ],
-      [
-        3,
-        39
-      ],
-      [
-        6,
-        -159
-      ],
-      [
-        26,
-        -202
-      ],
-      [
-        5,
-        -57
-      ]
-    ],
-    [
-      [
-        4739,
-        1111
-      ],
-      [
-        -6,
-        -24
-      ],
-      [
-        2,
-        35
-      ],
-      [
-        14,
-        78
-      ],
-      [
-        29,
-        104
-      ],
-      [
-        12,
-        17
-      ],
-      [
-        -33,
-        -113
-      ],
-      [
-        -18,
-        -97
-      ]
-    ],
-    [
-      [
-        4798,
-        1353
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        8,
-        33
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        13,
-        42
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        3,
-        -18
-      ],
-      [
-        -14,
-        -29
-      ],
-      [
-        -16,
-        -46
-      ]
-    ],
-    [
-      [
-        4841,
-        1454
-      ],
-      [
-        -7,
-        -2
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        13,
-        11
-      ],
-      [
-        28,
-        42
-      ],
-      [
-        12,
-        3
-      ],
-      [
-        6,
-        14
-      ],
-      [
-        2,
-        2
-      ],
-      [
-        -1,
-        -17
-      ],
-      [
-        -23,
-        -25
-      ],
-      [
-        -38,
-        -50
-      ]
-    ],
-    [
-      [
-        5140,
-        1854
-      ],
-      [
-        -9,
-        -4
-      ],
-      [
-        38,
-        62
-      ],
-      [
-        8,
-        21
-      ],
-      [
-        10,
-        -1
-      ],
-      [
-        -17,
-        -35
-      ],
-      [
-        -30,
-        -43
-      ]
-    ],
-    [
-      [
-        5355,
-        2189
-      ],
-      [
-        -8,
-        1
-      ],
-      [
-        -18,
-        -66
-      ],
-      [
-        10,
-        -38
-      ],
-      [
-        0,
-        -13
-      ],
-      [
-        -37,
-        -8
-      ],
-      [
-        -82,
-        -75
-      ],
-      [
-        -32,
-        -40
-      ],
-      [
-        2,
-        14
-      ],
-      [
-        39,
-        52
-      ],
-      [
-        -14,
-        8
-      ],
-      [
-        -22,
-        -13
-      ],
-      [
-        -8,
-        5
-      ],
-      [
-        9,
-        43
-      ],
-      [
-        -3,
-        38
-      ],
-      [
-        -15,
-        1
-      ],
-      [
-        -10,
-        -30
-      ],
-      [
-        -7,
-        1
-      ],
-      [
-        -9,
-        13
-      ],
-      [
-        -7,
-        -4
-      ],
-      [
-        5,
-        -69
-      ],
-      [
-        10,
-        -28
-      ],
-      [
-        8,
-        -36
-      ],
-      [
-        -23,
-        -45
-      ],
-      [
-        -21,
-        -37
-      ],
-      [
-        -2,
-        -36
-      ],
-      [
-        -21,
-        -46
-      ],
-      [
-        -20,
-        -27
-      ],
-      [
-        -46,
-        -62
-      ],
-      [
-        -13,
-        -13
-      ],
-      [
-        -21,
-        -29
-      ],
-      [
-        -29,
-        -21
-      ],
-      [
-        -28,
-        -34
-      ],
-      [
-        -9,
-        -6
-      ],
-      [
-        17,
-        29
-      ],
-      [
-        21,
-        29
-      ],
-      [
-        -18,
-        -4
-      ],
-      [
-        -27,
-        13
-      ],
-      [
-        -17,
-        1
-      ],
-      [
-        -1,
-        -10
-      ],
-      [
-        -12,
-        -15
-      ],
-      [
-        -14,
-        22
-      ],
-      [
-        -6,
-        14
-      ],
-      [
-        -2,
-        13
-      ],
-      [
-        -6,
-        3
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        20,
-        -89
-      ],
-      [
-        9,
-        -3
-      ],
-      [
-        9,
-        -9
-      ],
-      [
-        -11,
-        -21
-      ],
-      [
-        -13,
-        -16
-      ],
-      [
-        -20,
-        -10
-      ],
-      [
-        -17,
-        32
-      ],
-      [
-        -3,
-        -40
-      ],
-      [
-        -3,
-        -41
-      ],
-      [
-        -5,
-        -10
-      ],
-      [
-        -9,
-        -15
-      ],
-      [
-        -5,
-        11
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        -6,
-        -14
-      ],
-      [
-        -9,
-        -11
-      ],
-      [
-        -14,
-        -2
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        0,
-        -17
-      ],
-      [
-        3,
-        -17
-      ],
-      [
-        18,
-        13
-      ],
-      [
-        -7,
-        -43
-      ],
-      [
-        -17,
-        -43
-      ],
-      [
-        -14,
-        -10
-      ],
-      [
-        -21,
-        6
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -5,
-        -9
-      ],
-      [
-        25,
-        -67
-      ],
-      [
-        -16,
-        -101
-      ],
-      [
-        -10,
-        -37
-      ],
-      [
-        -7,
-        -5
-      ],
-      [
-        -8,
-        -1
-      ],
-      [
-        -27,
-        33
-      ],
-      [
-        -15,
-        25
-      ],
-      [
-        13,
-        -69
-      ],
-      [
-        36,
-        -20
-      ],
-      [
-        2,
-        -26
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        -7,
-        -26
-      ],
-      [
-        -7,
-        -34
-      ],
-      [
-        5,
-        -24
-      ],
-      [
-        5,
-        -60
-      ],
-      [
-        5,
-        -27
-      ],
-      [
-        6,
-        -83
-      ],
-      [
-        5,
-        -36
-      ],
-      [
-        33,
-        -133
-      ],
-      [
-        11,
-        -1
-      ],
-      [
-        2,
-        -14
-      ],
-      [
-        -1,
-        -27
-      ],
-      [
-        -24,
-        -8
-      ],
-      [
-        -10,
-        -13
-      ],
-      [
-        -2,
-        -10
-      ],
-      [
-        -1,
-        -6
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -11,
-        8
-      ],
-      [
-        -26,
-        38
-      ],
-      [
-        -37,
-        23
-      ],
-      [
-        -49,
-        9
-      ],
-      [
-        -33,
-        19
-      ],
-      [
-        -18,
-        29
-      ],
-      [
-        -18,
-        17
-      ],
-      [
-        -20,
-        5
-      ],
-      [
-        -16,
-        15
-      ],
-      [
-        -13,
-        26
-      ],
-      [
-        -18,
-        17
-      ],
-      [
-        -25,
-        7
-      ],
-      [
-        -16,
-        19
-      ],
-      [
-        -11,
-        47
-      ],
-      [
-        0,
-        1
-      ],
-      [
-        -10,
-        79
-      ],
-      [
-        -13,
-        49
-      ],
-      [
-        -24,
-        62
-      ],
-      [
-        -2,
-        8
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        3,
-        35
-      ],
-      [
-        -2,
-        26
-      ],
-      [
-        -8,
-        21
-      ],
-      [
-        -2,
-        22
-      ],
-      [
-        4,
-        23
-      ],
-      [
-        1,
-        28
-      ],
-      [
-        -4,
-        33
-      ],
-      [
-        -16,
-        35
-      ],
-      [
-        -27,
-        38
-      ],
-      [
-        -24,
-        55
-      ],
-      [
-        -19,
-        73
-      ],
-      [
-        -19,
-        50
-      ],
-      [
-        -19,
-        28
-      ],
-      [
-        -13,
-        35
-      ],
-      [
-        -7,
-        40
-      ],
-      [
-        -2,
-        23
-      ],
-      [
-        3,
-        7
-      ],
-      [
-        -12,
-        45
-      ],
-      [
-        -26,
-        83
-      ],
-      [
-        -15,
-        61
-      ],
-      [
-        -4,
-        39
-      ],
-      [
-        -16,
-        46
-      ],
-      [
-        -30,
-        53
-      ],
-      [
-        -16,
-        35
-      ],
-      [
-        -4,
-        24
-      ],
-      [
-        -45,
-        70
-      ],
-      [
-        -14,
-        43
-      ],
-      [
-        -10,
-        14
-      ],
-      [
-        -12,
-        -1
-      ],
-      [
-        -6,
-        4
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -8,
-        -9
-      ],
-      [
-        -24,
-        -2
-      ],
-      [
-        -42,
-        6
-      ],
-      [
-        -29,
-        12
-      ],
-      [
-        -19,
-        18
-      ],
-      [
-        -13,
-        -2
-      ],
-      [
-        -7,
-        -24
-      ],
-      [
-        -16,
-        -15
-      ],
-      [
-        -24,
-        -7
-      ],
-      [
-        -20,
-        -43
-      ],
-      [
-        -18,
-        -81
-      ],
-      [
-        -7,
-        -52
-      ],
-      [
-        2,
-        -23
-      ],
-      [
-        -5,
-        -17
-      ],
-      [
-        -11,
-        -10
-      ],
-      [
-        -11,
-        -23
-      ],
-      [
-        -12,
-        -37
-      ],
-      [
-        -13,
-        -17
-      ],
-      [
-        -16,
-        1
-      ],
-      [
-        -29,
-        28
-      ],
-      [
-        -41,
-        55
-      ],
-      [
-        -33,
-        34
-      ],
-      [
-        -24,
-        12
-      ],
-      [
-        -21,
-        26
-      ],
-      [
-        -18,
-        38
-      ],
-      [
-        -17,
-        25
-      ],
-      [
-        -15,
-        12
-      ],
-      [
-        -18,
-        42
-      ],
-      [
-        -20,
-        71
-      ],
-      [
-        -11,
-        55
-      ],
-      [
-        0,
-        58
-      ],
-      [
-        -26,
-        126
-      ],
-      [
-        -15,
-        55
-      ],
-      [
-        -10,
-        25
-      ],
-      [
-        -21,
-        30
-      ],
-      [
-        -31,
-        35
-      ],
-      [
-        -41,
-        70
-      ],
-      [
-        -52,
-        105
-      ],
-      [
-        -36,
-        63
-      ],
-      [
-        -22,
-        21
-      ],
-      [
-        -18,
-        38
-      ],
-      [
-        -16,
-        54
-      ],
-      [
-        -16,
-        35
-      ],
-      [
-        -1,
-        1
-      ]
-    ],
-    [
-      [
-        2366,
-        7031
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -51
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        0,
-        -50
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        44,
-        0
-      ],
-      [
-        43,
-        0
-      ],
-      [
-        43,
-        0
-      ]
-    ],
-    [
-      [
-        8546,
-        5430
-      ],
-      [
-        -38,
-        -159
-      ],
-      [
-        1,
-        -29
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -12,
-        -8
-      ],
-      [
-        -12,
-        -17
-      ],
-      [
-        -8,
-        -20
-      ],
-      [
-        -7,
-        -51
-      ],
-      [
-        -14,
-        -59
-      ],
-      [
-        -9,
-        25
-      ],
-      [
-        -2,
-        20
-      ],
-      [
-        4,
-        55
-      ],
-      [
-        15,
-        89
-      ],
-      [
-        17,
-        55
-      ],
-      [
-        12,
-        26
-      ],
-      [
-        11,
-        53
-      ]
-    ],
-    [
-      [
-        8572,
-        5436
-      ],
-      [
-        -19,
-        -61
-      ],
-      [
-        -8,
-        -7
-      ],
-      [
-        22,
-        67
-      ]
-    ],
-    [
-      [
-        8259,
-        5778
-      ],
-      [
-        -2,
-        -46
-      ],
-      [
-        -8,
-        -22
-      ],
-      [
-        -13,
-        -18
-      ],
-      [
-        -17,
-        -30
-      ],
-      [
-        -4,
-        -29
-      ],
-      [
-        -5,
-        -53
-      ],
-      [
-        7,
-        -18
-      ],
-      [
-        7,
-        -5
-      ],
-      [
-        21,
-        12
-      ],
-      [
-        11,
-        -5
-      ],
-      [
-        25,
-        -65
-      ],
-      [
-        45,
-        -25
-      ],
-      [
-        17,
-        -16
-      ],
-      [
-        13,
-        -34
-      ],
-      [
-        20,
-        -19
-      ],
-      [
-        16,
-        -28
-      ],
-      [
-        0,
-        -18
-      ],
-      [
-        -5,
-        -22
-      ],
-      [
-        -2,
-        -29
-      ],
-      [
-        -7,
-        -19
-      ],
-      [
-        -16,
-        -2
-      ],
-      [
-        -10,
-        5
-      ],
-      [
-        -52,
-        103
-      ],
-      [
-        -6,
-        9
-      ],
-      [
-        -19,
-        54
-      ],
-      [
-        -23,
-        29
-      ],
-      [
-        -7,
-        0
-      ],
-      [
-        32,
-        -54
-      ],
-      [
-        14,
-        -37
-      ],
-      [
-        23,
-        -52
-      ],
-      [
-        16,
-        -23
-      ],
-      [
-        13,
-        -34
-      ],
-      [
-        11,
-        -17
-      ],
-      [
-        31,
-        -23
-      ],
-      [
-        -11,
-        -16
-      ],
-      [
-        17,
-        -14
-      ],
-      [
-        3,
-        -26
-      ],
-      [
-        -2,
-        -30
-      ],
-      [
-        -24,
-        12
-      ],
-      [
-        0,
-        -22
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -11,
-        -11
-      ],
-      [
-        -15,
-        15
-      ],
-      [
-        -38,
-        79
-      ],
-      [
-        1,
-        -11
-      ],
-      [
-        3,
-        -12
-      ],
-      [
-        22,
-        -51
-      ],
-      [
-        20,
-        -30
-      ],
-      [
-        16,
-        -14
-      ],
-      [
-        13,
-        -26
-      ],
-      [
-        5,
-        -15
-      ],
-      [
-        3,
-        -24
-      ],
-      [
-        -10,
-        -15
-      ],
-      [
-        -11,
-        -9
-      ],
-      [
-        -10,
-        16
-      ],
-      [
-        -8,
-        16
-      ],
-      [
-        -17,
-        29
-      ],
-      [
-        -5,
-        32
-      ],
-      [
-        -12,
-        -2
-      ],
-      [
-        -53,
-        40
-      ],
-      [
-        -42,
-        5
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        6,
-        -6
-      ],
-      [
-        33,
-        -10
-      ],
-      [
-        13,
-        -18
-      ],
-      [
-        28,
-        -17
-      ],
-      [
-        16,
-        -4
-      ],
-      [
-        7,
-        -51
-      ],
-      [
-        22,
-        -34
-      ],
-      [
-        3,
-        -26
-      ],
-      [
-        16,
-        -3
-      ],
-      [
-        26,
-        25
-      ],
-      [
-        18,
-        -9
-      ],
-      [
-        25,
-        -7
-      ],
-      [
-        6,
-        -20
-      ],
-      [
-        4,
-        -39
-      ],
-      [
-        9,
-        -44
-      ],
-      [
-        5,
-        -43
-      ]
-    ],
-    [
-      [
-        8457,
-        4836
-      ],
-      [
-        -13,
-        1
-      ]
-    ],
-    [
-      [
-        7404,
-        5235
-      ],
-      [
-        2,
-        -13
-      ],
-      [
-        -3,
-        -14
-      ],
-      [
-        6,
-        -17
-      ],
-      [
-        4,
-        -25
-      ],
-      [
-        7,
-        -16
-      ],
-      [
-        8,
-        -13
-      ],
-      [
-        13,
-        -11
-      ],
-      [
-        16,
-        -19
-      ],
-      [
-        13,
-        -6
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        14,
-        19
-      ],
-      [
-        11,
-        10
-      ],
-      [
-        12,
-        21
-      ],
-      [
-        21,
-        -29
-      ],
-      [
-        9,
-        0
-      ],
-      [
-        21,
-        13
-      ],
-      [
-        19,
-        3
-      ],
-      [
-        5,
-        4
-      ],
-      [
-        8,
-        11
-      ],
-      [
-        0,
-        24
-      ],
-      [
-        1,
-        6
-      ],
-      [
-        4,
-        3
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        8,
-        -9
-      ],
-      [
-        9,
-        0
-      ],
-      [
-        37,
-        27
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        4,
-        -13
-      ],
-      [
-        17,
-        17
-      ],
-      [
-        9,
-        14
-      ],
-      [
-        4,
-        23
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        -6,
-        13
-      ],
-      [
-        7,
-        30
-      ],
-      [
-        10,
-        29
-      ],
-      [
-        38,
-        90
-      ],
-      [
-        12,
-        54
-      ],
-      [
-        15,
-        35
-      ],
-      [
-        5,
-        27
-      ],
-      [
-        12,
-        28
-      ],
-      [
-        8,
-        56
-      ],
-      [
-        5,
-        12
-      ],
-      [
-        8,
-        1
-      ],
-      [
-        7,
-        -7
-      ],
-      [
-        5,
-        -10
-      ],
-      [
-        4,
-        -17
-      ],
-      [
-        18,
-        -15
-      ],
-      [
-        16,
-        -2
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        7,
-        20
-      ],
-      [
-        9,
-        37
-      ],
-      [
-        8,
-        22
-      ],
-      [
-        5,
-        28
-      ],
-      [
-        6,
-        19
-      ],
-      [
-        8,
-        12
-      ],
-      [
-        22,
-        -1
-      ],
-      [
-        11,
-        17
-      ],
-      [
-        8,
-        20
-      ],
-      [
-        5,
-        6
-      ],
-      [
-        6,
-        -1
-      ],
-      [
-        20,
-        31
-      ],
-      [
-        25,
-        65
-      ],
-      [
-        5,
-        41
-      ],
-      [
-        7,
-        30
-      ],
-      [
-        2,
-        30
-      ],
-      [
-        5,
-        17
-      ],
-      [
-        23,
-        -33
-      ],
-      [
-        13,
-        -19
-      ],
-      [
-        29,
-        -43
-      ],
-      [
-        20,
-        -29
-      ],
-      [
-        7,
-        33
-      ],
-      [
-        12,
-        48
-      ]
-    ],
-    [
-      [
-        8896,
-        8241
-      ],
-      [
-        30,
-        0
-      ],
-      [
-        72,
-        1
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        72,
-        0
-      ],
-      [
-        72,
-        0
-      ]
-    ],
-    [
-      [
-        322,
-        9127
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        -2,
-        1
-      ],
-      [
-        -6,
-        16
-      ],
-      [
-        -1,
-        11
-      ],
-      [
-        5,
-        8
-      ],
-      [
-        6,
-        -23
-      ],
-      [
-        0,
-        -5
-      ]
-    ],
-    [
-      [
-        401,
-        9204
-      ],
-      [
-        -1,
-        -9
-      ],
-      [
-        -6,
-        -7
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        0,
-        11
-      ],
-      [
-        -2,
-        2
-      ],
-      [
-        -7,
-        -13
-      ],
-      [
-        1,
-        25
-      ],
-      [
-        3,
-        27
-      ],
-      [
-        3,
-        1
-      ],
-      [
-        5,
-        -18
-      ],
-      [
-        8,
-        -20
-      ]
-    ],
-    [
-      [
-        383,
-        9284
-      ],
-      [
-        -1,
-        -8
-      ],
-      [
-        -9,
-        10
-      ],
-      [
-        -3,
-        8
-      ],
-      [
-        0,
-        19
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        2,
-        2
-      ],
-      [
-        6,
-        -5
-      ],
-      [
-        1,
-        -3
-      ],
-      [
-        2,
-        -36
-      ]
-    ],
-    [
-      [
-        370,
-        9510
-      ],
-      [
-        9,
-        -52
-      ],
-      [
-        3,
-        22
-      ],
-      [
-        24,
-        -38
-      ],
-      [
-        0,
-        -19
-      ],
-      [
-        -3,
-        -7
-      ],
-      [
-        -5,
-        -2
-      ],
-      [
-        -4,
-        6
-      ],
-      [
-        -5,
-        13
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        -11,
-        4
-      ],
-      [
-        -6,
-        15
-      ],
-      [
-        -2,
-        11
-      ],
-      [
-        -1,
-        29
-      ],
-      [
-        -2,
-        9
-      ],
-      [
-        -6,
-        2
-      ],
-      [
-        -6,
-        7
-      ],
-      [
-        -9,
-        21
-      ],
-      [
-        -1,
-        6
-      ],
-      [
-        4,
-        17
-      ],
-      [
-        10,
-        28
-      ],
-      [
-        7,
-        13
-      ],
-      [
-        4,
-        -1
-      ],
-      [
-        5,
-        -9
-      ],
-      [
-        7,
-        -15
-      ],
-      [
-        -2,
-        -11
-      ],
-      [
-        -25,
-        -22
-      ],
-      [
-        -1,
-        -5
-      ],
-      [
-        12,
-        -6
-      ],
-      [
-        5,
-        -5
-      ],
-      [
-        4,
-        -18
-      ]
-    ],
-    [
-      [
-        327,
-        9621
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -10,
-        5
-      ],
-      [
-        -5,
-        9
-      ],
-      [
-        -2,
-        12
-      ],
-      [
-        3,
-        21
-      ],
-      [
-        5,
-        6
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        8,
-        -19
-      ],
-      [
-        -1,
-        -9
-      ]
-    ],
-    [
-      [
-        294,
-        9649
-      ],
-      [
-        5,
-        -13
-      ],
-      [
-        -19,
-        8
-      ],
-      [
-        -8,
-        8
-      ],
-      [
-        -2,
-        7
-      ],
-      [
-        -3,
-        25
-      ],
-      [
-        1,
-        8
-      ],
-      [
-        8,
-        2
-      ],
-      [
-        16,
-        -30
-      ],
-      [
-        2,
-        -15
-      ]
-    ],
-    [
-      [
-        334,
-        9718
-      ],
-      [
-        2,
-        -8
-      ],
-      [
-        -7,
-        -9
-      ],
-      [
-        -5,
-        -1
-      ],
-      [
-        -8,
-        13
-      ],
-      [
-        -3,
-        2
-      ],
-      [
-        3,
-        -21
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -16,
-        13
-      ],
-      [
-        -3,
-        10
-      ],
-      [
-        4,
-        11
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        4,
-        1
-      ],
-      [
-        20,
-        -15
-      ]
-    ],
-    [
-      [
-        288,
-        9847
-      ],
-      [
-        -3,
-        -6
-      ],
-      [
-        -2,
-        1
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        7,
-        0
-      ]
-    ],
-    [
-      [
-        258,
-        8704
-      ],
-      [
-        -5,
-        5
-      ],
-      [
-        -9,
-        2
-      ],
-      [
-        -18,
-        20
-      ],
-      [
-        -10,
-        20
-      ],
-      [
-        -32,
-        -1
-      ],
-      [
-        -7,
-        13
-      ],
-      [
-        -36,
-        -13
-      ],
-      [
-        -11,
-        13
-      ],
-      [
-        -20,
-        -9
-      ],
-      [
-        5,
-        38
-      ],
-      [
-        -1,
-        47
-      ],
-      [
-        1,
-        47
-      ],
-      [
-        5,
-        -34
-      ],
-      [
-        12,
-        -36
-      ],
-      [
-        6,
-        41
-      ],
-      [
-        4,
-        51
-      ],
-      [
-        -12,
-        19
-      ],
-      [
-        -19,
-        15
-      ],
-      [
-        -8,
-        47
-      ],
-      [
-        47,
-        41
-      ],
-      [
-        -25,
-        8
-      ],
-      [
-        -9,
-        19
-      ],
-      [
-        -12,
-        2
-      ],
-      [
-        -1,
-        -14
-      ],
-      [
-        -4,
-        -19
-      ],
-      [
-        -4,
-        25
-      ],
-      [
-        -2,
-        29
-      ],
-      [
-        -4,
-        49
-      ],
-      [
-        -20,
-        79
-      ],
-      [
-        -11,
-        102
-      ],
-      [
-        -15,
-        50
-      ],
-      [
-        -28,
-        49
-      ],
-      [
-        -7,
-        28
-      ],
-      [
-        -7,
-        71
-      ],
-      [
-        4,
-        55
-      ],
-      [
-        -5,
-        38
-      ],
-      [
-        13,
-        -3
-      ],
-      [
-        36,
-        -29
-      ],
-      [
-        44,
-        -24
-      ],
-      [
-        13,
-        -17
-      ],
-      [
-        21,
-        -13
-      ],
-      [
-        118,
-        -19
-      ],
-      [
-        8,
-        1
-      ],
-      [
-        15,
-        13
-      ],
-      [
-        7,
-        -2
-      ],
-      [
-        17,
-        -28
-      ],
-      [
-        9,
-        -3
-      ],
-      [
-        11,
-        1
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        15,
-        19
-      ],
-      [
-        1,
-        -7
-      ],
-      [
-        0,
-        -18
-      ],
-      [
-        5,
-        -25
-      ],
-      [
-        11,
-        -33
-      ],
-      [
-        4,
-        -20
-      ],
-      [
-        -21,
-        -58
-      ],
-      [
-        -4,
-        -1
-      ],
-      [
-        -1,
-        19
-      ],
-      [
-        -3,
-        4
-      ],
-      [
-        -40,
-        -97
-      ],
-      [
-        -13,
-        -46
-      ],
-      [
-        -2,
-        -21
-      ],
-      [
-        1,
-        -12
-      ],
-      [
-        5,
-        -3
-      ],
-      [
-        13,
-        5
-      ],
-      [
-        19,
-        19
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        -18,
-        -7
-      ],
-      [
-        -8,
-        0
-      ],
-      [
-        1,
-        21
-      ],
-      [
-        2,
-        11
-      ],
-      [
-        11,
-        32
-      ],
-      [
-        12,
-        19
-      ],
-      [
-        17,
-        21
-      ],
-      [
-        10,
-        17
-      ],
-      [
-        7,
-        25
-      ],
-      [
-        19,
-        29
-      ],
-      [
-        4,
-        8
-      ],
-      [
-        -1,
-        25
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        9,
-        -3
-      ],
-      [
-        4,
-        -42
-      ],
-      [
-        -2,
-        -19
-      ],
-      [
-        -17,
-        -22
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        3,
-        -31
-      ],
-      [
-        -2,
-        -3
-      ],
-      [
-        -7,
-        3
-      ],
-      [
-        -2,
-        -2
-      ],
-      [
-        16,
-        -34
-      ],
-      [
-        5,
-        -26
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -5,
-        -45
-      ],
-      [
-        -4,
-        -8
-      ],
-      [
-        -8,
-        3
-      ],
-      [
-        -10,
-        14
-      ],
-      [
-        -2,
-        -4
-      ],
-      [
-        -9,
-        -35
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        -5,
-        41
-      ],
-      [
-        -3,
-        3
-      ],
-      [
-        -16,
-        -19
-      ],
-      [
-        -6,
-        -18
-      ],
-      [
-        -6,
-        -29
-      ],
-      [
-        -7,
-        -13
-      ],
-      [
-        20,
-        -3
-      ],
-      [
-        18,
-        5
-      ],
-      [
-        14,
-        -13
-      ],
-      [
-        5,
-        -1
-      ],
-      [
-        13,
-        14
-      ],
-      [
-        4,
-        9
-      ],
-      [
-        11,
-        44
-      ],
-      [
-        5,
-        7
-      ],
-      [
-        8,
-        1
-      ],
-      [
-        8,
-        6
-      ],
-      [
-        11,
-        24
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        -5,
-        53
-      ],
-      [
-        2,
-        31
-      ],
-      [
-        -3,
-        9
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        1,
-        10
-      ],
-      [
-        4,
-        16
-      ],
-      [
-        0,
-        15
-      ],
-      [
-        -3,
-        12
-      ],
-      [
-        1,
-        15
-      ],
-      [
-        11,
-        32
-      ],
-      [
-        2,
-        13
-      ],
-      [
-        14,
-        32
-      ],
-      [
-        -4,
-        12
-      ],
-      [
-        -10,
-        16
-      ],
-      [
-        -6,
-        13
-      ],
-      [
-        -6,
-        21
-      ],
-      [
-        -5,
-        7
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        6,
-        -34
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        -17,
-        19
-      ],
-      [
-        -4,
-        12
-      ],
-      [
-        -2,
-        16
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        10,
-        11
-      ],
-      [
-        11,
-        5
-      ],
-      [
-        -1,
-        10
-      ],
-      [
-        -14,
-        32
-      ],
-      [
-        -9,
-        15
-      ],
-      [
-        -7,
-        7
-      ],
-      [
-        -10,
-        2
-      ],
-      [
-        -4,
-        5
-      ],
-      [
-        -1,
-        8
-      ],
-      [
-        2,
-        10
-      ],
-      [
-        5,
-        3
-      ],
-      [
-        14,
-        -4
-      ],
-      [
-        8,
-        7
-      ],
-      [
-        0,
-        13
-      ],
-      [
-        -3,
-        7
-      ],
-      [
-        1,
-        46
-      ],
-      [
-        -6,
-        37
-      ],
-      [
-        -3,
-        7
-      ],
-      [
-        -3,
-        0
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        -10,
-        -1
-      ],
-      [
-        -5,
-        12
-      ],
-      [
-        -7,
-        24
-      ],
-      [
-        -11,
-        56
-      ],
-      [
-        18,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        73,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        74,
-        0
-      ],
-      [
-        18,
-        0
-      ]
-    ],
-    [
-      [
-        6534,
-        8336
-      ],
-      [
-        -4,
-        -5
-      ],
-      [
-        -5,
-        3
-      ],
-      [
-        -2,
-        -7
-      ],
-      [
-        1,
-        -19
-      ],
-      [
-        -2,
-        -8
-      ],
-      [
-        -4,
-        1
-      ],
-      [
-        -1,
-        -3
-      ],
-      [
-        5,
-        -9
-      ],
-      [
-        0,
-        -9
-      ],
-      [
-        -3,
-        -9
-      ],
-      [
-        -3,
-        -5
-      ],
-      [
-        -3,
-        1
-      ],
-      [
-        -5,
-        -11
-      ],
-      [
-        -7,
-        -24
-      ],
-      [
-        -2,
-        -13
-      ],
-      [
-        2,
-        -4
-      ],
-      [
-        -1,
-        -7
-      ],
-      [
-        -16,
-        -35
-      ],
-      [
-        -6,
-        -4
-      ],
-      [
-        -7,
-        5
-      ],
-      [
-        -5,
-        10
-      ],
-      [
-        -3,
-        16
-      ],
-      [
-        -1,
-        12
-      ],
-      [
-        2,
-        9
-      ],
-      [
-        14,
-        31
-      ],
-      [
-        6,
-        20
-      ],
-      [
-        3,
-        23
-      ],
-      [
-        7,
-        14
-      ],
-      [
-        9,
-        6
-      ],
-      [
-        8,
-        15
-      ],
-      [
-        6,
-        22
-      ],
-      [
-        7,
-        9
-      ],
-      [
-        7,
-        -3
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        -1,
-        -14
-      ]
-    ],
-    [
-      [
-        6556,
-        8381
-      ],
-      [
-        -5,
-        -4
-      ],
-      [
-        -10,
-        1
-      ],
-      [
-        -3,
-        9
-      ],
-      [
-        5,
-        24
-      ],
-      [
-        2,
-        -5
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        3,
-        -2
-      ],
-      [
-        1,
-        -6
-      ],
-      [
-        -1,
-        -17
-      ]
-    ],
-    [
-      [
-        5890,
-        8957
-      ],
-      [
-        -10,
-        -5
-      ],
-      [
-        -5,
-        1
-      ],
-      [
-        2,
-        7
-      ],
-      [
-        5,
-        10
-      ],
-      [
-        23,
-        22
-      ],
-      [
-        4,
-        0
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        -12,
-        -11
-      ],
-      [
-        -4,
-        -6
-      ],
-      [
-        0,
-        -6
-      ],
-      [
-        -5,
-        -6
-      ]
-    ],
-    [
-      [
-        5918,
-        9012
-      ],
-      [
-        -6,
-        -2
-      ],
-      [
-        -12,
-        3
-      ],
-      [
-        0,
-        6
-      ],
-      [
-        13,
-        8
-      ],
-      [
-        6,
-        3
-      ],
-      [
-        1,
-        -4
-      ],
-      [
-        -2,
-        -14
-      ]
-    ],
-    [
-      [
-        6427,
-        8283
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -3,
-        -20
-      ],
-      [
-        -10,
-        -16
-      ],
-      [
-        -26,
-        -20
-      ],
-      [
-        -4,
-        -14
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        -17,
-        -47
-      ],
-      [
-        -8,
-        -29
-      ],
-      [
-        -5,
-        -30
-      ],
-      [
-        2,
-        -19
-      ],
-      [
-        8,
-        -7
-      ],
-      [
-        7,
-        3
-      ],
-      [
-        6,
-        13
-      ],
-      [
-        8,
-        13
-      ],
-      [
-        11,
-        11
-      ],
-      [
-        8,
-        16
-      ],
-      [
-        11,
-        40
-      ],
-      [
-        13,
-        22
-      ],
-      [
-        6,
-        2
-      ],
-      [
-        2,
-        -1
-      ],
-      [
-        13,
-        10
-      ],
-      [
-        11,
-        -3
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        2,
-        -10
-      ],
-      [
-        -3,
-        -22
-      ],
-      [
-        -6,
-        -24
-      ],
-      [
-        -9,
-        -25
-      ],
-      [
-        -8,
-        -37
-      ],
-      [
-        -7,
-        -49
-      ],
-      [
-        -2,
-        -38
-      ],
-      [
-        5,
-        -25
-      ],
-      [
-        -4,
-        -22
-      ],
-      [
-        -12,
-        -20
-      ],
-      [
-        -10,
-        -27
-      ],
-      [
-        -7,
-        -33
-      ],
-      [
-        -4,
-        -28
-      ],
-      [
-        -1,
-        -23
-      ],
-      [
-        1,
-        -16
-      ],
-      [
-        4,
-        -23
-      ],
-      [
-        0,
-        -12
-      ],
-      [
-        -13,
-        -50
-      ],
-      [
-        -4,
-        -25
-      ],
-      [
-        -1,
-        -19
-      ],
-      [
-        -3,
-        -19
-      ],
-      [
-        -10,
-        -39
-      ],
-      [
-        -3,
-        -21
-      ],
-      [
-        -1,
-        -20
-      ],
-      [
-        2,
-        -32
-      ],
-      [
-        -1,
-        -11
-      ],
-      [
-        1,
-        -8
-      ],
-      [
-        2,
-        -6
-      ],
-      [
-        0,
-        -10
-      ],
-      [
-        -2,
-        -15
-      ],
-      [
-        0,
-        -11
-      ],
-      [
-        5,
-        -9
-      ],
-      [
-        3,
-        -15
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        3,
-        -20
-      ],
-      [
-        6,
-        -15
-      ],
-      [
-        1,
-        -23
-      ],
-      [
-        -4,
-        -29
-      ],
-      [
-        -1,
-        -55
-      ],
-      [
-        0,
-        -19
-      ]
-    ],
-    [
-      [
-        5648,
-        8949
-      ],
-      [
-        6,
-        -11
-      ],
-      [
-        14,
-        -15
-      ],
-      [
-        12,
-        -1
-      ],
-      [
-        15,
-        3
-      ],
-      [
-        58,
-        25
-      ],
-      [
-        25,
-        18
-      ],
-      [
-        24,
-        31
-      ],
-      [
-        2,
-        1
-      ],
-      [
-        10,
-        -6
-      ],
-      [
-        3,
-        -3
-      ],
-      [
-        32,
-        35
-      ],
-      [
-        10,
-        4
-      ],
-      [
-        8,
-        0
-      ],
-      [
-        10,
-        -14
-      ],
-      [
-        3,
-        -8
-      ],
-      [
-        -4,
-        -16
-      ],
-      [
-        -9,
-        -24
-      ],
-      [
-        -4,
-        -20
-      ],
-      [
-        0,
-        -16
-      ],
-      [
-        -4,
-        -17
-      ],
-      [
-        -10,
-        -24
-      ],
-      [
-        4,
-        -6
-      ],
-      [
-        26,
-        17
-      ],
-      [
-        4,
-        6
-      ],
-      [
-        1,
-        4
-      ],
-      [
-        -2,
-        5
-      ],
-      [
-        3,
-        2
-      ],
-      [
-        21,
-        -23
-      ],
-      [
-        14,
-        -13
-      ],
-      [
-        11,
-        -6
-      ],
-      [
-        11,
-        4
-      ]
-    ],
-    [
-      [
-        5890,
-        9015
-      ],
-      [
-        -3,
-        -3
-      ],
-      [
-        -6,
-        7
-      ],
-      [
-        -1,
-        6
-      ],
-      [
-        2,
-        5
-      ],
-      [
-        3,
-        -1
-      ],
-      [
-        4,
-        -8
-      ],
-      [
-        1,
-        -6
-      ]
-    ],
-    [
-      [
-        5939,
-        9055
-      ],
-      [
-        -6,
-        -6
-      ],
-      [
-        -2,
-        3
-      ],
-      [
-        1,
-        12
-      ],
-      [
-        3,
-        7
-      ],
-      [
-        4,
-        2
-      ],
-      [
-        3,
-        -3
-      ],
-      [
-        0,
-        -8
-      ],
-      [
-        -3,
-        -7
-      ]
-    ]
-  ],
-  "transform": {
-    "scale": [
-      0.005772872856602365,
-      0.0024829805705001468
-    ],
-    "translate": [
-      -124.70997774915153,
-      24.542349340056283
-    ]
-  }
-}
diff --git a/web/gui/src/main/webapp/legacy/d3Utils.css b/web/gui/src/main/webapp/legacy/d3Utils.css
deleted file mode 100644
index a0167d3..0000000
--- a/web/gui/src/main/webapp/legacy/d3Utils.css
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- D3 Utilities CSS file
- */
-
-#d3u .light.norm.c1 {
-  color: #1f77b4;
-}
-
-#d3u .light.norm.c2 {
-  color: #2ca02c;
-}
-
-#d3u .light.norm.c3 {
-  color: #d62728;
-}
-
-#d3u .light.norm.c4 {
-  color: #9467bd;
-}
-
-#d3u .light.norm.c5 {
-  color: #e377c2;
-}
-
-#d3u .light.norm.c6 {
-  color: #bcbd22;
-}
-
-#d3u .light.norm.c7 {
-  color: #17becf;
-}
-
-
-
-#d3u .light.mute.c1 {
-  color: #aec7e8;
-}
-
-#d3u .light.mute.c2 {
-  color: #98df8a;
-}
-
-#d3u .light.mute.c3 {
-  color: #ff9896;
-}
-
-#d3u .light.mute.c4 {
-  color: #c5b0d5;
-}
-
-#d3u .light.mute.c5 {
-  color: #f7b6d2;
-}
-
-#d3u .light.mute.c6 {
-  color: #dbdb8d;
-}
-
-#d3u .light.mute.c7 {
-  color: #9edae5;
-}
-
-
-
-#d3u .dark.norm.c1 {
-  color: #1f77b4;
-}
-
-#d3u .dark.norm.c2 {
-  color: #2ca02c;
-}
-
-#d3u .dark.norm.c3 {
-  color: #d62728;
-}
-
-#d3u .dark.norm.c4 {
-  color: #9467bd;
-}
-
-#d3u .dark.norm.c5 {
-  color: #e377c2;
-}
-
-#d3u .dark.norm.c6 {
-  color: #bcbd22;
-}
-
-#d3u .dark.norm.c7 {
-  color: #17becf;
-}
-
-
-
-#d3u .dark.mute.c1 {
-  color: #aec7e8;
-}
-
-#d3u .dark.mute.c2 {
-  color: #639a56;
-}
-
-#d3u .dark.mute.c3 {
-  color: #ff9896;
-}
-
-#d3u .dark.mute.c4 {
-  color: #c5b0d5;
-}
-
-#d3u .dark.mute.c5 {
-  color: #f7b6d2;
-}
-
-#d3u .dark.mute.c6 {
-  color: #dbdb8d;
-}
-
-#d3u .dark.mute.c7 {
-  color: #9edae5;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/d3Utils.js b/web/gui/src/main/webapp/legacy/d3Utils.js
deleted file mode 100644
index 00ca887..0000000
--- a/web/gui/src/main/webapp/legacy/d3Utils.js
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Utility functions for D3 visualizations.
- */
-
-(function (onos) {
-    'use strict';
-
-    function isF(f) {
-        return $.isFunction(f) ? f : null;
-    }
-
-    // TODO: sensible defaults
-    function createDragBehavior(force, selectCb, atDragEnd,
-                                dragEnabled, clickEnabled) {
-        var draggedThreshold = d3.scale.linear()
-                .domain([0, 0.1])
-                .range([5, 20])
-                .clamp(true),
-            drag,
-            fSel = isF(selectCb),
-            fEnd = isF(atDragEnd),
-            fDEn = isF(dragEnabled),
-            fCEn = isF(clickEnabled),
-            bad = [];
-
-        function naf(what) {
-            return 'd3util.createDragBehavior(): '+ what + ' is not a function';
-        }
-
-        if (!fSel) {
-            bad.push(naf('selectCb'));
-        }
-        if (!fEnd) {
-            bad.push(naf('atDragEnd'));
-        }
-        if (!fDEn) {
-            bad.push(naf('dragEnabled'));
-        }
-        if (!fCEn) {
-            bad.push(naf('clickEnabled'));
-        }
-
-        if (bad.length) {
-            alert(bad.join('\n'));
-            return null;
-        }
-
-
-        function dragged(d) {
-            var threshold = draggedThreshold(force.alpha()),
-                dx = d.oldX - d.px,
-                dy = d.oldY - d.py;
-            if (Math.abs(dx) >= threshold || Math.abs(dy) >= threshold) {
-                d.dragged = true;
-            }
-            return d.dragged;
-        }
-
-        drag = d3.behavior.drag()
-            .origin(function(d) { return d; })
-            .on('dragstart', function(d) {
-                if (clickEnabled() || dragEnabled()) {
-                    d3.event.sourceEvent.stopPropagation();
-
-                    d.oldX = d.x;
-                    d.oldY = d.y;
-                    d.dragged = false;
-                    d.fixed |= 2;
-                    d.dragStarted = true;
-                }
-            })
-            .on('drag', function(d) {
-                if (dragEnabled()) {
-                    d.px = d3.event.x;
-                    d.py = d3.event.y;
-                    if (dragged(d)) {
-                        if (!force.alpha()) {
-                            force.alpha(.025);
-                        }
-                    }
-                }
-            })
-            .on('dragend', function(d) {
-                if (d.dragStarted) {
-                    d.dragStarted = false;
-                    if (!dragged(d)) {
-                        // consider this the same as a 'click'
-                        // (selection of a node)
-                        if (clickEnabled()) {
-                            selectCb(d, this); // TODO: set 'this' context instead of param
-                        }
-                    }
-                    d.fixed &= ~6;
-
-                    // hook at the end of a drag gesture
-                    if (dragEnabled()) {
-                        atDragEnd(d, this); // TODO: set 'this' context instead of param
-                    }
-                }
-            });
-
-        return drag;
-    }
-
-    function loadGlow(defs) {
-        // TODO: parameterize color
-
-        var glow = defs.append('filter')
-            .attr('x', '-50%')
-            .attr('y', '-50%')
-            .attr('width', '200%')
-            .attr('height', '200%')
-            .attr('id', 'blue-glow');
-
-        glow.append('feColorMatrix')
-            .attr('type', 'matrix')
-            .attr('values',
-                '0 0 0 0  0 ' +
-                '0 0 0 0  0 ' +
-                '0 0 0 0  .7 ' +
-                '0 0 0 1  0 ');
-
-        glow.append('feGaussianBlur')
-            .attr('stdDeviation', 3)
-            .attr('result', 'coloredBlur');
-
-        glow.append('feMerge').selectAll('feMergeNode')
-            .data(['coloredBlur', 'SourceGraphic'])
-            .enter().append('feMergeNode')
-            .attr('in', String);
-    }
-
-    // --- Ordinal scales for 7 values.
-    // TODO: tune colors for light and dark themes
-    // Note: These colors look good on the white background. Still, need to tune for dark.
-
-    //               blue       brown      brick red  sea green  purple     dark teal  lime
-    var lightNorm = ['#3E5780', '#78533B', '#CB4D28', '#018D61', '#8A2979', '#006D73', '#56AF00'],
-        lightMute = ['#A8B8CC', '#CCB3A8', '#FFC2BD', '#96D6BF', '#D19FCE', '#8FCCCA', '#CAEAA4'],
-
-        darkNorm  = ['#3E5780', '#78533B', '#CB4D28', '#018D61', '#8A2979', '#006D73', '#56AF00'],
-        darkMute  = ['#A8B8CC', '#CCB3A8', '#FFC2BD', '#96D6BF', '#D19FCE', '#8FCCCA', '#CAEAA4'];
-
-    function cat7() {
-        var colors = {
-                light: {
-                    norm: d3.scale.ordinal().range(lightNorm),
-                    mute: d3.scale.ordinal().range(lightMute)
-                },
-                dark: {
-                    norm: d3.scale.ordinal().range(darkNorm),
-                    mute: d3.scale.ordinal().range(darkMute)
-                }
-            },
-            tcid = 'd3utilTestCard';
-
-        function get(id, muted, theme) {
-            // NOTE: since we are lazily assigning domain ids, we need to
-            //       get the color from all 4 scales, to keep the domains
-            //       in sync.
-            var ln = colors.light.norm(id),
-                lm = colors.light.mute(id),
-                dn = colors.dark.norm(id),
-                dm = colors.dark.mute(id);
-            if (theme === 'dark') {
-                return muted ? dm : dn;
-            } else {
-                return muted ? lm : ln;
-            }
-        }
-
-        function testCard(svg) {
-            var g = svg.select('g#' + tcid),
-                dom = d3.range(7),
-                k, muted, theme, what;
-
-            if (!g.empty()) {
-                g.remove();
-
-            } else {
-                g = svg.append('g')
-                    .attr('id', tcid)
-                    .attr('transform', 'scale(4)translate(20,20)');
-
-                for (k=0; k<4; k++) {
-                    muted = k%2;
-                    what = muted ? ' muted' : ' normal';
-                    theme = k < 2 ? 'light' : 'dark';
-                    dom.forEach(function (id, i) {
-                        var x = i * 20,
-                            y = k * 20,
-                            f = get(id, muted, theme);
-                        g.append('circle').attr({
-                            cx: x,
-                            cy: y,
-                            r: 5,
-                            fill: f
-                        });
-                    });
-                    g.append('rect').attr({
-                        x: 140,
-                        y: k * 20 - 5,
-                        width: 32,
-                        height: 10,
-                        rx: 2,
-                        fill: '#888'
-                    });
-                    g.append('text').text(theme + what)
-                        .attr({
-                            x: 142,
-                            y: k * 20 + 2,
-                            fill: 'white'
-                        })
-                        .style('font-size', '4pt');
-                }
-            }
-        }
-
-        return {
-            testCard: testCard,
-            get: get
-        };
-    }
-
-    // === register the functions as a library
-    onos.ui.addLib('d3util', {
-        createDragBehavior: createDragBehavior,
-        loadGlow: loadGlow,
-        cat7: cat7
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/geometry.js b/web/gui/src/main/webapp/legacy/geometry.js
deleted file mode 100644
index 5ede643..0000000
--- a/web/gui/src/main/webapp/legacy/geometry.js
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Geometry library - based on work by Mike Bostock.
- */
-
-(function() {
-
-    if (typeof geo == 'undefined') {
-        geo = {};
-    }
-
-    var tolerance = 1e-10;
-
-    function eq(a, b) {
-        return (Math.abs(a - b) < tolerance);
-    }
-
-    function gt(a, b) {
-        return (a - b > -tolerance);
-    }
-
-    function lt(a, b) {
-        return gt(b, a);
-    }
-
-    geo.eq = eq;
-    geo.gt = gt;
-    geo.lt = lt;
-
-    geo.LineSegment = function(x1, y1, x2, y2) {
-        this.x1 = x1;
-        this.y1 = y1;
-        this.x2 = x2;
-        this.y2 = y2;
-
-        // Ax + By = C
-        this.a = y2 - y1;
-        this.b = x1 - x2;
-        this.c = x1 * this.a + y1 * this.b;
-
-        if (eq(this.a, 0) && eq(this.b, 0)) {
-            throw new Error(
-                'Cannot construct a LineSegment with two equal endpoints.');
-        }
-    };
-
-    geo.LineSegment.prototype.intersect = function(that) {
-        var d = (this.x1 - this.x2) * (that.y1 - that.y2) -
-            (this.y1 - this.y2) * (that.x1 - that.x2);
-
-        if (eq(d, 0)) {
-            // The two lines are parallel or very close.
-            return {
-                x : NaN,
-                y : NaN
-            };
-        }
-
-        var t1  = this.x1 * this.y2 - this.y1 * this.x2,
-            t2  = that.x1 * that.y2 - that.y1 * that.x2,
-            x   = (t1 * (that.x1 - that.x2) - t2 * (this.x1 - this.x2)) / d,
-            y   = (t1 * (that.y1 - that.y2) - t2 * (this.y1 - this.y2)) / d,
-            in1 = (gt(x, Math.min(this.x1, this.x2)) && lt(x, Math.max(this.x1, this.x2)) &&
-                gt(y, Math.min(this.y1, this.y2)) && lt(y, Math.max(this.y1, this.y2))),
-            in2 = (gt(x, Math.min(that.x1, that.x2)) && lt(x, Math.max(that.x1, that.x2)) &&
-                gt(y, Math.min(that.y1, that.y2)) && lt(y, Math.max(that.y1, that.y2)));
-
-        return {
-            x   : x,
-            y   : y,
-            in1 : in1,
-            in2 : in2
-        };
-    };
-
-    geo.LineSegment.prototype.x = function(y) {
-        // x = (C - By) / a;
-        if (this.a) {
-            return (this.c - this.b * y) / this.a;
-        } else {
-            // a == 0 -> horizontal line
-            return NaN;
-        }
-    };
-
-    geo.LineSegment.prototype.y = function(x) {
-        // y = (C - Ax) / b;
-        if (this.b) {
-            return (this.c - this.a * x) / this.b;
-        } else {
-            // b == 0 -> vertical line
-            return NaN;
-        }
-    };
-
-    geo.LineSegment.prototype.length = function() {
-        return Math.sqrt(
-                (this.y2 - this.y1) * (this.y2 - this.y1) +
-                (this.x2 - this.x1) * (this.x2 - this.x1));
-    };
-
-    geo.LineSegment.prototype.offset = function(x, y) {
-        return new geo.LineSegment(
-                this.x1 + x, this.y1 + y,
-                this.x2 + x, this.y2 + y);
-    };
-
-})();
diff --git a/web/gui/src/main/webapp/legacy/glyphs.js b/web/gui/src/main/webapp/legacy/glyphs.js
deleted file mode 100644
index 9f8b461..0000000
--- a/web/gui/src/main/webapp/legacy/glyphs.js
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS -- SVG Glyphs Library.
- */
-
-
-(function (onos) {
-    'use strict';
-
-    var birdViewBox = '352 224 113 112',
-
-        birdData = {
-            bird: "M427.7,300.4 c-6.9,0.6-13.1,5-19.2,7.1c-18.1,6.2-33.9," +
-            "9.1-56.5,4.7c24.6,17.2,36.6,13,63.7,0.1c-0.5,0.6-0.7,1.3-1.3," +
-            "1.9c1.4-0.4,2.4-1.7,3.4-2.2c-0.4,0.7-0.9,1.5-1.4,1.9c2.2-0.6," +
-            "3.7-2.3,5.9-3.9c-2.4,2.1-4.2,5-6,8c-1.5,2.5-3.1,4.8-5.1,6.9c-1," +
-            "1-1.9,1.9-2.9,2.9c-1.4,1.3-2.9,2.5-5.1,2.9c1.7,0.1,3.6-0.3,6.5" +
-            "-1.9c-1.6,2.4-7.1,6.2-9.9,7.2c10.5-2.6,19.2-15.9,25.7-18c18.3" +
-            "-5.9,13.8-3.4,27-14.2c1.6-1.3,3-1,5.1-0.8c1.1,0.1,2.1,0.3,3.2," +
-            "0.5c0.8,0.2,1.4,0.4,2.2,0.8l1.8,0.9c-1.9-4.5-2.3-4.1-5.9-6c-2.3" +
-            "-1.3-3.3-3.8-6.2-4.9c-7.1-2.6-11.9,11.7-11.7-5c0.1-8,4.2-14.4," +
-            "6.4-22c1.1-3.8,2.3-7.6,2.4-11.5c0.1-2.3,0-4.7-0.4-7c-2-11.2-8.4" +
-            "-21.5-19.7-24.8c-1-0.3-1.1-0.3-0.9,0c9.6,17.1,7.2,38.3,3.1,54.2" +
-            "C429.9,285.5,426.7,293.2,427.7,300.4z"
-        },
-
-        glyphViewBox = '0 0 110 110',
-
-        glyphData = {
-            unknown: "M35,40a5,5,0,0,1,5-5h30a5,5,0,0,1,5,5v30a5,5,0,0,1-5,5" +
-            "h-30a5,5,0,0,1-5-5z",
-
-            node: "M15,100a5,5,0,0,1-5-5v-65a5,5,0,0,1,5-5h80a5,5,0,0,1,5,5" +
-            "v65a5,5,0,0,1-5,5zM14,22.5l11-11a10,3,0,0,1,10-2h40a10,3,0,0,1," +
-            "10,2l11,11zM16,35a5,5,0,0,1,10,0a5,5,0,0,1-10,0z",
-
-            switch: "M10,20a10,10,0,0,1,10-10h70a10,10,0,0,1,10,10v70a10,10," +
-            "0,0,1-10,10h-70a10,10,0,0,1-10-10zM60,26l12,0,0-8,18,13-18,13,0" +
-            "-8-12,0zM60,60l12,0,0-8,18,13-18,13,0-8-12,0zM50,40l-12,0,0-8" +
-            "-18,13,18,13,0-8,12,0zM50,74l-12,0,0-8-18,13,18,13,0-8,12,0z",
-
-            roadm: "M10,35l25-25h40l25,25v40l-25,25h-40l-25-25zM58,26l12,0,0" +
-            "-8,18,13-18,13,0-8-12,0zM58,60l12,0,0-8,18,13-18,13,0-8-12,0z" +
-            "M52,40l-12,0,0-8-18,13,18,13,0-8,12,0zM52,74l-12,0,0-8-18,13," +
-            "18,13,0-8,12,0z",
-
-            endstation: "M10,15a5,5,0,0,1,5-5h65a5,5,0,0,1,5,5v80a5,5,0,0,1" +
-            "-5,5h-65a5,5,0,0,1-5-5zM87.5,14l11,11a3,10,0,0,1,2,10v40a3,10," +
-            "0,0,1,-2,10l-11,11zM17,19a2,2,0,0,1,2-2h56a2,2,0,0,1,2,2v26a2," +
-            "2,0,0,1-2,2h-56a2,2,0,0,1-2-2zM20,20h54v10h-54zM20,33h54v10h" +
-            "-54zM42,70a5,5,0,0,1,10,0a5,5,0,0,1-10,0z",
-
-            router: "M10,55A45,45,0,0,1,100,55A45,45,0,0,1,10,55M20,50l12,0," +
-            "0-8,18,13-18,13,0-8-12,0zM90,50l-12,0,0-8-18,13,18,13,0-8,12,0z" +
-            "M50,47l0-12-8,0,13-18,13,18-8,0,0,12zM50,63l0,12-8,0,13,18,13" +
-            "-18-8,0,0-12z",
-
-            bgpSpeaker: "M10,40a45,35,0,0,1,90,0Q100,77,55,100Q10,77,10,40z" +
-            "M50,29l12,0,0-8,18,13-18,13,0-8-12,0zM60,57l-12,0,0-8-18,13," +
-            "18,13,0-8,12,0z",
- 
-            chain: "M60.4,77.6c-4.9,5.2-9.6,11.3-15.3,16.3c-8.6,7.5-20.4,6.8" +
-            "-28-0.8c-7.7-7.7-8.4-19.6-0.8-28.4c6.5-7.4,13.5-14.4,20.9-20.9" +
-            "c7.5-6.7,19.2-6.7,26.5-0.8c3.5,2.8,4.4,6.1,2.2,8.7c-2.7,3.1" +
-            "-5.5,2.5-8.5,0.3c-4.7-3.4-9.7-3.2-14,0.9C37.1,58.7,31,64.8," +
-            "25.2,71c-4.2,4.4-4.2,10.6-0.6,14.3c3.7,3.7,9.7,3.7,14.3-0.4" +
-            "c2.9-2.5,5.3-5.5,8.3-8c1-0.9,3-1.1,4.4-0.9C54.8,76.3,57.9,77.1," +
-            "60.4,77.6zM49.2,32.2c5-5.2,9.7-10.9,15.2-15.7c12.8-11,31.2" +
-            "-4.9,34.3,11.2C100,34.2,98.3,40.2,94,45c-6.7,7.4-13.7,14.6" +
-            "-21.2,21.2C65.1,73,53.2,72.7,46,66.5c-3.2-2.8-3.9-5.8-1.6-8.4" +
-            "c2.6-2.9,5.3-2.4,8.2-0.3c5.2,3.7,10,3.3,14.7-1.1c5.8-5.6,11.6" +
-            "-11.3,17.2-17.2c4.6-4.8,4.9-11.1,0.9-15c-3.9-3.9-10.1-3.4-15," +
-            "1.2c-3.1,2.9-5.7,7.4-9.3,8.5C57.6,35.3,53,33,49.2,32.2z",
-
-            crown: "M99.5,21.6c0,3-2.3,5.4-5.1,5.4c-0.3,0-0.7,0-1-0.1c-1.8," +
-            "4-4.8,10-7.2,17.3c-3.4,10.6-0.9,26.2,2.7,27.3C90.4,72,91.3," +
-            "75,88,75H22.7c-3.3,0-2.4-3-0.9-3.5c3.6-1.1,6.1-16.7,2.7-27.3" +
-            "c-2.4-7.4-5.4-13.5-7.2-17.5c-0.5,0.2-1,0.3-1.6,0.3c-2.8,0" +
-            "-5.1-2.4-5.1-5.4c0-3,2.3-5.4,5.1-5.4c2.8,0,5.1,2.4,5.1,5.4c0," +
-            "1-0.2,1.9-0.7,2.7c0.7,0.8,1.4,1.6,2.4,2.6c8.8,8.9,11.9,12.7," +
-            "18.1,11.7c6.5-1,11-8.2,13.3-14.1c-2-0.8-3.3-2.7-3.3-5.1c0-3," +
-            "2.3-5.4,5.1-5.4c2.8,0,5.1,2.4,5.1,5.4c0,2.5-1.6,4.5-3.7,5.2" +
-            "c2.3,5.9,6.8,13,13.2,14c6.2,1,9.3-2.7,18.1-11.7c0.7-0.7,1.4" +
-            "-1.5,2-2.1c-0.6-0.9-1-2-1-3.1c0-3,2.3-5.4,5.1-5.4C97.2,16.2," +
-            "99.5,18.6,99.5,21.6zM92,87.9c0,2.2-1.7,4.1-3.8,4.1H22.4c" +
-            "-2.1,0-4.4-1.9-4.4-4.1v-3.3c0-2.2,2.3-4.5,4.4-4.5h65.8c2.1," +
-            "0,3.8,2.3,3.8,4.5V87.9z"
-        },
-
-        badgeViewBox = '0 0 10 10',
-
-        badgeData = {
-            uiAttached: "M2,2.5a.5,.5,0,0,1,.5-.5h5a.5,.5,0,0,1,.5,.5v3" +
-            "a.5,.5,0,0,1-.5,.5h-5a.5,.5,0,0,1-.5-.5zM2.5,2.8a.3,.3,0,0,1," +
-            ".3-.3h4.4a.3,.3,0,0,1,.3,.3v2.4a.3,.3,0,0,1-.3,.3h-4.4" +
-            "a.3,.3,0,0,1-.3-.3zM2,6.55h6l1,1.45h-8z"
-        };
-
-    function defStuff(defs, viewbox, data) {
-        d3.map(data).keys().forEach(function (key) {
-            defs.append('symbol')
-                .attr({ id: key, viewBox: viewbox })
-                .append('path').attr('d', data[key]);
-        });
-    }
-
-    function loadDefs(defs) {
-        defStuff(defs, birdViewBox,  birdData);
-        defStuff(defs, glyphViewBox, glyphData);
-        defStuff(defs, badgeViewBox, badgeData);
-    }
-
-    onos.ui.addLib('glyphs', {
-        loadDefs: loadDefs
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/index.html b/web/gui/src/main/webapp/legacy/index.html
deleted file mode 100644
index 0e5f57a..0000000
--- a/web/gui/src/main/webapp/legacy/index.html
+++ /dev/null
@@ -1,111 +0,0 @@
-<!DOCTYPE html>
-<!--
-  ~ Copyright 2014 Open Networking Laboratory
-  ~
-  ~ 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.
-  -->
-
-<!--
-  ONOS UI - single page web app
-  Version 1.1
-  -->
-<html>
-<head>
-    <meta charset="utf-8">
-    <link rel="shortcut icon" href="../img/onos-logo.png">
-    <title>ONOS</title>
-
-    <!-- Third party library code included here -->
-    <!--TODO: use the minified version of d3, once debugging is complete -->
-    <script src="../tp/d3.js"></script>
-    <script src="../tp/topojson.v1.min.js"></script>
-    <script src="../tp/jquery-2.1.1.min.js"></script>
-
-    <!-- ONOS UI Framework included here -->
-    <script src="onos.js"></script>
-
-    <!-- Framework and library stylesheets included here -->
-    <link rel="stylesheet" href="base.css">
-    <link rel="stylesheet" href="onos.css">
-    <link rel="stylesheet" href="onosMast.css">
-    <link rel="stylesheet" href="onosFloatPanel.css">
-    <link rel="stylesheet" href="onosFlash.css">
-    <link rel="stylesheet" href="onosQuickHelp.css">
-
-    <!-- This is where contributed stylesheets get INJECTED -->
-    <!-- TODO: replace with template marker and inject refs server-side -->
-    <link rel="stylesheet" href="topo.css">
-</head>
-<body>
-    <div id="frame">
-        <div id="mast">
-            <!-- NOTE: masthead injected here by mast.js -->
-        </div>
-        <div id="view">
-            <!-- NOTE: views injected here by onos.js -->
-        </div>
-        <div id="floatPanels">
-            <!-- NOTE: floating panels injected here, as needed -->
-            <!--       see onos.ui.addFloatingPanel             -->
-        </div>
-        <div id="alerts">
-            <!-- NOTE: alert content injected here, as needed -->
-        </div>
-        <div id="feedback">
-            <!-- NOTE: feedback flashes to user -->
-        </div>
-        <div id="quickhelp">
-            <!-- NOTE: key bindings and mouse gesture help -->
-        </div>
-    </div>
-
-    <!-- Initialize the UI...-->
-    <script type="text/javascript">
-        var ONOS = $.onos({
-            comment: 'configuration options',
-            theme: 'dark',
-            startVid: 'topo'
-        });
-    </script>
-
-    <!-- Library modules included here -->
-    <script src="d3Utils.js"></script>
-    <script src="geometry.js"></script>
-    <script src="glyphs.js"></script>
-
-    <!-- Framework modules included here -->
-    <script src="onosMast.js"></script>
-    <script src="onosFlash.js"></script>
-    <script src="onosQuickHelp.js"></script>
-
-    <!-- View Module Templates; REMOVE THESE LINES, FOR PRODUCTION -->
-    <script src="module-svg-template.js"></script>
-    <script src="module-div-template.js"></script>
-
-    <!-- Sample Views; REMOVE THESE LINES, FOR PRODUCTION -->
-    <script src="sample.js"></script>
-    <script src="sampleRadio.js"></script>
-    <script src="sampleKeys.js"></script>
-    <script src="sampleHash.js"></script>
-
-    <!-- Contributed (application) views injected here -->
-    <!-- TODO: replace with template marker and inject refs server-side -->
-    <script src="topo.js"></script>
-
-    <!-- finally, build the UI-->
-    <script type="text/javascript">
-        $(ONOS.buildUi);
-    </script>
-
-</body>
-</html>
diff --git a/web/gui/src/main/webapp/legacy/module-div-template.js b/web/gui/src/main/webapp/legacy/module-div-template.js
deleted file mode 100644
index 52aece9..0000000
--- a/web/gui/src/main/webapp/legacy/module-div-template.js
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Module template file for DIV based view.
- */
-
-(function (onos) {
-    'use strict';
-
-    var list,
-        data = [ 'foo', 'bar', 'baz' ];
-
-    // invoked only the first time the view is loaded
-    //  - used to initialize the view contents
-    function init(view, ctx, flags) {
-        // NOTE: view.$div is a D3 selection of the view's div
-        list = view.$div.append('ul');
-        // ... further code to initialize the SVG view ...
-
-    }
-
-    // invoked just prior to loading the view
-    //  - used to clear the view of stale data
-    function reset(view, ctx, flags) {
-
-    }
-
-    // invoked when the view is loaded
-    //  - used to load data into the view,
-    //     when the view is shown
-    function load(view, ctx, flags) {
-        list.selectAll('li')
-            .data(data)
-            .enter()
-            .append('li')
-            .text(function (d) { return d; })
-    }
-
-    // invoked when the view is unloaded
-    //  - used to clean up data that should be removed,
-    //     when the view is hidden
-    function unload(view, ctx, flags) {
-
-    }
-
-    // invoked when the view is resized
-    //  - used to reconfigure elements to the new view size
-    function resize(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-    }
-
-    // invoked when the framework needs to alert the view of an error
-    //  - (EXPERIMENTAL -- not currently used)
-    function error(view, ctx, flags) {
-
-    }
-
-    // ================================================================
-    // == register the view here, with links to lifecycle callbacks
-
-    // A typical setup that initializes the view once, then reacts to
-    // load and resize events would look like this:
-
-    onos.ui.addView('myDivViewId', {
-        init: init,
-        load: load,
-        resize: resize
-    });
-
-    // A minimum setup that builds the view every time it is loaded
-    // would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      reset: true,    // clear view contents on reset
-    //      load: load
-    //  });
-
-    // The complete gamut of callbacks would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      init: init,
-    //      reset: reset,
-    //      load: load,
-    //      unload: unload,
-    //      resize: resize,
-    //      error: error
-    //  });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/module-svg-template.js b/web/gui/src/main/webapp/legacy/module-svg-template.js
deleted file mode 100644
index d4d7c4f..0000000
--- a/web/gui/src/main/webapp/legacy/module-svg-template.js
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Module template file for SVG based view.
- */
-
-(function (onos) {
-    'use strict';
-
-    var svg,
-        data = [ 60 ];
-
-    // invoked only the first time the view is loaded
-    //  - used to initialize the view contents
-    function init(view, ctx, flags) {
-        svg = view.$div.append('svg');
-        resize(view);
-        // ... further code to initialize the SVG view ...
-
-    }
-
-    // invoked just prior to loading the view
-    //  - used to clear the view of stale data
-    function reset(view, ctx, flags) {
-        // e.g. clear svg of all objects...
-        // svg.html('');
-
-    }
-
-    // invoked when the view is loaded
-    //  - used to load data into the view,
-    //     when the view is shown
-    function load(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-        // as an example...
-        svg.selectAll('circle')
-            .data(data)
-            .enter()
-            .append('circle')
-            .attr({
-                cx: w / 2,
-                cy: h / 2,
-                r: function (d) { return d; }
-            })
-            .style({
-                fill: 'goldenrod',
-                stroke: 'black',
-                'stroke-width': 3.5,
-            });
-    }
-
-    // invoked when the view is unloaded
-    //  - used to clean up data that should be removed,
-    //     when the view is hidden
-    function unload(view, ctx, flags) {
-
-    }
-
-    // invoked when the view is resized
-    //  - used to reconfigure elements to the new size of the view
-    function resize(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-        // resize svg layer to match new size of view
-        svg.attr({
-            width: w,
-            height: h
-        });
-
-        // as an example...
-        svg.selectAll('circle')
-            .attr({
-                cx: w / 2,
-                cy: h / 2
-            });
-
-        // ... further code to handle resize of view ...
-
-    }
-
-    // invoked when the framework needs to alert the view of an error
-    //  - (EXPERIMENTAL -- not currently used)
-    function error(view, ctx, flags) {
-
-    }
-
-    // ================================================================
-    // == register the view here, with links to lifecycle callbacks
-
-    // A typical setup that initializes the view once, then reacts to
-    // load and resize events would look like this:
-
-    onos.ui.addView('mySvgViewId', {
-        init: init,
-        load: load,
-        resize: resize
-    });
-
-    // A minimum setup that builds the view every time it is loaded
-    // would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      reset: true,    // clear view contents on reset
-    //      load: load
-    //  });
-
-    // The complete gamut of callbacks would look like this:
-    //
-    //  onos.ui.addView('myViewId', {
-    //      init: init,
-    //      reset: reset,
-    //      load: load,
-    //      unload: unload,
-    //      resize: resize,
-    //      error: error
-    //  });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/onos-logo.png b/web/gui/src/main/webapp/legacy/onos-logo.png
deleted file mode 100644
index 8688cd6..0000000
--- a/web/gui/src/main/webapp/legacy/onos-logo.png
+++ /dev/null
Binary files differ
diff --git a/web/gui/src/main/webapp/legacy/onos.css b/web/gui/src/main/webapp/legacy/onos.css
deleted file mode 100644
index 5870044..0000000
--- a/web/gui/src/main/webapp/legacy/onos.css
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Base Framework -- CSS file
- */
-
-html, body {
-    height: 100%;
-}
-
-/* This is to ensure that the body does not expand to account for the
-   flyout details pane, that is positioned "off screen".
- */
-body {
-    overflow: hidden;
-}
-
-#frame {
-    width: 100%;
-    height: 100%;
-    background-color: #fff;
-}
-
-div.onosView {
-    display: none;
-}
-
-div.onosView.currentView {
-    display: block;
-}
-
-
-#alerts {
-    display: none;
-    position: absolute;
-    z-index: 1200;
-    opacity: 0.65;
-    background-color: #006;
-    color: white;
-    top: 80px;
-    left: 40px;
-    padding: 3px 6px;
-    -moz-border-radius: 6px;
-    border-radius: 6px;
-    box-shadow: 0px 2px 12px #777;
-}
-
-#alerts pre {
-    margin: 0.2em 6px;
-}
-
-#alerts span.close {
-    color: #6af;
-    float: right;
-    right: 2px;
-    cursor: pointer;
-}
-
-#alerts span.close:hover {
-    color: #fff;
-}
-
-#alerts p.footnote {
-    text-align: right;
-    font-size: 8pt;
-    margin: 8px 0 0 0;
-    color: #66d;
-}
-
-#floatPanels {
-    z-index: 1100;
-}
-
-#flyout {
-    position: absolute;
-    display: block;
-    top: 10%;
-    width: 280px;
-    right: -300px;
-    opacity: 0;
-    background-color: rgba(255,255,255,0.8);
-
-    padding: 10px;
-    color: black;
-    font-size: 10pt;
-    box-shadow: 2px 2px 16px #777;
-}
-
-#flyout h2 {
-    margin: 8px 4px;
-    color: black;
-    vertical-align: middle;
-}
-
-#flyout h2 img {
-    height: 32px;
-    padding-right: 8px;
-    vertical-align: middle;
-}
-
-#flyout p, table {
-    margin: 4px 4px;
-}
-
-#flyout td.label {
-    font-style: italic;
-    color: #777;
-    padding-right: 12px;
-}
-
-#flyout td.value {
-
-}
-
-#flyout hr {
-    height: 1px;
-    color: #ccc;
-    background-color: #ccc;
-    border: 0;
-}
diff --git a/web/gui/src/main/webapp/legacy/onos.js b/web/gui/src/main/webapp/legacy/onos.js
deleted file mode 100644
index c122177..0000000
--- a/web/gui/src/main/webapp/legacy/onos.js
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Base Framework
- */
-
-(function ($) {
-    'use strict';
-    var tsI = new Date().getTime(),         // initialize time stamp
-        tsB,                                // build time stamp
-        mastHeight = 36,                    // see mast2.css
-        defaultVid = 'sample';
-
-
-    // attach our main function to the jQuery object
-    $.onos = function (options) {
-        var uiApi,
-            viewApi,
-            navApi,
-            libApi,
-            exported = {};
-
-        var defaultOptions = {
-            trace: false,
-            theme: 'dark',
-            startVid: defaultVid
-        };
-
-        // compute runtime settings
-        var settings = $.extend({}, defaultOptions, options);
-
-        // set the selected theme
-        d3.select('body').classed(settings.theme, true);
-
-        // internal state
-        var views = {},
-            fpanels = {},
-            current = {
-                view: null,
-                ctx: '',
-                flags: {},
-                theme: settings.theme
-            },
-            built = false,
-            buildErrors = [],
-            keyHandler = {
-                globalKeys: {},
-                maskedKeys: {},
-                viewKeys: {},
-                viewFn: null,
-                viewGestures: []
-            },
-            alerts = {
-                open: false,
-                count: 0
-            };
-
-        // DOM elements etc.
-        // TODO: verify existence of following elements...
-        var $view = d3.select('#view'),
-            $floatPanels = d3.select('#floatPanels'),
-            $alerts = d3.select('#alerts'),
-            // note, following elements added programmatically...
-            $mastRadio;
-
-
-        function whatKey(code) {
-            switch (code) {
-                case 13: return 'enter';
-                case 16: return 'shift';
-                case 17: return 'ctrl';
-                case 18: return 'alt';
-                case 27: return 'esc';
-                case 32: return 'space';
-                case 37: return 'leftArrow';
-                case 38: return 'upArrow';
-                case 39: return 'rightArrow';
-                case 40: return 'downArrow';
-                case 91: return 'cmdLeft';
-                case 93: return 'cmdRight';
-                case 187: return 'equals';
-                case 189: return 'dash';
-                case 191: return 'slash';
-                case 192: return 'backQuote';
-                case 220: return 'backSlash';
-                default:
-                    if ((code >= 48 && code <= 57) ||
-                        (code >= 65 && code <= 90)) {
-                        return String.fromCharCode(code);
-                    } else if (code >= 112 && code <= 123) {
-                        return 'F' + (code - 111);
-                    }
-                    return '.';
-            }
-        }
-
-
-        // ..........................................................
-        // Internal functions
-
-        // throw an error
-        function throwError(msg) {
-            // separate function, as we might add tracing here too, later
-            throw new Error(msg);
-        }
-
-        function doError(msg) {
-            console.error(msg);
-            doAlert(msg);
-        }
-
-        function trace(msg) {
-            if (settings.trace) {
-                console.log(msg);
-            }
-        }
-
-        function traceFn(fn, params) {
-            if (settings.trace) {
-                console.log('*FN* ' + fn + '(...): ' + params);
-            }
-        }
-
-        // hash navigation
-        function hash() {
-            var hash = window.location.hash,
-                redo = false,
-                view,
-                t;
-
-            traceFn('hash', hash);
-
-            if (!hash) {
-                hash = settings.startVid;
-                redo = true;
-            }
-
-            t = parseHash(hash);
-            if (!t || !t.vid) {
-                doError('Unable to parse target hash: "' + hash + '"');
-            }
-
-            view = views[t.vid];
-            if (!view) {
-                doError('No view defined with id: ' + t.vid);
-            }
-
-            if (redo) {
-                window.location.hash = makeHash(t);
-                // the above will result in a hashchange event, invoking
-                // this function again
-            } else {
-                // hash was not modified... navigate to where we need to be
-                navigate(hash, view, t);
-            }
-        }
-
-        function parseHash(s) {
-            // extract navigation coordinates from the supplied string
-            // "vid,ctx?flag1,flag2" --> { vid:vid, ctx:ctx, flags:{...} }
-            traceFn('parseHash', s);
-
-            // look for use of flags, first
-            var vidctx,
-                vid,
-                ctx,
-                flags,
-                flagMap,
-                m;
-
-            // RE that includes flags ('?flag1,flag2')
-            m = /^[#]{0,1}(.+)\?(.+)$/.exec(s);
-            if (m) {
-                vidctx = m[1];
-                flags = m[2];
-                flagMap = {};
-            } else {
-                // no flags
-                m = /^[#]{0,1}((.+)(,.+)*)$/.exec(s);
-                if (m) {
-                    vidctx = m[1];
-                } else {
-                    // bad hash
-                    return null;
-                }
-            }
-
-            vidctx = vidctx.split(',');
-            vid = vidctx[0];
-            ctx = vidctx[1];
-            if (flags) {
-                flags.split(',').forEach(function (f) {
-                    flagMap[f.trim()] = true;
-                });
-            }
-
-            return {
-                vid: vid.trim(),
-                ctx: ctx ? ctx.trim() : '',
-                flags: flagMap
-            };
-
-        }
-
-        function makeHash(t, ctx, flags) {
-            traceFn('makeHash');
-            // make a hash string from the given navigation coordinates,
-            // and optional flags map.
-            // if t is not an object, then it is a vid
-            var h = t,
-                c = ctx || '',
-                f = $.isPlainObject(flags) ? flags : null;
-
-            if ($.isPlainObject(t)) {
-                h = t.vid;
-                c = t.ctx || '';
-                f = t.flags || null;
-            }
-
-            if (c) {
-                h += ',' + c;
-            }
-            if (f) {
-                h += '?' + d3.map(f).keys().join(',');
-            }
-            trace('hash = "' + h + '"');
-            return h;
-        }
-
-        function navigate(hash, view, t) {
-            traceFn('navigate', view.vid);
-            // closePanes()     // flyouts etc.
-            // updateNav()      // accordion / selected nav item etc.
-            createView(view);
-            setView(view, hash, t);
-        }
-
-        function buildError(msg) {
-            buildErrors.push(msg);
-        }
-
-        function reportBuildErrors() {
-            traceFn('reportBuildErrors');
-            var nerr = buildErrors.length,
-                errmsg;
-            if (!nerr) {
-                console.log('(no build errors)');
-            } else {
-                errmsg = 'Build errors: ' + nerr + ' found...\n\n' +
-                    buildErrors.join('\n');
-                doAlert(errmsg);
-                console.error(errmsg);
-            }
-        }
-
-        // returns the reference if it is a function, null otherwise
-        function isF(f) {
-            return $.isFunction(f) ? f : null;
-        }
-
-        // returns the reference if it is an array, null otherwise
-        function isA(a) {
-            return $.isArray(a) ? a : null;
-        }
-
-        // ..........................................................
-        // View life-cycle functions
-
-        function setViewDimensions(sel) {
-            var w = window.innerWidth,
-                h = window.innerHeight - mastHeight;
-            sel.each(function () {
-                $(this)
-                    .css('width', w + 'px')
-                    .css('height', h + 'px')
-            });
-        }
-
-        function createView(view) {
-            var $d;
-
-            // lazy initialization of the view
-            if (view && !view.$div) {
-                trace('creating view for ' + view.vid);
-                $d = $view.append('div')
-                        .attr({
-                            id: view.vid,
-                            class: 'onosView'
-                         });
-                setViewDimensions($d);
-                view.$div = $d;   // cache a reference to the D3 selection
-            }
-        }
-
-        function setView(view, hash, t) {
-            traceFn('setView', view.vid);
-            // set the specified view as current, while invoking the
-            // appropriate life-cycle callbacks
-
-            // first, we'll start by closing the alerts pane, if open
-            closeAlerts();
-
-            // if there is a current view, and it is not the same as
-            // the incoming view, then unload it...
-            if (current.view && (current.view.vid !== view.vid)) {
-                current.view.unload();
-
-                // detach radio buttons, key handlers, etc.
-                $('#mastRadio').children().detach();
-                keyHandler.viewKeys = {};
-                keyHandler.viewFn = null;
-            }
-
-            // cache new view and context
-            current.view = view;
-            current.ctx = t.ctx || '';
-            current.flags = t.flags || {};
-
-            // init is called only once, after the view is in the DOM
-            if (!view.inited) {
-                view.init(current.ctx, current.flags);
-                view.inited = true;
-            }
-
-            // clear the view of stale data
-            view.reset();
-
-            // load the view
-            view.load(current.ctx, current.flags);
-        }
-
-        // generate 'unique' id by prefixing view id
-        function makeUid(view, id) {
-            return view.vid + '-' + id;
-        }
-
-        // restore id by removing view id prefix
-        function unmakeUid(view, uid) {
-            var re = new RegExp('^' + view.vid + '-');
-            return uid.replace(re, '');
-        }
-
-        function setRadioButtons(vid, btnSet) {
-            var view = views[vid],
-                btnG,
-                api = {};
-
-            // lazily create the buttons...
-            if (!(btnG = view.radioButtons)) {
-                btnG = d3.select(document.createElement('div'));
-                btnG.buttonDef = {};
-
-                btnSet.forEach(function (btn, i) {
-                    var bid = btn.id || 'b' + i,
-                        txt = btn.text || 'Button #' + i,
-                        uid = makeUid(view, bid),
-                        button = btnG.append('span')
-                        .attr({
-                            id: uid,
-                            class: 'radio'
-                        })
-                        .text(txt);
-
-                    btn.id = bid;
-                    btnG.buttonDef[uid] = btn;
-
-                    if (i === 0) {
-                        button.classed('active', true);
-                        btnG.selected = bid;
-                    }
-                });
-
-                btnG.selectAll('span')
-                    .on('click', function (d) {
-                        var button = d3.select(this),
-                            uid = button.attr('id'),
-                            btn = btnG.buttonDef[uid],
-                            act = button.classed('active');
-
-                        if (!act) {
-                            btnG.selectAll('span').classed('active', false);
-                            button.classed('active', true);
-                            btnG.selected = btn.id;
-                            if (isF(btn.cb)) {
-                                btn.cb(view.token(), btn);
-                            }
-                        }
-                    });
-
-                view.radioButtons = btnG;
-
-                api.selected = function () {
-                    return btnG.selected;
-                }
-            }
-
-            // attach the buttons to the masthead
-            $mastRadio.node().appendChild(btnG.node());
-            // return an api for interacting with the button set
-            return api;
-        }
-
-        function setupGlobalKeys() {
-            $.extend(keyHandler, {
-                globalKeys: {
-                    backSlash: [quickHelp, 'Show / hide Quick Help'],
-                    slash: [quickHelp, 'Show / hide Quick Help'],
-                    esc: [escapeKey, 'Dismiss dialog or cancel selections'],
-                    T: [toggleTheme, "Toggle theme"]
-                },
-                globalFormat: ['backSlash', 'slash', 'esc', 'T'],
-
-                // Masked keys are global key handlers that always return true.
-                // That is, the view will never see the event for that key.
-                maskedKeys: {
-                    slash: true,
-                    backSlash: true,
-                    T: true
-                }
-            });
-        }
-
-        function quickHelp(view, key, code, ev) {
-            libApi.quickHelp.show(keyHandler);
-            return true;
-        }
-
-        function escapeKey(view, key, code, ev) {
-            if (alerts.open) {
-                closeAlerts();
-                return true;
-            }
-            if (libApi.quickHelp.hide()) {
-                return true;
-            }
-            return false;
-        }
-
-        function toggleTheme(view, key, code, ev) {
-            var body = d3.select('body');
-            current.theme = (current.theme === 'light') ? 'dark' : 'light';
-            body.classed('light dark', false);
-            body.classed(current.theme, true);
-            theme(view);
-            return true;
-        }
-
-        function setGestureNotes(g) {
-            keyHandler.viewGestures = isA(g) || [];
-        }
-
-        function setKeyBindings(keyArg) {
-            var viewKeys,
-                masked = [];
-
-            if ($.isFunction(keyArg)) {
-                // set general key handler callback
-                keyHandler.viewFn = keyArg;
-            } else {
-                // set specific key filter map
-                viewKeys = d3.map(keyArg).keys();
-                viewKeys.forEach(function (key) {
-                    if (keyHandler.maskedKeys[key]) {
-                        masked.push('  Key "' + key + '" is reserved');
-                    }
-                });
-
-                if (masked.length) {
-                    doAlert('WARNING...\n\nsetKeys():\n' + masked.join('\n'));
-                }
-                keyHandler.viewKeys = keyArg;
-            }
-        }
-
-        function keyIn() {
-            var event = d3.event,
-                keyCode = event.keyCode,
-                key = whatKey(keyCode),
-                kh = keyHandler,
-                gk = kh.globalKeys[key],
-                gcb = isF(gk) || (isA(gk) && isF(gk[0])),
-                vk = kh.viewKeys[key],
-                vcb = isF(vk) || (isA(vk) && isF(vk[0])) || isF(kh.viewFn),
-                token = current.view.token();
-
-            // global callback?
-            if (gcb && gcb(token, key, keyCode, event)) {
-                // if the event was 'handled', we are done
-                return;
-            }
-            // otherwise, let the view callback have a shot
-            if (vcb) {
-                vcb(token, key, keyCode, event);
-            }
-        }
-
-        function createAlerts() {
-            $alerts.style('display', 'block');
-            $alerts.append('span')
-                .attr('class', 'close')
-                .text('X')
-                .on('click', closeAlerts);
-            $alerts.append('pre');
-            $alerts.append('p').attr('class', 'footnote')
-                .text('Press ESCAPE to close');
-            alerts.open = true;
-            alerts.count = 0;
-        }
-
-        function closeAlerts() {
-            $alerts.style('display', 'none')
-                .html('');
-            alerts.open = false;
-        }
-
-        function addAlert(msg) {
-            var lines,
-                oldContent;
-
-            if (alerts.count) {
-                oldContent = $alerts.select('pre').html();
-            }
-
-            lines = msg.split('\n');
-            lines[0] += '  '; // spacing so we don't crowd 'X'
-            lines = lines.join('\n');
-
-            if (oldContent) {
-                lines += '\n----\n' + oldContent;
-            }
-
-            $alerts.select('pre').html(lines);
-            alerts.count++;
-        }
-
-        function doAlert(msg) {
-            if (!alerts.open) {
-                createAlerts();
-            }
-            addAlert(msg);
-        }
-
-        function resize(e) {
-            d3.selectAll('.onosView').call(setViewDimensions);
-            // allow current view to react to resize event...
-            if (current.view) {
-                current.view.resize(current.ctx, current.flags);
-            }
-        }
-
-        function theme() {
-            // allow current view to react to theme event...
-            if (current.view) {
-                current.view.theme(current.ctx, current.flags);
-            }
-        }
-
-        // ..........................................................
-        // View class
-        //   Captures state information about a view.
-
-        // Constructor
-        //      vid : view id
-        //      nid : id of associated nav-item (optional)
-        //      cb  : callbacks (init, reset, load, unload, resize, theme, error)
-        function View(vid) {
-            var av = 'addView(): ',
-                args = Array.prototype.slice.call(arguments),
-                nid,
-                cb;
-
-            args.shift();   // first arg is always vid
-            if (typeof args[0] === 'string') {  // nid specified
-                nid = args.shift();
-            }
-            cb = args.shift();
-
-            this.vid = vid;
-
-            if (validateViewArgs(vid)) {
-                this.nid = nid;     // explicit navitem id (can be null)
-                this.cb = $.isPlainObject(cb) ? cb : {};    // callbacks
-                this.$div = null;               // view not yet added to DOM
-                this.radioButtons = null;       // no radio buttons yet
-                this.ok = true;                 // valid view
-            }
-        }
-
-        function validateViewArgs(vid) {
-            var av = "ui.addView(...): ",
-                ok = false;
-            if (typeof vid !== 'string' || !vid) {
-                doError(av + 'vid required');
-            } else if (views[vid]) {
-                doError(av + 'View ID "' + vid + '" already exists');
-            } else {
-                ok = true;
-            }
-            return ok;
-        }
-
-        var viewInstanceMethods = {
-            token: function () {
-                return {
-                    // attributes
-                    vid: this.vid,
-                    nid: this.nid,
-                    $div: this.$div,
-
-                    // functions
-                    width: this.width,
-                    height: this.height,
-                    uid: this.uid,
-                    setRadio: this.setRadio,
-                    setKeys: this.setKeys,
-                    setGestures: this.setGestures,
-                    dataLoadError: this.dataLoadError,
-                    alert: this.alert,
-                    flash: this.flash,
-                    getTheme: this.getTheme
-                }
-            },
-
-            // == Life-cycle functions
-            // TODO: factor common code out of life-cycle
-            init: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.init);
-                traceFn('View.init', this.vid + ', ' + c);
-                if (fn) {
-                    trace('INIT cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            reset: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.reset);
-                traceFn('View.reset', this.vid);
-                if (fn) {
-                    trace('RESET cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                } else if (this.cb.reset === true) {
-                    // boolean true signifies "clear view"
-                    trace('  [true] cleaing view...');
-                    viewApi.empty();
-                }
-            },
-
-            load: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.load);
-                traceFn('View.load', this.vid + ', ' + c);
-                this.$div.classed('currentView', true);
-                if (fn) {
-                    trace('LOAD cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            unload: function (ctx, flags) {
-                var c = ctx | '',
-                    fn = isF(this.cb.unload);
-                traceFn('View.unload', this.vid);
-                this.$div.classed('currentView', false);
-                if (fn) {
-                    trace('UNLOAD cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            resize: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.resize),
-                    w = this.width(),
-                    h = this.height();
-                traceFn('View.resize', this.vid + '/' + c +
-                        ' [' + w + 'x' + h + ']');
-                if (fn) {
-                    trace('RESIZE cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            theme: function (ctx, flags) {
-                var c = ctx | '',
-                    fn = isF(this.cb.theme);
-                traceFn('View.theme', this.vid);
-                if (fn) {
-                    trace('THEME cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            error: function (ctx, flags) {
-                var c = ctx || '',
-                    fn = isF(this.cb.error);
-                traceFn('View.error', this.vid + ', ' + c);
-                if (fn) {
-                    trace('ERROR cb for ' + this.vid);
-                    fn(this.token(), c, flags);
-                }
-            },
-
-            // == Token API functions
-            width: function () {
-                return $(this.$div.node()).width();
-            },
-
-            height: function () {
-                return $(this.$div.node()).height();
-            },
-
-            setRadio: function (btnSet) {
-                return setRadioButtons(this.vid, btnSet);
-            },
-
-            setKeys: function (keyArg) {
-                setKeyBindings(keyArg);
-            },
-
-            setGestures: function (g) {
-                setGestureNotes(g);
-            },
-
-            getTheme: function () {
-                return current.theme;
-            },
-
-            uid: function (id) {
-                return makeUid(this, id);
-            },
-
-            // TODO : add exportApi and importApi methods
-            // TODO : implement custom dialogs
-
-            // Consider enhancing alert mechanism to handle multiples
-            // as individually closable.
-            alert: function (msg) {
-                doAlert(msg);
-            },
-
-            flash: function (msg) {
-                libApi.feedback.flash(msg);
-            },
-
-            dataLoadError: function (err, url) {
-                var msg = 'Data Load Error\n\n' +
-                    err.status + ' -- ' + err.statusText + '\n\n' +
-                    'relative-url: "' + url + '"\n\n' +
-                    'complete-url: "' + err.responseURL + '"';
-                this.alert(msg);
-            }
-
-            // TODO: consider schedule, clearTimer, etc.
-        };
-
-        // attach instance methods to the view prototype
-        $.extend(View.prototype, viewInstanceMethods);
-
-        // ..........................................................
-        // UI API
-
-        var fpConfig = {
-            TR: {
-                side: 'right'
-            },
-            TL: {
-                side: 'left'
-            }
-        };
-
-        uiApi = {
-            addLib: function (libName, api) {
-                // TODO: validation of args
-                libApi[libName] = api;
-            },
-
-            // TODO: implement floating panel as a class
-            // TODO: parameterize position (currently hard-coded to TopRight)
-            /*
-             * Creates div in floating panels block, with the given id.
-             * Returns panel token used to interact with the panel
-             */
-            addFloatingPanel: function (id, position) {
-                var pos = position || 'TR',
-                    cfg = fpConfig[pos],
-                    el,
-                    fp,
-                    on = false;
-
-                if (fpanels[id]) {
-                    buildError('Float panel with id "' + id + '" already exists.');
-                    return null;
-                }
-
-                el = $floatPanels.append('div')
-                    .attr('id', id)
-                    .attr('class', 'fpanel')
-                    .style('opacity', 0);
-
-                // has to be called after el is set.
-                el.style(cfg.side, pxHide());
-
-                function pxShow() {
-                    return '20px';
-                }
-                function pxHide() {
-                    return (-20 - widthVal()) + 'px';
-                }
-                function noPx(what) {
-                    return el.style(what).replace(/px$/, '');
-                }
-                function widthVal() {
-                    return noPx('width');
-                }
-                function heightVal() {
-                    return noPx('height');
-                }
-
-                function noop() {}
-
-                fp = {
-                    id: id,
-                    el: el,
-                    pos: pos,
-                    isVisible: function () {
-                        return on;
-                    },
-
-                    show: function (cb) {
-                        var endCb = isF(cb) || noop;
-                        on = true;
-                        el.transition().duration(750)
-                            .each('end', endCb)
-                            .style(cfg.side, pxShow())
-                            .style('opacity', 1);
-                    },
-                    hide: function (cb) {
-                        var endCb = isF(cb) || noop;
-                        on = false;
-                        el.transition().duration(750)
-                            .each('end', endCb)
-                            .style(cfg.side, pxHide())
-                            .style('opacity', 0);
-                    },
-                    empty: function () {
-                        return el.html('');
-                    },
-                    append: function (what) {
-                        return el.append(what);
-                    },
-                    width: function (w) {
-                        if (w === undefined) {
-                            return widthVal();
-                        }
-                        el.style('width', w + 'px');
-                    },
-                    height: function (h) {
-                        if (h === undefined) {
-                            return heightVal();
-                        }
-                        el.style('height', h + 'px');
-                    }
-                };
-                fpanels[id] = fp;
-                return fp;
-            },
-
-            // TODO: it remains to be seen whether we keep this style of docs
-            /** @api ui addView( vid, nid, cb )
-             * Adds a view to the UI.
-             * <p>
-             * Views are loaded/unloaded into the view content pane at
-             * appropriate times, by the navigation framework. This method
-             * adds a view to the UI and returns a token object representing
-             * the view. A view's token is always passed as the first
-             * argument to each of the view's life-cycle callback functions.
-             * <p>
-             * Note that if the view is directly referenced by a nav-item,
-             * or in a group of views with one of those views referenced by
-             * a nav-item, then the <i>nid</i> argument can be omitted as
-             * the framework can infer it.
-             * <p>
-             * <i>cb</i> is a plain object containing callback functions:
-             * "init", "reset", "load", "unload", "resize", "theme", "error".
-             * <pre>
-             *     function myLoad(view, ctx) { ... }
-             *     ...
-             *     // short form...
-             *     onos.ui.addView('viewId', {
-             *         load: myLoad
-             *     });
-             * </pre>
-             *
-             * @param vid (string) [*] view ID (a unique DOM element id)
-             * @param nid (string) nav-item ID (a unique DOM element id)
-             * @param cb (object) [*] callbacks object
-             * @return the view token
-             */
-            addView: function (vid, nid, cb) {
-                traceFn('addView', vid);
-                var view = new View(vid, nid, cb),
-                    token;
-                if (view.ok) {
-                    views[vid] = view;
-                    token = view.token();
-                } else {
-                    token = { vid: view.vid, bad: true };
-                }
-                return token;
-            }
-        };
-
-        // ..........................................................
-        // View API
-
-        // TODO: deprecated
-        viewApi = {
-            /** @api view empty( )
-             * Empties the current view.
-             * <p>
-             * More specifically, removes all DOM elements from the
-             * current view's display div.
-             */
-            empty: function () {
-                if (!current.view) {
-                    return;
-                }
-                current.view.$div.html('');
-            }
-        };
-
-        // ..........................................................
-        // Nav API
-        navApi = {
-
-        };
-
-        // ..........................................................
-        // Library API
-        libApi = {
-
-        };
-
-        // ..........................................................
-        // Exported API
-
-        // function to be called from index.html to build the ONOS UI
-        function buildOnosUi() {
-            tsB = new Date().getTime();
-            tsI = tsB - tsI; // initialization duration
-
-            console.log('ONOS UI initialized in ' + tsI + 'ms');
-
-            if (built) {
-                throwError("ONOS UI already built!");
-            }
-            built = true;
-
-            $mastRadio = d3.select('#mastRadio');
-
-            $(window).on('hashchange', hash);
-            $(window).on('resize', resize);
-
-            d3.select('body').on('keydown', keyIn);
-            setupGlobalKeys();
-
-            // Invoke hashchange callback to navigate to content
-            // indicated by the window location hash.
-            hash();
-
-            // If there were any build errors, report them
-            reportBuildErrors();
-        }
-
-        // export the api and build-UI function
-        return {
-            ui: uiApi,
-            lib: libApi,
-            //view: viewApi,
-            nav: navApi,
-            buildUi: buildOnosUi,
-            exported: exported
-        };
-    };
-
-}(jQuery));
diff --git a/web/gui/src/main/webapp/legacy/onosFlash.css b/web/gui/src/main/webapp/legacy/onosFlash.css
deleted file mode 100644
index 30decca..0000000
--- a/web/gui/src/main/webapp/legacy/onosFlash.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Feedback layer -- CSS file
- */
-
-#feedback {
-    z-index: 1400;
-}
-
-#feedback svg {
-    position: absolute;
-    bottom: 0;
-    opacity: 0.8;
-}
-
-#feedback svg g.feedbackItem {
-    background-color: teal;
-}
-
-#feedback svg g.feedbackItem rect {
-    fill: #ccc;
-}
-
-#feedback svg g.feedbackItem text {
-    fill: #333;
-    stroke: none;
-    text-anchor: middle;
-    alignment-baseline: middle;
-
-    font-size: 16pt;
-}
diff --git a/web/gui/src/main/webapp/legacy/onosFlash.js b/web/gui/src/main/webapp/legacy/onosFlash.js
deleted file mode 100644
index 4035bb3..0000000
--- a/web/gui/src/main/webapp/legacy/onosFlash.js
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Feedback layer
-
- Defines the feedback layer for the UI. Used to give user visual feedback
- of choices, typically responding to keystrokes.
- */
-
-(function (onos){
-    'use strict';
-
-    // API's
-    var api = onos.api;
-
-    // Config variables
-    var w = '100%',
-        h = 200,
-        fade = 200,
-        showFor = 1200,
-        vb = '-200 -' + (h/2) + ' 400 ' + h,
-        xpad = 20,
-        ypad = 10;
-
-    // State variables
-    var timer = null,
-        data = [];
-
-    // DOM elements and the like
-    var fb = d3.select('#feedback');
-
-    var svg;
-
-    //var svg = fb.append('svg').attr({
-    //    width: w,
-    //    height: h,
-    //    viewBox: vb
-    //});
-
-    function computeBox(el) {
-        var text = el.select('text'),
-            box = text.node().getBBox();
-
-        // center
-        box.x = -box.width / 2;
-        box.y = -box.height / 2;
-
-        // add some padding
-        box.x -= xpad;
-        box.width += xpad * 2;
-        box.y -= ypad;
-        box.height += ypad * 2;
-
-        return box;
-    }
-
-    function updateFeedback() {
-        if (!svg) {
-            svg = fb.append('svg').attr({
-                width: w,
-                height: h,
-                viewBox: vb
-            });
-        }
-
-        var items = svg.selectAll('.feedbackItem')
-            .data(data);
-
-        var entering = items.enter()
-            .append('g')
-            .attr({
-                class: 'feedbackItem',
-                opacity: 0
-            })
-            .transition()
-            .duration(fade)
-            .attr('opacity', 1);
-
-        entering.each(function (d) {
-            var el = d3.select(this),
-                box;
-
-            d.el = el;
-            el.append('rect').attr({ rx: 10, ry: 10});
-            el.append('text').text(d.label);
-            box = computeBox(el);
-            el.select('rect').attr(box);
-        });
-
-        items.exit()
-            .transition()
-            .duration(fade)
-            .attr({ opacity: 0})
-            .remove();
-
-        if (svg && data.length === 0) {
-            svg.transition()
-                .delay(fade + 10)
-                .remove();
-            svg = null;
-        }
-    }
-
-    function clearFlash() {
-        if (timer) {
-            clearInterval(timer);
-        }
-        data = [];
-        updateFeedback();
-    }
-
-    // for now, simply display some text feedback
-    function flash(text) {
-        // cancel old scheduled event if there was one
-        if (timer) {
-            clearInterval(timer);
-        }
-        timer = setInterval(function () {
-            clearFlash();
-        }, showFor);
-
-        data = [{
-            label: text
-        }];
-        updateFeedback();
-    }
-
-    onos.ui.addLib('feedback', {
-        flash: flash
-    });
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/onosFloatPanel.css b/web/gui/src/main/webapp/legacy/onosFloatPanel.css
deleted file mode 100644
index 05ae076..0000000
--- a/web/gui/src/main/webapp/legacy/onosFloatPanel.css
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Floating Panels -- CSS file
- */
-
-.fpanel {
-    position: absolute;
-    z-index: 100;
-    display: block;
-    top: 64px;
-    width: 260px;
-    right: -300px;
-    opacity: 0;
-    background-color: rgba(255,255,255,0.8);
-
-    padding: 10px;
-    color: black;
-    font-size: 10pt;
-
-    -moz-border-radius: 6px;
-    border-radius: 6px;
-    box-shadow: 0px 2px 12px #777;
-}
-
-/* TODO: light/dark themes */
-.light .fpanel {
-
-}
-.dark .fpanel {
-
-}
diff --git a/web/gui/src/main/webapp/legacy/onosMast.css b/web/gui/src/main/webapp/legacy/onosMast.css
deleted file mode 100644
index 7210043..0000000
--- a/web/gui/src/main/webapp/legacy/onosMast.css
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Masthead -- CSS file
- */
-
-#mast {
-    height: 36px;
-    padding: 4px;
-    vertical-align: baseline;
-}
-
-.light #mast {
-    background-color: #bbb;
-    box-shadow: 0 2px 8px #777;
-}
-.dark #mast {
-    background-color: #444;
-    box-shadow: 0 2px 8px #777;
-}
-
-#mast img#logo {
-    height: 38px;
-    padding-left: 8px;
-    padding-right: 8px;
-}
-
-#mast span.title {
-    font-size: 14pt;
-    font-style: italic;
-    vertical-align: 12px;
-}
-
-.light #mast span.title {
-    color: #369;
-}
-.dark #mast span.title {
-    color: #eee;
-}
-
-#mast span.right {
-    padding-top: 8px;
-    padding-right: 16px;
-    float: right;
-}
-
-#mast span.radio {
-    font-size: 10pt;
-    margin: 4px 2px;
-    padding: 1px 6px;
-    -moz-border-radius: 3px;
-    border-radius: 3px;
-    cursor: pointer;
-}
-
-.light #mast span.radio {
-    border: 1px dotted #222;
-    color: #eee;
-}
-.dark #mast span.radio {
-    border: 1px dotted #bbb;
-    color: #888;
-}
-
-#mast span.radio.active {
-    padding: 1px 6px;
-}
-
-.light #mast span.radio.active {
-    background-color: #bbb;
-    border: 1px solid #eee;
-    color: #666;
-
-}
-.dark #mast span.radio.active {
-    background-color: #222;
-    border: 1px solid #eee;
-    color: #78a;
-}
-
-/* Button Bar */
-
-#bb {
-    margin: 0 30px;
-    padding: 0 2px;
-}
-
-#bb .btn {
-    margin: 0 4px;
-    padding: 2px 6px;
-    -moz-border-radius: 3px;
-    border-radius: 3px;
-    font-size: 9pt;
-    cursor: pointer;
-}
-
-.light #bb .btn {
-    border: 1px solid #fff;
-    border-right-color: #444;
-    border-bottom-color: #444;
-    color: #222;
-}
-
-.light #bb .btn.active {
-    border: 1px solid #444;
-    border-right-color: #fff;
-    border-bottom-color: #fff;
-    background-color: #888;
-    color: #ddf;
-}
-
-.dark #bb .btn {
-    border: 1px solid #888;
-    border-right-color: #111;
-    border-bottom-color: #111;
-    color: #888;
-}
-
-.dark #bb .btn.active {
-    border: 1px solid #111;
-    border-right-color: #888;
-    border-bottom-color: #888;
-    background-color: #555;
-    color: #78a;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/onosMast.js b/web/gui/src/main/webapp/legacy/onosMast.js
deleted file mode 100644
index d4f51b7..0000000
--- a/web/gui/src/main/webapp/legacy/onosMast.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Masthead script
-
- Defines the masthead for the UI. Injects logo and title, as well as providing
- the placeholder for a set of radio buttons.
- */
-
-(function (onos){
-    'use strict';
-
-    // API's
-    var api = onos.api;
-
-    // Config variables
-    var guiTitle = 'Open Network Operating System';
-
-    // DOM elements and the like
-    var mast = d3.select('#mast');
-
-    mast.append('img')
-        .attr({
-            id: 'logo',
-            src: 'onos-logo.png'
-        });
-
-    mast.append('span')
-        .attr({
-            class: 'title'
-        })
-        .text(guiTitle);
-
-    mast.append('span')
-        .attr({
-            id: 'mastRadio',
-            class: 'right'
-        });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/onosQuickHelp.css b/web/gui/src/main/webapp/legacy/onosQuickHelp.css
deleted file mode 100644
index 899730e..0000000
--- a/web/gui/src/main/webapp/legacy/onosQuickHelp.css
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Quick Help layer -- CSS file
- */
-
-#quickhelp {
-    z-index: 1300;
-}
-
-#quickhelp svg {
-    position: absolute;
-    top: 180px;
-    opacity: 1;
-}
-
-#quickhelp svg g.help rect {
-    fill: black;
-    opacity: 0.7;
-}
-
-#quickhelp svg text.title {
-    font-size: 10pt;
-    font-style: italic;
-    text-anchor: middle;
-    fill: #999;
-}
-
-#quickhelp svg g.keyItem {
-    fill: white;
-}
-
-#quickhelp svg g line.qhrowsep {
-    stroke: #888;
-    stroke-dasharray: 2 2;
-}
-
-#quickhelp svg text {
-    font-size: 7pt;
-    alignment-baseline: middle;
-}
-
-#quickhelp svg text.key {
-    fill: #add;
-}
-
-#quickhelp svg text.desc {
-    fill: #ddd;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/onosQuickHelp.js b/web/gui/src/main/webapp/legacy/onosQuickHelp.js
deleted file mode 100644
index c0767ef..0000000
--- a/web/gui/src/main/webapp/legacy/onosQuickHelp.js
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Quick Help Layer
-
- Defines the key-map layer for the UI. Used to give user a list of
- key bindings; both global, and for the current view.
- */
-
-(function (onos){
-    'use strict';
-
-    // Config variables
-    var w = '100%',
-        h = '80%',
-        fade = 500,
-        vb = '-200 0 400 400';
-
-    // layout configuration
-    var pad = 10,
-        offy = 45,
-        sepYDelta = 20,
-        colXDelta = 16,
-        yTextSpc = 12,
-        offDesc = 8;
-
-    // State variables
-    var data = [],
-        yCount;
-
-    // DOM elements and the like
-    var qhdiv = d3.select('#quickhelp'),
-        svg = qhdiv.select('svg'),
-        pane, rect, items;
-
-    // General functions
-    function isA(a) { return $.isArray(a) ? a : null; }
-    function isS(s) { return typeof s === 'string'; }
-
-    function cap(s) {
-        return s.replace(/^[a-z]/, function (m) { return m.toUpperCase(); });
-    }
-
-    var keyDisp = {
-        equals: '=',
-        dash: '-',
-        slash: '/',
-        backSlash: '\\',
-        backQuote: '`',
-        leftArrow: 'L-arrow',
-        upArrow: 'U-arrow',
-        rightArrow: 'R-arrow',
-        downArrow: 'D-arrow'
-    };
-
-    function mkKeyDisp(id) {
-        var v = keyDisp[id] || id;
-        return cap(v);
-    }
-
-    function addSeparator(el, i) {
-        var y = sepYDelta/2 - 5;
-        el.append('line')
-            .attr({ 'class': 'qhrowsep', x1: 0, y1: y, x2: 0, y2: y });
-    }
-
-    function addContent(el, data, ri) {
-        var xCount = 0,
-            clsPfx = 'qh-r' + ri + '-c';
-
-        function addColumn(el, c, i) {
-            var cls = clsPfx + i,
-                oy = 0,
-                aggKey = el.append('g').attr('visibility', 'hidden'),
-                gcol = el.append('g').attr({
-                   'class': cls,
-                    transform: translate(xCount, 0)
-                });
-
-            c.forEach(function (j) {
-                var k = j[0],
-                    v = j[1];
-
-                if (k !== '-') {
-                    aggKey.append('text').text(k);
-
-                    gcol.append('text').text(k)
-                        .attr({
-                            'class': 'key',
-                            y: oy
-                        });
-                    gcol.append('text').text(v)
-                        .attr({
-                            'class': 'desc',
-                            y: oy
-                        });
-                }
-
-                oy += yTextSpc;
-            });
-
-            // adjust position of descriptions, based on widest key
-            var kbox = aggKey.node().getBBox(),
-                ox = kbox.width + offDesc;
-            gcol.selectAll('.desc').attr('x', ox);
-            aggKey.remove();
-
-            // now update x-offset for next column
-            var bbox = gcol.node().getBBox();
-            xCount += bbox.width + colXDelta;
-        }
-
-        data.forEach(function (d, i) {
-            addColumn(el, d, i);
-        });
-
-        // finally, return the height of the row..
-        return el.node().getBBox().height;
-    }
-
-    function updateKeyItems() {
-        var rows = items.selectAll('.qhRow').data(data);
-
-        yCount = offy;
-
-        var entering = rows.enter()
-            .append('g')
-            .attr({
-                'class': 'qhrow'
-            });
-
-        entering.each(function (r, i) {
-            var el = d3.select(this),
-                sep = r.type === 'sep',
-                dy;
-
-            el.attr('transform', translate(0, yCount));
-
-            if (sep) {
-                addSeparator(el, i);
-                yCount += sepYDelta;
-            } else {
-                dy = addContent(el, r.data, i);
-                yCount += dy;
-            }
-        });
-
-        // size the backing rectangle
-        var ibox = items.node().getBBox(),
-            paneW = ibox.width + pad * 2,
-            paneH = ibox.height + offy;
-
-        items.selectAll('.qhrowsep').attr('x2', ibox.width);
-        items.attr('transform', translate(-paneW/2, -pad));
-        rect.attr({
-            width: paneW,
-            height: paneH,
-            transform: translate(-paneW/2-pad, 0)
-        });
-
-    }
-
-    function translate(x, y) {
-        return 'translate(' + x + ',' + y + ')';
-    }
-
-    function checkFmt(fmt) {
-        // should be a single array of keys,
-        // or array of arrays of keys (one per column).
-        // return null if there is a problem.
-        var a = isA(fmt),
-            n = a && a.length,
-            ns = 0,
-            na = 0;
-
-        if (n) {
-            // it is an array which has some content
-            a.forEach(function (d) {
-                isA(d) && na++;
-                isS(d) && ns++;
-            });
-            if (na === n || ns === n) {
-                // all arrays or all strings...
-                return a;
-            }
-        }
-        return null;
-    }
-
-    function buildBlock(map, fmt) {
-        var b = [];
-        fmt.forEach(function (k) {
-            var v = map.get(k),
-                a = isA(v),
-                d = (a && a[1]);
-
-            // '-' marks a separator; d is the description
-            if (k === '-' || d) {
-                b.push([mkKeyDisp(k), d]);
-            }
-        });
-        return b;
-    }
-
-    function emptyRow() {
-        return { type: 'row', data: []};
-    }
-
-    function mkArrRow(fmt) {
-        var d = emptyRow();
-        d.data.push(fmt);
-        return d;
-    }
-
-    function mkColumnarRow(map, fmt) {
-        var d = emptyRow();
-        fmt.forEach(function (a) {
-            d.data.push(buildBlock(map, a));
-        });
-        return d;
-    }
-
-    function mkMapRow(map, fmt) {
-        var d = emptyRow();
-        d.data.push(buildBlock(map, fmt));
-        return d;
-    }
-
-    function addRow(row) {
-        var d = row || { type: 'sep' };
-        data.push(d);
-    }
-
-    function aggregateData(bindings) {
-        var hf = '_helpFormat',
-            gmap = d3.map(bindings.globalKeys),
-            gfmt = bindings.globalFormat,
-            vmap = d3.map(bindings.viewKeys),
-            vgest = bindings.viewGestures,
-            vfmt, vkeys;
-
-        // filter out help format entry
-        vfmt = checkFmt(vmap.get(hf));
-        vmap.remove(hf);
-
-        // if bad (or no) format, fallback to sorted keys
-        if (!vfmt) {
-            vkeys = vmap.keys();
-            vfmt = vkeys.sort();
-        }
-
-        data = [];
-
-        addRow(mkMapRow(gmap, gfmt));
-        addRow();
-        addRow(isA(vfmt[0]) ? mkColumnarRow(vmap, vfmt) : mkMapRow(vmap, vfmt));
-        addRow();
-        addRow(mkArrRow(vgest));
-    }
-
-
-    function popBind(bindings) {
-        pane = svg.append('g')
-            .attr({
-                class: 'help',
-                opacity: 0
-            });
-
-        rect = pane.append('rect')
-            .attr('rx', 8);
-
-        pane.append('text')
-            .text('Quick Help')
-            .attr({
-                class: 'title',
-                dy: '1.2em',
-                transform: translate(-pad,0)
-            });
-
-        items = pane.append('g');
-        aggregateData(bindings);
-        updateKeyItems();
-
-        _fade(1);
-    }
-
-    function fadeBindings() {
-        _fade(0);
-    }
-
-    function _fade(o) {
-        svg.selectAll('g.help')
-            .transition()
-            .duration(fade)
-            .attr('opacity', o);
-    }
-
-    function addSvg() {
-        svg = qhdiv.append('svg')
-            .attr({
-                width: w,
-                height: h,
-                viewBox: vb
-            });
-    }
-
-    function removeSvg() {
-        svg.transition()
-            .delay(fade + 20)
-            .remove();
-    }
-
-    function showQuickHelp(bindings) {
-        svg = qhdiv.select('svg');
-        if (svg.empty()) {
-            addSvg();
-            popBind(bindings);
-        } else {
-            hideQuickHelp();
-        }
-    }
-
-    function hideQuickHelp() {
-        svg = qhdiv.select('svg');
-        if (!svg.empty()) {
-            fadeBindings();
-            removeSvg();
-            return true;
-        }
-        return false;
-    }
-
-    onos.ui.addLib('quickHelp', {
-        show: showQuickHelp,
-        hide: hideQuickHelp
-    });
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sample.js b/web/gui/src/main/webapp/legacy/sample.js
deleted file mode 100644
index bbd7ef9..0000000
--- a/web/gui/src/main/webapp/legacy/sample.js
+++ /dev/null
@@ -1,220 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Sample module file to illustrate framework integration.
- */
-
-(function (onos) {
-    'use strict';
-
-    var pi = Math.PI,
-        svg,
-        dotG,
-        nCircles = 12,
-        circleData = [],
-        dotId = 0,
-        angle = 360 / nCircles,
-        baseAngle = -90 - angle,
-        groupRadius = 120,
-        dotRadius = 24,
-        dotMoveMs = 800,
-        dotAppearMs = 300,
-        dotEase = 'elastic',
-        colorScale = d3.scale.linear()
-            .domain([-pi/2, 2*pi/4, 3*pi/2])
-            .range(['green', 'goldenrod', 'blue']);
-
-    // set the size of the SVG layer to match that of the view
-    function sizeSvg(view) {
-        svg.attr({
-            width: view.width(),
-            height: view.height()
-        });
-    }
-
-    // gets invoked only the first time the view is loaded
-    function init(view, ctx, flags) {
-        // prepare our SVG layer...
-        svg = view.$div.append('svg');
-        sizeSvg(view);
-        dotG = svg.append('g').attr('id', 'dots');
-    }
-
-    // gets invoked just before our view is loaded
-    function reset(view, ctx, flags) {
-        // clear dot group and reset circle data
-        dotG.html('');
-        circleData = [];
-        // also clear text, if any
-        svg.selectAll('text').remove();
-    }
-
-    function updateCirclePositions(view, addNew) {
-        var w = view.width(),
-            h = view.height(),
-            ox = w / 2,
-            oy = h / 2;
-
-        // reposition existing dots
-        circleData.forEach(function (c, i) {
-            var inc = addNew ? 1 : 0,
-                theta = ((i + inc) * angle + baseAngle) * pi/180,
-                dx = Math.cos(theta) * groupRadius,
-                dy = Math.sin(theta) * groupRadius,
-                x = ox + dx,
-                y = oy + dy;
-            if (!addNew && i === 0) {
-                x = ox;
-                y = oy;
-            }
-            c.cx = x;
-            c.cy = y;
-            c.rgb = colorScale(theta);
-        });
-
-        if (addNew) {
-            // introduce a new dot
-            circleData.unshift({
-                cx: ox,
-                cy: oy,
-                id: dotId++
-            });
-        }
-
-        // +1 to account for the circle in the center..
-        if (circleData.length > nCircles + 1) {
-            circleData.splice(nCircles + 1, 1);
-        }
-    }
-
-    function doCircles(view) {
-        var ox = view.width() / 2,
-            oy = view.height() / 2,
-            stroke = 'black',
-            fill = 'red',
-            hoverFill = 'magenta';
-
-        // move existing circles, and add a new one
-        updateCirclePositions(view, true);
-
-        var circ = dotG.selectAll('circle')
-            .data(circleData, function (d) { return d.id; });
-
-        // operate on existing elements
-        circ.on('mouseover', null)
-            .on('mouseout', null)
-            .on('click', null)
-            .transition()
-            .duration(dotMoveMs)
-            .ease(dotEase)
-            .attr({
-                cx: function (d) { return d.cx; },
-                cy: function (d) { return d.cy; }
-            })
-            .style({
-                cursor: 'default',
-                fill: function (d) { return d.rgb; }
-            });
-
-        // operate on entering elements
-        circ.enter()
-            .append('circle')
-            .attr({
-                cx: function (d) { return d.cx; },
-                cy: function (d) { return d.cy; },
-                r: 0
-            })
-            .style({
-                fill: fill,
-                stroke: stroke,
-                'stroke-width': 3.5,
-                cursor: 'pointer',
-                opacity: 0
-            })
-            .on('mouseover', function (d) {
-                d3.select(this).style('fill', hoverFill);
-            })
-            .on('mouseout', function (d) {
-                d3.select(this).style('fill', fill);
-            })
-            .on('click', function (d) {
-                setTimeout(function() {
-                    doCircles(view, true);
-                }, 10);
-            })
-            .transition()
-            .delay(dotMoveMs)
-            .duration(dotAppearMs)
-            .attr('r', dotRadius)
-            .style('opacity', 1);
-
-        // operate on exiting elements
-        circ.exit()
-            .transition()
-            .duration(750)
-            .style('opacity', 0)
-            .attr({
-                cx: ox,
-                cy: oy,
-                r: groupRadius - dotRadius
-            })
-            .remove();
-    }
-
-    function load(view, ctx, flags) {
-        var ctxText = ctx ? 'Context is "' + ctx + '"' : '';
-
-        // display our view context
-        if (ctxText) {
-            svg.append('text')
-                .text(ctxText)
-                .attr({
-                    x: 20,
-                    y: '1.5em'
-                })
-                .style({
-                    fill: 'darkgreen',
-                    'font-size': '20pt'
-                });
-        }
-
-        doCircles(view);
-    }
-
-    function resize(view, ctx, flags) {
-        sizeSvg(view);
-        updateCirclePositions(view);
-
-        // move exiting dots into new positions, relative to view size
-        var circ = dotG.selectAll('circle')
-            .data(circleData, function (d) { return d.id; });
-        circ.attr({
-                cx: function (d) { return d.cx; },
-                cy: function (d) { return d.cy; }
-            });
-    }
-
-    // == register our view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sample', {
-        init: init,
-        reset: reset,
-        load: load,
-        resize: resize
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sampleHash.js b/web/gui/src/main/webapp/legacy/sampleHash.js
deleted file mode 100644
index f668c74..0000000
--- a/web/gui/src/main/webapp/legacy/sampleHash.js
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Sample view to illustrate hash formats.
- */
-
-(function (onos) {
-    'use strict';
-
-    var intro = "Try using the following hashes in the address bar:",
-        hashPrefix = '#sampleHash',
-        suffixes = [
-            '',
-            ',one',
-            ',two',
-            ',context,ignored',
-            ',context,ignored?a,b,c',
-            ',two?foo',
-            ',three?foo,bar'
-        ],
-        $d;
-
-    function note(txt) {
-        $d.append('p')
-            .text(txt)
-            .style({
-                'font-size': '10pt',
-                color: 'darkorange',
-                padding: '0 20px',
-                margin: 0
-            });
-    }
-
-    function para(txt, color) {
-        var c = color || 'black';
-        $d.append('p')
-            .text(txt)
-            .style({
-                padding: '2px 8px',
-                color: c
-            });
-    }
-
-    function load(view, ctx, flags) {
-        var c = ctx || '(undefined)',
-            f = flags ? d3.map(flags).keys() : [];
-
-        $d = view.$div;
-
-        para(intro);
-
-        suffixes.forEach(function (s) {
-            note(hashPrefix + s);
-        });
-
-        para('View ID: ' + view.vid, 'blue');
-        para('Context: ' + c, 'blue');
-        para('Flags: { ' + f.join(', ') + ' }', 'magenta');
-    }
-
-    // == register the view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sampleHash', {
-        reset: true,    // empty the div on reset
-        load: load
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sampleKeys.js b/web/gui/src/main/webapp/legacy/sampleKeys.js
deleted file mode 100644
index ef3d76c..0000000
--- a/web/gui/src/main/webapp/legacy/sampleKeys.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Sample view to illustrate key bindings.
- */
-
-(function (onos) {
-    'use strict';
-
-    var keyDispatch = {
-        Z: keyUndo,
-        X: keyCut,
-        C: keyCopy,
-        V: keyPaste,
-        space: keySpace
-    };
-
-    function keyUndo(view) {
-        note(view, 'Z = UNDO');
-    }
-
-    function keyCut(view) {
-        note(view, 'X = CUT');
-    }
-
-    function keyCopy(view) {
-        note(view, 'C = COPY');
-    }
-
-    function keyPaste(view) {
-        note(view, 'V = PASTE');
-    }
-
-    function keySpace(view) {
-        note(view, 'The SpaceBar');
-    }
-
-    function note(view, msg) {
-        view.$div.append('p')
-            .text(msg)
-            .style({
-                'font-size': '10pt',
-                color: 'darkorange',
-                padding: '0 20px',
-                margin: 0
-            });
-    }
-
-    function keyCallback(view, key, keyCode, event) {
-        note(view, 'Key = ' + key + ' KeyCode = ' + keyCode);
-    }
-
-    function load(view, ctx) {
-        // this maps specific keys to specific functions (1)
-        view.setKeys(keyDispatch);
-        // whereas, this installs a general key handler function (2)
-        view.setKeys(keyCallback);
-
-        // Note that (1) takes precedence over (2)
-
-        view.$div.append('p')
-            .text('Press a key or two (try Z,X,C,V and others) ...')
-            .style('padding', '2px 8px');
-    }
-
-    // == register the view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sampleKeys', {
-        reset: true,    // empty the div on reset
-        load: load
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/sampleRadio.js b/web/gui/src/main/webapp/legacy/sampleRadio.js
deleted file mode 100644
index 11dd1ef..0000000
--- a/web/gui/src/main/webapp/legacy/sampleRadio.js
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- Sample view to illustrate radio buttons.
- */
-
-(function (onos) {
-    'use strict';
-
-    var intro = [ 'Yo, radio button set...', 'Time to shine' ],
-        btnSet = [
-            { text: 'First Button', cb: cbRadio },
-            { text: 'Second Button', cb: cbRadio },
-            { text: 'Third Button', cb: cbRadio }
-        ];
-
-    // radio button callback
-    function cbRadio(view, btn) {
-        write(view, 'You pressed the ' + btn.text);
-    }
-
-    function write(view, msg) {
-        view.$div.append('p')
-            .text(msg)
-            .style({
-                'font-size': '10pt',
-                color: 'green',
-                padding: '0 20px',
-                margin: '2px'
-            });
-    }
-
-    // invoked when the view is loaded
-    function load(view, ctx) {
-        view.setRadio(btnSet);
-
-        view.$div.selectAll('p')
-            .data(intro)
-            .enter()
-            .append('p')
-            .text(function (d) { return d; })
-            .style('padding', '2px 8px');
-    }
-
-    // == register the view here, with links to lifecycle callbacks
-
-    onos.ui.addView('sampleRadio', {
-        reset: true,    // empty the div on reset
-        load: load
-    });
-
-}(ONOS));
diff --git a/web/gui/src/main/webapp/legacy/topo.css b/web/gui/src/main/webapp/legacy/topo.css
deleted file mode 100644
index ddf15b6..0000000
--- a/web/gui/src/main/webapp/legacy/topo.css
+++ /dev/null
@@ -1,417 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS GUI -- Topology view -- CSS file
- */
-
-#topo svg #topo-bg {
-    opacity: 0.5;
-}
-
-#topo #map {
-    stroke-width: 2px;
-    stroke: #eee;
-    fill: transparent;
-}
-
-/* TODO: move glyphs into framework */
-
-#topo svg .glyphIcon {
-    fill: black;
-    stroke: none;
-    fill-rule: evenodd;
-}
-#topo svg .glyphIcon rect {
-    fill: #ddd;
-    stroke: none;
-}
-
-
-#topo svg .noDevsLayer {
-    visibility: hidden;
-}
-
-#topo svg .noDevsLayer text {
-    font-size: 60pt;
-    font-style: italic;
-    fill: #dde;
-}
-
-#topo svg .noDevsBird {
-    fill: #ecd;
-}
-
-/* NODES */
-
-#topo svg .node {
-    cursor: pointer;
-}
-
-#topo svg .node.selected rect,
-#topo svg .node.selected circle {
-    fill: #f90;
-    filter: url(#blue-glow);
-}
-
-#topo svg .node text {
-    pointer-events: none;
-}
-
-/* Device Nodes */
-
-#topo svg .node.device {
-}
-
-#topo svg .node.device rect {
-    stroke-width: 1.5;
-}
-
-#topo svg .node.device.fixed rect {
-    stroke-width: 1.5;
-    stroke: #ccc;
-}
-
-/* note: device is offline without the 'online' class */
-#topo svg .node.device {
-    fill: #777;
-}
-
-#topo svg .node.device.online {
-    fill: #6e7fa3;
-}
-
-/* note: device is offline without the 'online' class */
-#topo svg .node.device text {
-    fill: #bbb;
-    font: 10pt sans-serif;
-}
-
-#topo svg .node.device.online text {
-    fill: white;
-}
-
-#topo svg .node.device .glyphIcon rect {
-    fill: #aaa;
-}
-#topo svg .node.device .glyphIcon use {
-    fill: #777;
-}
-#topo svg .node.device.selected .glyphIcon rect {
-    fill: #f90;
-}
-#topo svg .node.device.online .glyphIcon rect {
-    fill: #ccc;
-}
-#topo svg .node.device.online .glyphIcon use {
-    fill: #000;
-}
-#topo svg .node.device.online.selected .glyphIcon rect {
-    fill: #f90;
-}
-
-
-/* Host Nodes */
-
-#topo svg .node.host {
-    stroke: #000;
-}
-
-#topo svg .node.host text {
-    fill: #846;
-    stroke: none;
-    font: 9pt sans-serif;
-}
-
-svg .node.host circle {
-    stroke: #000;
-    fill: #edb;
-}
-
-/* LINKS */
-
-#topo svg .link {
-    opacity: .9;
-}
-
-#topo svg .link.inactive {
-    opacity: .5;
-    stroke-dasharray: 8 4;
-}
-
-#topo svg .link.secondary {
-    stroke: rgba(0,153,51,0.5);
-    stroke-width: 3px;
-}
-#topo svg .link.primary {
-    stroke: #ffA300;
-    stroke-width: 4px;
-}
-#topo svg .link.animated {
-    stroke: #ffA300;
-}
-
-#topo svg .link.secondary.optical {
-    stroke: rgba(128,64,255,0.5);
-    stroke-width: 4px;
-}
-#topo svg .link.primary.optical {
-    stroke: #74f;
-    stroke-width: 6px;
-}
-#topo svg .link.animated.optical {
-    stroke: #74f;
-    stroke-width: 10px;
-}
-
-#topo svg .linkLabel rect {
-    fill: #eee;
-    stroke: none;
-}
-#topo svg .linkLabel text {
-    text-anchor: middle;
-    stroke: #777;
-    stroke-width: 0.1;
-    font-size: 9pt;
-}
-
-/* Fly-in summary pane */
-
-#topo-summary {
-    /* gets base CSS from .fpanel in floatPanel.css */
-    top: 64px;
-}
-
-#topo-summary svg {
-    display: inline-block;
-    width: 42px;
-    height: 42px;
-}
-
-#topo-summary svg .glyphIcon {
-    fill: black;
-    stroke: none;
-    fill-rule: evenodd;
-}
-
-#topo-summary h2 {
-    position: absolute;
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-summary h3 {
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-summary p, table {
-    margin: 4px 4px;
-}
-
-#topo-summary td.label {
-    font-style: italic;
-    color: #777;
-    padding-right: 12px;
-}
-
-#topo-summary td.value {
-}
-
-#topo-summary hr {
-    height: 1px;
-    color: #ccc;
-    background-color: #ccc;
-    border: 0;
-}
-
-/* Fly-in details pane */
-
-#topo-detail {
-    /* gets base CSS from .fpanel in floatPanel.css */
-    top: 320px;
-
-}
-
-#topo-detail svg {
-    display: inline-block;
-    width: 42px;
-    height: 42px;
-}
-
-#topo-detail svg .glyphIcon {
-    fill: black;
-    stroke: none;
-    fill-rule: evenodd;
-}
-
-#topo-detail h2 {
-    position: absolute;
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-detail h3 {
-    margin: 0 4px;
-    top: 20px;
-    left: 50px;
-    color: black;
-}
-
-#topo-detail p, table {
-    margin: 4px 4px;
-}
-
-#topo-detail td.label {
-    font-style: italic;
-    color: #777;
-    padding-right: 12px;
-}
-
-#topo-detail td.value {
-}
-
-
-#topo-detail .actionBtn {
-    margin: 6px 12px;
-    padding: 2px 6px;
-    font-size: 9pt;
-    cursor: pointer;
-    width: 200px;
-    text-align: center;
-
-    /* theme specific... */
-    border: 2px solid #ddd;
-    border-radius: 4px;
-    color: #eee;
-    background: #888;
-}
-
-#topo-detail .actionBtn:hover {
-    /* theme specific... */
-    border: 2px solid #ddd;
-    color: #eee;
-    background: #444;
-}
-
-
-#topo-detail hr {
-    height: 1px;
-    color: #ccc;
-    background-color: #ccc;
-    border: 0;
-}
-
-/* ONOS instance stuff */
-
-#topo-oibox {
-    height: 100px;
-}
-
-#topo-oibox div.onosInst {
-    display: inline-block;
-    width: 170px;
-    height: 85px;
-    cursor: pointer;
-}
-
-#topo-oibox svg rect {
-    fill: #ccc;
-    stroke: #aaa;
-    stroke-width: 3.5;
-}
-#topo-oibox .online svg rect {
-    opacity: 1;
-    fill: #9cf;
-    stroke: #555;
-}
-
-#topo-oibox svg .glyphIcon {
-    fill: #888;
-    fill-rule: evenodd;
-}
-#topo-oibox .online svg .glyphIcon {
-    fill: #000;
-}
-
-#topo-oibox svg .badgeIcon {
-    fill: #777;
-    fill-rule: evenodd;
-}
-
-#topo-oibox .online svg .badgeIcon {
-    fill: #fff;
-}
-
-#topo-oibox svg text {
-    text-anchor: middle;
-    fill: #777;
-}
-#topo-oibox .online svg text {
-    fill: #eee;
-}
-
-#topo-oibox svg text.instTitle {
-    font-size: 11pt;
-    font-weight: bold;
-}
-#topo-oibox svg text.instLabel {
-    font-size: 9pt;
-    font-style: italic;
-}
-
-#topo-oibox .onosInst.mastership {
-    opacity: 0.3;
-}
-#topo-oibox .onosInst.mastership.affinity {
-    opacity: 1.0;
-}
-#topo-oibox .onosInst.mastership.affinity svg rect {
-    filter: url(#blue-glow);
-}
-
-
-#topo svg .suppressed {
-    opacity: 0.2;
-}
-
-/* Death Mask (starts hidden) */
-
-#topo-mask {
-    display: none;
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 10000px;
-    height: 8000px;
-    z-index: 5000;
-    background-color: rgba(0,0,0,0.75);
-    padding: 60px;
-}
-
-#topo-mask p {
-    margin: 8px 20px;
-    color: #ddd;
-    font-size: 14pt;
-    font-style: italic;
-}
-
diff --git a/web/gui/src/main/webapp/legacy/topo.js b/web/gui/src/main/webapp/legacy/topo.js
deleted file mode 100644
index a8f0570..0000000
--- a/web/gui/src/main/webapp/legacy/topo.js
+++ /dev/null
@@ -1,3160 +0,0 @@
-/*
- * Copyright 2014 Open Networking Laboratory
- *
- * 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.
- */
-
-/*
- ONOS network topology viewer - version 1.1
- */
-
-(function (onos) {
-    'use strict';
-
-    // shorter names for library APIs
-    var d3u = onos.lib.d3util,
-        gly = onos.lib.glyphs;
-
-    // configuration data
-    var config = {
-        useLiveData: true,
-        fnTrace: true,
-        debugOn: false,
-        birdDim: 400,
-        options: {
-            showBackground: true
-        },
-        webSockUrl: '../ws/topology',
-        data: {
-            live: {
-                jsonUrl: '../rs/topology/graph',
-                detailPrefix: '../rs/topology/graph/',
-                detailSuffix: ''
-            },
-            fake: {
-                jsonUrl: 'json/network2.json',
-                detailPrefix: 'json/',
-                detailSuffix: '.json'
-            }
-        },
-        labels: {
-            imgPad: 16,
-            padLR: 4,
-            padTB: 3,
-            marginLR: 3,
-            marginTB: 2,
-            port: {
-                gap: 3,
-                width: 18,
-                height: 14
-            }
-        },
-        topo: {
-            linkBaseColor: '#666',
-            linkInColor: '#66f',
-            linkInWidth: 12,
-            linkOutColor: '#f00',
-            linkOutWidth: 10
-        },
-        icons: {
-            device: {
-                dim: 36,
-                rx: 4,
-                xoff: -20,
-                yoff: -18
-            },
-            host: {
-                defaultRadius: 9,
-                radius: {
-                    endstation: 14,
-                    bgpSpeaker: 14,
-                    router: 14
-                }
-            }
-        },
-        force: {
-            note_for_links: 'link.type is used to differentiate',
-            linkDistance: {
-                direct: 100,
-                optical: 120,
-                hostLink: 3
-            },
-            linkStrength: {
-                direct: 1.0,
-                optical: 1.0,
-                hostLink: 1.0
-            },
-            note_for_nodes: 'node.class is used to differentiate',
-            charge: {
-                device: -8000,
-                host: -5000
-            }
-        },
-        // see below in creation of viewBox on main svg
-        logicalSize: 1000
-    };
-
-    // radio buttons
-    var layerButtons = [
-            { text: 'All Layers', id: 'all', cb: showAllLayers },
-            { text: 'Packet Only', id: 'pkt', cb: showPacketLayer },
-            { text: 'Optical Only', id: 'opt', cb: showOpticalLayer }
-        ],
-        layerBtnSet,
-        layerBtnDispatch = {
-            all: showAllLayers,
-            pkt: showPacketLayer,
-            opt: showOpticalLayer
-        };
-
-    // key bindings
-    var keyDispatch = {
-        // ==== "development mode" ====
-        //0: testMe,
-        //equals: injectStartupEvents,
-        //dash: injectTestEvent,
-
-        O: [toggleSummary, 'Toggle ONOS summary pane'],
-        I: [toggleInstances, 'Toggle ONOS instances pane'],
-        D: [toggleDetails, 'Disable / enable details pane'],
-
-        H: [toggleHosts, 'Toggle host visibility'],
-        M: [toggleOffline, 'Toggle offline visibility'],
-        B: [toggleBg, 'Toggle background image'],
-        P: togglePorts,
-
-        X: [toggleNodeLock, 'Lock / unlock node positions'],
-        Z: [toggleOblique, 'Toggle oblique view (Experimental)'],
-        L: [cycleLabels, 'Cycle device labels'],
-        U: [unpin, 'Unpin node (hover mouse over)'],
-        R: [resetPanZoom, 'Reset pan / zoom'],
-
-        V: [showRelatedIntentsAction, 'Show all related intents'],
-        rightArrow: [showNextIntentAction, 'Show next related intent'],
-        leftArrow: [showPrevIntentAction, 'Show previous related intent'],
-        W: [showSelectedIntentTrafficAction, 'Monitor traffic of selected intent'],
-        A: [showAllTrafficAction, 'Monitor all traffic'],
-        F: [showDeviceLinkFlowsAction, 'Show device link flows'],
-
-        E: [equalizeMasters, 'Equalize mastership roles'],
-
-        esc: handleEscape,
-
-        _helpFormat: [
-            ['O', 'I', 'D', '-', 'H', 'M', 'B', 'P' ],
-            ['X', 'Z', 'L', 'U', 'R' ],
-            ['V', 'rightArrow', 'leftArrow', 'W', 'A', 'F', '-', 'E' ]
-        ]
-    };
-
-    // mouse gestures
-    var gestures = [
-        ['click', 'Select the item and show details'],
-        ['shift-click', 'Toggle selection state'],
-        ['drag', 'Reposition (and pin) device / host'],
-        ['cmd-scroll', 'Zoom in / out'],
-        ['cmd-drag', 'Pan']
-    ];
-
-    // state variables
-    var network = {
-            view: null,     // view token reference
-            nodes: [],
-            links: [],
-            lookup: {},
-            revLinkToKey: {}
-        },
-        scenario = {
-            evDir: 'json/ev/',
-            evScenario: '/scenario.json',
-            evPrefix: '/ev_',
-            evOnos: '_onos.json',
-            evUi: '_ui.json',
-            ctx: null,
-            params: {},
-            evNumber: 0,
-            view: null
-        },
-        webSock,
-        sid = 0,
-        deviceLabelCount = 3,
-        hostLabelCount = 2,
-        deviceLabelIndex = 0,
-        hostLabelIndex = 0,
-        selections = {},
-        selectOrder = [],
-        hovered = null,
-        summaryPane,
-        detailPane,
-        antTimer = null,
-        guiSuccessor = null,
-        onosInstances = {},
-        onosOrder = [],
-        oiBox,
-        oiShowMaster = false,
-        portLabelsOn = false,
-        cat7 = d3u.cat7(),
-        colorAffinity = false,
-        showHosts = false,
-        showOffline = true,
-        useDetails = true,
-        haveDetails = false,
-        nodeLock = false,
-        oblique = false;
-
-    // constants
-    var hoverModeNone = 0,
-        hoverModeAll = 1,
-        hoverModeFlows = 2,
-        hoverModeIntents = 3,
-        hoverMode = hoverModeNone;
-
-    // D3 selections
-    var svg,
-        panZoomContainer,
-        noDevices,
-        bgImg,
-        topoG,
-        nodeG,
-        linkG,
-        linkLabelG,
-        node,
-        link,
-        linkLabel,
-        mask;
-
-    // the projection for the map background
-    var geoMapProj;
-
-    // the zoom function
-    var zoom;
-
-    // ==============================
-    // For Debugging / Development
-
-    function fnTrace(msg, id) {
-        if (config.fnTrace) {
-            console.log('FN: ' + msg + ' [' + id + ']');
-        }
-    }
-
-    function evTrace(data) {
-        fnTrace(data.event, data.payload.id);
-    }
-
-    // ==============================
-    // Key Callbacks
-
-    function flash(txt) {
-        network.view.flash(txt);
-    }
-
-    function testMe(view) {
-        //view.alert('Theme is ' + view.getTheme());
-        //view.flash('This is some text');
-        cat7.testCard(svg);
-    }
-
-    function injectTestEvent(view) {
-        if (config.useLiveData) { return; }
-
-        var sc = scenario,
-            evn = ++sc.evNumber,
-            pfx = sc.evDir + sc.ctx + sc.evPrefix + evn,
-            onosUrl = pfx + sc.evOnos,
-            uiUrl = pfx + sc.evUi,
-            stack = [
-                { url: onosUrl, cb: handleServerEvent },
-                { url: uiUrl, cb: handleUiEvent }
-            ];
-        recurseFetchEvent(stack, evn);
-    }
-
-    function recurseFetchEvent(stack, evn) {
-        var v = scenario.view,
-            frame;
-        if (stack.length === 0) {
-            v.alert('Oops!\n\nNo event #' + evn + ' found.');
-            return;
-        }
-        frame = stack.shift();
-
-        d3.json(frame.url, function (err, data) {
-            if (err) {
-                if (err.status === 404) {
-                    // if we didn't find the data, try the next stack frame
-                    recurseFetchEvent(stack, evn);
-                } else {
-                    v.alert('non-404 error:\n\n' + frame.url + '\n\n' + err);
-                }
-            } else {
-                wsTrace('test', JSON.stringify(data));
-                frame.cb(data);
-            }
-        });
-
-    }
-
-    function handleUiEvent(data) {
-        scenario.view.alert('UI Tx: ' + data.event + '\n\n' +
-            JSON.stringify(data));
-    }
-
-    function injectStartupEvents(view) {
-        var last = scenario.params.lastAuto || 0;
-        if (config.useLiveData) { return; }
-
-        while (scenario.evNumber < last) {
-            injectTestEvent(view);
-        }
-    }
-
-    function toggleBg() {
-        var vis = bgImg.style('visibility');
-        bgImg.style('visibility', visVal(vis === 'hidden'));
-    }
-
-    function opacifyBg(b) {
-        bgImg.transition()
-            .duration(1000)
-            .attr('opacity', b ? 1 : 0);
-    }
-
-    function toggleNodeLock() {
-        nodeLock = !nodeLock;
-        flash('Node positions ' + (nodeLock ? 'locked' : 'unlocked'))
-    }
-
-    function toggleOblique() {
-        oblique = !oblique;
-        if (oblique) {
-            network.force.stop();
-            toObliqueView();
-        } else {
-            toNormalView();
-        }
-    }
-
-    function toggleHosts() {
-        showHosts = !showHosts;
-        updateHostVisibility();
-        flash('Hosts ' + visVal(showHosts));
-    }
-
-    function toggleOffline() {
-        showOffline = !showOffline;
-        updateOfflineVisibility();
-        flash('Offline devices ' + visVal(showOffline));
-    }
-
-    function cycleLabels() {
-        deviceLabelIndex = (deviceLabelIndex === 2)
-            ? 0 : deviceLabelIndex + 1;
-
-        network.nodes.forEach(function (d) {
-            if (d.class === 'device') {
-                updateDeviceLabel(d);
-            }
-        });
-    }
-
-    function togglePorts(view) {
-        //view.alert('togglePorts() callback')
-    }
-
-    function unpin() {
-        if (hovered) {
-            sendUpdateMeta(hovered);
-            hovered.fixed = false;
-            hovered.el.classed('fixed', false);
-            fResume();
-        }
-    }
-
-    function handleEscape(view) {
-        if (oiShowMaster) {
-            cancelAffinity();
-        } else if (haveDetails) {
-            deselectAll();
-        } else if (oiBox.isVisible()) {
-            hideInstances();
-        } else if (summaryPane.isVisible()) {
-            cancelSummary();
-            stopAntTimer();
-        } else {
-            hoverMode = hoverModeNone;
-        }
-    }
-
-    function showNoDevs(b) {
-        noDevices.style('visibility', visVal(b));
-    }
-
-    // ==============================
-    // Oblique view ...
-
-    var obview = {
-            tt:  -.7,     // x skew y factor
-            xsk: -35,     // x skew angle
-            ysc: 0.5,     // y scale
-            pad: 50,
-            time: 1500,
-            fill: {
-                pkt: 'rgba(130,130,170,0.3)',
-                opt: 'rgba(170,130,170,0.3)'
-            },
-            id: function (tag) {
-                return 'obview-' + tag + 'Plane';
-            },
-            yt: function (h, dir) {
-                return h * obview.ysc * dir * 1.1;
-            },
-            obXform: function (h, dir) {
-                var yt = obview.yt(h, dir);
-                return scale(1, obview.ysc) + translate(0, yt) + skewX(obview.xsk);
-            },
-            noXform: function () {
-                return skewX(0) + translate(0,0) + scale(1,1);
-            },
-            xffn: null,
-            plane: {}
-    };
-
-
-    function toObliqueView() {
-        var box = nodeG.node().getBBox(),
-            ox, oy;
-
-        padBox(box, obview.pad);
-
-        ox = box.x + box.width / 2;
-        oy = box.y + box.height / 2;
-
-        // remember node lock state, then lock the nodes down
-        obview.nodeLock = nodeLock;
-        nodeLock = true;
-        opacifyBg(false);
-
-        insertPlanes(ox, oy);
-
-        obview.xffn = function (xy, dir) {
-            var yt = obview.yt(box.height, dir),
-                ax = xy.x - ox,
-                ay = xy.y - oy,
-                x = ax + ay * obview.tt,
-                y = ay * obview.ysc + obview.ysc * yt;
-            return {x: ox + x, y: oy + y};
-        };
-
-        showPlane('pkt', box, -1);
-        showPlane('opt', box, 1);
-        obTransitionNodes();
-    }
-
-    function toNormalView() {
-        obview.xffn = null;
-
-        hidePlane('pkt');
-        hidePlane('opt');
-        obTransitionNodes();
-
-        removePlanes();
-
-        // restore node lock state
-        nodeLock = obview.nodeLock;
-        opacifyBg(true);
-    }
-
-    function obTransitionNodes() {
-        var xffn = obview.xffn;
-
-        // return the direction for the node
-        // -1 for pkt layer, 1 for optical layer
-        function dir(d) {
-            return inLayer(d, 'pkt') ? -1 : 1;
-        }
-
-        if (xffn) {
-            network.nodes.forEach(function (d) {
-                var oldxy = {x: d.x, y: d.y},
-                    coords = xffn(oldxy, dir(d));
-                d.oldxy = oldxy;
-                d.px = d.x = coords.x;
-                d.py = d.y = coords.y;
-            });
-        } else {
-            network.nodes.forEach(function (d) {
-                var old = d.oldxy || {x: d.x, y: d.y};
-                d.px = d.x = old.x;
-                d.py = d.y = old.y;
-                delete d.oldxy;
-            });
-        }
-
-        node.transition()
-            .duration(obview.time)
-            .attr(tickStuff.nodeAttr);
-        link.transition()
-            .duration(obview.time)
-            .attr(tickStuff.linkAttr);
-        linkLabel.transition()
-            .duration(obview.time)
-            .attr(tickStuff.linkLabelAttr);
-    }
-
-    function showPlane(tag, box, dir) {
-        var g = obview.plane[tag];
-
-        // set box origin at center..
-        box.x = -box.width/2;
-        box.y = -box.height/2;
-
-        g.select('rect')
-            .attr(box)
-            .attr('opacity', 0)
-            .transition()
-            .duration(obview.time)
-            .attr('opacity', 1)
-            .attr('transform', obview.obXform(box.height, dir));
-    }
-
-    function hidePlane(tag) {
-        var g = obview.plane[tag];
-
-        g.select('rect')
-            .transition()
-            .duration(obview.time)
-            .attr('opacity', 0)
-            .attr('transform', obview.noXform());
-    }
-
-    function insertPlanes(ox, oy) {
-        function ins(tag) {
-            var id = obview.id(tag),
-                g = panZoomContainer.insert('g', '#topo-G')
-                    .attr('id', id)
-                    .attr('transform', translate(ox,oy));
-            g.append('rect')
-                .attr('fill', obview.fill[tag])
-                .attr('opacity', 0);
-            obview.plane[tag] = g;
-        }
-        ins('opt');
-        ins('pkt');
-    }
-
-    function removePlanes() {
-        function rem(tag) {
-            var id = obview.id(tag);
-            panZoomContainer.select('#'+id)
-                .transition()
-                .duration(obview.time + 50)
-                .remove();
-            delete obview.plane[tag];
-        }
-        rem('opt');
-        rem('pkt');
-    }
-
-    function padBox(box, p) {
-        box.x -= p;
-        box.y -= p;
-        box.width += p*2;
-        box.height += p*2;
-    }
-
-    // ==============================
-    // Radio Button Callbacks
-
-    var layerLookup = {
-        host: {
-            endstation: 'pkt', // default, if host event does not define type
-            router:     'pkt',
-            bgpSpeaker: 'pkt'
-        },
-        device: {
-            switch: 'pkt',
-            roadm: 'opt'
-        },
-        link: {
-            hostLink: 'pkt',
-            direct: 'pkt',
-            indirect: '',
-            tunnel: '',
-            optical: 'opt'
-        }
-    };
-
-    function inLayer(d, layer) {
-        var type = d.class === 'link' ? d.type() : d.type,
-            look = layerLookup[d.class],
-            lyr = look && look[type];
-        return lyr === layer;
-    }
-
-    function unsuppressLayer(which) {
-        node.each(function (d) {
-            var node = d.el;
-            if (inLayer(d, which)) {
-                node.classed('suppressed', false);
-            }
-        });
-
-        link.each(function (d) {
-            var link = d.el;
-            if (inLayer(d, which)) {
-                link.classed('suppressed', false);
-            }
-        });
-    }
-
-    function suppressLayers(b) {
-        node.classed('suppressed', b);
-        link.classed('suppressed', b);
-//        d3.selectAll('svg .port').classed('inactive', false);
-//        d3.selectAll('svg .portText').classed('inactive', false);
-    }
-
-    function showAllLayers() {
-        suppressLayers(false);
-    }
-
-    function showPacketLayer() {
-        node.classed('suppressed', true);
-        link.classed('suppressed', true);
-        unsuppressLayer('pkt');
-    }
-
-    function showOpticalLayer() {
-        node.classed('suppressed', true);
-        link.classed('suppressed', true);
-        unsuppressLayer('opt');
-    }
-
-    function restoreLayerState() {
-        layerBtnDispatch[layerBtnSet.selected()]();
-    }
-
-    // ==============================
-    // Private functions
-
-    function safeId(s) {
-        return s.replace(/[^a-z0-9]/gi, '-');
-    }
-
-    // set the size of the given element to that of the view (reduced if padded)
-    function setSize(el, view, pad) {
-        var padding = pad ? pad * 2 : 0;
-        el.attr({
-            width: view.width() - padding,
-            height: view.height() - padding
-        });
-    }
-
-    function makeNodeKey(d, what) {
-        var port = what + 'Port';
-        return d[what] + '/' + d[port];
-    }
-
-    function makeLinkKey(d, flipped) {
-        var one = flipped ? makeNodeKey(d, 'dst') : makeNodeKey(d, 'src'),
-            two = flipped ? makeNodeKey(d, 'src') : makeNodeKey(d, 'dst');
-        return one + '-' + two;
-    }
-
-    function findLinkById(id) {
-        // check to see if this is a reverse lookup, else default to given id
-        var key = network.revLinkToKey[id] || id;
-            return key && network.lookup[key];
-    }
-
-    function findLink(linkData, op) {
-        var key = makeLinkKey(linkData),
-            keyrev = makeLinkKey(linkData, 1),
-            link = network.lookup[key],
-            linkRev = network.lookup[keyrev],
-            result = {},
-            ldata = link || linkRev,
-            rawLink;
-
-        if (op === 'add') {
-            if (link) {
-                // trying to add a link that we already know about
-                result.ldata = link;
-                result.badLogic = 'addLink: link already added';
-
-            } else if (linkRev) {
-                // we found the reverse of the link to be added
-                result.ldata = linkRev;
-                if (linkRev.fromTarget) {
-                    result.badLogic = 'addLink: link already added';
-                }
-            }
-        } else if (op === 'update') {
-            if (!ldata) {
-                result.badLogic = 'updateLink: link not found';
-            } else {
-                rawLink = link ? ldata.fromSource : ldata.fromTarget;
-                result.updateWith = function (data) {
-                    $.extend(rawLink, data);
-                    restyleLinkElement(ldata);
-                }
-            }
-        } else if (op === 'remove') {
-            if (!ldata) {
-                result.badLogic = 'removeLink: link not found';
-            } else {
-                rawLink = link ? ldata.fromSource : ldata.fromTarget;
-
-                if (!rawLink) {
-                    result.badLogic = 'removeLink: link not found';
-
-                } else {
-                    result.removeRawLink = function () {
-                        if (link) {
-                            // remove fromSource
-                            ldata.fromSource = null;
-                            if (ldata.fromTarget) {
-                                // promote target into source position
-                                ldata.fromSource = ldata.fromTarget;
-                                ldata.fromTarget = null;
-                                ldata.key = keyrev;
-                                delete network.lookup[key];
-                                network.lookup[keyrev] = ldata;
-                                delete network.revLinkToKey[keyrev];
-                            }
-                        } else {
-                            // remove fromTarget
-                            ldata.fromTarget = null;
-                            delete network.revLinkToKey[keyrev];
-                        }
-                        if (ldata.fromSource) {
-                            restyleLinkElement(ldata);
-                        } else {
-                            removeLinkElement(ldata);
-                        }
-                    }
-                }
-            }
-        }
-        return result;
-    }
-
-    function addLinkUpdate(ldata, link) {
-        // add link event, but we already have the reverse link installed
-        ldata.fromTarget = link;
-        network.revLinkToKey[link.id] = ldata.key;
-        restyleLinkElement(ldata);
-    }
-
-    var allLinkTypes = 'direct indirect optical tunnel',
-        defaultLinkType = 'direct';
-
-    function restyleLinkElement(ldata) {
-        // this fn's job is to look at raw links and decide what svg classes
-        // need to be applied to the line element in the DOM
-        var el = ldata.el,
-            type = ldata.type(),
-            lw = ldata.linkWidth(),
-            online = ldata.online();
-
-        el.classed('link', true);
-        el.classed('inactive', !online);
-        el.classed(allLinkTypes, false);
-        if (type) {
-            el.classed(type, true);
-        }
-        el.transition()
-            .duration(1000)
-            .attr('stroke-width', linkScale(lw))
-            .attr('stroke', config.topo.linkBaseColor);
-    }
-
-    // ==============================
-    // Event handlers for server-pushed events
-
-    function logicError(msg) {
-        // TODO, report logic error to server, via websock, so it can be logged
-        console.warn(msg);
-    }
-
-    var eventDispatch = {
-        addInstance: addInstance,
-        addDevice: addDevice,
-        addLink: addLink,
-        addHost: addHost,
-
-        updateInstance: updateInstance,
-        updateDevice: updateDevice,
-        updateLink: updateLink,
-        updateHost: updateHost,
-
-        removeInstance: removeInstance,
-        removeDevice: removeDevice,
-        removeLink: removeLink,
-        removeHost: removeHost,
-
-        showDetails: showDetails,
-        showSummary: showSummary,
-        showTraffic: showTraffic
-    };
-
-    function addInstance(data) {
-        evTrace(data);
-        var inst = data.payload,
-            id = inst.id;
-        if (onosInstances[id]) {
-            updateInstance(data);
-            return;
-        }
-        onosInstances[id] = inst;
-        onosOrder.push(inst);
-        updateInstances();
-    }
-
-    function addDevice(data) {
-        evTrace(data);
-        var device = data.payload,
-            id = device.id,
-            d;
-
-        showNoDevs(false);
-
-        if (network.lookup[id]) {
-            updateDevice(data);
-            return;
-        }
-
-        d = createDeviceNode(device);
-        network.nodes.push(d);
-        network.lookup[id] = d;
-        updateNodes();
-        fStart();
-    }
-
-    function addLink(data) {
-        evTrace(data);
-        var link = data.payload,
-            result = findLink(link, 'add'),
-            bad = result.badLogic,
-            d = result.ldata;
-
-        if (bad) {
-            logicError(bad + ': ' + link.id);
-            return;
-        }
-
-        if (d) {
-            // we already have a backing store link for src/dst nodes
-            addLinkUpdate(d, link);
-            return;
-        }
-
-        // no backing store link yet
-        d = createLink(link);
-        if (d) {
-            network.links.push(d);
-            network.lookup[d.key] = d;
-            updateLinks();
-            fStart();
-        }
-    }
-
-    function addHost(data) {
-        evTrace(data);
-        var host = data.payload,
-            id = host.id,
-            d,
-            lnk;
-
-        if (network.lookup[id]) {
-            logicError('Host already added: ' + id);
-            return;
-        }
-
-        d = createHostNode(host);
-        network.nodes.push(d);
-        network.lookup[host.id] = d;
-        updateNodes();
-
-        lnk = createHostLink(host);
-        if (lnk) {
-            d.linkData = lnk;    // cache ref on its host
-            network.links.push(lnk);
-            network.lookup[d.ingress] = lnk;
-            network.lookup[d.egress] = lnk;
-            updateLinks();
-        }
-        fStart();
-    }
-
-    function updateInstance(data) {
-        evTrace(data);
-        var inst = data.payload,
-            id = inst.id,
-            d = onosInstances[id];
-        if (d) {
-            $.extend(d, inst);
-            updateInstances();
-        } else {
-            logicError('updateInstance lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function updateDevice(data) {
-        evTrace(data);
-        var device = data.payload,
-            id = device.id,
-            d = network.lookup[id],
-            wasOnline;
-
-        if (d) {
-            wasOnline = d.online;
-            $.extend(d, device);
-            if (positionNode(d, true)) {
-                sendUpdateMeta(d, true);
-            }
-            updateNodes();
-            if (wasOnline !== d.online) {
-                findAttachedLinks(d.id).forEach(restyleLinkElement);
-                updateOfflineVisibility(d);
-            }
-        } else {
-            logicError('updateDevice lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function updateLink(data) {
-        evTrace(data);
-        var link = data.payload,
-            result = findLink(link, 'update'),
-            bad = result.badLogic;
-        if (bad) {
-            logicError(bad + ': ' + link.id);
-            return;
-        }
-        result.updateWith(link);
-    }
-
-    function updateHost(data) {
-        evTrace(data);
-        var host = data.payload,
-            id = host.id,
-            d = network.lookup[id];
-        if (d) {
-            $.extend(d, host);
-            if (positionNode(d, true)) {
-                sendUpdateMeta(d, true);
-            }
-            updateNodes(d);
-        } else {
-            logicError('updateHost lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function removeInstance(data) {
-        evTrace(data);
-        var inst = data.payload,
-            id = inst.id,
-            d = onosInstances[id];
-        if (d) {
-            var idx = find(id, onosOrder);
-            if (idx >= 0) {
-                onosOrder.splice(idx, 1);
-            }
-            delete onosInstances[id];
-            updateInstances();
-        } else {
-            logicError('updateInstance lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function removeDevice(data) {
-        evTrace(data);
-        var device = data.payload,
-            id = device.id,
-            d = network.lookup[id];
-        if (d) {
-            removeDeviceElement(d);
-        } else {
-            logicError('removeDevice lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    function removeLink(data) {
-        evTrace(data);
-        var link = data.payload,
-            result = findLink(link, 'remove'),
-            bad = result.badLogic;
-        if (bad) {
-            // may have already removed link, if attached to removed device
-            console.warn(bad + ': ' + link.id);
-            return;
-        }
-        result.removeRawLink();
-    }
-
-    function removeHost(data) {
-        evTrace(data);
-        var host = data.payload,
-            id = host.id,
-            d = network.lookup[id];
-        if (d) {
-            removeHostElement(d, true);
-        } else {
-            // may have already removed host, if attached to removed device
-            console.warn('removeHost lookup fail. ID = "' + id + '"');
-        }
-    }
-
-    // the following events are server responses to user actions
-    function showSummary(data) {
-        evTrace(data);
-        populateSummary(data.payload);
-        showSummaryPane();
-    }
-
-    function showDetails(data) {
-        evTrace(data);
-        haveDetails = true;
-        populateDetails(data.payload);
-        if (useDetails) {
-            showDetailPane();
-        }
-    }
-
-    function showTraffic(data) {
-        evTrace(data);
-        var paths = data.payload.paths,
-            hasTraffic = false;
-
-        // Revert any links hilighted previously.
-        link.style('stroke-width', null)
-            .classed('primary secondary animated optical', false);
-        // Remove all previous labels.
-        removeLinkLabels();
-
-        // Now hilight all links in the paths payload, and attach
-        //  labels to them, if they are defined.
-        paths.forEach(function (p) {
-            var n = p.links.length,
-                i,
-                ldata;
-
-            hasTraffic = hasTraffic || p.traffic;
-            for (i=0; i<n; i++) {
-                ldata = findLinkById(p.links[i]);
-                if (ldata && ldata.el) {
-                    ldata.el.classed(p.class, true);
-                    ldata.label = p.labels[i];
-                }
-            }
-        });
-
-        updateLinks();
-
-        if (hasTraffic && !antTimer) {
-            startAntTimer();
-        } else if (!hasTraffic && antTimer) {
-            stopAntTimer();
-        }
-    }
-
-    // ...............................
-
-    function unknownEvent(data) {
-        console.warn('Unknown event type: "' + data.event + '"', data);
-    }
-
-    function handleServerEvent(data) {
-        var fn = eventDispatch[data.event] || unknownEvent;
-        fn(data);
-    }
-
-    // ==============================
-    // Out-going messages...
-
-    function nSel() {
-        return selectOrder.length;
-    }
-    function getSel(idx) {
-        return selections[selectOrder[idx]];
-    }
-    function allSelectionsClass(cls) {
-        for (var i=0, n=nSel(); i<n; i++) {
-            if (getSel(i).obj.class !== cls) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    function toggleInstances() {
-        if (!oiBox.isVisible()) {
-            showInstances();
-        } else {
-            hideInstances();
-        }
-    }
-
-    function showInstances() {
-        oiBox.show();
-        colorAffinity = true;
-        updateDeviceColors();
-    }
-
-    function hideInstances() {
-        oiBox.hide();
-        colorAffinity = false;
-        cancelAffinity();
-        updateDeviceColors();
-    }
-
-    function equalizeMasters() {
-        sendMessage('equalizeMasters');
-        flash('Equalizing master roles');
-    }
-
-    function toggleSummary() {
-        if (!summaryPane.isVisible()) {
-            requestSummary();
-        } else {
-            cancelSummary();
-        }
-    }
-
-    function requestSummary() {
-        sendMessage('requestSummary');
-    }
-
-    function cancelSummary() {
-        sendMessage('cancelSummary');
-        hideSummaryPane();
-    }
-
-    function toggleDetails() {
-        useDetails = !useDetails;
-        if (useDetails) {
-            flash('Enable details pane');
-            if (haveDetails) {
-                showDetailPane();
-            }
-        } else {
-            flash('Disable details pane');
-            hideDetailPane();
-        }
-    }
-
-    // encapsulate interaction between summary and details panes
-    function showSummaryPane() {
-        if (detailPane.isVisible()) {
-            detailPane.down(summaryPane.show);
-        } else {
-            summaryPane.show();
-        }
-    }
-
-    function hideSummaryPane() {
-        summaryPane.hide(function () {
-            if (detailPane.isVisible()) {
-                detailPane.up();
-            }
-        });
-    }
-
-    function showDetailPane() {
-        if (summaryPane.isVisible()) {
-            detailPane.down(detailPane.show);
-        } else {
-            detailPane.up(detailPane.show);
-        }
-    }
-
-    function hideDetailPane() {
-        detailPane.hide();
-    }
-
-
-    // request details for the selected element
-    // invoked from selection of a single node.
-    function requestDetails() {
-        var data = getSel(0).obj;
-        sendMessage('requestDetails', {
-            id: data.id,
-            class: data.class
-        });
-    }
-
-    function addHostIntentAction() {
-        sendMessage('addHostIntent', {
-            one: selectOrder[0],
-            two: selectOrder[1],
-            ids: selectOrder
-        });
-        flash('Host-to-Host flow added');
-    }
-
-    function addMultiSourceIntentAction() {
-        sendMessage('addMultiSourceIntent', {
-            src: selectOrder.slice(0, selectOrder.length - 1),
-            dst: selectOrder[selectOrder.length - 1],
-            ids: selectOrder
-        });
-        flash('Multi-Source flow added');
-    }
-
-    function cancelTraffic() {
-        sendMessage('cancelTraffic');
-    }
-
-    function requestTrafficForMode() {
-        if (hoverMode === hoverModeFlows) {
-            requestDeviceLinkFlows();
-        } else if (hoverMode === hoverModeIntents) {
-            requestRelatedIntents();
-        }
-    }
-
-    function showRelatedIntentsAction() {
-        hoverMode = hoverModeIntents;
-        requestRelatedIntents();
-        flash('Related Paths');
-    }
-
-    function requestRelatedIntents() {
-        function hoverValid() {
-            return hoverMode === hoverModeIntents &&
-                hovered &&
-                (hovered.class === 'host' || hovered.class === 'device');
-        }
-
-        if (validateSelectionContext()) {
-            sendMessage('requestRelatedIntents', {
-                ids: selectOrder,
-                hover: hoverValid() ? hovered.id : ''
-            });
-        }
-    }
-
-    function showNextIntentAction() {
-        hoverMode = hoverModeNone;
-        sendMessage('requestNextRelatedIntent');
-        flash('>');
-    }
-
-    function showPrevIntentAction() {
-        hoverMode = hoverModeNone;
-        sendMessage('requestPrevRelatedIntent');
-        flash('<');
-    }
-
-    function showSelectedIntentTrafficAction() {
-        hoverMode = hoverModeNone;
-        sendMessage('requestSelectedIntentTraffic');
-        flash('Traffic on Selected Path');
-    }
-
-    function showDeviceLinkFlowsAction() {
-        hoverMode = hoverModeFlows;
-        requestDeviceLinkFlows();
-        flash('Device Flows');
-    }
-
-    function requestDeviceLinkFlows() {
-        function hoverValid() {
-            return hoverMode === hoverModeFlows &&
-                hovered && (hovered.class === 'device');
-        }
-
-        if (validateSelectionContext()) {
-            sendMessage('requestDeviceLinkFlows', {
-                ids: selectOrder,
-                hover: hoverValid() ? hovered.id : ''
-            });
-        }
-    }
-
-    function showAllTrafficAction() {
-        hoverMode = hoverModeAll;
-        requestAllTraffic();
-        flash('All Traffic');
-    }
-
-    function requestAllTraffic() {
-        sendMessage('requestAllTraffic');
-    }
-
-    function validateSelectionContext() {
-        if (!hovered && nSel() === 0) {
-            cancelTraffic();
-            return false;
-        }
-        return true;
-    }
-
-
-    // ==============================
-    // onos instance panel functions
-
-    var instCfg = {
-        rectPad: 8,
-        nodeOx: 9,
-        nodeOy: 9,
-        nodeDim: 40,
-        birdOx: 19,
-        birdOy: 21,
-        birdDim: 21,
-        uiDy: 45,
-        titleDy: 30,
-        textYOff: 20,
-        textYSpc: 15
-    };
-
-    function viewBox(dim) {
-        return '0 0 ' + dim.w + ' ' + dim.h;
-    }
-
-    function instRectAttr(dim) {
-        var pad = instCfg.rectPad;
-        return {
-            x: pad,
-            y: pad,
-            width: dim.w - pad*2,
-            height: dim.h - pad*2,
-            rx: 6
-        };
-    }
-
-    function computeDim(self) {
-        var css = window.getComputedStyle(self);
-        return {
-            w: stripPx(css.width),
-            h: stripPx(css.height)
-        };
-    }
-
-    function updateInstances() {
-        var onoses = oiBox.el.selectAll('.onosInst')
-                .data(onosOrder, function (d) { return d.id; }),
-            instDim = {w:0,h:0},
-            c = instCfg;
-
-        function nSw(n) {
-            return '# Switches: ' + n;
-        }
-
-        // operate on existing onos instances if necessary
-        onoses.each(function (d) {
-            var el = d3.select(this),
-                svg = el.select('svg');
-            instDim = computeDim(this);
-
-            // update online state
-            el.classed('online', d.online);
-
-            // update ui-attached state
-            svg.select('use.uiBadge').remove();
-            if (d.uiAttached) {
-                attachUiBadge(svg);
-            }
-
-            function updAttr(id, value) {
-                svg.select('text.instLabel.'+id).text(value);
-            }
-
-            updAttr('ip', d.ip);
-            updAttr('ns', nSw(d.switches));
-        });
-
-
-        // operate on new onos instances
-        var entering = onoses.enter()
-            .append('div')
-            .attr('class', 'onosInst')
-            .classed('online', function (d) { return d.online; })
-            .on('click', clickInst);
-
-        entering.each(function (d) {
-            var el = d3.select(this),
-                rectAttr,
-                svg;
-            instDim = computeDim(this);
-            rectAttr = instRectAttr(instDim);
-
-            svg = el.append('svg').attr({
-                width: instDim.w,
-                height: instDim.h,
-                viewBox: viewBox(instDim)
-            });
-
-            svg.append('rect').attr(rectAttr);
-
-            appendBadge(svg, 14, 14, 28, '#bird');
-
-            if (d.uiAttached) {
-                attachUiBadge(svg);
-            }
-
-            var left = c.nodeOx + c.nodeDim,
-                len = rectAttr.width - left,
-                hlen = len / 2,
-                midline = hlen + left;
-
-            // title
-            svg.append('text')
-                .attr({
-                    class: 'instTitle',
-                    x: midline,
-                    y: c.titleDy
-                })
-                .text(d.id);
-
-            // a couple of attributes
-            var ty = c.titleDy + c.textYOff;
-
-            function addAttr(id, label) {
-                svg.append('text').attr({
-                    class: 'instLabel ' + id,
-                    x: midline,
-                    y: ty
-                }).text(label);
-                ty += c.textYSpc;
-            }
-
-            addAttr('ip', d.ip);
-            addAttr('ns', nSw(d.switches));
-        });
-
-        // operate on existing + new onoses here
-        // set the affinity colors...
-        onoses.each(function (d) {
-            var el = d3.select(this),
-                rect = el.select('svg').select('rect'),
-                col = instColor(d.id, d.online);
-            rect.style('fill', col);
-        });
-
-        // adjust the panel size appropriately...
-        oiBox.width(instDim.w * onosOrder.length);
-        oiBox.height(instDim.h);
-
-        // remove any outgoing instances
-        onoses.exit().remove();
-    }
-
-    function instColor(id, online) {
-        return cat7.get(id, !online, network.view.getTheme());
-    }
-
-    function clickInst(d) {
-        var el = d3.select(this),
-            aff = el.classed('affinity');
-        if (!aff) {
-            setAffinity(el, d);
-        } else {
-            cancelAffinity();
-        }
-    }
-
-    function setAffinity(el, d) {
-        d3.selectAll('.onosInst')
-            .classed('mastership', true)
-            .classed('affinity', false);
-        el.classed('affinity', true);
-
-        suppressLayers(true);
-        node.each(function (n) {
-             if (n.master === d.id) {
-                 n.el.classed('suppressed', false);
-             }
-        });
-        oiShowMaster = true;
-    }
-
-    function cancelAffinity() {
-        d3.selectAll('.onosInst')
-            .classed('mastership affinity', false);
-        restoreLayerState();
-        oiShowMaster = false;
-    }
-
-    // TODO: these should be moved out to utility module.
-    function stripPx(s) {
-        return s.replace(/px$/,'');
-    }
-
-    function appendUse(svg, ox, oy, dim, iid, cls) {
-        var use = svg.append('use').attr({
-            transform: translate(ox,oy),
-            'xlink:href': iid,
-            width: dim,
-            height: dim
-        });
-        if (cls) {
-            use.classed(cls, true);
-        }
-        return use;
-    }
-
-    function appendGlyph(svg, ox, oy, dim, iid, cls) {
-        appendUse(svg, ox, oy, dim, iid, cls).classed('glyphIcon', true);
-    }
-
-    function appendBadge(svg, ox, oy, dim, iid, cls) {
-        appendUse(svg, ox, oy, dim, iid, cls).classed('badgeIcon', true);
-    }
-
-    function attachUiBadge(svg) {
-        appendBadge(svg, 12, instCfg.uiDy, 30, '#uiAttached', 'uiBadge');
-    }
-
-    function visVal(b) {
-        return b ? 'visible' : 'hidden';
-    }
-
-    // ==============================
-    // force layout modification functions
-
-    function translate(x, y) {
-        return 'translate(' + x + ',' + y + ')';
-    }
-    function scale(x,y) {
-        return 'scale(' + x + ',' + y + ')';
-    }
-    function skewX(x) {
-        return 'skewX(' + x + ')';
-    }
-    function rotate(deg) {
-        return 'rotate(' + deg + ')';
-    }
-
-    function missMsg(what, id) {
-        return '\n[' + what + '] "' + id + '" missing ';
-    }
-
-    function linkEndPoints(srcId, dstId) {
-        var srcNode = network.lookup[srcId],
-            dstNode = network.lookup[dstId],
-            sMiss = !srcNode ? missMsg('src', srcId) : '',
-            dMiss = !dstNode ? missMsg('dst', dstId) : '';
-
-        if (sMiss || dMiss) {
-            logicError('Node(s) not on map for link:\n' + sMiss + dMiss);
-            return null;
-        }
-        return {
-            source: srcNode,
-            target: dstNode,
-            x1: srcNode.x,
-            y1: srcNode.y,
-            x2: dstNode.x,
-            y2: dstNode.y
-        };
-    }
-
-    function createHostLink(host) {
-        var src = host.id,
-            dst = host.cp.device,
-            id = host.ingress,
-            lnk = linkEndPoints(src, dst);
-
-        if (!lnk) {
-            return null;
-        }
-
-        // Synthesize link ...
-        $.extend(lnk, {
-            key: id,
-            class: 'link',
-
-            type: function () { return 'hostLink'; },
-            online: function () {
-                // hostlink target is edge switch
-                return lnk.target.online;
-            },
-            linkWidth: function () { return 1; }
-        });
-        return lnk;
-    }
-
-    function createLink(link) {
-        var lnk = linkEndPoints(link.src, link.dst);
-
-        if (!lnk) {
-            return null;
-        }
-
-        $.extend(lnk, {
-            key: link.id,
-            class: 'link',
-            fromSource: link,
-
-            // functions to aggregate dual link state
-            type: function () {
-                var s = lnk.fromSource,
-                    t = lnk.fromTarget;
-                return (s && s.type) || (t && t.type) || defaultLinkType;
-            },
-            online: function () {
-                var s = lnk.fromSource,
-                    t = lnk.fromTarget,
-                    both = lnk.source.online && lnk.target.online;
-                return both && ((s && s.online) || (t && t.online));
-            },
-            linkWidth: function () {
-                var s = lnk.fromSource,
-                    t = lnk.fromTarget,
-                    ws = (s && s.linkWidth) || 0,
-                    wt = (t && t.linkWidth) || 0;
-                return Math.max(ws, wt);
-            }
-        });
-        return lnk;
-    }
-
-    function removeLinkLabels() {
-        network.links.forEach(function (d) {
-            d.label = '';
-        });
-    }
-
-    function showHostVis(el) {
-        el.style('visibility', visVal(showHosts));
-    }
-
-    var widthRatio = 1.4,
-        linkScale = d3.scale.linear()
-            .domain([1, 12])
-            .range([widthRatio, 12 * widthRatio])
-            .clamp(true);
-
-    function updateLinks() {
-        link = linkG.selectAll('.link')
-            .data(network.links, function (d) { return d.key; });
-
-        // operate on existing links, if necessary
-        // link .foo() .bar() ...
-
-        // operate on entering links:
-        var entering = link.enter()
-            .append('line')
-            .attr({
-                x1: function (d) { return d.x1; },
-                y1: function (d) { return d.y1; },
-                x2: function (d) { return d.x2; },
-                y2: function (d) { return d.y2; },
-                stroke: config.topo.linkInColor,
-                'stroke-width': config.topo.linkInWidth
-            });
-
-        // augment links
-        entering.each(function (d) {
-            var link = d3.select(this);
-            // provide ref to element selection from backing data....
-            d.el = link;
-            restyleLinkElement(d);
-            if (d.type() === 'hostLink') {
-                showHostVis(link);
-            }
-        });
-
-        // operate on both existing and new links, if necessary
-        //link .foo() .bar() ...
-
-        // apply or remove labels
-        var labelData = getLabelData();
-        applyLinkLabels(labelData);
-
-        // operate on exiting links:
-        link.exit()
-            .attr('stroke-dasharray', '3 3')
-            .style('opacity', 0.5)
-            .transition()
-            .duration(1500)
-            .attr({
-                'stroke-dasharray': '3 12',
-                stroke: config.topo.linkOutColor,
-                'stroke-width': config.topo.linkOutWidth
-            })
-            .style('opacity', 0.0)
-            .remove();
-
-        // NOTE: invoke a single tick to force the labels to position
-        //        onto their links.
-        tick();
-    }
-
-    function getLabelData() {
-        // create the backing data for showing labels..
-        var data = [];
-        link.each(function (d) {
-            if (d.label) {
-                data.push({
-                    id: 'lab-' + d.key,
-                    key: d.key,
-                    label: d.label,
-                    ldata: d
-                });
-            }
-        });
-        return data;
-    }
-
-    var linkLabelOffset = '0.3em';
-
-    function applyLinkLabels(data) {
-        var entering;
-
-        linkLabel = linkLabelG.selectAll('.linkLabel')
-            .data(data, function (d) { return d.id; });
-
-        // for elements already existing, we need to update the text
-        // and adjust the rectangle size to fit
-        linkLabel.each(function (d) {
-            var el = d3.select(this),
-                rect = el.select('rect'),
-                text = el.select('text');
-            text.text(d.label);
-            rect.attr(rectAroundText(el));
-        });
-
-        entering = linkLabel.enter().append('g')
-            .classed('linkLabel', true)
-            .attr('id', function (d) { return d.id; });
-
-        entering.each(function (d) {
-            var el = d3.select(this),
-                rect,
-                text,
-                parms = {
-                    x1: d.ldata.x1,
-                    y1: d.ldata.y1,
-                    x2: d.ldata.x2,
-                    y2: d.ldata.y2
-                };
-
-            d.el = el;
-            rect = el.append('rect');
-            text = el.append('text').text(d.label);
-            rect.attr(rectAroundText(el));
-            text.attr('dy', linkLabelOffset);
-
-            el.attr('transform', transformLabel(parms));
-        });
-
-        // Remove any labels that are no longer required.
-        linkLabel.exit().remove();
-    }
-
-    function rectAroundText(el) {
-        var text = el.select('text'),
-            box = text.node().getBBox();
-
-        // translate the bbox so that it is centered on [x,y]
-        box.x = -box.width / 2;
-        box.y = -box.height / 2;
-
-        // add padding
-        box.x -= 1;
-        box.width += 2;
-        return box;
-    }
-
-    function transformLabel(p) {
-        var dx = p.x2 - p.x1,
-            dy = p.y2 - p.y1,
-            xMid = dx/2 + p.x1,
-            yMid = dy/2 + p.y1;
-        return translate(xMid, yMid);
-    }
-
-    function createDeviceNode(device) {
-        // start with the object as is
-        var node = device,
-            type = device.type,
-            svgCls = type ? 'node device ' + type : 'node device';
-
-        // Augment as needed...
-        node.class = 'device';
-        node.svgClass = device.online ? svgCls + ' online' : svgCls;
-        positionNode(node);
-        return node;
-    }
-
-    function createHostNode(host) {
-        // start with the object as is
-        var node = host;
-
-        // Augment as needed...
-        node.class = 'host';
-        if (!node.type) {
-            node.type = 'endstation';
-        }
-        node.svgClass = 'node host ' + node.type;
-        positionNode(node);
-        return node;
-    }
-
-    function positionNode(node, forUpdate) {
-        var meta = node.metaUi,
-            x = meta && meta.x,
-            y = meta && meta.y,
-            xy;
-
-        // If we have [x,y] already, use that...
-        if (x && y) {
-            node.fixed = true;
-            node.px = node.x = x;
-            node.py = node.y = y;
-            return;
-        }
-
-        var location = node.location;
-        if (location && location.type === 'latlng') {
-            var coord = geoMapProj([location.lng, location.lat]);
-            node.fixed = true;
-            node.px = node.x = coord[0];
-            node.py = node.y = coord[1];
-            return true;
-        }
-
-        // if this is a node update (not a node add).. skip randomizer
-        if (forUpdate) {
-            return;
-        }
-
-        // Note: Placing incoming unpinned nodes at exactly the same point
-        //        (center of the view) causes them to explode outwards when
-        //        the force layout kicks in. So, we spread them out a bit
-        //        initially, to provide a more serene layout convergence.
-        //       Additionally, if the node is a host, we place it near
-        //        the device it is connected to.
-
-        function spread(s) {
-            return Math.floor((Math.random() * s) - s/2);
-        }
-
-        function randDim(dim) {
-            return dim / 2 + spread(dim * 0.7071);
-        }
-
-        function rand() {
-            return {
-                x: randDim(network.view.width()),
-                y: randDim(network.view.height())
-            };
-        }
-
-        function near(node) {
-            var min = 12,
-                dx = spread(12),
-                dy = spread(12);
-            return {
-                x: node.x + min + dx,
-                y: node.y + min + dy
-            };
-        }
-
-        function getDevice(cp) {
-            var d = network.lookup[cp.device];
-            return d || rand();
-        }
-
-        xy = (node.class === 'host') ? near(getDevice(node.cp)) : rand();
-        $.extend(node, xy);
-    }
-
-
-    function iconGlyphUrl(d) {
-        var which = d.type || 'unknown';
-        return '#' + which;
-    }
-
-    // returns the newly computed bounding box of the rectangle
-    function adjustRectToFitText(n) {
-        var text = n.select('text'),
-            box = text.node().getBBox(),
-            lab = config.labels;
-
-        text.attr('text-anchor', 'middle')
-            .attr('y', '-0.8em')
-            .attr('x', lab.imgPad/2);
-
-        // translate the bbox so that it is centered on [x,y]
-        box.x = -box.width / 2;
-        box.y = -box.height / 2;
-
-        // add padding
-        box.x -= (lab.padLR + lab.imgPad/2);
-        box.width += lab.padLR * 2 + lab.imgPad;
-        box.y -= lab.padTB;
-        box.height += lab.padTB * 2;
-
-        return box;
-    }
-
-    function mkSvgClass(d) {
-        return d.fixed ? d.svgClass + ' fixed' : d.svgClass;
-    }
-
-    function hostLabel(d) {
-        var idx = (hostLabelIndex < d.labels.length) ? hostLabelIndex : 0;
-        return d.labels[idx];
-    }
-    function deviceLabel(d) {
-        var idx = (deviceLabelIndex < d.labels.length) ? deviceLabelIndex : 0;
-        return d.labels[idx];
-    }
-    function trimLabel(label) {
-        return (label && label.trim()) || '';
-    }
-
-    function emptyBox() {
-        return {
-            x: -2,
-            y: -2,
-            width: 4,
-            height: 4
-        };
-    }
-
-    function updateDeviceLabel(d) {
-        var label = trimLabel(deviceLabel(d)),
-            noLabel = !label,
-            node = d.el,
-            box,
-            dx,
-            dy,
-            cfg = config.icons.device;
-
-        node.select('text')
-            .text(label)
-            .style('opacity', 0)
-            .transition()
-            .style('opacity', 1);
-
-        if (noLabel) {
-            box = emptyBox();
-            dx = -cfg.dim/2;
-            dy = -cfg.dim/2;
-        } else {
-            box = adjustRectToFitText(node);
-            dx = box.x + cfg.xoff;
-            dy = box.y + cfg.yoff;
-        }
-
-        node.select('rect')
-            .transition()
-            .attr(box);
-
-        node.select('g.deviceIcon')
-            .transition()
-            .attr('transform', translate(dx, dy));
-    }
-
-    function updateHostLabel(d) {
-        var label = trimLabel(hostLabel(d));
-        d.el.select('text').text(label);
-    }
-
-    function updateHostVisibility() {
-        var v = visVal(showHosts);
-        nodeG.selectAll('.host').style('visibility', v);
-        linkG.selectAll('.hostLink').style('visibility', v);
-    }
-
-    function findOfflineNodes() {
-        var a = [];
-        network.nodes.forEach(function (d) {
-            if (d.class === 'device' && !d.online) {
-                a.push(d);
-            }
-        });
-        return a;
-    }
-
-    function updateOfflineVisibility(dev) {
-        var so = showOffline,
-            sh = showHosts,
-            vb = 'visibility',
-            v, off, al, ah, db, b;
-
-        function updAtt(show) {
-            al.forEach(function (d) {
-                b = show && ((d.type() !== 'hostLink') || sh);
-                d.el.style(vb, visVal(b));
-            });
-            ah.forEach(function (d) {
-                b = show && sh;
-                d.el.style(vb, visVal(b));
-            });
-        }
-
-        if (dev) {
-            // updating a specific device that just toggled off/on-line
-            db = dev.online || so;
-            dev.el.style(vb, visVal(db));
-            al = findAttachedLinks(dev.id);
-            ah = findAttachedHosts(dev.id);
-            updAtt(db);
-        } else {
-            // updating all offline devices
-            v = visVal(so);
-            off = findOfflineNodes();
-            off.forEach(function (d) {
-                d.el.style(vb, v);
-                al = findAttachedLinks(d.id);
-                ah = findAttachedHosts(d.id);
-                updAtt(so);
-            });
-        }
-    }
-
-    function nodeMouseOver(d) {
-        if (hovered != d) {
-            hovered = d;
-            requestTrafficForMode();
-        }
-    }
-
-    function nodeMouseOut(d) {
-        if (hovered != null) {
-            hovered = null;
-            requestTrafficForMode();
-        }
-    }
-
-    function addHostIcon(node, radius, iid) {
-        var dim = radius * 1.5,
-            xlate = -dim / 2;
-
-        node.append('use').attr({
-            class: 'glyphIcon hostIcon',
-            transform: translate(xlate,xlate),
-            'xlink:href': iid,
-            width: dim,
-            height: dim
-        });
-    }
-
-    function updateNodes() {
-        node = nodeG.selectAll('.node')
-            .data(network.nodes, function (d) { return d.id; });
-
-        // operate on existing nodes...
-        node.filter('.device').each(function (d) {
-            var node = d.el;
-            node.classed('online', d.online);
-            updateDeviceLabel(d);
-            positionNode(d, true);
-        });
-
-        node.filter('.host').each(function (d) {
-            updateHostLabel(d);
-            positionNode(d, true);
-        });
-
-        // operate on entering nodes:
-        var entering = node.enter()
-            .append('g')
-            .attr({
-                id: function (d) { return safeId(d.id); },
-                class: mkSvgClass,
-                transform: function (d) { return translate(d.x, d.y); },
-                opacity: 0
-            })
-            .call(network.drag)
-            .on('mouseover', nodeMouseOver)
-            .on('mouseout', nodeMouseOut)
-            .transition()
-            .attr('opacity', 1);
-
-        // augment device nodes...
-        entering.filter('.device').each(function (d) {
-            var node = d3.select(this),
-                label = trimLabel(deviceLabel(d)),
-                noLabel = !label,
-                box;
-
-            // provide ref to element from backing data....
-            d.el = node;
-
-            node.append('rect').attr({ rx: 5, ry: 5 });
-            node.append('text').text(label).attr('dy', '1.1em');
-            box = adjustRectToFitText(node);
-            node.select('rect').attr(box);
-            addDeviceIcon(node, box, noLabel, iconGlyphUrl(d));
-        });
-
-        // augment host nodes...
-        entering.filter('.host').each(function (d) {
-            var node = d3.select(this),
-                cfg = config.icons.host,
-                r = cfg.radius[d.type] || cfg.defaultRadius,
-                textDy = r + 10,
-                iid = iconGlyphUrl(d);
-
-            // provide ref to element from backing data....
-            d.el = node;
-            showHostVis(node);
-
-            node.append('circle').attr('r', r);
-            if (iid) {
-                addHostIcon(node, r, iid);
-            }
-            node.append('text')
-                .text(hostLabel)
-                .attr('dy', textDy)
-                .attr('text-anchor', 'middle');
-        });
-
-        // operate on both existing and new nodes, if necessary
-        updateDeviceColors();
-
-        // operate on exiting nodes:
-        // Note that the node is removed after 2 seconds.
-        // Sub element animations should be shorter than 2 seconds.
-        var exiting = node.exit()
-            .transition()
-            .duration(2000)
-            .style('opacity', 0)
-            .remove();
-
-        // host node exits....
-        exiting.filter('.host').each(function (d) {
-            var node = d.el;
-            node.select('use')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(800)
-                .style('opacity', 0);
-
-            node.select('text')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(800)
-                .style('opacity', 0);
-
-            node.select('circle')
-                .style('stroke-fill', '#555')
-                .style('fill', '#888')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(1500)
-                .attr('r', 0);
-        });
-
-        // device node exits....
-        exiting.filter('.device').each(function (d) {
-            var node = d.el;
-            node.select('use')
-                .style('opacity', 0.5)
-                .transition()
-                .duration(800)
-                .style('opacity', 0);
-
-            node.selectAll('rect')
-                .style('stroke-fill', '#555')
-                .style('fill', '#888')
-                .style('opacity', 0.5);
-        });
-        fResume();
-    }
-
-    var dCol = {
-        black: '#000',
-        paleblue: '#acf',
-        offwhite: '#ddd',
-        midgrey: '#888',
-        lightgrey: '#bbb',
-        orange: '#f90'
-    };
-
-    // note: these are the device icon colors without affinity
-    var dColTheme = {
-        light: {
-            online: {
-                glyph: dCol.black,
-                rect: dCol.paleblue
-            },
-            offline: {
-                glyph: dCol.midgrey,
-                rect: dCol.lightgrey
-            }
-        },
-        // TODO: theme
-        dark: {
-            online: {
-                glyph: dCol.black,
-                rect: dCol.paleblue
-            },
-            offline: {
-                glyph: dCol.midgrey,
-                rect: dCol.lightgrey
-            }
-        }
-    };
-
-    function devBaseColor(d) {
-        var t = network.view.getTheme(),
-            o = d.online ? 'online' : 'offline';
-        return dColTheme[t][o];
-    }
-
-    function setDeviceColor(d) {
-        var o = d.online,
-            s = d.el.classed('selected'),
-            c = devBaseColor(d),
-            a = instColor(d.master, o),
-            g, r,
-            icon = d.el.select('g.deviceIcon');
-
-        if (s) {
-            g = c.glyph;
-            r = dColTheme.sel;
-        } else if (colorAffinity) {
-            g = o ? a : c.glyph;
-            r = o ? dCol.offwhite : a;
-        } else {
-            g = c.glyph;
-            r = c.rect;
-        }
-
-        icon.select('use')
-            .style('fill', g);
-        icon.select('rect')
-            .style('fill', r);
-    }
-
-    function addDeviceIcon(node, box, noLabel, iid) {
-        var cfg = config.icons.device,
-            dx,
-            dy,
-            g;
-
-        if (noLabel) {
-            dx = -cfg.dim/2;
-            dy = -cfg.dim/2;
-        } else {
-            box = adjustRectToFitText(node);
-            dx = box.x + cfg.xoff;
-            dy = box.y + cfg.yoff;
-        }
-
-        g = node.append('g')
-                .attr('class', 'glyphIcon deviceIcon')
-                .attr('transform', translate(dx, dy));
-
-        g.append('rect').attr({
-            x: 0,
-            y: 0,
-            rx: cfg.rx,
-            width: cfg.dim,
-            height: cfg.dim
-        });
-
-        g.append('use').attr({
-            'xlink:href': iid,
-            width: cfg.dim,
-            height: cfg.dim
-        });
-
-    }
-
-    function find(key, array, tag) {
-        var _tag = tag || 'id',
-            idx, n, d;
-        for (idx = 0, n = array.length; idx < n; idx++) {
-            d = array[idx];
-            if (d[_tag] === key) {
-                return idx;
-            }
-        }
-        return -1;
-    }
-
-    function removeLinkElement(d) {
-        var idx = find(d.key, network.links, 'key'),
-            removed;
-        if (idx >=0) {
-            // remove from links array
-            removed = network.links.splice(idx, 1);
-            // remove from lookup cache
-            delete network.lookup[removed[0].key];
-            updateLinks();
-            fResume();
-        }
-    }
-
-    function removeHostElement(d, upd) {
-        var lu = network.lookup;
-        // first, remove associated hostLink...
-        removeLinkElement(d.linkData);
-
-        // remove hostLink bindings
-        delete lu[d.ingress];
-        delete lu[d.egress];
-
-        // remove from lookup cache
-        delete lu[d.id];
-        // remove from nodes array
-        var idx = find(d.id, network.nodes);
-        network.nodes.splice(idx, 1);
-        // remove from SVG
-        // NOTE: upd is false if we were called from removeDeviceElement()
-        if (upd) {
-            updateNodes();
-            fResume();
-        }
-    }
-
-
-    function removeDeviceElement(d) {
-        var id = d.id;
-        // first, remove associated hosts and links..
-        findAttachedHosts(id).forEach(removeHostElement);
-        findAttachedLinks(id).forEach(removeLinkElement);
-
-        // remove from lookup cache
-        delete network.lookup[id];
-        // remove from nodes array
-        var idx = find(id, network.nodes);
-        network.nodes.splice(idx, 1);
-
-        if (!network.nodes.length) {
-            showNoDevs(true);
-        }
-
-        // remove from SVG
-        updateNodes();
-        fResume();
-    }
-
-    function findAttachedHosts(devId) {
-        var hosts = [];
-        network.nodes.forEach(function (d) {
-            if (d.class === 'host' && d.cp.device === devId) {
-                hosts.push(d);
-            }
-        });
-        return hosts;
-    }
-
-    function findAttachedLinks(devId) {
-        var links = [];
-        network.links.forEach(function (d) {
-            if (d.source.id === devId || d.target.id === devId) {
-                links.push(d);
-            }
-        });
-        return links;
-    }
-
-    function fResume() {
-        if (!oblique) {
-            network.force.resume();
-        }
-    }
-
-    function fStart() {
-        if (!oblique) {
-            network.force.start();
-        }
-    }
-
-    var tickStuff = {
-        nodeAttr: {
-            transform: function (d) { return translate(d.x, d.y); }
-        },
-        linkAttr: {
-            x1: function (d) { return d.source.x; },
-            y1: function (d) { return d.source.y; },
-            x2: function (d) { return d.target.x; },
-            y2: function (d) { return d.target.y; }
-        },
-        linkLabelAttr: {
-            transform: function (d) {
-                var lnk = findLinkById(d.key);
-
-                if (lnk) {
-                    var parms = {
-                        x1: lnk.source.x,
-                        y1: lnk.source.y,
-                        x2: lnk.target.x,
-                        y2: lnk.target.y
-                    };
-                    return transformLabel(parms);
-                }
-            }
-        }
-    };
-
-    function tick() {
-        node.attr(tickStuff.nodeAttr);
-        link.attr(tickStuff.linkAttr);
-        linkLabel.attr(tickStuff.linkLabelAttr);
-    }
-
-    // ==============================
-    // Web-Socket for live data
-
-    function findGuiSuccessor() {
-        var idx = -1;
-        onosOrder.forEach(function (d, i) {
-            if (d.uiAttached) {
-                idx = i;
-            }
-        });
-
-        for (var i = 0; i < onosOrder.length - 1; i++) {
-            var ni = (idx + 1 + i) % onosOrder.length;
-            if (onosOrder[ni].online) {
-                return onosOrder[ni].ip;
-            }
-        }
-        return null;
-    }
-
-    function webSockUrl() {
-        var url = document.location.toString()
-                .replace(/\#.*/, '')
-                .replace('http://', 'ws://')
-                .replace('https://', 'wss://')
-                .replace('index.html', config.webSockUrl);
-        if (guiSuccessor) {
-            url = url.replace(location.hostname, guiSuccessor);
-        }
-        return url;
-    }
-
-    webSock = {
-        ws : null,
-        retries: 0,
-
-        connect : function() {
-            webSock.ws = new WebSocket(webSockUrl());
-
-            webSock.ws.onopen = function() {
-                noWebSock(false);
-                requestSummary();
-                showInstances();
-                webSock.retries = 0;
-            };
-
-            webSock.ws.onmessage = function(m) {
-                if (m.data) {
-                    wsTraceRx(m.data);
-                    handleServerEvent(JSON.parse(m.data));
-                }
-            };
-
-            webSock.ws.onclose = function(m) {
-                webSock.ws = null;
-                guiSuccessor = findGuiSuccessor();
-                if (guiSuccessor && webSock.retries < onosOrder.length) {
-                    webSock.retries++;
-                    webSock.connect();
-                } else {
-                    noWebSock(true);
-                }
-            };
-        },
-
-        send : function(text) {
-            if (text != null) {
-                webSock._send(text);
-            }
-        },
-
-        _send : function(message) {
-            if (webSock.ws) {
-                webSock.ws.send(message);
-            } else if (config.useLiveData) {
-                console.warn('no web socket open', message);
-            } else {
-                console.log('WS Send: ', message);
-            }
-        }
-
-    };
-
-    function noWebSock(b) {
-        mask.style('display',b ? 'block' : 'none');
-    }
-
-    function sendMessage(evType, payload) {
-        var p = payload || {},
-            toSend = {
-                event: evType,
-                sid: ++sid,
-                payload: p
-            },
-            asText = JSON.stringify(toSend);
-        wsTraceTx(asText);
-        webSock.send(asText);
-
-        // Temporary measure for debugging UI behavior ...
-        if (!config.useLiveData) {
-            handleTestSend(toSend);
-        }
-    }
-
-    function wsTraceTx(msg) {
-        wsTrace('tx', msg);
-    }
-    function wsTraceRx(msg) {
-        wsTrace('rx', msg);
-    }
-    function wsTrace(rxtx, msg) {
-        // console.log('[' + rxtx + '] ' + msg);
-    }
-
-    function handleTestSend(msg) { }
-
-    // ==============================
-    // Selection stuff
-
-    function selectObject(obj, el) {
-        var n,
-            ev = d3.event.sourceEvent;
-
-        // if the meta or alt key is pressed, we are panning/zooming, so ignore
-        if (ev.metaKey || ev.altKey) {
-            return;
-        }
-
-        if (el) {
-            n = d3.select(el);
-        } else {
-            node.each(function(d) {
-                if (d == obj) {
-                    n = d3.select(el = this);
-                }
-            });
-        }
-        if (!n) return;
-
-        if (ev.shiftKey && n.classed('selected')) {
-            deselectObject(obj.id);
-            updateDetailPane();
-            return;
-        }
-
-        if (!ev.shiftKey) {
-            deselectAll();
-        }
-
-        selections[obj.id] = { obj: obj, el: el };
-        selectOrder.push(obj.id);
-
-        n.classed('selected', true);
-        updateDeviceColors(obj);
-        updateDetailPane();
-    }
-
-    function deselectObject(id) {
-        var obj = selections[id],
-            idx;
-        if (obj) {
-            d3.select(obj.el).classed('selected', false);
-            delete selections[id];
-            idx = $.inArray(id, selectOrder);
-            if (idx >= 0) {
-                selectOrder.splice(idx, 1);
-            }
-            updateDeviceColors(obj.obj);
-        }
-    }
-
-    function deselectAll() {
-        // deselect all nodes in the network...
-        node.classed('selected', false);
-        selections = {};
-        selectOrder = [];
-        updateDeviceColors();
-        updateDetailPane();
-    }
-
-    function updateDeviceColors(d) {
-        if (d) {
-            setDeviceColor(d);
-        } else {
-            node.filter('.device').each(function (d) {
-                setDeviceColor(d);
-            });
-        }
-    }
-
-    // update the state of the detail pane, based on current selections
-    function updateDetailPane() {
-        var nSel = selectOrder.length;
-        if (!nSel) {
-            emptySelect();
-        } else if (nSel === 1) {
-            singleSelect();
-        } else {
-            multiSelect();
-        }
-    }
-
-    function emptySelect() {
-        haveDetails = false;
-        hideDetailPane();
-        cancelTraffic();
-    }
-
-    function singleSelect() {
-        // NOTE: detail is shown from showDetails event callback
-        requestDetails();
-        cancelTraffic();
-        requestTrafficForMode();
-    }
-
-    function multiSelect() {
-        haveDetails = true;
-        populateMultiSelect();
-        cancelTraffic();
-        requestTrafficForMode();
-    }
-
-    function addSep(tbody) {
-        var tr = tbody.append('tr');
-        $('<hr>').appendTo(tr.append('td').attr('colspan', 2));
-    }
-
-    function addProp(tbody, label, value) {
-        var tr = tbody.append('tr');
-
-        tr.append('td')
-            .attr('class', 'label')
-            .text(label + ' :');
-
-        tr.append('td')
-            .attr('class', 'value')
-            .text(value);
-    }
-
-    function populateMultiSelect() {
-        detailPane.empty();
-
-        var title = detailPane.append('h3'),
-            table = detailPane.append('table'),
-            tbody = table.append('tbody');
-
-        title.text('Selected Nodes');
-
-        selectOrder.forEach(function (d, i) {
-            addProp(tbody, i+1, d);
-        });
-
-        addMultiSelectActions();
-    }
-
-    function populateSummary(data) {
-        summaryPane.empty();
-
-        var svg = summaryPane.append('svg'),
-            iid = iconGlyphUrl(data);
-
-        var title = summaryPane.append('h2'),
-            table = summaryPane.append('table'),
-            tbody = table.append('tbody');
-
-        appendGlyph(svg, 0, 0, 40, iid);
-
-        svg.append('use')
-            .attr({
-                class: 'birdBadge',
-                transform: translate(8,12),
-                'xlink:href': '#bird',
-                width: 24,
-                height: 24,
-                fill: '#fff'
-            });
-
-        title.text('ONOS Summary');
-
-        data.propOrder.forEach(function(p) {
-            if (p === '-') {
-                addSep(tbody);
-            } else {
-                addProp(tbody, p, data.props[p]);
-            }
-        });
-    }
-
-    function populateDetails(data) {
-        detailPane.empty();
-
-        var svg = detailPane.append('svg'),
-            iid = iconGlyphUrl(data);
-
-        var title = detailPane.append('h2'),
-            table = detailPane.append('table'),
-            tbody = table.append('tbody');
-
-        appendGlyph(svg, 0, 0, 40, iid);
-        title.text(data.id);
-
-        data.propOrder.forEach(function(p) {
-            if (p === '-') {
-                addSep(tbody);
-            } else {
-                addProp(tbody, p, data.props[p]);
-            }
-        });
-
-        addSingleSelectActions(data);
-    }
-
-    function addSingleSelectActions(data) {
-        detailPane.append('hr');
-        // always want to allow 'show traffic'
-        addAction(detailPane, 'Show Related Traffic', showRelatedIntentsAction);
-
-        if (data.type === 'switch') {
-            addAction(detailPane, 'Show Device Flows', showDeviceLinkFlowsAction);
-        }
-    }
-
-    function addMultiSelectActions() {
-        detailPane.append('hr');
-        // always want to allow 'show traffic'
-        addAction(detailPane, 'Show Related Traffic', showRelatedIntentsAction);
-        // if exactly two hosts are selected, also want 'add host intent'
-        if (nSel() === 2 && allSelectionsClass('host')) {
-            addAction(detailPane, 'Create Host-to-Host Flow', addHostIntentAction);
-        } else if (nSel() >= 2 && allSelectionsClass('host')) {
-            addAction(detailPane, 'Create Multi-Source Flow', addMultiSourceIntentAction);
-        }
-    }
-
-    function addAction(panel, text, cb) {
-        panel.append('div')
-            .classed('actionBtn', true)
-            .text(text)
-            .on('click', cb);
-    }
-
-
-    // === Pan and Zoom behaviors...
-
-    function panZoom(translate, scale) {
-        panZoomContainer.attr('transform',
-            'translate(' + translate + ')scale(' + scale + ')');
-        // keep the map lines constant width while zooming
-        bgImg.style('stroke-width', 2.0 / scale + 'px');
-    }
-
-    function resetPanZoom() {
-        panZoom([0,0], 1);
-        zoom.translate([0,0]).scale(1);
-    }
-
-    function setupPanZoom() {
-        function zoomed() {
-            var ev = d3.event.sourceEvent;
-            // pan/zoom active when meta or alt key is pressed...
-            if (ev.metaKey || ev.altKey) {
-                panZoom(d3.event.translate, d3.event.scale);
-            }
-        }
-
-        zoom = d3.behavior.zoom()
-            .translate([0, 0])
-            .scale(1)
-            .scaleExtent([0.25, 10])
-            .on("zoom", zoomed);
-
-        svg.call(zoom);
-    }
-
-
-    function setupNoDevices() {
-        var g = noDevices.append('g');
-        appendBadge(g, 0, 0, 100, '#bird', 'noDevsBird');
-        var text = g.append('text')
-            .text('No devices are connected')
-            .attr({ x: 120, y: 80});
-    }
-
-    function repositionNoDevices() {
-        var g = noDevices.select('g');
-        var box = g.node().getBBox();
-        box.x -= box.width/2;
-        box.y -= box.height/2;
-        g.attr('transform', translate(box.x, box.y));
-    }
-
-
-    // ==============================
-    // Test harness code
-
-    function prepareScenario(view, ctx, dbg) {
-        var sc = scenario,
-            urlSc = sc.evDir + ctx + sc.evScenario;
-
-        if (!ctx) {
-            view.alert("No scenario specified (null ctx)");
-            return;
-        }
-
-        sc.view = view;
-        sc.ctx = ctx;
-        sc.debug = dbg;
-        sc.evNumber = 0;
-
-        d3.json(urlSc, function(err, data) {
-            var p = data && data.params || {},
-                desc = data && data.description || null,
-                intro = data && data.title;
-
-            if (err) {
-                view.alert('No scenario found:\n\n' + urlSc + '\n\n' + err);
-            } else {
-                sc.params = p;
-                if (desc) {
-                    intro += '\n\n  ' + desc.join('\n  ');
-                }
-                view.alert(intro);
-            }
-        });
-
-    }
-
-    function setupDefs(svg) {
-        var defs = svg.append('defs');
-        gly.loadDefs(defs);
-        d3u.loadGlow(defs);
-    }
-
-    function sendUpdateMeta(d, store) {
-        var metaUi = {},
-            ll;
-
-        if (store) {
-            ll = geoMapProj.invert([d.x, d.y]);
-            metaUi = {
-                x: d.x,
-                y: d.y,
-                lng: ll[0],
-                lat: ll[1]
-            };
-        }
-        d.metaUi = metaUi;
-        sendMessage('updateMeta', {
-            id: d.id,
-            'class': d.class,
-            memento: metaUi
-        });
-    }
-
-    // ==============================
-    // View life-cycle callbacks
-
-    function init(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height(),
-            logSize = config.logicalSize,
-            fcfg = config.force;
-
-        // NOTE: view.$div is a D3 selection of the view's div
-        var viewBox = '0 0 ' + logSize + ' ' + logSize;
-        svg = view.$div.append('svg').attr('viewBox', viewBox);
-        setSize(svg, view);
-
-        // load glyphs, filters, and other definitions...
-        setupDefs(svg);
-
-        panZoomContainer = svg.append('g').attr('id', 'panZoomContainer');
-        setupPanZoom();
-
-        noDevices = svg.append('g')
-            .attr('class', 'noDevsLayer')
-            .attr('transform', translate(logSize/2, logSize/2));
-        setupNoDevices();
-
-        // group for the topology
-        topoG = panZoomContainer.append('g')
-            .attr('id', 'topo-G');
-
-        // subgroups for links, link labels, and nodes
-        linkG = topoG.append('g').attr('id', 'links');
-        linkLabelG = topoG.append('g').attr('id', 'linkLabels');
-        nodeG = topoG.append('g').attr('id', 'nodes');
-
-        // selection of links, linkLabels, and nodes
-        link = linkG.selectAll('.link');
-        linkLabel = linkLabelG.selectAll('.linkLabel');
-        node = nodeG.selectAll('.node');
-
-        function chrg(d) {
-            return fcfg.charge[d.class] || -12000;
-        }
-        function ldist(d) {
-            return fcfg.linkDistance[d.type] || 50;
-        }
-        function lstrg(d) {
-            // 0.0 - 1.0
-            return fcfg.linkStrength[d.type] || 1.0;
-        }
-
-        function selectCb(d, self) {
-            selectObject(d, self);
-        }
-
-        function atDragEnd(d, self) {
-            // once we've finished moving, pin the node in position
-            d.fixed = true;
-            d3.select(self).classed('fixed', true);
-            if (config.useLiveData) {
-                sendUpdateMeta(d, true);
-            } else {
-                console.log('Moving node ' + d.id + ' to [' + d.x + ',' + d.y + ']');
-            }
-        }
-
-        // predicate that indicates when dragging is active
-        function dragEnabled() {
-            var ev = d3.event.sourceEvent;
-            // nodeLock means we aren't allowing nodes to be dragged...
-            // meta or alt key pressed means we are zooming/panning...
-            return !nodeLock && !(ev.metaKey || ev.altKey);
-        }
-
-        // predicate that indicates when clicking is active
-        function clickEnabled() {
-            return true;
-        }
-
-        // set up the force layout
-        network.force = d3.layout.force()
-            .size([w, h])
-            .nodes(network.nodes)
-            .links(network.links)
-            .gravity(0.4)
-            .friction(0.7)
-            .charge(chrg)
-            .linkDistance(ldist)
-            .linkStrength(lstrg)
-            .on('tick', tick);
-
-        network.drag = d3u.createDragBehavior(network.force,
-            selectCb, atDragEnd, dragEnabled, clickEnabled);
-
-
-        // create mask layer for when we lose connection to server.
-        // TODO: this should be part of the framework
-
-        function para(sel, text) {
-            sel.append('p').text(text);
-        }
-
-        mask = view.$div.append('div').attr('id','topo-mask');
-        para(mask, 'Oops!');
-        para(mask, 'Web-socket connection to server closed...');
-        para(mask, 'Try refreshing the page.');
-
-        mask.append('svg')
-            .attr({
-                id: 'mask-bird',
-                width: w,
-                height: h
-            })
-            .append('g')
-            .attr('transform', birdTranslate(w, h))
-            .style('opacity', 0.3)
-            .append('use')
-                .attr({
-                    'xlink:href': '#bird',
-                    width: config.birdDim,
-                    height: config.birdDim,
-                    fill: '#111'
-                })
-    }
-
-
-    function load(view, ctx, flags) {
-        // resize, in case the window was resized while we were not loaded
-        resize(view, ctx, flags);
-
-        // cache the view token, so network topo functions can access it
-        network.view = view;
-        config.useLiveData = !flags.local;
-
-        if (!config.useLiveData) {
-            prepareScenario(view, ctx, flags.debug);
-        }
-
-        // set our radio buttons and key bindings
-        layerBtnSet = view.setRadio(layerButtons);
-        view.setKeys(keyDispatch);
-        view.setGestures(gestures);
-
-        // Load map data asynchronously; complete startup after that..
-        loadGeoJsonData();
-    }
-
-    function startAntTimer() {
-        // Note: disabled until traffic can be allotted to intents properly
-        if (false && !antTimer) {
-            var pulses = [5, 3, 1.2, 3],
-                pulse = 0;
-            antTimer = setInterval(function () {
-                pulse = pulse + 1;
-                pulse = pulse === pulses.length ? 0 : pulse;
-                d3.selectAll('.animated').style('stroke-width', pulses[pulse]);
-            }, 200);
-        }
-    }
-
-    function stopAntTimer() {
-        if (antTimer) {
-            clearInterval(antTimer);
-            antTimer = null;
-        }
-    }
-
-    function unload(view, ctx, flags) {
-        stopAntTimer();
-    }
-
-    var geoJsonUrl = 'continental_us.json',
-        geoJson;
-
-    function loadGeoJsonData() {
-        d3.json(geoJsonUrl, function (err, data) {
-            if (err) {
-                console.error('failed to load Map data', err);
-            } else {
-                geoJson = data;
-                loadGeoMap();
-            }
-
-            repositionNoDevices();
-            showNoDevs(true);
-
-            // finally, connect to the server...
-            if (config.useLiveData) {
-                webSock.connect();
-            }
-        });
-    }
-
-    function setProjForView(path, topoData) {
-        var dim = config.logicalSize;
-
-        // start with unit scale, no translation..
-        geoMapProj.scale(1).translate([0, 0]);
-
-        // figure out dimensions of map data..
-        var b = path.bounds(topoData),
-            x1 = b[0][0],
-            y1 = b[0][1],
-            x2 = b[1][0],
-            y2 = b[1][1],
-            dx = x2 - x1,
-            dy = y2 - y1,
-            x = (x1 + x2) / 2,
-            y = (y1 + y2) / 2;
-
-        // size map to 95% of minimum dimension to fill space..
-        var s = .95 / Math.min(dx / dim, dy / dim);
-        var t = [dim / 2 - s * x, dim / 2 - s * y];
-
-        // set new scale, translation on the projection..
-        geoMapProj.scale(s).translate(t);
-    }
-
-    function loadGeoMap() {
-        fnTrace('loadGeoMap', geoJsonUrl);
-
-        // extracts the topojson data into geocoordinate-based geometry
-        var topoData = topojson.feature(geoJson, geoJson.objects.states);
-
-        // see: http://bl.ocks.org/mbostock/4707858
-        geoMapProj = d3.geo.mercator();
-        var path = d3.geo.path().projection(geoMapProj);
-
-        setProjForView(path, topoData);
-
-        bgImg = panZoomContainer.insert("g", '#topo-G');
-        bgImg.attr('id', 'map').selectAll('path')
-            .data(topoData.features)
-            .enter()
-            .append('path')
-            .attr('d', path);
-    }
-
-    function resize(view, ctx, flags) {
-        var w = view.width(),
-            h = view.height();
-
-        setSize(svg, view);
-
-        d3.select('#mask-bird').attr({ width: w, height: h})
-            .select('g').attr('transform', birdTranslate(w, h));
-    }
-
-    function theme(view, ctx, flags) {
-        updateInstances();
-        updateDeviceColors();
-    }
-
-    function birdTranslate(w, h) {
-        var bdim = config.birdDim;
-        return 'translate('+((w-bdim)*.4)+','+((h-bdim)*.1)+')';
-    }
-
-    function isF(f) { return $.isFunction(f) ? f : null; }
-    function noop() {}
-
-    function augmentDetailPane() {
-        var dp = detailPane;
-        dp.ypos = { up: 64, down: 320, current: 320};
-
-        dp._move = function (y, cb) {
-            var endCb = isF(cb) || noop,
-                yp = dp.ypos;
-            if (yp.current !== y) {
-                yp.current = y;
-                dp.el.transition().duration(300)
-                    .each('end', endCb)
-                    .style('top', yp.current + 'px');
-            } else {
-                endCb();
-            }
-        };
-
-        dp.down = function (cb) { dp._move(dp.ypos.down, cb); };
-        dp.up = function (cb) { dp._move(dp.ypos.up, cb); };
-    }
-
-    // ==============================
-    // View registration
-
-    onos.ui.addView('topo', {
-        init: init,
-        load: load,
-        unload: unload,
-        resize: resize,
-        theme: theme
-    });
-
-    summaryPane = onos.ui.addFloatingPanel('topo-summary');
-    detailPane = onos.ui.addFloatingPanel('topo-detail');
-    augmentDetailPane();
-    oiBox = onos.ui.addFloatingPanel('topo-oibox', 'TL');
-    oiBox.width(20);
-
-}(ONOS));
diff --git a/web/gui/src/test/java/org/onosproject/ui/README.txt b/web/gui/src/test/java/org/onosproject/ui/impl/README.txt
similarity index 100%
rename from web/gui/src/test/java/org/onosproject/ui/README.txt
rename to web/gui/src/test/java/org/onosproject/ui/impl/README.txt
diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/TopologyViewWebSocketTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/TopologyViewWebSocketTest.java
deleted file mode 100644
index 8937971..0000000
--- a/web/gui/src/test/java/org/onosproject/ui/impl/TopologyViewWebSocketTest.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * 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.
- */
-
-package org.onosproject.ui.impl;
-
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableSet;
-import org.junit.Before;
-import org.junit.Test;
-import org.onlab.osgi.ServiceDirectory;
-import org.onlab.osgi.TestServiceDirectory;
-import org.onlab.packet.ChassisId;
-import org.onlab.packet.IpAddress;
-import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
-import org.onosproject.cluster.ClusterService;
-import org.onosproject.cluster.ClusterServiceAdapter;
-import org.onosproject.core.CoreService;
-import org.onosproject.core.CoreServiceAdapter;
-import org.onosproject.core.Version;
-import org.onosproject.mastership.MastershipService;
-import org.onosproject.mastership.MastershipServiceAdapter;
-import org.onosproject.net.DefaultDevice;
-import org.onosproject.net.DefaultHost;
-import org.onosproject.net.Device;
-import org.onosproject.net.DeviceId;
-import org.onosproject.net.Host;
-import org.onosproject.net.HostId;
-import org.onosproject.net.HostLocation;
-import org.onosproject.net.Port;
-import org.onosproject.net.PortNumber;
-import org.onosproject.net.device.DeviceService;
-import org.onosproject.net.device.DeviceServiceAdapter;
-import org.onosproject.net.flow.FlowEntry;
-import org.onosproject.net.flow.FlowRuleService;
-import org.onosproject.net.flow.FlowRuleServiceAdapter;
-import org.onosproject.net.host.HostService;
-import org.onosproject.net.host.HostServiceAdapter;
-import org.onosproject.net.intent.IntentService;
-import org.onosproject.net.intent.IntentServiceAdapter;
-import org.onosproject.net.link.LinkService;
-import org.onosproject.net.link.LinkServiceAdapter;
-import org.onosproject.net.provider.ProviderId;
-import org.onosproject.net.statistic.StatisticService;
-import org.onosproject.net.statistic.StatisticServiceAdapter;
-import org.onosproject.net.topology.TopologyService;
-import org.onosproject.net.topology.TopologyServiceAdapter;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import static org.junit.Assert.assertEquals;
-
-public class TopologyViewWebSocketTest {
-
-    private static final ProviderId PID = new ProviderId("of", "foo.bar");
-    private static final ChassisId CHID = new ChassisId(123L);
-    private static final MacAddress MAC = MacAddress.valueOf("00:00:00:00:00:19");
-    private static final DeviceId DID = DeviceId.deviceId("of:foo");
-    private static final Set<IpAddress> IPS = ImmutableSet.of(IpAddress.valueOf("1.2.3.4"));
-
-    private TestWebSocket ws;
-    private TestServiceDirectory sd;
-
-    @Before
-    public void setUp() {
-        sd = new TestServiceDirectory();
-        sd.add(DeviceService.class, new TestDeviceService());
-        sd.add(ClusterService.class, new ClusterServiceAdapter());
-        sd.add(LinkService.class, new LinkServiceAdapter());
-        sd.add(HostService.class, new TestHostService());
-        sd.add(MastershipService.class, new MastershipServiceAdapter());
-        sd.add(IntentService.class, new IntentServiceAdapter());
-        sd.add(FlowRuleService.class, new TestFlowService());
-        sd.add(StatisticService.class, new StatisticServiceAdapter());
-        sd.add(TopologyService.class, new TopologyServiceAdapter());
-        sd.add(CoreService.class, new TestCoreService());
-        ws = new TestWebSocket(sd);
-    }
-
-    @Test
-    public void requestDetailsDevice() {
-        // build the request
-        String request = "{\"event\":\"requestDetails\", \"sid\":0, "
-                + "\"payload\":{\"id\":\"of:000001\",\"class\":\"device\"}}";
-        ws.onMessage(request);
-        // look at the ws reply, and verify that it is correct
-        assertEquals("incorrect id", "of:000001", ws.reply.path("payload").path("id").asText());
-        assertEquals("incorrect mfr", "foo", ws.reply.path("payload").path("props").path("Vendor").asText());
-    }
-
-    @Test
-    public void requestDetailsHost() {
-        // build the request
-        String request = "{\"event\":\"requestDetails\", \"sid\":0, "
-                + "\"payload\":{\"id\":\"00:00:00:00:00:19/-1\",\"class\":\"host\"}}";
-        ws.onMessage(request);
-        // look at the ws reply, and verify that it is correct
-        assertEquals("incorrect id", "00:00:00:00:00:19/-1", ws.reply.path("payload").path("id").asText());
-        assertEquals("incorrect ip address", "1.2.3.4", ws.reply.path("payload").path("props").path("IP").asText());
-    }
-
-    private class TestWebSocket extends TopologyViewWebSocket {
-
-        private ObjectNode reply;
-
-        /**
-         * Creates a new web-socket for serving data to GUI topology view.
-         *
-         * @param directory service directory
-         */
-        public TestWebSocket(ServiceDirectory directory) {
-            super(directory);
-        }
-
-        @Override
-        protected synchronized void sendMessage(ObjectNode data) {
-            reply = data;
-        }
-    }
-
-    private class TestCoreService extends CoreServiceAdapter {
-        @Override
-        public Version version() {
-            return Version.version("1.2.3");
-        }
-    }
-
-    private class TestDeviceService extends DeviceServiceAdapter {
-
-        @Override
-        public Device getDevice(DeviceId deviceId) {
-            return new DefaultDevice(PID, deviceId, Device.Type.SWITCH,
-                                     "foo", "hw", "sw", "sn", CHID);
-        }
-
-        @Override
-        public List<Port> getPorts(DeviceId deviceId) {
-            return new ArrayList<>();
-        }
-    }
-
-    private class TestFlowService extends FlowRuleServiceAdapter {
-        @Override
-        public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
-            return new ArrayList<>();
-        }
-    }
-
-    private class TestHostService extends HostServiceAdapter {
-        @Override
-        public Host getHost(HostId hostId) {
-            return new DefaultHost(PID, hostId, MAC, VlanId.NONE,
-                                   new HostLocation(DID, PortNumber.P0, 123L), IPS);
-        }
-    }
-}
\ No newline at end of file
