summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorPrivate Island Networks Inc <opensource@privateisland.tech>2026-03-03 15:56:53 -0500
committerPrivate Island Networks Inc <opensource@privateisland.tech>2026-03-03 15:56:53 -0500
commitab6ca080771b706a310ebfd8a4192841cdfef05c (patch)
treef9da21650402f17330d68bb7d6f86b031191ddb9
initial commit of experimental code base for PI Explorer (PI-EXP)HEADmain
-rwxr-xr-x.gitignore9
-rw-r--r--LICENSE201
-rw-r--r--README.txt13
-rwxr-xr-xconstants.py164
-rwxr-xr-xmain.py479
-rw-r--r--static/css/base.css440
-rw-r--r--static/css/ss.css55
-rw-r--r--static/images/favicon.icobin0 -> 198 bytes
-rw-r--r--static/images/icons-svg/action-black.svg37
-rw-r--r--static/images/icons-svg/action-white.svg37
-rw-r--r--static/images/icons-svg/alert-black.svg38
-rw-r--r--static/images/icons-svg/alert-white.svg38
-rw-r--r--static/images/icons-svg/arrow-d-black.svg37
-rw-r--r--static/images/icons-svg/arrow-d-l-black.svg37
-rw-r--r--static/images/icons-svg/arrow-d-l-white.svg37
-rw-r--r--static/images/icons-svg/arrow-d-r-black.svg37
-rw-r--r--static/images/icons-svg/arrow-d-r-white.svg37
-rw-r--r--static/images/icons-svg/arrow-d-white.svg37
-rw-r--r--static/images/icons-svg/arrow-l-black.svg37
-rw-r--r--static/images/icons-svg/arrow-l-white.svg37
-rw-r--r--static/images/icons-svg/arrow-r-black.svg37
-rw-r--r--static/images/icons-svg/arrow-r-white.svg37
-rw-r--r--static/images/icons-svg/arrow-u-black.svg37
-rw-r--r--static/images/icons-svg/arrow-u-l-black.svg37
-rw-r--r--static/images/icons-svg/arrow-u-l-white.svg37
-rw-r--r--static/images/icons-svg/arrow-u-r-black.svg37
-rw-r--r--static/images/icons-svg/arrow-u-r-white.svg37
-rw-r--r--static/images/icons-svg/arrow-u-white.svg37
-rw-r--r--static/images/icons-svg/audio-black.svg40
-rw-r--r--static/images/icons-svg/audio-white.svg40
-rw-r--r--static/images/icons-svg/back-black.svg37
-rw-r--r--static/images/icons-svg/back-white.svg37
-rw-r--r--static/images/icons-svg/bars-black.svg38
-rw-r--r--static/images/icons-svg/bars-white.svg38
-rw-r--r--static/images/icons-svg/bullets-black.svg40
-rw-r--r--static/images/icons-svg/bullets-white.svg40
-rw-r--r--static/images/icons-svg/calendar-black.svg39
-rw-r--r--static/images/icons-svg/calendar-white.svg39
-rw-r--r--static/images/icons-svg/camera-black.svg39
-rw-r--r--static/images/icons-svg/camera-white.svg39
-rw-r--r--static/images/icons-svg/carat-d-black.svg37
-rw-r--r--static/images/icons-svg/carat-d-white.svg37
-rw-r--r--static/images/icons-svg/carat-l-black.svg37
-rw-r--r--static/images/icons-svg/carat-l-white.svg37
-rw-r--r--static/images/icons-svg/carat-r-black.svg37
-rw-r--r--static/images/icons-svg/carat-r-white.svg37
-rw-r--r--static/images/icons-svg/carat-u-black.svg37
-rw-r--r--static/images/icons-svg/carat-u-white.svg37
-rw-r--r--static/images/icons-svg/check-black.svg37
-rw-r--r--static/images/icons-svg/check-white.svg37
-rw-r--r--static/images/icons-svg/clock-black.svg38
-rw-r--r--static/images/icons-svg/clock-white.svg38
-rw-r--r--static/images/icons-svg/cloud-black.svg39
-rw-r--r--static/images/icons-svg/cloud-white.svg39
-rw-r--r--static/images/icons-svg/comment-black.svg37
-rw-r--r--static/images/icons-svg/comment-white.svg37
-rw-r--r--static/images/icons-svg/delete-black.svg37
-rw-r--r--static/images/icons-svg/delete-white.svg37
-rw-r--r--static/images/icons-svg/edit-black.svg37
-rw-r--r--static/images/icons-svg/edit-white.svg37
-rw-r--r--static/images/icons-svg/eye-black.svg38
-rw-r--r--static/images/icons-svg/eye-white.svg38
-rw-r--r--static/images/icons-svg/forbidden-black.svg40
-rw-r--r--static/images/icons-svg/forbidden-white.svg40
-rw-r--r--static/images/icons-svg/forward-black.svg37
-rw-r--r--static/images/icons-svg/forward-white.svg37
-rw-r--r--static/images/icons-svg/gear-black.svg52
-rw-r--r--static/images/icons-svg/gear-white.svg52
-rw-r--r--static/images/icons-svg/grid-black.svg44
-rw-r--r--static/images/icons-svg/grid-white.svg44
-rw-r--r--static/images/icons-svg/heart-black.svg37
-rw-r--r--static/images/icons-svg/heart-white.svg37
-rw-r--r--static/images/icons-svg/home-black.svg37
-rw-r--r--static/images/icons-svg/home-white.svg37
-rw-r--r--static/images/icons-svg/info-black.svg38
-rw-r--r--static/images/icons-svg/info-white.svg38
-rw-r--r--static/images/icons-svg/location-black.svg38
-rw-r--r--static/images/icons-svg/location-white.svg38
-rw-r--r--static/images/icons-svg/lock-black.svg38
-rw-r--r--static/images/icons-svg/lock-white.svg38
-rw-r--r--static/images/icons-svg/mail-black.svg37
-rw-r--r--static/images/icons-svg/mail-white.svg37
-rw-r--r--static/images/icons-svg/minus-black.svg37
-rw-r--r--static/images/icons-svg/minus-white.svg37
-rw-r--r--static/images/icons-svg/navigation-black.svg37
-rw-r--r--static/images/icons-svg/navigation-white.svg37
-rw-r--r--static/images/icons-svg/phone-black.svg43
-rw-r--r--static/images/icons-svg/phone-white.svg43
-rw-r--r--static/images/icons-svg/plus-black.svg37
-rw-r--r--static/images/icons-svg/plus-white.svg37
-rw-r--r--static/images/icons-svg/power-black.svg41
-rw-r--r--static/images/icons-svg/power-white.svg41
-rw-r--r--static/images/icons-svg/recycle-black.svg38
-rw-r--r--static/images/icons-svg/recycle-white.svg38
-rw-r--r--static/images/icons-svg/refresh-black.svg40
-rw-r--r--static/images/icons-svg/refresh-white.svg40
-rw-r--r--static/images/icons-svg/search-black.svg40
-rw-r--r--static/images/icons-svg/search-white.svg40
-rw-r--r--static/images/icons-svg/shop-black.svg39
-rw-r--r--static/images/icons-svg/shop-white.svg39
-rw-r--r--static/images/icons-svg/star-black.svg37
-rw-r--r--static/images/icons-svg/star-white.svg37
-rw-r--r--static/images/icons-svg/tag-black.svg37
-rw-r--r--static/images/icons-svg/tag-white.svg37
-rw-r--r--static/images/icons-svg/user-black.svg41
-rw-r--r--static/images/icons-svg/user-white.svg41
-rw-r--r--static/images/icons-svg/video-black.svg37
-rw-r--r--static/images/icons-svg/video-white.svg37
-rw-r--r--static/images/loading.gifbin0 -> 3208 bytes
-rw-r--r--static/js/base.js200
-rw-r--r--static/js/controller.js93
-rw-r--r--static/js/lmmi.js39
-rw-r--r--static/js/main.js118
-rw-r--r--static/js/mdio.js36
-rw-r--r--static/js/mle.js35
-rw-r--r--static/js/modal.js120
-rw-r--r--static/js/ss.js302
-rw-r--r--static/js/ws.js147
-rw-r--r--templates/base.html53
-rw-r--r--templates/controller.html50
-rw-r--r--templates/divider.html3
-rw-r--r--templates/fabric.html24
-rw-r--r--templates/help.html29
-rwxr-xr-xtemplates/index.html18
-rw-r--r--templates/lmmi.html43
-rw-r--r--templates/mdio.html44
-rw-r--r--templates/mle.html44
-rw-r--r--templates/pi_arch_ml.svg5996
128 files changed, 12589 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100755
index 0000000..aa60a65
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+__pycache__
+.project
+.pydevproject
+*.orig
+*.pyc
+*.bak
+logs
+.DS*
+
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..261eeb9
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,201 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..c5d6d75
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,13 @@
+Copyright (C) 2026 Private Island Networks Inc.
+
+See the included LICENSE file and file headers for licensing information.
+
+The PI Explorer Project provides a Web-based interaction with the Private Island FPGA-based Project via a LAN.
+
+This project is currently in experimental, rough form.
+
+It utilizes aiohttp as the Web framework and Pyshark/Tshark for capturing traffic from the LAN.
+
+Many improvements are planned
+
+
diff --git a/constants.py b/constants.py
new file mode 100755
index 0000000..e83a2fb
--- /dev/null
+++ b/constants.py
@@ -0,0 +1,164 @@
+"""
+ Copyright (C) 2026 Private Island Networks Inc.
+
+ 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.
+
+ file: constants.py
+
+"""
+
+class STATUS:
+ OK = 10
+ FORM_OK = OK
+ DONE = OK
+ NONE = OK
+ FORM_ERRORS = 20
+ FORM_DUPLICATE = 30
+
+ # pass the URL in data
+ REDIRECT = 100
+
+ UNBOUND_FORM = 0
+ CSRF_DETECTED = -1
+ ERROR_PROCESSING_PARAMS = -2
+ ERROR_SERVER = -3
+ ERROR_GENERAL = -3
+ ERROR_NO_COOKIES = -4
+ ERROR_TAMPER = -5
+
+ # DB Related
+ ERROR_DB_TOPIC_DOESNT_EXIST = -10
+ ERROR_DB_COMMENT_DOESNT_EXIST = -11
+ ERROR_DB_OBJECT_DOESNT_EXIST = -12
+
+ # Session Related
+ ERROR_SN_DATA_MISMATCH = -20
+
+ # Catch All View Problems
+ ERROR_VW_BAD_ARGS = -40
+
+ # Called an AJAX helper but the request wasn't AJAX
+ ERROR_AJAX_GETTER_CALLED_WITHOUT_AJAX = -60
+
+# Betsy Uses Static IP addressing
+BETSY_IP_ADDRESS = "192.168.5.100"
+PC_IP_ADDRESS = "192.168.5.44"
+
+
+MODE_IDLE = 0
+MODE_LIVE = 1
+MODE_FILE = 2
+
+PORT_PHY0 = 0
+PORT_PHY1 = 1
+PORT_PHY2 = 2
+PORT_PC = 10
+PORT_UNDEFINED = -1
+
+
+MSG_FORMAT_BASIC = 0
+MSG_FORMAT_CONTROLLER = 1
+MSG_FORMAT_MLE = 2
+
+# Controller Message Protocol:
+# Type: 8-bit
+# Token: 8-bit
+# Address: 16-bit
+# Data: 32-bit
+
+# Betsy Address Map
+MSG_CONTROLLER_ADDR = 0x0000
+MSG_MAC_ADDR = 0x0100
+MSG_PKT_FILTER_ADDR = 0x0200
+MSG_SWITCH_ADDR = 0x0500
+MSG_MDIO_ADDR = 0x0600
+MSG_INVALID_ADDR = 0x0700
+
+# Message Types
+MSG_TYPE_NULL = 0
+MSG_TYPE_WRITE = 1
+MSG_TYPE_READ = 2
+MSG_TYPE_NOTIFY_SUCCESS = 3
+MSG_TYPE_NOTIFY_ERROR = 4
+MSG_TYPE_NOTIFY_NOTIFY = 5
+MSG_TYPE_NOTIFY_MLE = 16
+
+MSG_TYPE_CONTROL = -1
+
+MSG_TYPE_MAP = {MSG_TYPE_NULL:"NULL",
+ MSG_TYPE_WRITE:"WRITE",
+ MSG_TYPE_READ: "READ",
+ MSG_TYPE_NOTIFY_SUCCESS:"SUCCESS",
+ MSG_TYPE_NOTIFY_ERROR:"ERROR",
+ MSG_TYPE_NOTIFY_MLE: "MLE"}
+
+BETSY_ADDR_MAP = {
+ "0000": "FW_VER",
+ "0002": "FW_INC",
+ "0010": "FPGA_TEMP",
+ "0100": "PHY0_STATUS",
+ "0104": "PHY1_STATUS",
+ "0106": "PHY1_MASK",
+ "0108": "PHY2_STATUS",
+ "010A": "PHY2_MASK"
+ }
+
+DP83867_MAP = {
+ 0x0000: ["Basic Mode Control Register (BMCR)", "0x1140"],
+ 0x0001: ["Basic Mode Status Register(BMSR)", "0x796D"],
+ 0x0002: ["PHY Identifier Register #1(PHYIDR1)", "0x0000"],
+ 0x0003: ["PHY Identifier Register #2(PHYIDR2)", "0x0000"],
+ 0x0004: ["Auto-Negotiation Advertisement Register(ANAR)", "0x0000"],
+ 0x0005: ["Auto-Negotiation Link Partner Ability Register(ANLPAR)", "0x0000"],
+ 0x0006: ["Auto-Negotiate Expansion Register(ANER)", "0x0000"],
+ 0x0007: ["Auto-Negotiation Next Page Transmit Register(ANNPTR)", "0x0000"],
+ 0x0008: ["Auto-Negotiation Next Page Receive Register(ANNPRR)", "0x0000"],
+ 0x0009: ["Configuration Register 1(CFG1)", "0x0000"],
+ 0x000A: ["Status Register 1(STS1)", "0x0000"],
+ 0x000B: ["Undefined", "0x0000"],
+ 0x000C: ["Undefined", "0x0000"],
+ 0x000D: ["Register Control Register(REGCR)", "0x0000"],
+ 0x000E: ["Address or Data Register(ADDAR)", "0x0000"],
+ 0x000F: ["1000BASE-T Status Register(1KSCR)", "0x0000"],
+ }
+
+# Lattice Certus NX SGMIICDR
+SGMII_CDR_MAP = {
+ 0x0000: ["LMMI[0]", "0x60"],
+ 0x0001: ["LMMI[1]", "0xA1"],
+ 0x0002: ["LMMI[2]", "0xD2"],
+ 0x0003: ["LMMI[3]", "0x17"],
+ 0x0004: ["LMMI[4]", "0xFF"],
+ 0x0005: ["LMMI[5]", "0x00"],
+ 0x0006: ["LMMI[6]", "0x55"],
+ 0x0007: ["LMMI[7]", "0x80"],
+ 0x0008: ["LMMI[8]", "0x20"],
+ 0x0009: ["LMMI[9]", "0x40"],
+ 0x000A: ["LMMI[A]", "0xAF"],
+ 0x000B: ["LMMI[B]", "0x7F"],
+ 0x000C: ["LMMI[C]", "0x8F"],
+ 0x000D: ["LMMI[D]", "0x00"],
+ 0x000E: ["LMMI[E]", "0x00"],
+ 0x000F: ["LMMI[F]", "0x00"],
+ }
+
+CONTROLLER_MAP = {}
+
+ML_ENGINE_MAP = {}
+
+FABRIC_MAP = {}
+
+
+
+
+
diff --git a/main.py b/main.py
new file mode 100755
index 0000000..4640df1
--- /dev/null
+++ b/main.py
@@ -0,0 +1,479 @@
+"""
+ Copyright (C) 2026 Private Island Networks Inc.
+
+ 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.
+
+ file: main.py
+
+"""
+import os
+import sys
+import argparse
+import logging
+import aiohttp
+import asyncio
+import asyncio_dgram
+import pyshark
+import aiohttp_jinja2
+import jinja2
+from multiprocessing import Process, Manager
+from aiohttp import web
+from queue import Empty
+import platform
+from socket import socket, AF_INET, SOCK_DGRAM
+from time import sleep
+import json
+from websockets.asyncio.server import serve
+
+from constants import *
+
+DEBUG = True
+VERSION = 0.1
+PROJECT_ROOT = os.path.dirname(os.path.realpath(__file__))
+STATIC_PATH = PROJECT_ROOT + '/static'
+TEMPLATE_PATH = PROJECT_ROOT + '/templates'
+LOG_PATH = PROJECT_ROOT + '/logs'
+
+ws_key = web.AppKey("ws_key", dict[str, web.WebSocketResponse])
+
+async def _parse_pkt(app, pkt):
+ """ Parse a Wireshark received packet"""
+
+ # Drop unwanted packets
+ if not (pkt.ip.src == app['ipaddr_betsy'] or pkt.ip.src == app['ipaddr_pc']):
+ return None
+
+ try:
+ data = pkt.data.data.__str__()
+ except:
+ if DEBUG:
+ print('non msg received')
+ return None
+
+ message = dict()
+
+ try:
+ msg_type = MSG_TYPE_MAP[int(data[0:2],16)]
+ msg_token = '0x' + data[2:4]
+ try:
+ msg_addr = BETSY_ADDR_MAP[data[4:8]]
+ except:
+ msg_addr = '0x' + data[4:8]
+
+ msg_data = '0x' + data[8::]
+ except Exception as e:
+ print("mapping error:", str(e))
+ pass
+
+ dst_port = pkt.udp.dstport.hex_value
+ if pkt.ip.src == app['ipaddr_betsy']:
+ port = PORT_PHY0
+ elif pkt.ip.src == app['ipaddr_pc'] and dst_port == 0x9020:
+ port = PORT_PC
+ else:
+ port = PORT_UNDEFINED
+
+ message["format"] = MSG_FORMAT_CONTROLLER
+ message["time"] = pkt.frame_info.get_field("frame.time_relative").__str__()[0:6]
+ message['port'] = port
+ message['type'] = msg_type
+ message['token'] = msg_token
+ message['address'] = msg_addr
+ message['data'] = msg_data
+
+ return message
+
+
+async def home(request):
+ # i_query = request.app['i_query']
+ data = request.match_info.get('data', "")
+ ctx = _default_context('main')
+ ctx.update(locals())
+ response = aiohttp_jinja2.render_template('index.html', request, ctx)
+ response.headers['Content-Language'] = 'en-US'
+ return response
+
+async def mdio(request):
+ if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
+ q_cont = request.app['q_cont']
+ values = dict()
+ _query_mdio(request.app)
+ for i in range(16):
+ pkt = q_cont.get(block=True) # Query
+ pkt = q_cont.get(block=True) # Response
+ msg = pkt.data.data.__str__()
+ values[i] = int("0x" + msg[10:],16)
+
+ d = json.dumps({'values': values})
+ response = web.Response(text=d, status=200)
+ else:
+ ctx = _default_context('mdio')
+ ctx['ss'] = True
+ ctx['regs'] = DP83867_MAP
+ response = aiohttp_jinja2.render_template('mdio.html', request, ctx)
+ response.headers['Content-Language'] = 'en-US'
+ return response
+
+async def _send_msg(app, msg_type, token, address, data):
+ try:
+ sko=socket(AF_INET,SOCK_DGRAM)
+ sko.bind((app['ipaddr_pc'],0x3000))
+ msg = msg_type + token + address + data
+ sko.sendto(msg,("192.168.5.100",0x9020))
+ except:
+ print("Controller Command failed in Exception: {0}", sys.exc_info())
+ pass
+
+ sko.close()
+
+async def _udp_rcv():
+ """ controller response """
+ stream = await asyncio_dgram.bind(("192.168.5.40", 0x8000))
+ data, remote_addr = await stream.recv()
+ return data
+ stream.close()
+
+async def controller(request):
+ if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
+ try:
+ send_pkt = rcv_pkt = None
+ data = await request.post()
+ result = STATUS.OK
+ q_cont = request.app['q_cont']
+ await _send_msg(request.app, int(data.get('type')).to_bytes(1),
+ int(data.get('token')).to_bytes(1),
+ int(data.get('address')).to_bytes(2),
+ int(data.get('data')).to_bytes(4))
+ send_pkt = await _parse_pkt(request.app, q_cont.get(block=True))
+ if send_pkt['type'] == "READ":
+ rcv_pkt = await _parse_pkt(request.app, q_cont.get(block=True))
+ except Exception as e:
+ print(str(e))
+ result = STATUS.ERROR_SERVER
+ pass
+ finally:
+ resp_d = json.dumps({'r':result, 'd' : [send_pkt, rcv_pkt]})
+ response = web.Response(text=resp_d)
+ else:
+ ctx = _default_context('controller')
+ ctx['regs'] = CONTROLLER_MAP
+ response = aiohttp_jinja2.render_template('controller.html', request, ctx)
+ response.headers['Content-Language'] = 'en-US'
+
+ return response
+
+
+async def mle(request):
+ data = request.match_info.get('data', "")
+ ctx = _default_context('main')
+ ctx.update({'app_layer': 'mle', 'data': data, 'regs': ML_ENGINE_MAP, 'ws': True })
+ ctx.update(locals())
+ response = aiohttp_jinja2.render_template('mle.html', request, ctx)
+ response.headers['Content-Language'] = 'en-US'
+ return response
+
+
+async def fabric(request):
+ data = request.match_info.get('data', "")
+ ctx = _default_context('fabric')
+ regs = {}
+ ctx.update(locals())
+ response = aiohttp_jinja2.render_template('fabric.html', request, ctx)
+ response.headers['Content-Language'] = 'en-US'
+ return response
+
+async def support(request):
+ data = request.match_info.get('data', "")
+ ctx = _default_context('support')
+ response = aiohttp_jinja2.render_template('help.html', request, ctx)
+ response.headers['Content-Language'] = 'en-US'
+ return response
+
+async def lmmi(request):
+ q_cont = request.app['q_cont']
+ data = request.match_info.get('data', "")
+ if request.headers.get('X-Requested-With') == 'XMLHttpRequest':
+ values = dict()
+ _query_lmmi(app)
+ for i in range(28):
+ pkt = q_cont.get(block=True)
+ msg = pkt.data.data.__str__()
+ if len(msg) == 6 and (msg == '03e0fe' or msg == '03e0ff'):
+ continue
+ values[round((i-1)/2)] = int("0x" + msg[12:],16)
+
+ d = json.dumps({'values': values})
+ resp = web.Response(text=d, status=200)
+ return resp
+ else:
+ context = {'data': data, 'regs0': SGMII_CDR_MAP, 'regs1': SGMII_CDR_MAP}
+ response = aiohttp_jinja2.render_template('lmmi.html', request, context)
+ response.headers['Content-Language'] = 'en-US'
+ return response
+
+
+async def set_filename(request):
+ if not request.can_read_body:
+ raise web.HTTPBadRequest()
+
+ data = await request.json()
+ ns = request.app['ns']
+ ns.filename = data['filename']
+
+ return web.Response(text="ok", status=200)
+
+
+async def start(request):
+ if not request.can_read_body:
+ raise web.HTTPBadRequest()
+
+ data = await request.json()
+ mode = request.app['mode']
+ mode.value = data['mode']
+
+ return web.Response(text="ok", status=200)
+
+
+async def stop(request):
+ if not request.can_read_body:
+ raise web.HTTPBadRequest()
+
+ data = await request.json()
+ mode = request.app['mode']
+ mode.value = MODE_IDLE
+
+ return web.Response(text="ok", status=200)
+
+
+async def get_icon(request):
+ raise aiohttp.web.HTTPNotFound()
+
+
+# WebSocket handle
+async def wslogger(request):
+ ws = web.WebSocketResponse()
+ await ws.prepare(request) # onopen is called in the browser
+
+ request.app[ws_key]['primary'] = ws
+
+ pkt = None
+ num_pkts = 0
+ q_mle = request.app['q_mle']
+ mode = request.app['mode']
+
+ async for msg in ws:
+ if msg.type == web.WSMsgType.TEXT:
+ while True:
+ try:
+ pkt = q_mle.get(block=False)
+ except Empty:
+ pass
+ await asyncio.sleep(1) # let other tasks run
+ continue
+
+ num_pkts = num_pkts + 1
+ if DEBUG:
+ print('get from Q:', num_pkts)
+ message = await _parse_pkt(request.app, pkt)
+ if message:
+ await ws.send_json(message)
+
+ elif msg.type == web.WSMsgType.CLOSE:
+ break
+
+
+def _query_lmmi(app):
+ """ Lattice Memory Mapped Interface """
+ try:
+ sko = socket(AF_INET, SOCK_DGRAM)
+ sko.bind((app['ipaddr_pc'], 0x3000))
+
+ # Query the LMMI Registers
+ for i in range(16):
+ msg = MSG_TYPE_READ + b'\x06' + i.to_bytes(1) + b'\x00\x00'
+ sko.sendto(msg, (BETSY_IP_ADDRESS, 0x9020))
+ sleep(0.01)
+
+ except:
+ print("Controller Command failed in Exception: {0}", sys.exc_info())
+ pass
+ finally:
+ sko.close()
+
+ if DEBUG:
+ print("query_lmmi finished")
+
+
+def _query_mdio(app):
+
+ try:
+ sko = socket(AF_INET, SOCK_DGRAM)
+ sko.bind((app['ipaddr_pc'], 0x3000))
+
+ # Query the LMMI Registers
+ for i in range(16):
+ msg = MSG_TYPE_READ.to_bytes(1) + (i).to_bytes(1) + (MSG_MDIO_ADDR+i).to_bytes(2, byteorder='big') + b'\x00\x00\x00\x00'
+ sko.sendto(msg, (app['ipaddr_betsy'], 0x9020))
+ sleep(0.01)
+
+ except:
+ print("Controller Command failed in Exception: {0}", sys.exc_info())
+ pass
+ finally:
+ sko.close()
+
+ if DEBUG:
+ print("query_lmmi finished")
+
+async def _shutdown(app):
+ for ws in app[ws_key].values():
+ await ws.close()
+ app[ws_key].clear()
+
+def _default_context(app_layer):
+ return {
+ "version" : VERSION,
+ "app_layer" : app_layer
+ }
+
+def _run_shark(q_cont, q_mle, ife, df, mode, ns, time):
+
+ num_pkts = 0
+ ts = time[0]
+ tf = time[1]
+
+ cap_live = pyshark.LiveCapture(interface=ife, display_filter=df)
+
+ while True:
+
+ if mode.value == MODE_IDLE:
+ continue
+
+ # mode is a global set during initialization by the browser
+ elif mode.value == MODE_LIVE:
+ cap_live.reset()
+ for pkt in cap_live.sniff_continuously():
+ num_pkts = num_pkts + 1
+ try:
+ msg_type = int(pkt.data.data[0:2],16)
+ if msg_type < MSG_TYPE_NOTIFY_MLE:
+ q_cont.put(pkt)
+ print ('put in Cont Q: ', num_pkts)
+ elif msg_type == MSG_TYPE_NOTIFY_MLE:
+ q_mle.put(pkt)
+ print ('put in MLE Q: ', num_pkts)
+ except Exception as e:
+ print(str(e))
+ pass
+
+ if mode.value == MODE_IDLE:
+ break
+
+
+ elif mode.value == MODE_FILE:
+ cap_file = pyshark.FileCapture(input_file=LOG_PATH + ns.filename, display_filter=df)
+ for pkt in cap_file:
+ num_pkts = num_pkts + 1
+ time = float(pkt.frame_info.get_field("frame.time_relative").__str__()[0:9])
+ if time >= ts and time < tf:
+ q_cont.put(pkt)
+ if DEBUG:
+ print ('put in Q: ', num_pkts)
+ if DEBUG:
+ print("file replay finished")
+
+ cap_file.close()
+ mode.value = MODE_IDLE
+
+
+async def make_app(args, manager):
+ ns = manager.Namespace()
+ q_cont = manager.Queue()
+ q_mle = manager.Queue()
+
+ if args.ife:
+ ife = args.ife
+ else:
+ ife = 'WiFi'
+
+ if args.mode == "live":
+ mode = manager.Value('i', MODE_LIVE)
+ elif args.mode == "file":
+ mode = manager.Value('i', MODE_FILE)
+ else:
+ mode = manager.Value('i', MODE_IDLE)
+
+ # filename = mp.Value(ctypes.c_char_p, args.file.encode("utf-8"))
+ ns.filename = args.file
+ df = args.df
+
+ time = (float(args.ts), float(args.tf))
+
+ p1 = Process(target=_run_shark, args=(q_cont, q_mle, ife, df, mode, ns, time))
+ p1.start()
+
+ app = web.Application()
+
+ app[ws_key] = {}
+ app['ipaddr_pc'] = args.ipaddr_pc
+ app['ipaddr_betsy'] = args.ipaddr_betsy
+ app['i_query'] = args.iq
+ app['mode'] = mode
+ app['ns'] = ns
+ app['q_cont'] = q_cont
+ app['q_mle'] = q_mle
+ app['p1'] = p1
+
+ app.on_shutdown.append(_shutdown)
+
+ app.add_routes([
+ web.get('/', home),
+ web.get('/mdio' , mdio),
+ web.get('/controller', controller),
+ web.post('/controller',controller),
+ web.get('/mle', mle),
+ web.get('/fabric', fabric),
+ web.get('/help', support),
+ web.get('/lmmi', lmmi),
+ web.post('/start', start),
+ web.post('/stop', stop),
+ web.post('/filename', set_filename),
+ web.get('/favicon.ico', get_icon),
+ web.get('/logger', wslogger),
+ web.static('/static', STATIC_PATH)])
+
+ aiohttp_jinja2.setup(app, loader=jinja2.FileSystemLoader(TEMPLATE_PATH))
+
+ return app
+
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser(description='Private Island Mind Net', epilog='Version: ' + str(VERSION))
+ parser.add_argument('--ipaddr_pc', default="192.168.5.40", help="IP Addr of this PC")
+ parser.add_argument('--ipaddr_betsy', default="192.168.5.100", help="IP Addr of Betsy")
+ parser.add_argument('--port', type=int, default=8010, help="Web server port number")
+ parser.add_argument('-d', '--df', default="ip.addr==192.168.5.100", help='display filter', action='store', required=False)
+ parser.add_argument('--ife', default='WiFi', help='tshark interface', action='store', required=False)
+ parser.add_argument('--iq', type=int, default=0, help='enable initial query on startup', action='store', required=False)
+ parser.add_argument('-m', '--mode', default="live", help='mode live or file replay', action='store', required=False)
+ parser.add_argument('-f', '--file', default="logs\\test.pcapng", help='Wireshark log file', action='store', required=False)
+ parser.add_argument('--ts', default="0", help='time start for file replay', action='store', required=False)
+ parser.add_argument('--tf', default="100000.00", help='time last for file replay', action='store', required=False)
+ args = parser.parse_args()
+ filename = args.file
+
+ logging.basicConfig(level=logging.DEBUG)
+ manager = Manager()
+
+ app = web.run_app(make_app(args, manager), port=args.port)
+ app['p1'].join()
diff --git a/static/css/base.css b/static/css/base.css
new file mode 100644
index 0000000..702a034
--- /dev/null
+++ b/static/css/base.css
@@ -0,0 +1,440 @@
+:root {
+ --mc-color: #0072b0;
+ font-size: 1.0em;
+ box-sizing: border-box;
+}
+
+/* See 3.6 in CID. */
+*, *::before, *::after {
+ box-sizing: inherit;
+}
+
+/* defaults */
+body {
+ font-family: Helvetica, Arial, sans-serif;
+ margin: 1rem;
+}
+
+form {
+ border: 1px solid black;
+ border-radius: 1em;
+ width: 50vw;
+}
+
+a:link {
+ text-decoration: none;
+}
+
+a:visited {
+ text-decoration: none;
+}
+
+button {
+ color: white;
+ border: 0.1px solid green;
+ border-radius: 0.2em;
+ background-color: green;
+}
+
+button.mc-quiet {
+ box-shadow: inherit;
+ padding: 5px;
+}
+
+input, select {
+ border-width: 1px;
+ border-color: black;
+ margin: 0.2em 0;
+}
+
+input[type="submit"] {
+ background-color: green;
+ color: white;
+}
+
+div#betsy {
+ width: 98vw;
+ height: 80vh;
+}
+
+#mc-main-window {
+ height: 800px;
+}
+
+#mc-header {
+ color: white;
+ background-color: var(--mc-color);
+}
+
+#mc-banner {
+ font-size: 2.0em;
+ padding: 0.5em;
+}
+
+/* top container for menu */
+#mc-menu {
+ position: relative;
+ width: 100%;
+}
+
+/* hamburger */
+#mc-menu-hamburger {
+ position: absolute;
+ top: -1.4em;
+ right: 0.1em;
+ border: 0;
+ background-color: transparent;
+ font-size: 2.5em;
+ width: 1em;
+ height: 1em;
+ line-height: 0.4;
+ text-indent: 4em;
+ white-space: nowrap;
+ overflow: hidden;
+}
+
+/* div parent for mc-menu-list */
+#mc-menu-dropdown {
+ z-index: 20;
+ display: none;
+ position: absolute;
+ right: 0;
+ margin: 0;
+}
+
+@media ( max-width : 35em) {
+ #mc-menu.is-open #mc-menu-dropdown {
+ display: block;
+ }
+}
+
+@media ( min-width : 35em) {
+ #mc-menu-dropdown {
+ display: block;
+ position: static;
+ }
+}
+
+#mc-menu-list {
+ margin: 0;
+ padding: 0;
+ list-style: none;
+}
+
+#mc-menu-list>li {
+ text-align: center;
+ border-bottom: 2px solid #185aa5;
+}
+
+#mc-menu-list>li a {
+ display: inline-block;
+ color: white;
+ font-size: 1.1rem;
+ font-weight: normal;
+ padding: 0.1em 1em 0.1em 1em;
+ margin: 0 auto;
+}
+
+@media ( min-width : 35em) {
+ #mc-menu-list {
+ display: flex;
+ position: static;
+ border: 0;
+ }
+ #mc-menu-list>li {
+ flex: 1;
+ padding-bottom: 0;
+ }
+ #mc-menu-list>li a {
+ display: inline-block;
+ border-top: 5px solid var(--mc-color);
+ border-bottom: 5px solid var(--mc-color);
+ transition: border-bottom 0.3s ease-out;
+ }
+ #mc-menu-list>li a:hover {
+ border-bottom: 5px solid #00cc00;
+ }
+}
+
+/* svg */
+.mc-divider {
+ padding: 0;
+ margin: 1em;
+ width: 90%;
+ height: 0.2em;
+ stroke: #185aa5;
+ stroke-width: 1.3px;
+ stroke-opacity: 0.6;
+}
+
+#mc-log-hdr {
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: flext-start;
+ height: 5rem;
+}
+
+#mc-log {
+ max-height: 70%;
+ background-color: white;
+ overflow-x: hidden; /* Hide horizontal scrollbar */
+ overflow-y: scroll; /* Add vertical scrollbar */
+}
+
+.mc-log-row {
+ margin: 1 px;
+ padding: 1 px;
+ display: flex;
+ flex-wrap: nowrap;
+ align-items: flext-start;
+}
+
+.mc-log-col {
+ font-size: 1.5rem;
+}
+
+.mc-log-col-time {
+ padding: 1em 0px;
+ color: black;
+ flex-basis: 200px;
+}
+
+.mc-log-col-pc {
+ padding: 1em 0px;
+ color: green;
+ flex-basis: 300px;
+}
+
+.mc-log-col-phy0 {
+ padding: 1em 0px;
+ color: blue;
+ flex-basis: 300px;
+}
+
+.mc-log-col-phy1 {
+ padding: 1em 0px;
+ color: red;
+ flex-basis: 300px;
+}
+
+@media ( min-width : 80em) {
+ .mc-log-col-pc {
+ flex-basis: 600px;
+ }
+ .mc-log-col-phy0 {
+ flex-basis: 600px;
+ }
+}
+
+.mc-table-striped thead th {
+ border-bottom: 1px solid #d6d6d6; /* non-RGBA fallback */
+}
+
+.mc-table-striped tbody th, .mc-table-striped tbody td {
+ border-bottom: 1px solid #e6e6e6; /* non-RGBA fallback */
+}
+
+.mc-table-striped tbody tr:nth-child(odd) td, .mc-table-striped tbody tr:nth-child(odd) th
+ {
+ background-color: rgba(0, 139, 0, 0.1);
+}
+
+.mc-table-striped th, .mc-table-striped td {
+ padding: 1.0em 2.0em;
+}
+
+/* Icons */
+.mc-icons {
+ margin: 0 auto;
+ display: block;
+ text-align: center;
+ vertical-align: center;
+}
+
+.mc-icon {
+ width: 28px;
+ height: 28px;
+ padding: 0.4em 0.7em;
+ margin: 1em 0.2em;
+ background-color: #f0f0f0;
+ border-radius: 2em;
+ cursor: pointer;
+}
+
+.mc-icon-small {
+ width: 14px;
+ height: 14px;
+ padding: 0.2em 0.35em;
+ background-color: #f0f0f0;
+ border-radius: 1em;
+ cursor: pointer;
+}
+
+h1 {
+ /* color: #185aa5; */
+ font-size: 2rem;
+ padding: 0.4em;
+}
+
+p {
+ color: #185aa5;
+ margin: 1.2em;
+ width: 90%;
+ line-height: 1.4em;
+ text-align: justify;
+}
+
+button.mc-action {
+ margin: 5px 5px;
+ border: 1px solid black;
+ color: white;
+ cursor: pointer;
+ padding: 10px 10px;
+ border-radius: 4px;
+ text-align: center;
+ text-decoration: none;
+ display: inline-block;
+ font-size: 0.8rem;
+}
+
+#mc-mode-box {
+ border: 1px solid black;
+ border-radius: 15px;
+ width: 700px;
+ padding: 1rem;
+}
+
+/* outer modal container */
+#mc-modal {
+ display: none;
+}
+
+/* disable the viewport behind the modal box */
+#mc-modal-backdrop {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ background-color: rgba(0, 0, 0, 0.5);
+ z-index: 50;
+}
+
+/* modal box */
+#mc-modal-body {
+ position: fixed;
+ border-radius: 1em;
+ border: 2px #185aa5 solid;
+ top: 20%;
+ bottom: 20%;
+ right: 20%;
+ left: 20%;
+ padding: 2em 3em 2em 3em;
+ background-color: white;
+ overflow: auto;
+ z-index: 60;
+}
+
+/* offsets are calculated in js */
+#mc-modal-body.mc-image {
+
+}
+
+#mc-modal-body.mc-large {
+ top: 10%;
+ bottom: 10%;
+ right: 10%;
+ left: 10%;
+}
+
+#mc-modal-body.mc-small {
+ padding: 1em 1.5em;
+ margin: 0;
+ top: 10%;
+ bottom: 10%;
+ right: 10%;
+ left: 10%;
+ overflow: scroll;
+}
+
+#mc-modal-body.mc-xtra-small {
+ padding: 1em 1.5em;
+ margin: 0;
+ top: 15%;
+ bottom: 15%;
+ right: 15%;
+ left: 15%;
+ overflow: scroll;
+}
+
+@media ( min-width : 45em) {
+ #mc-modal-body.mc-small {
+ top: 15%;
+ bottom: 15%;
+ right: 15%;
+ left: 15%;
+ }
+ #mc-modal-body.mc-xtra-small {
+ top: 35%;
+ bottom: 35%;
+ right: 25%;
+ left: 25%;
+ }
+}
+
+@media ( min-width : 80em) {
+ #mc-modal-body.mc-small {
+ top: 25%;
+ bottom: 25%;
+ right: 25%;
+ left: 25%;
+ }
+ #mc-modal-body.mc-xtra-small {
+ top: 35%;
+ bottom: 35%;
+ right: 30%;
+ left: 30%;
+ }
+}
+
+/* modal close button */
+button#mc-modal-close {
+ position: absolute;
+ background-color: white;
+ color: black;
+ top: 0.1em;
+ right: 0.1em;
+ cursor: pointer;
+ font-size: 2em;
+ height: 1em;
+ width: 1em;
+ text-indent: 10em;
+ overflow: hidden;
+ border: 0;
+}
+
+/* modal close button */
+#mc-modal-buttons {
+ position: absolute;
+ bottom: 1em;
+ left: 3em;
+ padding: 0.3em;
+ border: 0;
+}
+
+#mc-modal-close::after {
+ position: absolute;
+ line-height: 0.5;
+ top: 0.2em;
+ left: 0.1em;
+ text-indent: 0;
+ content: "\00D7";
+}
+
+/* spinner */
+#mc-loading {
+ position: fixed;
+ display: none;
+ top: 49%;
+ left: 49%;
+} \ No newline at end of file
diff --git a/static/css/ss.css b/static/css/ss.css
new file mode 100644
index 0000000..09e0efb
--- /dev/null
+++ b/static/css/ss.css
@@ -0,0 +1,55 @@
+
+.mc-ss-input {
+ width: 90%;
+ font-size: 1.1rem;
+ min-height: 2.2em;
+ text-align: left;
+ margin: 0.5em;
+}
+
+.mc-ss-main-panel table {
+ margin: 2em 0;
+}
+
+.mc-ss-main-panel table td {
+ padding: 0.7em 0.3em;
+ font-size: 0.9rem;
+}
+
+.mc-ss-table th.mc-sortable:hover {
+ text-decoration: underline;
+ cursor: pointer;
+}
+
+.mc-table-bit-map, .mc-ss-table {
+ border-collapse: collapse;
+ width: 80%;
+ margin: 0 auto;
+}
+
+.mc-table-basic-no-border th, .mc-table-basic th {
+ font-weight: bold;
+}
+
+.mc-ss-table {
+ border: 1px solid black;
+ padding: 0.3em;
+ text-decoration: underline;
+ cursor: pointer;
+}
+
+.mc-ss-table th {
+ border: 1px solid black;
+ padding: 0.3em;
+}
+
+
+.mc-ss-table td {
+ border: 1px solid black;
+ padding: 0.3em;
+}
+
+.mc-table-bit-map td {
+ border: 1px solid black;
+ padding: 0.3em;
+} \ No newline at end of file
diff --git a/static/images/favicon.ico b/static/images/favicon.ico
new file mode 100644
index 0000000..bc6bda5
--- /dev/null
+++ b/static/images/favicon.ico
Binary files differ
diff --git a/static/images/icons-svg/action-black.svg b/static/images/icons-svg/action-black.svg
new file mode 100644
index 0000000..20048d8
--- /dev/null
+++ b/static/images/icons-svg/action-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve">
+<path d="M9,5v3l5-4L9,0v3c0,0-5,0-5,7C6,5,9,5,9,5z M11,11H2V5h1l2-2H0v10h13V7l-2,2V11z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/action-white.svg b/static/images/icons-svg/action-white.svg
new file mode 100644
index 0000000..23da40d
--- /dev/null
+++ b/static/images/icons-svg/action-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve">
+<path fill="#FFF" d="M9,5v3l5-4L9,0v3c0,0-5,0-5,7C6,5,9,5,9,5z M11,11H2V5h1l2-2H0v10h13V7l-2,2V11z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/alert-black.svg b/static/images/icons-svg/alert-black.svg
new file mode 100644
index 0000000..d4179fe
--- /dev/null
+++ b/static/images/icons-svg/alert-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve">
+<path d="M7,0L0,12h14L7,0z M7,11c-0.553,0-1-0.447-1-1s0.447-1,1-1s1,0.447,1,1S7.553,11,7,11z M7,8C6.447,8,6,7.553,6,7V5
+ c0-0.553,0.447-1,1-1s1,0.447,1,1v2C8,7.553,7.553,8,7,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/alert-white.svg b/static/images/icons-svg/alert-white.svg
new file mode 100644
index 0000000..ff06604
--- /dev/null
+++ b/static/images/icons-svg/alert-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve">
+<path fill="#FFF" d="M7,0L0,12h14L7,0z M7,11c-0.553,0-1-0.447-1-1s0.447-1,1-1s1,0.447,1,1S7.553,11,7,11z M7,8C6.447,8,6,7.553,6,7V5
+ c0-0.553,0.447-1,1-1s1,0.447,1,1v2C8,7.553,7.553,8,7,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-d-black.svg b/static/images/icons-svg/arrow-d-black.svg
new file mode 100644
index 0000000..7a8b7de
--- /dev/null
+++ b/static/images/icons-svg/arrow-d-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="9,7 9,0 5,0 5,7 0,7 7,14 14,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-d-l-black.svg b/static/images/icons-svg/arrow-d-l-black.svg
new file mode 100644
index 0000000..8c8d305
--- /dev/null
+++ b/static/images/icons-svg/arrow-d-l-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="14,3 11,0 3.5,7.5 0,4 0,14 10,14 6.5,10.5 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-d-l-white.svg b/static/images/icons-svg/arrow-d-l-white.svg
new file mode 100644
index 0000000..f7379cd
--- /dev/null
+++ b/static/images/icons-svg/arrow-d-l-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="14,3 11,0 3.5,7.5 0,4 0,14 10,14 6.5,10.5 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-d-r-black.svg b/static/images/icons-svg/arrow-d-r-black.svg
new file mode 100644
index 0000000..95861e0
--- /dev/null
+++ b/static/images/icons-svg/arrow-d-r-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="10.5,7.5 3,0 0,3 7.5,10.5 4,14 14,14 14,4 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-d-r-white.svg b/static/images/icons-svg/arrow-d-r-white.svg
new file mode 100644
index 0000000..7874ca8
--- /dev/null
+++ b/static/images/icons-svg/arrow-d-r-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="10.5,7.5 3,0 0,3 7.5,10.5 4,14 14,14 14,4 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-d-white.svg b/static/images/icons-svg/arrow-d-white.svg
new file mode 100644
index 0000000..f80ad1b
--- /dev/null
+++ b/static/images/icons-svg/arrow-d-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="9,7 9,0 5,0 5,7 0,7 7,14 14,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-l-black.svg b/static/images/icons-svg/arrow-l-black.svg
new file mode 100644
index 0000000..0190649
--- /dev/null
+++ b/static/images/icons-svg/arrow-l-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="7,5 7,0 0,7 7,14 7,9 14,9 14,5 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-l-white.svg b/static/images/icons-svg/arrow-l-white.svg
new file mode 100644
index 0000000..d9de81d
--- /dev/null
+++ b/static/images/icons-svg/arrow-l-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="7,5 7,0 0,7 7,14 7,9 14,9 14,5 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-r-black.svg b/static/images/icons-svg/arrow-r-black.svg
new file mode 100644
index 0000000..7853c5f
--- /dev/null
+++ b/static/images/icons-svg/arrow-r-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="14,7 7,0 7,5 0,5 0,9 7,9 7,14 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-r-white.svg b/static/images/icons-svg/arrow-r-white.svg
new file mode 100644
index 0000000..8c28fc7
--- /dev/null
+++ b/static/images/icons-svg/arrow-r-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="14,7 7,0 7,5 0,5 0,9 7,9 7,14 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-u-black.svg b/static/images/icons-svg/arrow-u-black.svg
new file mode 100644
index 0000000..abf9d90
--- /dev/null
+++ b/static/images/icons-svg/arrow-u-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="7,0 0,7 5,7 5,14 9,14 9,7 14,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-u-l-black.svg b/static/images/icons-svg/arrow-u-l-black.svg
new file mode 100644
index 0000000..08b5c6d
--- /dev/null
+++ b/static/images/icons-svg/arrow-u-l-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="14,11 6.5,3.5 10,0 0,0 0,10 3.5,6.5 11,14 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-u-l-white.svg b/static/images/icons-svg/arrow-u-l-white.svg
new file mode 100644
index 0000000..234471e
--- /dev/null
+++ b/static/images/icons-svg/arrow-u-l-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="14,11 6.5,3.5 10,0 0,0 0,10 3.5,6.5 11,14 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-u-r-black.svg b/static/images/icons-svg/arrow-u-r-black.svg
new file mode 100644
index 0000000..db1536d
--- /dev/null
+++ b/static/images/icons-svg/arrow-u-r-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="14,0 4,0 7.5,3.5 0,11 3,14 10.5,6.5 14,10 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-u-r-white.svg b/static/images/icons-svg/arrow-u-r-white.svg
new file mode 100644
index 0000000..5a510f2
--- /dev/null
+++ b/static/images/icons-svg/arrow-u-r-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="14,0 4,0 7.5,3.5 0,11 3,14 10.5,6.5 14,10 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/arrow-u-white.svg b/static/images/icons-svg/arrow-u-white.svg
new file mode 100644
index 0000000..7e2aeb2
--- /dev/null
+++ b/static/images/icons-svg/arrow-u-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="7,0 0,7 5,7 5,14 9,14 9,7 14,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/audio-black.svg b/static/images/icons-svg/audio-black.svg
new file mode 100644
index 0000000..f3651d7
--- /dev/null
+++ b/static/images/icons-svg/audio-black.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14.018px" height="14px" viewBox="0 0 14.018 14" style="enable-background:new 0 0 14.018 14;" xml:space="preserve">
+<path d="M1,4C0.447,4,0,4.447,0,5v4c0,0.553,0.447,1,1,1h1l4,4V0L2,4H1z M10.346,7c0-1.699-1.042-3.154-2.546-3.867L6.982,4.68
+ C7.885,5.107,8.51,5.98,8.51,7S7.885,8.893,6.982,9.32L7.8,10.867C9.304,10.154,10.346,8.699,10.346,7z M9.447,0.017L8.618,1.586
+ C10.723,2.584,12.182,4.621,12.182,7s-1.459,4.416-3.563,5.414l0.829,1.569c2.707-1.283,4.57-3.925,4.57-6.983
+ S12.154,1.3,9.447,0.017z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/audio-white.svg b/static/images/icons-svg/audio-white.svg
new file mode 100644
index 0000000..a689699
--- /dev/null
+++ b/static/images/icons-svg/audio-white.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14.018px" height="14px" viewBox="0 0 14.018 14" style="enable-background:new 0 0 14.018 14;" xml:space="preserve">
+<path fill="#FFF" d="M1,4C0.447,4,0,4.447,0,5v4c0,0.553,0.447,1,1,1h1l4,4V0L2,4H1z M10.346,7c0-1.699-1.042-3.154-2.546-3.867L6.982,4.68
+ C7.885,5.107,8.51,5.98,8.51,7S7.885,8.893,6.982,9.32L7.8,10.867C9.304,10.154,10.346,8.699,10.346,7z M9.447,0.017L8.618,1.586
+ C10.723,2.584,12.182,4.621,12.182,7s-1.459,4.416-3.563,5.414l0.829,1.569c2.707-1.283,4.57-3.925,4.57-6.983
+ S12.154,1.3,9.447,0.017z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/back-black.svg b/static/images/icons-svg/back-black.svg
new file mode 100644
index 0000000..d6f928a
--- /dev/null
+++ b/static/images/icons-svg/back-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path d="M4,3V0L0,4l4,4V5c0,0,6,0,6,3s-5,4-5,4v2c0,0,7-1,7-6C12,4,7,3,4,3z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/back-white.svg b/static/images/icons-svg/back-white.svg
new file mode 100644
index 0000000..b34d43b
--- /dev/null
+++ b/static/images/icons-svg/back-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path fill="#FFF" d="M4,3V0L0,4l4,4V5c0,0,6,0,6,3s-5,4-5,4v2c0,0,7-1,7-6C12,4,7,3,4,3z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/bars-black.svg b/static/images/icons-svg/bars-black.svg
new file mode 100644
index 0000000..1aebe36
--- /dev/null
+++ b/static/images/icons-svg/bars-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path d="M1,2h12c0.553,0,1-0.447,1-1s-0.447-1-1-1H1C0.447,0,0,0.447,0,1S0.447,2,1,2z M13,4H1C0.447,4,0,4.447,0,5s0.447,1,1,1h12
+ c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H1C0.447,8,0,8.447,0,9s0.447,1,1,1h12c0.553,0,1-0.447,1-1S13.553,8,13,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/bars-white.svg b/static/images/icons-svg/bars-white.svg
new file mode 100644
index 0000000..98cd320
--- /dev/null
+++ b/static/images/icons-svg/bars-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path fill="#FFF" d="M1,2h12c0.553,0,1-0.447,1-1s-0.447-1-1-1H1C0.447,0,0,0.447,0,1S0.447,2,1,2z M13,4H1C0.447,4,0,4.447,0,5s0.447,1,1,1h12
+ c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H1C0.447,8,0,8.447,0,9s0.447,1,1,1h12c0.553,0,1-0.447,1-1S13.553,8,13,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/bullets-black.svg b/static/images/icons-svg/bullets-black.svg
new file mode 100644
index 0000000..3bf9680
--- /dev/null
+++ b/static/images/icons-svg/bullets-black.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path d="M5,2h8c0.553,0,1-0.447,1-1s-0.447-1-1-1H5C4.447,0,4,0.447,4,1S4.447,2,5,2z M13,4H5C4.447,4,4,4.447,4,5s0.447,1,1,1h8
+ c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H5C4.447,8,4,8.447,4,9s0.447,1,1,1h8c0.553,0,1-0.447,1-1S13.553,8,13,8z M1,0
+ C0.447,0,0,0.447,0,1s0.447,1,1,1s1-0.447,1-1S1.553,0,1,0z M1,4C0.447,4,0,4.447,0,5s0.447,1,1,1s1-0.447,1-1S1.553,4,1,4z M1,8
+ C0.447,8,0,8.447,0,9s0.447,1,1,1s1-0.447,1-1S1.553,8,1,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/bullets-white.svg b/static/images/icons-svg/bullets-white.svg
new file mode 100644
index 0000000..ecc4f95
--- /dev/null
+++ b/static/images/icons-svg/bullets-white.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path fill="#FFF" d="M5,2h8c0.553,0,1-0.447,1-1s-0.447-1-1-1H5C4.447,0,4,0.447,4,1S4.447,2,5,2z M13,4H5C4.447,4,4,4.447,4,5s0.447,1,1,1h8
+ c0.553,0,1-0.447,1-1S13.553,4,13,4z M13,8H5C4.447,8,4,8.447,4,9s0.447,1,1,1h8c0.553,0,1-0.447,1-1S13.553,8,13,8z M1,0
+ C0.447,0,0,0.447,0,1s0.447,1,1,1s1-0.447,1-1S1.553,0,1,0z M1,4C0.447,4,0,4.447,0,5s0.447,1,1,1s1-0.447,1-1S1.553,4,1,4z M1,8
+ C0.447,8,0,8.447,0,9s0.447,1,1,1s1-0.447,1-1S1.553,8,1,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/calendar-black.svg b/static/images/icons-svg/calendar-black.svg
new file mode 100644
index 0000000..5c3aede
--- /dev/null
+++ b/static/images/icons-svg/calendar-black.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M0,8h2V6H0V8z M3,8h2V6H3V8z M6,8h2V6H6V8z M9,8h2V6H9V8z M12,8h2V6h-2V8z M0,11h2V9H0V11z M3,11h2V9H3V11z M6,11h2V9H6V11z
+ M9,11h2V9H9V11z M12,11h2V9h-2V11z M0,14h2v-2H0V14z M3,14h2v-2H3V14z M6,14h2v-2H6V14z M9,14h2v-2H9V14z M12,1
+ c0-0.553-0.447-1-1-1s-1,0.447-1,1H4c0-0.553-0.447-1-1-1S2,0.447,2,1H0v4h14V1H12z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/calendar-white.svg b/static/images/icons-svg/calendar-white.svg
new file mode 100644
index 0000000..177dab9
--- /dev/null
+++ b/static/images/icons-svg/calendar-white.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M0,8h2V6H0V8z M3,8h2V6H3V8z M6,8h2V6H6V8z M9,8h2V6H9V8z M12,8h2V6h-2V8z M0,11h2V9H0V11z M3,11h2V9H3V11z M6,11h2V9H6V11z
+ M9,11h2V9H9V11z M12,11h2V9h-2V11z M0,14h2v-2H0V14z M3,14h2v-2H3V14z M6,14h2v-2H6V14z M9,14h2v-2H9V14z M12,1
+ c0-0.553-0.447-1-1-1s-1,0.447-1,1H4c0-0.553-0.447-1-1-1S2,0.447,2,1H0v4h14V1H12z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/camera-black.svg b/static/images/icons-svg/camera-black.svg
new file mode 100644
index 0000000..865095d
--- /dev/null
+++ b/static/images/icons-svg/camera-black.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="11px" viewBox="0 0 14 11" style="enable-background:new 0 0 14 11;" xml:space="preserve">
+<path d="M12,1H9.908C9.702,0.419,9.152,0,8.5,0h-3C4.848,0,4.298,0.419,4.092,1H2C0.896,1,0,1.896,0,3v6c0,1.104,0.896,2,2,2h10
+ c1.104,0,2-0.896,2-2V3C14,1.896,13.104,1,12,1z M7,9C5.343,9,4,7.657,4,6s1.343-3,3-3s3,1.343,3,3S8.657,9,7,9z M7,4
+ C5.896,4,5,4.896,5,6s0.896,2,2,2s2-0.896,2-2S8.104,4,7,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/camera-white.svg b/static/images/icons-svg/camera-white.svg
new file mode 100644
index 0000000..b84265c
--- /dev/null
+++ b/static/images/icons-svg/camera-white.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="11px" viewBox="0 0 14 11" style="enable-background:new 0 0 14 11;" xml:space="preserve">
+<path fill="#FFF" d="M12,1H9.908C9.702,0.419,9.152,0,8.5,0h-3C4.848,0,4.298,0.419,4.092,1H2C0.896,1,0,1.896,0,3v6c0,1.104,0.896,2,2,2h10
+ c1.104,0,2-0.896,2-2V3C14,1.896,13.104,1,12,1z M7,9C5.343,9,4,7.657,4,6s1.343-3,3-3s3,1.343,3,3S8.657,9,7,9z M7,4
+ C5.896,4,5,4.896,5,6s0.896,2,2,2s2-0.896,2-2S8.104,4,7,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-d-black.svg b/static/images/icons-svg/carat-d-black.svg
new file mode 100644
index 0000000..b6445a7
--- /dev/null
+++ b/static/images/icons-svg/carat-d-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve">
+<polygon points="10,0 6,4 2,0 0,2 6,8 12,2 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-d-white.svg b/static/images/icons-svg/carat-d-white.svg
new file mode 100644
index 0000000..4d6d185
--- /dev/null
+++ b/static/images/icons-svg/carat-d-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve">
+<polygon fill="#FFF" points="10,0 6,4 2,0 0,2 6,8 12,2 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-l-black.svg b/static/images/icons-svg/carat-l-black.svg
new file mode 100644
index 0000000..2c8b91f
--- /dev/null
+++ b/static/images/icons-svg/carat-l-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve">
+<polygon points="8,2 6,0 0,6 6,12 8,10 4,6 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-l-white.svg b/static/images/icons-svg/carat-l-white.svg
new file mode 100644
index 0000000..e18f613
--- /dev/null
+++ b/static/images/icons-svg/carat-l-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve">
+<polygon fill="#FFF" points="8,2 6,0 0,6 6,12 8,10 4,6 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-r-black.svg b/static/images/icons-svg/carat-r-black.svg
new file mode 100644
index 0000000..57cf497
--- /dev/null
+++ b/static/images/icons-svg/carat-r-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve">
+<polygon points="2,0 0,2 4,6 0,10 2,12 8,6 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-r-white.svg b/static/images/icons-svg/carat-r-white.svg
new file mode 100644
index 0000000..b034d95
--- /dev/null
+++ b/static/images/icons-svg/carat-r-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="8px" height="12px" viewBox="0 0 8 12" style="enable-background:new 0 0 8 12;" xml:space="preserve">
+<polygon fill="#FFF" points="2,0 0,2 4,6 0,10 2,12 8,6 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-u-black.svg b/static/images/icons-svg/carat-u-black.svg
new file mode 100644
index 0000000..533a739
--- /dev/null
+++ b/static/images/icons-svg/carat-u-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve">
+<polygon points="6,0 0,6 2,8 6,4 10,8 12,6 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/carat-u-white.svg b/static/images/icons-svg/carat-u-white.svg
new file mode 100644
index 0000000..670e48b
--- /dev/null
+++ b/static/images/icons-svg/carat-u-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="8px" viewBox="0 0 12 8" style="enable-background:new 0 0 12 8;" xml:space="preserve">
+<polygon fill="#FFF" points="6,0 0,6 2,8 6,4 10,8 12,6 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/check-black.svg b/static/images/icons-svg/check-black.svg
new file mode 100644
index 0000000..db5b715
--- /dev/null
+++ b/static/images/icons-svg/check-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve">
+<polygon points="14,3 11,0 5.003,5.997 3,4 0,7 4.966,12 4.983,11.983 5,12 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/check-white.svg b/static/images/icons-svg/check-white.svg
new file mode 100644
index 0000000..b257fd7
--- /dev/null
+++ b/static/images/icons-svg/check-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve">
+<polygon fill="#FFF" points="14,3 11,0 5.003,5.997 3,4 0,7 4.966,12 4.983,11.983 5,12 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/clock-black.svg b/static/images/icons-svg/clock-black.svg
new file mode 100644
index 0000000..c68abef
--- /dev/null
+++ b/static/images/icons-svg/clock-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,12c-2.762,0-5-2.238-5-5s2.238-5,5-5s5,2.238,5,5
+ S9.762,12,7,12z M9,6H8V4c0-0.553-0.447-1-1-1S6,3.447,6,4v3c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1S9.553,6,9,6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/clock-white.svg b/static/images/icons-svg/clock-white.svg
new file mode 100644
index 0000000..5589238
--- /dev/null
+++ b/static/images/icons-svg/clock-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,12c-2.762,0-5-2.238-5-5s2.238-5,5-5s5,2.238,5,5
+ S9.762,12,7,12z M9,6H8V4c0-0.553-0.447-1-1-1S6,3.447,6,4v3c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1S9.553,6,9,6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/cloud-black.svg b/static/images/icons-svg/cloud-black.svg
new file mode 100644
index 0000000..6fa55f4
--- /dev/null
+++ b/static/images/icons-svg/cloud-black.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="9px" viewBox="0 0 14 9" style="enable-background:new 0 0 14 9;" xml:space="preserve">
+<path d="M14,7c0-0.793-0.465-1.472-1.134-1.795C12.949,4.984,13,4.749,13,4.5c0-1.104-0.896-2-2-2c-0.158,0-0.31,0.023-0.457,0.058
+ C9.816,1.049,8.286,0,6.5,0C4.17,0,2.276,1.777,2.046,4.046C0.883,4.26,0,5.274,0,6.5C0,7.881,1.119,9,2.5,9h10V8.93
+ C13.361,8.706,14,7.931,14,7z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/cloud-white.svg b/static/images/icons-svg/cloud-white.svg
new file mode 100644
index 0000000..3e0bde3
--- /dev/null
+++ b/static/images/icons-svg/cloud-white.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="9px" viewBox="0 0 14 9" style="enable-background:new 0 0 14 9;" xml:space="preserve">
+<path fill="#FFF" d="M14,7c0-0.793-0.465-1.472-1.134-1.795C12.949,4.984,13,4.749,13,4.5c0-1.104-0.896-2-2-2c-0.158,0-0.31,0.023-0.457,0.058
+ C9.816,1.049,8.286,0,6.5,0C4.17,0,2.276,1.777,2.046,4.046C0.883,4.26,0,5.274,0,6.5C0,7.881,1.119,9,2.5,9h10V8.93
+ C13.361,8.706,14,7.931,14,7z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/comment-black.svg b/static/images/icons-svg/comment-black.svg
new file mode 100644
index 0000000..485fcc8
--- /dev/null
+++ b/static/images/icons-svg/comment-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M12,0H2C0.896,0,0,0.896,0,2v7c0,1.104,0.896,2,2,2h1v3l3-3h6c1.104,0,2-0.896,2-2V2C14,0.896,13.104,0,12,0z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/comment-white.svg b/static/images/icons-svg/comment-white.svg
new file mode 100644
index 0000000..8d188db
--- /dev/null
+++ b/static/images/icons-svg/comment-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M12,0H2C0.896,0,0,0.896,0,2v7c0,1.104,0.896,2,2,2h1v3l3-3h6c1.104,0,2-0.896,2-2V2C14,0.896,13.104,0,12,0z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/delete-black.svg b/static/images/icons-svg/delete-black.svg
new file mode 100644
index 0000000..74d9988
--- /dev/null
+++ b/static/images/icons-svg/delete-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="14,3 11,0 7,4 3,0 0,3 4,7 0,11 3,14 7,10 11,14 14,11 10,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/delete-white.svg b/static/images/icons-svg/delete-white.svg
new file mode 100644
index 0000000..a6cc735
--- /dev/null
+++ b/static/images/icons-svg/delete-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="14,3 11,0 7,4 3,0 0,3 4,7 0,11 3,14 7,10 11,14 14,11 10,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/edit-black.svg b/static/images/icons-svg/edit-black.svg
new file mode 100644
index 0000000..d908f9d
--- /dev/null
+++ b/static/images/icons-svg/edit-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M1,10l-1,4l4-1l7-7L8,3L1,10z M11,0L9,2l3,3l2-2L11,0z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/edit-white.svg b/static/images/icons-svg/edit-white.svg
new file mode 100644
index 0000000..a88643d
--- /dev/null
+++ b/static/images/icons-svg/edit-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M1,10l-1,4l4-1l7-7L8,3L1,10z M11,0L9,2l3,3l2-2L11,0z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/eye-black.svg b/static/images/icons-svg/eye-black.svg
new file mode 100644
index 0000000..7f96a8e
--- /dev/null
+++ b/static/images/icons-svg/eye-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path d="M7,0C3,0,0,5,0,5s3,5,7,5s7-5,7-5S11,0,7,0z M7,8C5.343,8,4,6.657,4,5s1.343-3,3-3s3,1.343,3,3S8.657,8,7,8z M7,4
+ C6.448,4,6,4.447,6,5s0.448,1,1,1s1-0.447,1-1S7.552,4,7,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/eye-white.svg b/static/images/icons-svg/eye-white.svg
new file mode 100644
index 0000000..7b0d0e8
--- /dev/null
+++ b/static/images/icons-svg/eye-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path fill="#FFF" d="M7,0C3,0,0,5,0,5s3,5,7,5s7-5,7-5S11,0,7,0z M7,8C5.343,8,4,6.657,4,5s1.343-3,3-3s3,1.343,3,3S8.657,8,7,8z M7,4
+ C6.448,4,6,4.447,6,5s0.448,1,1,1s1-0.447,1-1S7.552,4,7,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/forbidden-black.svg b/static/images/icons-svg/forbidden-black.svg
new file mode 100644
index 0000000..fe831bc
--- /dev/null
+++ b/static/images/icons-svg/forbidden-black.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M12.601,11.187C13.476,10.018,14,8.572,14,7c0-3.866-3.134-7-7-7C5.428,0,3.982,0.524,2.813,1.399L2.757,1.343L2.053,2.048
+ L2.048,2.053L1.343,2.758l0.056,0.056C0.524,3.982,0,5.428,0,7c0,3.866,3.134,7,7,7c1.572,0,3.018-0.524,4.187-1.399l0.056,0.057
+ l0.705-0.705l0.005-0.005l0.705-0.705L12.601,11.187z M7,2c2.761,0,5,2.238,5,5c0,1.019-0.308,1.964-0.832,2.754L4.246,2.832
+ C5.036,2.308,5.981,2,7,2z M7,12c-2.761,0-5-2.238-5-5c0-1.019,0.308-1.964,0.832-2.754l6.922,6.922C8.964,11.692,8.019,12,7,12z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/forbidden-white.svg b/static/images/icons-svg/forbidden-white.svg
new file mode 100644
index 0000000..710ac39
--- /dev/null
+++ b/static/images/icons-svg/forbidden-white.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M12.601,11.187C13.476,10.018,14,8.572,14,7c0-3.866-3.134-7-7-7C5.428,0,3.982,0.524,2.813,1.399L2.757,1.343L2.053,2.048
+ L2.048,2.053L1.343,2.758l0.056,0.056C0.524,3.982,0,5.428,0,7c0,3.866,3.134,7,7,7c1.572,0,3.018-0.524,4.187-1.399l0.056,0.057
+ l0.705-0.705l0.005-0.005l0.705-0.705L12.601,11.187z M7,2c2.761,0,5,2.238,5,5c0,1.019-0.308,1.964-0.832,2.754L4.246,2.832
+ C5.036,2.308,5.981,2,7,2z M7,12c-2.761,0-5-2.238-5-5c0-1.019,0.308-1.964,0.832-2.754l6.922,6.922C8.964,11.692,8.019,12,7,12z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/forward-black.svg b/static/images/icons-svg/forward-black.svg
new file mode 100644
index 0000000..35af7b6
--- /dev/null
+++ b/static/images/icons-svg/forward-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path d="M12,4L8,0v3C5,3,0,4,0,8c0,5,7,6,7,6v-2c0,0-5-1-5-4s6-3,6-3v3L12,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/forward-white.svg b/static/images/icons-svg/forward-white.svg
new file mode 100644
index 0000000..5cd2def
--- /dev/null
+++ b/static/images/icons-svg/forward-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path fill="#FFF" d="M12,4L8,0v3C5,3,0,4,0,8c0,5,7,6,7,6v-2c0,0-5-1-5-4s6-3,6-3v3L12,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/gear-black.svg b/static/images/icons-svg/gear-black.svg
new file mode 100644
index 0000000..4f397c5
--- /dev/null
+++ b/static/images/icons-svg/gear-black.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M13.621,5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82
+ c-0.079-0.153-0.073-0.337,0.017-0.486l0.549-0.915c0.118-0.196,0.088-0.448-0.075-0.61l-0.862-0.863
+ c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916,0.55C9.844,2.182,9.659,2.188,9.506,2.109C9.244,1.975,8.97,1.861,8.686,1.77
+ c-0.165-0.052-0.29-0.187-0.332-0.354L8.095,0.379C8.039,0.156,7.839,0,7.609,0H6.391c-0.229,0-0.43,0.156-0.485,0.379L5.646,1.415
+ C5.604,1.582,5.479,1.718,5.313,1.77c-0.284,0.092-0.559,0.206-0.82,0.34C4.339,2.188,4.155,2.182,4.007,2.093L3.092,1.544
+ c-0.196-0.118-0.448-0.087-0.61,0.075L1.619,2.481C1.457,2.644,1.426,2.896,1.544,3.093l0.549,0.914
+ c0.089,0.148,0.095,0.332,0.017,0.486C1.975,4.755,1.861,5.029,1.77,5.314c-0.053,0.164-0.188,0.29-0.354,0.332L0.379,5.905
+ C0.156,5.961,0,6.161,0,6.391v1.219c0,0.229,0.156,0.43,0.379,0.485l1.036,0.26C1.582,8.396,1.717,8.521,1.77,8.687
+ c0.092,0.284,0.205,0.559,0.34,0.82C2.188,9.66,2.182,9.844,2.093,9.993l-0.549,0.915c-0.118,0.195-0.087,0.448,0.075,0.61
+ l0.862,0.862c0.162,0.163,0.414,0.193,0.61,0.075l0.915-0.549c0.148-0.089,0.332-0.095,0.486-0.017
+ c0.262,0.135,0.536,0.248,0.82,0.34c0.165,0.053,0.291,0.187,0.332,0.354l0.259,1.036C5.96,13.844,6.16,14,6.39,14h1.22
+ c0.229,0,0.43-0.156,0.485-0.379l0.259-1.036c0.042-0.167,0.168-0.302,0.333-0.354c0.284-0.092,0.559-0.205,0.82-0.34
+ c0.154-0.078,0.338-0.072,0.486,0.017l0.914,0.549c0.197,0.118,0.449,0.088,0.611-0.074l0.862-0.863
+ c0.163-0.162,0.193-0.415,0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263,0.248-0.536,0.339-0.82
+ c0.053-0.165,0.188-0.291,0.355-0.333l1.036-0.259C13.844,8.039,14,7.839,14,7.609V6.39C14,6.16,13.844,5.96,13.621,5.904z M7,10
+ c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S8.657,10,7,10z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/gear-white.svg b/static/images/icons-svg/gear-white.svg
new file mode 100644
index 0000000..3a5668f
--- /dev/null
+++ b/static/images/icons-svg/gear-white.svg
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M13.621,5.904l-1.036-0.259c-0.168-0.042-0.303-0.168-0.355-0.332c-0.092-0.284-0.205-0.559-0.339-0.82
+ c-0.079-0.153-0.073-0.337,0.017-0.486l0.549-0.915c0.118-0.196,0.088-0.448-0.075-0.61l-0.862-0.863
+ c-0.162-0.163-0.414-0.193-0.611-0.075l-0.916,0.55C9.844,2.182,9.659,2.188,9.506,2.109C9.244,1.975,8.97,1.861,8.686,1.77
+ c-0.165-0.052-0.29-0.187-0.332-0.354L8.095,0.379C8.039,0.156,7.839,0,7.609,0H6.391c-0.229,0-0.43,0.156-0.485,0.379L5.646,1.415
+ C5.604,1.582,5.479,1.718,5.313,1.77c-0.284,0.092-0.559,0.206-0.82,0.34C4.339,2.188,4.155,2.182,4.007,2.093L3.092,1.544
+ c-0.196-0.118-0.448-0.087-0.61,0.075L1.619,2.481C1.457,2.644,1.426,2.896,1.544,3.093l0.549,0.914
+ c0.089,0.148,0.095,0.332,0.017,0.486C1.975,4.755,1.861,5.029,1.77,5.314c-0.053,0.164-0.188,0.29-0.354,0.332L0.379,5.905
+ C0.156,5.961,0,6.161,0,6.391v1.219c0,0.229,0.156,0.43,0.379,0.485l1.036,0.26C1.582,8.396,1.717,8.521,1.77,8.687
+ c0.092,0.284,0.205,0.559,0.34,0.82C2.188,9.66,2.182,9.844,2.093,9.993l-0.549,0.915c-0.118,0.195-0.087,0.448,0.075,0.61
+ l0.862,0.862c0.162,0.163,0.414,0.193,0.61,0.075l0.915-0.549c0.148-0.089,0.332-0.095,0.486-0.017
+ c0.262,0.135,0.536,0.248,0.82,0.34c0.165,0.053,0.291,0.187,0.332,0.354l0.259,1.036C5.96,13.844,6.16,14,6.39,14h1.22
+ c0.229,0,0.43-0.156,0.485-0.379l0.259-1.036c0.042-0.167,0.168-0.302,0.333-0.354c0.284-0.092,0.559-0.205,0.82-0.34
+ c0.154-0.078,0.338-0.072,0.486,0.017l0.914,0.549c0.197,0.118,0.449,0.088,0.611-0.074l0.862-0.863
+ c0.163-0.162,0.193-0.415,0.075-0.611l-0.549-0.915c-0.089-0.148-0.096-0.332-0.017-0.485c0.134-0.263,0.248-0.536,0.339-0.82
+ c0.053-0.165,0.188-0.291,0.355-0.333l1.036-0.259C13.844,8.039,14,7.839,14,7.609V6.39C14,6.16,13.844,5.96,13.621,5.904z M7,10
+ c-1.657,0-3-1.343-3-3s1.343-3,3-3s3,1.343,3,3S8.657,10,7,10z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/grid-black.svg b/static/images/icons-svg/grid-black.svg
new file mode 100644
index 0000000..e692e1f
--- /dev/null
+++ b/static/images/icons-svg/grid-black.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M3,0H1C0.447,0,0,0.447,0,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C4,0.447,3.553,0,3,0z M8,0H6
+ C5.447,0,5,0.447,5,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C9,0.447,8.553,0,8,0z M13,0h-2c-0.553,0-1,0.447-1,1v2
+ c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C14,0.447,13.553,0,13,0z M3,5H1C0.447,5,0,5.447,0,6v2c0,0.553,0.447,1,1,1h2
+ c0.553,0,1-0.447,1-1V6C4,5.447,3.553,5,3,5z M8,5H6C5.447,5,5,5.447,5,6v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6
+ C9,5.447,8.553,5,8,5z M13,5h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6C14,5.447,13.553,5,13,5z M3,10
+ H1c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C4,10.447,3.553,10,3,10z M8,10H6c-0.553,0-1,0.447-1,1v2
+ c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C9,10.447,8.553,10,8,10z M13,10h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2
+ c0.553,0,1-0.447,1-1v-2C14,10.447,13.553,10,13,10z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/grid-white.svg b/static/images/icons-svg/grid-white.svg
new file mode 100644
index 0000000..5cfaa7c
--- /dev/null
+++ b/static/images/icons-svg/grid-white.svg
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M3,0H1C0.447,0,0,0.447,0,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C4,0.447,3.553,0,3,0z M8,0H6
+ C5.447,0,5,0.447,5,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C9,0.447,8.553,0,8,0z M13,0h-2c-0.553,0-1,0.447-1,1v2
+ c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V1C14,0.447,13.553,0,13,0z M3,5H1C0.447,5,0,5.447,0,6v2c0,0.553,0.447,1,1,1h2
+ c0.553,0,1-0.447,1-1V6C4,5.447,3.553,5,3,5z M8,5H6C5.447,5,5,5.447,5,6v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6
+ C9,5.447,8.553,5,8,5z M13,5h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1V6C14,5.447,13.553,5,13,5z M3,10
+ H1c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C4,10.447,3.553,10,3,10z M8,10H6c-0.553,0-1,0.447-1,1v2
+ c0,0.553,0.447,1,1,1h2c0.553,0,1-0.447,1-1v-2C9,10.447,8.553,10,8,10z M13,10h-2c-0.553,0-1,0.447-1,1v2c0,0.553,0.447,1,1,1h2
+ c0.553,0,1-0.447,1-1v-2C14,10.447,13.553,10,13,10z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/heart-black.svg b/static/images/icons-svg/heart-black.svg
new file mode 100644
index 0000000..77373d5
--- /dev/null
+++ b/static/images/icons-svg/heart-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="13.744px" viewBox="0 0 14 13.744" style="enable-background:new 0 0 14 13.744;" xml:space="preserve">
+<path d="M7,1.744c-2-3-7-2-7,2c0,3,4,7,4,7s2.417,2.479,3,3c0.583-0.521,3-3,3-3s4-4,4-7C14-0.256,9-1.256,7,1.744z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/heart-white.svg b/static/images/icons-svg/heart-white.svg
new file mode 100644
index 0000000..48fd304
--- /dev/null
+++ b/static/images/icons-svg/heart-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="13.744px" viewBox="0 0 14 13.744" style="enable-background:new 0 0 14 13.744;" xml:space="preserve">
+<path fill="#FFF" d="M7,1.744c-2-3-7-2-7,2c0,3,4,7,4,7s2.417,2.479,3,3c0.583-0.521,3-3,3-3s4-4,4-7C14-0.256,9-1.256,7,1.744z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/home-black.svg b/static/images/icons-svg/home-black.svg
new file mode 100644
index 0000000..a4950a3
--- /dev/null
+++ b/static/images/icons-svg/home-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="7,0 0,7 2,7 2,14 5,14 5,9 9,9 9,14 12,14 12,7 14,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/home-white.svg b/static/images/icons-svg/home-white.svg
new file mode 100644
index 0000000..b7c1a61
--- /dev/null
+++ b/static/images/icons-svg/home-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="7,0 0,7 2,7 2,14 5,14 5,9 9,9 9,14 12,14 12,7 14,7 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/info-black.svg b/static/images/icons-svg/info-black.svg
new file mode 100644
index 0000000..151cfa2
--- /dev/null
+++ b/static/images/icons-svg/info-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,2c0.552,0,1,0.447,1,1S7.552,4,7,4S6,3.553,6,3
+ S6.448,2,7,2z M9,11H5v-1h1V6H5V5h3v5h1V11z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/info-white.svg b/static/images/icons-svg/info-white.svg
new file mode 100644
index 0000000..dd0f885
--- /dev/null
+++ b/static/images/icons-svg/info-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M7,0C3.134,0,0,3.134,0,7s3.134,7,7,7s7-3.134,7-7S10.866,0,7,0z M7,2c0.552,0,1,0.447,1,1S7.552,4,7,4S6,3.553,6,3
+ S6.448,2,7,2z M9,11H5v-1h1V6H5V5h3v5h1V11z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/location-black.svg b/static/images/icons-svg/location-black.svg
new file mode 100644
index 0000000..16a59b8
--- /dev/null
+++ b/static/images/icons-svg/location-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="8px" height="14px" viewBox="0 0 8 14" style="enable-background:new 0 0 8 14;" xml:space="preserve">
+<path d="M4,0C1.791,0,0,1.791,0,4c0,2,4,10,4,10S8,6,8,4C8,1.791,6.209,0,4,0z M4,6C2.896,6,2,5.104,2,4s0.896-2,2-2s2,0.896,2,2
+ S5.104,6,4,6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/location-white.svg b/static/images/icons-svg/location-white.svg
new file mode 100644
index 0000000..ce48397
--- /dev/null
+++ b/static/images/icons-svg/location-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="8px" height="14px" viewBox="0 0 8 14" style="enable-background:new 0 0 8 14;" xml:space="preserve">
+<path fill="#FFF" d="M4,0C1.791,0,0,1.791,0,4c0,2,4,10,4,10S8,6,8,4C8,1.791,6.209,0,4,0z M4,6C2.896,6,2,5.104,2,4s0.896-2,2-2s2,0.896,2,2
+ S5.104,6,4,6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/lock-black.svg b/static/images/icons-svg/lock-black.svg
new file mode 100644
index 0000000..deb3d48
--- /dev/null
+++ b/static/images/icons-svg/lock-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path d="M11,6V5c0-2.762-2.239-5-5-5S1,2.238,1,5v1H0v8h12V6H11z M6.5,9.847V12h-1V9.847C5.207,9.673,5,9.366,5,9
+ c0-0.553,0.448-1,1-1s1,0.447,1,1C7,9.366,6.793,9.673,6.5,9.847z M9,6H3V5c0-1.657,1.343-3,3-3s3,1.343,3,3V6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/lock-white.svg b/static/images/icons-svg/lock-white.svg
new file mode 100644
index 0000000..543cfbb
--- /dev/null
+++ b/static/images/icons-svg/lock-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path fill="#FFF" d="M11,6V5c0-2.762-2.239-5-5-5S1,2.238,1,5v1H0v8h12V6H11z M6.5,9.847V12h-1V9.847C5.207,9.673,5,9.366,5,9
+ c0-0.553,0.448-1,1-1s1,0.447,1,1C7,9.366,6.793,9.673,6.5,9.847z M9,6H3V5c0-1.657,1.343-3,3-3s3,1.343,3,3V6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/mail-black.svg b/static/images/icons-svg/mail-black.svg
new file mode 100644
index 0000000..827e298
--- /dev/null
+++ b/static/images/icons-svg/mail-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path d="M0,1.75V10h14V1.75L7,7L0,1.75z M14,0H0l7,5L14,0z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/mail-white.svg b/static/images/icons-svg/mail-white.svg
new file mode 100644
index 0000000..2f0b717
--- /dev/null
+++ b/static/images/icons-svg/mail-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path fill="#FFF" d="M0,1.75V10h14V1.75L7,7L0,1.75z M14,0H0l7,5L14,0z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/minus-black.svg b/static/images/icons-svg/minus-black.svg
new file mode 100644
index 0000000..cd8aec9
--- /dev/null
+++ b/static/images/icons-svg/minus-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="4px" viewBox="0 0 14 4" style="enable-background:new 0 0 14 4;" xml:space="preserve">
+<rect width="14" height="4"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/minus-white.svg b/static/images/icons-svg/minus-white.svg
new file mode 100644
index 0000000..1e33c63
--- /dev/null
+++ b/static/images/icons-svg/minus-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="4px" viewBox="0 0 14 4" style="enable-background:new 0 0 14 4;" xml:space="preserve">
+<rect fill="#FFF" width="14" height="4"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/navigation-black.svg b/static/images/icons-svg/navigation-black.svg
new file mode 100644
index 0000000..a09c35e
--- /dev/null
+++ b/static/images/icons-svg/navigation-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="14,0 0,6 8,6 8,14 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/navigation-white.svg b/static/images/icons-svg/navigation-white.svg
new file mode 100644
index 0000000..38e99c3
--- /dev/null
+++ b/static/images/icons-svg/navigation-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="14,0 0,6 8,6 8,14 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/phone-black.svg b/static/images/icons-svg/phone-black.svg
new file mode 100644
index 0000000..4879050
--- /dev/null
+++ b/static/images/icons-svg/phone-black.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="13.979px" height="14.016px" viewBox="0 0 13.979 14.016" style="enable-background:new 0 0 13.979 14.016;"
+ xml:space="preserve">
+<path d="M6.939,9.189C6.165,8.557,5.271,7.705,4.497,6.744C3.953,6.071,3.473,5.363,3.969,4.866l-3.482-3.48
+ C-0.021,2.02-1.146,5.04,3.675,9.984c5.08,5.211,8.356,4.096,8.92,3.51l-3.396-3.4C8.725,10.568,8.113,10.146,6.939,9.189z
+ M13.82,11.519v-0.004c0,0-2.649-2.646-2.65-2.648c-0.21-0.21-0.546-0.205-0.754,0.002L9.455,9.831l3.404,3.408
+ c0,0,0.962-0.96,0.961-0.961l0.002-0.001C14.043,12.056,14.021,11.721,13.82,11.519z M5.192,3.644V3.642
+ c0.221-0.222,0.2-0.557,0-0.758V2.881c0,0-2.726-2.724-2.727-2.725C2.255-0.055,1.92-0.05,1.712,0.157L0.751,1.121l3.48,3.483
+ C4.231,4.604,5.192,3.645,5.192,3.644z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/phone-white.svg b/static/images/icons-svg/phone-white.svg
new file mode 100644
index 0000000..d180382
--- /dev/null
+++ b/static/images/icons-svg/phone-white.svg
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="13.979px" height="14.016px" viewBox="0 0 13.979 14.016" style="enable-background:new 0 0 13.979 14.016;"
+ xml:space="preserve">
+<path fill="#FFF" d="M6.939,9.189C6.165,8.557,5.271,7.705,4.497,6.744C3.953,6.071,3.473,5.363,3.969,4.866l-3.482-3.48
+ C-0.021,2.02-1.146,5.04,3.675,9.984c5.08,5.211,8.356,4.096,8.92,3.51l-3.396-3.4C8.725,10.568,8.113,10.146,6.939,9.189z
+ M13.82,11.519v-0.004c0,0-2.649-2.646-2.65-2.648c-0.21-0.21-0.546-0.205-0.754,0.002L9.455,9.831l3.404,3.408
+ c0,0,0.962-0.96,0.961-0.961l0.002-0.001C14.043,12.056,14.021,11.721,13.82,11.519z M5.192,3.644V3.642
+ c0.221-0.222,0.2-0.557,0-0.758V2.881c0,0-2.726-2.724-2.727-2.725C2.255-0.055,1.92-0.05,1.712,0.157L0.751,1.121l3.48,3.483
+ C4.231,4.604,5.192,3.645,5.192,3.644z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/plus-black.svg b/static/images/icons-svg/plus-black.svg
new file mode 100644
index 0000000..2e268b0
--- /dev/null
+++ b/static/images/icons-svg/plus-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon points="14,5 9,5 9,0 5,0 5,5 0,5 0,9 5,9 5,14 9,14 9,9 14,9 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/plus-white.svg b/static/images/icons-svg/plus-white.svg
new file mode 100644
index 0000000..488129f
--- /dev/null
+++ b/static/images/icons-svg/plus-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<polygon fill="#FFF" points="14,5 9,5 9,0 5,0 5,5 0,5 0,9 5,9 5,14 9,14 9,9 14,9 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/power-black.svg b/static/images/icons-svg/power-black.svg
new file mode 100644
index 0000000..c078e27
--- /dev/null
+++ b/static/images/icons-svg/power-black.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="13.896px" viewBox="0 0 12 13.896" style="enable-background:new 0 0 12 13.896;" xml:space="preserve">
+<path d="M10.243,3.356c-0.392-0.401-1.024-0.401-1.415,0c-0.39,0.402-0.39,1.054,0,1.455C9.584,5.59,10,6.623,10,7.722
+ c0,1.1-0.416,2.133-1.172,2.911c-1.511,1.556-4.145,1.556-5.656,0C2.416,9.854,2,8.821,2,7.722c0-1.099,0.416-2.132,1.172-2.91
+ c0.39-0.401,0.39-1.053,0-1.455c-0.391-0.401-1.024-0.401-1.415,0C0.624,4.522,0,6.073,0,7.722c0,1.649,0.624,3.2,1.757,4.366
+ C2.891,13.254,4.397,13.896,6,13.896s3.109-0.643,4.243-1.809C11.376,10.922,12,9.371,12,7.722C12,6.073,11.376,4.522,10.243,3.356z
+ M6,8c0.553,0,1-0.447,1-1V1c0-0.553-0.447-1-1-1S5,0.447,5,1v6C5,7.553,5.447,8,6,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/power-white.svg b/static/images/icons-svg/power-white.svg
new file mode 100644
index 0000000..aa5a7a1
--- /dev/null
+++ b/static/images/icons-svg/power-white.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="13.896px" viewBox="0 0 12 13.896" style="enable-background:new 0 0 12 13.896;" xml:space="preserve">
+<path fill="#FFF" d="M10.243,3.356c-0.392-0.401-1.024-0.401-1.415,0c-0.39,0.402-0.39,1.054,0,1.455C9.584,5.59,10,6.623,10,7.722
+ c0,1.1-0.416,2.133-1.172,2.911c-1.511,1.556-4.145,1.556-5.656,0C2.416,9.854,2,8.821,2,7.722c0-1.099,0.416-2.132,1.172-2.91
+ c0.39-0.401,0.39-1.053,0-1.455c-0.391-0.401-1.024-0.401-1.415,0C0.624,4.522,0,6.073,0,7.722c0,1.649,0.624,3.2,1.757,4.366
+ C2.891,13.254,4.397,13.896,6,13.896s3.109-0.643,4.243-1.809C11.376,10.922,12,9.371,12,7.722C12,6.073,11.376,4.522,10.243,3.356z
+ M6,8c0.553,0,1-0.447,1-1V1c0-0.553-0.447-1-1-1S5,0.447,5,1v6C5,7.553,5.447,8,6,8z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/recycle-black.svg b/static/images/icons-svg/recycle-black.svg
new file mode 100644
index 0000000..c481e29
--- /dev/null
+++ b/static/images/icons-svg/recycle-black.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve">
+<path d="M3,6h1L2,3L0,6h1c0,3.313,2.687,6,6,6c0.702,0,1.374-0.127,2-0.349V9.445C8.41,9.789,7.732,10,7,10C4.791,10,3,8.209,3,6z
+ M13,6c0-3.313-2.687-6-6-6C6.298,0,5.626,0.127,5,0.349v2.206C5.59,2.211,6.268,2,7,2c2.209,0,4,1.791,4,4h-1l2,3l2-3H13z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/recycle-white.svg b/static/images/icons-svg/recycle-white.svg
new file mode 100644
index 0000000..11b9c12
--- /dev/null
+++ b/static/images/icons-svg/recycle-white.svg
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="12px" viewBox="0 0 14 12" style="enable-background:new 0 0 14 12;" xml:space="preserve">
+<path fill="#FFF" d="M3,6h1L2,3L0,6h1c0,3.313,2.687,6,6,6c0.702,0,1.374-0.127,2-0.349V9.445C8.41,9.789,7.732,10,7,10C4.791,10,3,8.209,3,6z
+ M13,6c0-3.313-2.687-6-6-6C6.298,0,5.626,0.127,5,0.349v2.206C5.59,2.211,6.268,2,7,2c2.209,0,4,1.791,4,4h-1l2,3l2-3H13z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/refresh-black.svg b/static/images/icons-svg/refresh-black.svg
new file mode 100644
index 0000000..16c978c
--- /dev/null
+++ b/static/images/icons-svg/refresh-black.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14.001px" height="14.002px" viewBox="0 0 14.001 14.002" style="enable-background:new 0 0 14.001 14.002;"
+ xml:space="preserve">
+<path d="M14.001,6.001v-6l-2.06,2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994,2.872,0.153,0.939,3.501
+ c-1.933,3.348-0.786,7.629,2.562,9.562c3.348,1.933,7.629,0.785,9.562-2.562l-1.732-1c-1.381,2.392-4.438,3.211-6.83,1.83
+ s-3.211-4.438-1.83-6.83s4.438-3.211,6.83-1.83c0.389,0.225,0.718,0.506,1.02,0.81l-2.52,2.52H14.001z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/refresh-white.svg b/static/images/icons-svg/refresh-white.svg
new file mode 100644
index 0000000..fa370e6
--- /dev/null
+++ b/static/images/icons-svg/refresh-white.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14.001px" height="14.002px" viewBox="0 0 14.001 14.002" style="enable-background:new 0 0 14.001 14.002;"
+ xml:space="preserve">
+<path fill="#FFF" d="M14.001,6.001v-6l-2.06,2.06c-0.423-0.424-0.897-0.809-1.44-1.122C7.153-0.994,2.872,0.153,0.939,3.501
+ c-1.933,3.348-0.786,7.629,2.562,9.562c3.348,1.933,7.629,0.785,9.562-2.562l-1.732-1c-1.381,2.392-4.438,3.211-6.83,1.83
+ s-3.211-4.438-1.83-6.83s4.438-3.211,6.83-1.83c0.389,0.225,0.718,0.506,1.02,0.81l-2.52,2.52H14.001z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/search-black.svg b/static/images/icons-svg/search-black.svg
new file mode 100644
index 0000000..2b9e863
--- /dev/null
+++ b/static/images/icons-svg/search-black.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="13.701px" height="13.721px" viewBox="0 0 13.701 13.721" style="enable-background:new 0 0 13.701 13.721;"
+ xml:space="preserve">
+<path d="M10.021,8.626C10.638,7.738,11,6.662,11,5.5C11,2.463,8.537,0,5.5,0S0,2.463,0,5.5S2.463,11,5.5,11
+ c1.152,0,2.221-0.356,3.105-0.962l3.682,3.683l1.414-1.414L10.021,8.626z M5.5,9C3.567,9,2,7.433,2,5.5S3.567,2,5.5,2S9,3.567,9,5.5
+ S7.433,9,5.5,9z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/search-white.svg b/static/images/icons-svg/search-white.svg
new file mode 100644
index 0000000..01ccc7c
--- /dev/null
+++ b/static/images/icons-svg/search-white.svg
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="13.701px" height="13.721px" viewBox="0 0 13.701 13.721" style="enable-background:new 0 0 13.701 13.721;"
+ xml:space="preserve">
+<path fill="#FFF" d="M10.021,8.626C10.638,7.738,11,6.662,11,5.5C11,2.463,8.537,0,5.5,0S0,2.463,0,5.5S2.463,11,5.5,11
+ c1.152,0,2.221-0.356,3.105-0.962l3.682,3.683l1.414-1.414L10.021,8.626z M5.5,9C3.567,9,2,7.433,2,5.5S3.567,2,5.5,2S9,3.567,9,5.5
+ S7.433,9,5.5,9z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/shop-black.svg b/static/images/icons-svg/shop-black.svg
new file mode 100644
index 0000000..9e1bd39
--- /dev/null
+++ b/static/images/icons-svg/shop-black.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path d="M9,4V3c0-1.657-1.343-3-3-3S3,1.343,3,3v1H0v10h12V4H9z M3.5,6C3.224,6,3,5.776,3,5.5S3.224,5,3.5,5S4,5.224,4,5.5
+ S3.776,6,3.5,6z M4,3c0-1.104,0.896-2,2-2s2,0.896,2,2v1H4V3z M8.5,6C8.224,6,8,5.776,8,5.5S8.224,5,8.5,5S9,5.224,9,5.5
+ S8.776,6,8.5,6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/shop-white.svg b/static/images/icons-svg/shop-white.svg
new file mode 100644
index 0000000..b98cb4b
--- /dev/null
+++ b/static/images/icons-svg/shop-white.svg
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="12px" height="14px" viewBox="0 0 12 14" style="enable-background:new 0 0 12 14;" xml:space="preserve">
+<path fill="#FFF" d="M9,4V3c0-1.657-1.343-3-3-3S3,1.343,3,3v1H0v10h12V4H9z M3.5,6C3.224,6,3,5.776,3,5.5S3.224,5,3.5,5S4,5.224,4,5.5
+ S3.776,6,3.5,6z M4,3c0-1.104,0.896-2,2-2s2,0.896,2,2v1H4V3z M8.5,6C8.224,6,8,5.776,8,5.5S8.224,5,8.5,5S9,5.224,9,5.5
+ S8.776,6,8.5,6z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/star-black.svg b/static/images/icons-svg/star-black.svg
new file mode 100644
index 0000000..f2c1afe
--- /dev/null
+++ b/static/images/icons-svg/star-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve">
+<polygon points="14,5 9,5 7,0 5,5 0,5 4,8 2.625,13 7,10 11.375,13 10,8 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/star-white.svg b/static/images/icons-svg/star-white.svg
new file mode 100644
index 0000000..d15188e
--- /dev/null
+++ b/static/images/icons-svg/star-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="13px" viewBox="0 0 14 13" style="enable-background:new 0 0 14 13;" xml:space="preserve">
+<polygon fill="#FFF" points="14,5 9,5 7,0 5,5 0,5 4,8 2.625,13 7,10 11.375,13 10,8 "/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/tag-black.svg b/static/images/icons-svg/tag-black.svg
new file mode 100644
index 0000000..bd11ae6
--- /dev/null
+++ b/static/images/icons-svg/tag-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M5,0H0v5l9,9l5-5L5,0z M3,4C2.447,4,2,3.553,2,3s0.447-1,1-1s1,0.447,1,1S3.553,4,3,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/tag-white.svg b/static/images/icons-svg/tag-white.svg
new file mode 100644
index 0000000..7cd4a50
--- /dev/null
+++ b/static/images/icons-svg/tag-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M5,0H0v5l9,9l5-5L5,0z M3,4C2.447,4,2,3.553,2,3s0.447-1,1-1s1,0.447,1,1S3.553,4,3,4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/user-black.svg b/static/images/icons-svg/user-black.svg
new file mode 100644
index 0000000..7530c98
--- /dev/null
+++ b/static/images/icons-svg/user-black.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path d="M8.851,10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383,8.49,9.738,7.621,9.891,6.465C10.493,6.355,10.5,5.967,10.5,5.5
+ c0-0.437-0.008-0.804-0.502-0.94C9.999,4.539,10,4.521,10,4.5c0-2.103-1-4-2-4C8,0.5,7.5,0,6.5,0C5,0,4,1.877,4,4.5
+ c0,0.021,0.001,0.039,0.002,0.06C3.508,4.696,3.5,5.063,3.5,5.5c0,0.467,0.007,0.855,0.609,0.965
+ C4.262,7.621,4.617,8.49,5.303,8.997c0.047,0.341,0.026,0.704-0.153,1.104C1.503,10.503,0,12,0,12v2h14v-2
+ C14,12,12.497,10.503,8.851,10.101z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/user-white.svg b/static/images/icons-svg/user-white.svg
new file mode 100644
index 0000000..5528c2e
--- /dev/null
+++ b/static/images/icons-svg/user-white.svg
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="14px" viewBox="0 0 14 14" style="enable-background:new 0 0 14 14;" xml:space="preserve">
+<path fill="#FFF" d="M8.851,10.101c-0.18-0.399-0.2-0.763-0.153-1.104C9.383,8.49,9.738,7.621,9.891,6.465C10.493,6.355,10.5,5.967,10.5,5.5
+ c0-0.437-0.008-0.804-0.502-0.94C9.999,4.539,10,4.521,10,4.5c0-2.103-1-4-2-4C8,0.5,7.5,0,6.5,0C5,0,4,1.877,4,4.5
+ c0,0.021,0.001,0.039,0.002,0.06C3.508,4.696,3.5,5.063,3.5,5.5c0,0.467,0.007,0.855,0.609,0.965
+ C4.262,7.621,4.617,8.49,5.303,8.997c0.047,0.341,0.026,0.704-0.153,1.104C1.503,10.503,0,12,0,12v2h14v-2
+ C14,12,12.497,10.503,8.851,10.101z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/video-black.svg b/static/images/icons-svg/video-black.svg
new file mode 100644
index 0000000..cc50181
--- /dev/null
+++ b/static/images/icons-svg/video-black.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path d="M8,0H2C0.896,0,0,0.896,0,2v6c0,1.104,0.896,2,2,2h6c1.104,0,2-0.896,2-2V5V2C10,0.896,9.104,0,8,0z M10,5l4,4V1L10,5z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/icons-svg/video-white.svg b/static/images/icons-svg/video-white.svg
new file mode 100644
index 0000000..ddcdf16
--- /dev/null
+++ b/static/images/icons-svg/video-white.svg
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="14px" height="10px" viewBox="0 0 14 10" style="enable-background:new 0 0 14 10;" xml:space="preserve">
+<path fill="#FFF" d="M8,0H2C0.896,0,0,0.896,0,2v6c0,1.104,0.896,2,2,2h6c1.104,0,2-0.896,2-2V5V2C10,0.896,9.104,0,8,0z M10,5l4,4V1L10,5z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/static/images/loading.gif b/static/images/loading.gif
new file mode 100644
index 0000000..b143d4f
--- /dev/null
+++ b/static/images/loading.gif
Binary files differ
diff --git a/static/js/base.js b/static/js/base.js
new file mode 100644
index 0000000..2920c25
--- /dev/null
+++ b/static/js/base.js
@@ -0,0 +1,200 @@
+/*
+ *
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: base.js
+ *
+ */
+
+ "use strict";
+
+const STATUS = {
+ OK: 10,
+ FORM: 20,
+ DUPLICATE: 30,
+ REDIRECT: 100,
+ UNBOUND_FORM: 0,
+ ERROR_CSRF: -1,
+ ERROR_PARAMS: -2,
+ ERROR_SERVER: -3,
+ ERROR_COOKIES: -4,
+ ERROR_TAMPER: -5,
+};
+
+const PORT_PHY0 = 0;
+const PORT_PHY1 = 1;
+const PORT_PHY2 = 2;
+const PORT_PC = 10;
+
+const MSG_FORMAT_BASIC = 0;
+const MSG_FORMAT_CONTROLLER = 1;
+const MSG_FORMAT_MLE = 2;
+
+const MODE_IDLE = 0;
+const MODE_LIVE = 1;
+const MODE_FILE = 2;
+
+const MSG_TYPE_NULL = 0
+const MSG_TYPE_WRITE = 1;
+const MSG_TYPE_READ = 2;
+const MSG_TYPE_REPLY_SUCCESS = 3;
+const MSG_TYPE_REPLY_ERROR = 4;
+const MSG_TYPE_NOTIY = 5;
+const MSG_TYPE_MLE = 0X10;
+const MSG_MAP = { MSG_TYPE_NULL : "NULL", MSG_TYPE_WRITE : "Write", MSG_TYPE_READ : "Read",
+ MSG_TYPE_REPLY_SUCCESS : "Success", MSG_TYPE_REPLY_ERROR : "Error", MSG_TYPE_NOTIY : "Notify",
+ MSG_TYPE_MLE : "MLE"};
+
+/**
+ * Convert the server's response from JSON (string) to JS object form and
+ * gracefully handle an exception
+ */
+function getResponse(resp) {
+ try {
+ resp = JSON.parse(resp);
+ } catch (err) {
+ resp = {};
+ resp.d = "";
+ resp.r = MC_CONSTANTS.SERVER;
+ }
+
+ return resp;
+}
+
+function getString(obj) {
+ var result = "";
+ for (var key in obj) {
+ if (result) {
+ result += "&";
+ }
+ result += key + "=" + encodeURIComponent(obj[key]);
+ }
+ return result;
+}
+
+function getPrefix() {
+ return window.location.pathname.split('/')[1]; // eg., /todos/<function>
+}
+
+/**
+ * Alert the user depending on error returned by the server. Todo: consider
+ * using jqm popups instead of alert
+ */
+function processError(resp) {
+ $.loading('none');
+ if (resp.r === MC_CONSTANTS.COOKIES || resp.r === MC_CONSTANTS.CSRF) {
+ alert("Error saving your submission. Cookies may be blocked. Please modify your browser's settings and try again including refreshing this page");
+ } else if (resp.r === MC_CONSTANTS.TAMPER) {
+ alert("Our web server is in an inconsistent state with your browser. Please refresh your page and try again.");
+ } else {
+ alert("Server error. Sorry about the trouble. It's been logged, and our team will look into it");
+ }
+}
+
+
+function $(selector, el) {
+ if (!el) {
+ el = document;
+ }
+ return el.querySelector(selector);
+}
+
+$.loading = function(display) {
+ $('#mc-loading').style.display = display;
+};
+
+
+$.get = function(url, data, callback) {
+ var xhr = new XMLHttpRequest();
+
+ xhr.addEventListener("progress", updateProgress);
+ xhr.addEventListener("load", transferComplete);
+ xhr.addEventListener("error", transferFailed);
+ xhr.addEventListener("abort", transferCanceled);
+
+ if (data) {
+ url += "?" + getString(data);
+ }
+
+ xhr.open('GET', url, true);
+
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+
+ xhr.send(null);
+
+ function updateProgress(event) {
+ // was:event.loaded / event.total
+ console.log('updateProgress');
+ }
+
+ function transferComplete(event) {
+ callback(event.target.response);
+ }
+
+ function transferFailed(event) {
+ console.log('transferFailed');
+ event.preventDefault();
+ event.stopImmediatePropagation();
+ }
+
+ function transferCanceled(event) {
+ console.log('transferCanceled');
+ }
+};
+
+$.post = function(url, data, callback) {
+ var xhr = new XMLHttpRequest();
+ xhr.open('POST', url, true);
+
+ xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
+
+ if (!(data instanceof FormData)) {
+ xhr.setRequestHeader("Content-type",
+ "application/x-www-form-urlencoded");
+ data = getString(data);
+ }
+
+ xhr.onreadystatechange = function(event) {
+ if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
+ callback(event.target.response);
+ }
+ };
+
+ xhr.send(data);
+};
+
+function $$(selector, el) {
+ if (!el) {
+ el = document;
+ }
+ return el.querySelectorAll(selector);
+ // Note: the returned object is a NodeList.
+ // If you'd like to convert it to a Array for convenience, use this instead:
+ // return Array.prototype.slice.call(el.querySelectorAll(selector));
+}
+
+// MDN: Assigning to an undeclared variable throws a ReferenceError
+function isStrictMode() {
+ try {
+ mc_doesNotExist = true;
+ }
+ catch(E) {
+ console.log(E.message);
+ return true;
+ }
+ return false;
+}
+
+
diff --git a/static/js/controller.js b/static/js/controller.js
new file mode 100644
index 0000000..a12362b
--- /dev/null
+++ b/static/js/controller.js
@@ -0,0 +1,93 @@
+/*
+ *
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: controller.js
+ *
+ *
+ */
+
+function ajaxData() {
+ var data = {};
+ return data;
+}
+
+
+function log_msg(msg) {
+ let msg_str = '';
+
+ msg_str += msg.type + ': ' + msg.address + ' ' + msg.data + '<br>';
+
+ return msg_str;
+}
+
+function postControllerMsg(event) {
+ $.loading('block');
+ event.preventDefault();
+ console.log("postControllerMsg");
+
+ let fd = new FormData($('#mc-cont_message'));
+ fd.append('dummy', 'foo')
+
+ $.post("/controller", fd, function(resp) {
+ $.loading('none');
+ resp = JSON.parse(resp);
+ if (resp.r == STATUS.OK) {
+ let log = document.getElementById('mc-log');
+ let height = 2 * resp.d.length;
+ for (let i=0; i < resp.d.length; i++) {
+ msg = resp.d[i];
+ if (msg.port == PORT_PC) {
+ log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc">' + log_msg(msg) + '</div>' +
+ '<div class="mc-log-col-phy0"></div>' +
+ '<div class="mc-log-col-phy1"></div></div>';
+ }
+ else if (msg.port == PORT_PHY0) {
+ log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc"></div>' +
+ '<div class="mc-log-col-phy0">' + log_msg(msg) +
+ '</div><div class="mc-log-col-phy1"></div></div>';
+ }
+ }
+ }
+
+ console.log("done");
+ });
+
+}
+
+/*
+The DOMContentLoaded event fires as soon as the HTML document has been fully parsed,
+which typically occurs long before images, stylesheets, and other external resources
+have loaded.
+*/
+window.addEventListener("DOMContentLoaded", function(e) {
+ var MsgForm = $('#mc-cont_message')
+ try {
+ // $('button[value=submit]').addEventListener('click', postControllerMsg);
+ MsgForm.addEventListener('submit', postControllerMsg);
+ } catch (event) {
+ }
+});
+
+/*
+The load event is essential for operations that require the entire web page to be fully loaded,
+including all dependent resources like images and stylesheets.
+This event ensures that every element is available for script manipulation.
+*/
+window.addEventListener("load", function(e) {
+ console.log("controller loaded");
+}); \ No newline at end of file
diff --git a/static/js/lmmi.js b/static/js/lmmi.js
new file mode 100644
index 0000000..5cad4e5
--- /dev/null
+++ b/static/js/lmmi.js
@@ -0,0 +1,39 @@
+/*
+ *
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: lmmi.js
+ *
+ *
+ */
+
+ "use strict";
+
+function ajaxData() {
+ var data = {};
+ return data;
+}
+
+/*
+The load event is essential for operations that require the entire web page to be fully loaded,
+including all dependent resources like images and stylesheets.
+This event ensures that every element is available for script manipulation.
+*/
+window.addEventListener("load", function(e) {
+
+ ss = spreadSheet('.mc-ss-main-panel');
+ $('#mc-ss-reload-all').addEventListener('click', ss.getNewTable);
+ console.log("lmmi loaded");
+}); \ No newline at end of file
diff --git a/static/js/main.js b/static/js/main.js
new file mode 100644
index 0000000..3caa3a7
--- /dev/null
+++ b/static/js/main.js
@@ -0,0 +1,118 @@
+/*
+ *
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: main.js
+ *
+ */
+
+
+"use strict";
+
+let selected_mode = MODE_LIVE;
+
+window.addEventListener("load", function(e) {
+ // re-initialize controls, as needed
+ /*
+ $('#mc-mode-live').checked=true;
+ $('#mc-filename').value = null; // clear any file that was previously selected
+
+ // set up event listeners
+ $('#mc-mode-live').addEventListener('change',wl_changeMode);
+ $('#mc-mode-file').addEventListener('change',wl_changeMode);
+ $('#mc-filename').addEventListener('change',wl_filename);
+ $('#mc-start').addEventListener('click', wl_start);
+ $('#mc-stop').addEventListener('click', wl_stop);
+ $('#mc-help').addEventListener('click', wl_help);
+ $('#mc-clear').addEventListener('click', wl_clear);
+ */
+ console.log("strict mode test: ",isStrictMode());
+});
+
+
+function wl_changeMode(event) {
+ event.preventDefault();
+ console.log('change mode: ',event.target.id);
+ if (event.target.id == "mc-mode-file") {
+ selected_mode = MODE_FILE;
+ }
+ else {
+ selected_mode = MODE_LIVE;
+ }
+}
+
+function wl_filename(event) {
+ event.preventDefault();
+ $.loading('block');
+
+ let data = { 'filename': event.target.files[0].name };
+
+ $.post("/filename", data, function(resp) {
+ console.log("filename");
+ });
+
+ $.loading('none');
+}
+
+function wl_start(event) {
+ event.preventDefault();
+ let data = { 'mode': selected_mode }
+ $.loading('block');
+
+ $.post("/start", data, function(resp) {
+ $('#mc-mode').innerText = "Running";
+ });
+ // await new Promise(r => setTimeout(r, 1000));
+ $.loading('none');
+}
+
+function wl_stop(event) {
+ event.preventDefault();
+ let data = { 'mode': MODE_IDLE }
+ $('#mc-mode').innerText = "Idle";
+ $.loading('block');
+ $.post("/stop", data, function(resp) {
+ $('#mc-mode').innerText = "Idle";
+ });
+ $.loading('none');
+}
+
+function wl_help(event) {
+ event.preventDefault();
+ m = modal('large');
+ /* jshint multistr: true */
+ m.display('<h2>GEODSS WebLogger Help:</h2> \
+ <img width=800px src="/static/fiber_tap.svg">');
+}
+
+function wl_clear(event) {
+ event.preventDefault();
+ let log = $('#mc-log');
+ while (log.firstChild) {
+ log.removeChild(log.firstChild);
+ }
+}
+
+function update_fw_version(fw_version) {
+ $('#mc-fw-version').innerText = fw_version.substring(2,4);
+}
+
+function update_fw_increment(fw_increment) {
+ $('#mc-fw-increment').innerText = fw_increment.substring(2,4);
+}
+
+function update_temperature(temperature) {
+ $('#mc-temperature').innerText = parseInt(temperature,16) + " \xB0F";
+}
diff --git a/static/js/mdio.js b/static/js/mdio.js
new file mode 100644
index 0000000..9185450
--- /dev/null
+++ b/static/js/mdio.js
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: mdio.js
+ *
+ */
+
+ "use strict";
+
+function ajaxData() {
+ var data = {};
+ return data;
+}
+
+/*
+The load event is essential for operations that require the entire web page to be fully loaded,
+including all dependent resources like images and stylesheets.
+This event ensures that every element is available for script manipulation.
+*/
+window.addEventListener("load", function(e) {
+ var ss = spreadSheet('.mc-ss-main-panel');
+ $('#mc-ss-reload-all').addEventListener('click', ss.getNewTable);
+ console.log("mdio loaded");
+}); \ No newline at end of file
diff --git a/static/js/mle.js b/static/js/mle.js
new file mode 100644
index 0000000..0a28665
--- /dev/null
+++ b/static/js/mle.js
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: mle.js
+ *
+ */
+
+ "use strict";
+
+function ajaxData() {
+ var data = {};
+ return data;
+}
+
+/*
+The load event is essential for operations that require the entire web page to be fully loaded,
+including all dependent resources like images and stylesheets.
+This event ensures that every element is available for script manipulation.
+*/
+window.addEventListener("load", function(e) {
+
+ console.log("mle loaded");
+}); \ No newline at end of file
diff --git a/static/js/modal.js b/static/js/modal.js
new file mode 100644
index 0000000..af4763b
--- /dev/null
+++ b/static/js/modal.js
@@ -0,0 +1,120 @@
+/*
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: modal.js
+ *
+ */
+
+"use strict";
+
+/*
+ * Modal TODO: stop using ids
+ * Only add and remove classes programmatically
+ *
+ */
+
+function Modal(size) {
+ var modal = this;
+ this.modalContainer = $('#mc-modal');
+ this.modalBody = $('#mc-modal-body', this.modalContainer);
+ this.modalBackdrop = $('#mc-modal-backdrop', this.modalContainer);
+ this.modalClose = $('#mc-modal-close', this.modalContainer);
+
+ this.modalBody.classList="";
+
+ if (size !== undefined) {
+ this.modalBody.classList.add('mc-' + size);
+ }
+
+ this.modalClose.addEventListener('click', function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ modal.modalContainer.style.display = 'none';
+ if ($('#mc-modal-content')) {
+ el = $('#mc-modal-content');
+ el.remove(); // IE supports removeNode
+ }
+ });
+ this.modalBackdrop.addEventListener('click', function(event) {
+ event.preventDefault();
+ event.stopPropagation();
+ });
+}
+
+Modal.prototype = {
+ constructor : Modal,
+ display : modal_display,
+ hide : modal_hide,
+ clean : modal_clean,
+};
+
+function modal(size) {
+ return new Modal(size);
+}
+
+function modal_display(content) {
+ var img, body, ratio, oldWidth, oldHeight;
+ this.clean();
+
+ if (content instanceof HTMLImageElement) {
+ img = content;
+ body = $('#mc-modal-body');
+
+ ratio = img.width / img.height;
+
+ /* todo use the bigger img dimension */
+ if (window.innerWidth - img.width < 20) {
+ img.width = window.innerWidth - 80;
+ img.height = img.width / ratio;
+ }
+
+ if (window.innerHeight - img.height < 20) {
+ img.height = window.innerHeight - 80;
+ }
+
+ body.style.top = String((window.innerHeight - img.height - 64) / 2) + 'px';
+ body.style.bottom = String((window.innerHeight - img.height - 64) / 2) + 'px';
+ body.style.left = String((window.innerWidth - img.width - 64) / 2) + 'px';
+ body.style.right = String((window.innerWidth - img.width - 64) / 2) + 'px';
+
+ el = document.createElement("div");
+ el.id = "mc-modal-content";
+ el.innerHTML = '<img src="' + img.src + '">';
+ this.modalBody.appendChild(el);
+
+ } else {
+ el = document.createElement("div");
+ el.id = "mc-modal-content";
+ el.innerHTML = content;
+ this.modalBody.appendChild(el);
+ var dateInputs = $$('.mc-date', this.modalBody);
+ dateInputs.forEach(function(val) {
+ val.addEventListener('click', setDate);
+ });
+ }
+
+ this.modalContainer.style.display = 'block';
+}
+
+function modal_hide() {
+ this.modalContainer.style.display = 'none';
+}
+
+function modal_clean() {
+ var el;
+ if ((el = $('#mc-modal-content', this.modalContainer))) {
+ el.remove();
+ }
+} \ No newline at end of file
diff --git a/static/js/ss.js b/static/js/ss.js
new file mode 100644
index 0000000..6f0310f
--- /dev/null
+++ b/static/js/ss.js
@@ -0,0 +1,302 @@
+/*
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: ss.js
+ *
+ */
+
+"use strict";
+
+/* constructor spreadsheet */
+function SpreadSheet(selector) {
+ var ss = this;
+ this.activeCell = null;
+ this.panel = $(selector);
+ this.panel.addEventListener('click', function(event){
+
+ if (event.target.classList.contains('mc-edit')) {
+ ss.editCell.call(ss, event);
+ }
+ else if (event.target.classList.contains('mc-icon') || event.target.nodeName==="IMG") {
+ ss.actions.call(ss, event);
+ }
+ else if (event.target.classList.contains('mc-sortable')) {
+ data = ajaxData();
+ data.sort=event.target.innerHTML.toLowerCase();
+ ss.getNewTable(event,data);
+ }
+ });
+ this.getNewTable = function(event, data) {
+ $.loading('block');
+ if (data == undefined) {
+ data = ajaxData();
+ }
+ $.get('/' + getPrefix(), data, function(resp) {
+ resp = JSON.parse(resp);
+ let values = resp.values;
+ console.log(resp.values);
+ cols=$$(".mc-values");
+ for (let i = 0; i < 16; i++) {
+ cols[i].textContent = "0x" + values[i].toString(16);
+ }
+ $.loading('none');
+ });
+ }
+}
+
+SpreadSheet.prototype = {
+ constructor: SpreadSheet,
+ actions: spreadSheet_actions,
+ editCell: spreadSheet_editCell,
+ newRow: spreadSheet_newRow
+};
+
+function spreadSheet(selector) {
+ return new SpreadSheet(selector);
+}
+
+function spreadSheet_actions(event) {
+ event.preventDefault(); // this fixed my href bug on 3/2/18!
+ $.loading('block');
+ var ss = this;
+ var link, icon, td, tr, id, action, txt, el, data, m;
+
+ if (event.target.nodeName==="IMG") {
+ icon = event.target;
+ link = icon.parentNode;
+ }
+ else {
+ link=event.target;
+ }
+
+ action=link.dataset.action;
+
+ td=link.parentNode.parentNode; // link is wrapped in a div and then a td cell
+ tr = td.parentElement;
+ id = tr.dataset.id;
+
+ txt = td.innerHTML;
+
+ // modal actions
+ if (action === 'edit' || action === 'cut' || action === 'notify' || action === 'modify') {
+
+ $.get('/' + getPrefix() + '/' + action + '/' + id, null,
+ function(resp) {
+ var resp = getResponse(resp);
+ $.loading('none');
+
+ if (action === 'edit') {
+ m = modal('large');
+ }
+ else {
+ m = modal();
+ }
+
+ if (resp.r === MC_CONSTANTS.REDIRECT) {
+ window.location.assign(resp.d);
+ } else if (resp.r === MC_CONSTANTS.NONE) {
+ m.display(resp.d)
+ $('button[value="submit"]', m.modalContainer)
+ .addEventListener('click', submitForm);
+ } else {
+ processError(resp);
+ }
+ })
+ }
+
+ // replace object actions
+ else if (action === "recalc") {
+ $.get('/' + getPrefix() + '/' + action + '/' + id, null, function(resp) {
+ var resp = getResponse(resp);
+ $.loading('none');
+ tr.innerHTML = resp.d;
+ if (resp.n) {
+ m = modal('large');
+ m.display(resp.n);
+ }
+ });
+ }
+
+ function submitForm(e) {
+ console.log('submit Form');
+ $.loading('block');
+ var form = $('form', m.modalContainer);
+ // var nodes = form.childNodes;
+ var data = new FormData(form);
+ // nodes.forEach(addToFormData, data);
+
+ $.post('/' + getPrefix() + '/' + action + '/' + id, data, function(resp) {
+ resp = getResponse(resp);
+ if (resp.r === MC_CONSTANTS.NONE) {
+ m.hide();
+ ss.getNewTable(e);
+ } else if (resp.r === MC_CONSTANTS.FORM) {
+ form.innerHTML=resp.d;
+ $('button[value="submit"]',m.modalContainer).addEventListener('click', submitForm );
+ } else {
+ processError(resp);
+ }
+ $.loading('none');
+ });
+ }
+}
+
+/* set up a handler for a new SpreadSheet item / row */
+function spreadSheet_newRow(selector) {
+ var ss = this;
+ var m = modal('large');
+ try{
+ $(selector).addEventListener('click',function(event) {
+ $.get('/' + getPrefix() + '/new/', null, function(resp) {
+
+ resp = getResponse(resp);
+ if (resp.r === MC_CONSTANTS.NONE) {
+ m.display(resp.d);
+ $('button[value="submit"]', m.modalContainer).addEventListener('click', submitForm);
+ } else {
+ processError(resp);
+ }
+ });
+ });
+ }
+ catch(event) {
+ console.log('spreadSheet_newRow problem')
+ }
+
+ function submitForm(e) {
+ $.loading('block');
+ var form = $('form', m.modalContainer);
+ var nodes = form.childNodes;
+ var data = new FormData();
+ nodes.forEach(addToFormData, data);
+
+ $.post('/' + getPrefix() + '/new/', data, function(resp) {
+ resp = getResponse(resp);
+ if (resp.r === MC_CONSTANTS.NONE) {
+ m.hide();
+ ss.getNewTable(e);
+ } else if (resp.r === MC_CONSTANTS.FORM) {
+ form.innerHTML=resp.d;
+ $('button[value="submit"]',m.modalContainer).addEventListener('click', submitForm );
+ } else {
+ processError(resp);
+ }
+ $.loading('none');
+ });
+ }
+}
+
+
+function spreadSheet_editCell(event) {
+ console.log('editCell');
+ var td=event.target;
+ var tr = td.parentElement;
+ var id = tr.dataset.id;
+ var type=td.dataset.type;
+ var field=td.dataset.field;
+ var txt = td.innerHTML;
+ var el, data;
+
+ if (type==="text") {
+ td.innerHTML="";
+ el = document.createElement("input");
+ el.addEventListener('keypress', keyHandler);
+ $('body').addEventListener('click',clickHandler);
+ // append the input
+ el.className="mc-ss-input"
+ el.value=txt;
+ td.appendChild(el);
+ el.focus();
+ }
+
+ /* TODO: do I need to be worried that the handler won't be set in time? */
+ else if (type==="date") {
+ var cal = calendar('.mc-cal');
+ cal.container.addEventListener("evtCalClose", calCloseHandler);
+ cal.open(td);
+ }
+
+ /* calendar has been closed */
+ function calCloseHandler(event) {
+ console.log('calCloseHandler');
+ cal.container.removeEventListener('evtCalClose',calCloseHandler);
+
+ if (event.detail.cancel) {
+ return;
+ }
+
+ $.loading('block');
+ data = {
+ id: id,
+ field: "date",
+ value: cal.getSelectedDate().toISOString(),
+ };
+
+ $.post('/' + getPrefix() + '/modify', data, function(resp) {
+ resp = getResponse(resp);
+ if(resp.r == MC_CONSTANTS.NONE) {
+ td.innerHTML=resp.d;
+ }
+ else {
+ processError(resp);
+ }
+ $.loading('none');
+ });
+ }
+
+ function keyHandler(event) {
+ console.log(keyHandler);
+ var el = event.target;
+ var key = event.keyCode;
+ var txt = el.value;
+
+ if (key==27) {
+ event.preventDefault();
+ el.remove();
+ td.innerHTML=txt;
+ }
+ else if (key==13) {
+ event.preventDefault();
+ var data = {
+ id: id,
+ field: field,
+ value: txt,
+ };
+
+ el.remove();
+ td.innerHTML=txt;
+
+ $.post('/' + getPrefix() + '/modify', data, function(response) {
+ console.log("upload text suceeded");
+ });
+ }
+ }
+
+ function clickHandler(event) {
+ console.log('clickHandler');
+ if(event.target.nodeName==="TD") {
+ return; // don't cancel out of a cell we just clicked
+ }
+ $('body').removeEventListener('click',clickHandler);
+ var children = td.childNodes;
+ children.forEach(function(val) {
+ val.remove();
+ })
+ td.innerHTML=txt;
+ }
+}
+
+
+ \ No newline at end of file
diff --git a/static/js/ws.js b/static/js/ws.js
new file mode 100644
index 0000000..bc814ff
--- /dev/null
+++ b/static/js/ws.js
@@ -0,0 +1,147 @@
+/*
+ * Copyright (C) 2026 Private Island Networks Inc.
+ *
+ * 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.
+ *
+ * file: ws.js
+ *
+ */
+
+"use strict";
+
+let socket = new WebSocket("ws://localhost:8010/logger");
+console.log("here we go");
+let state = "Wait";
+let log = document.getElementById('mc-log');
+
+function log_msg(msg) {
+ let msg_str = '';
+
+ if (msg.num_cmds > 1) {
+ console.log('multi commands');
+ }
+
+ for (let i = 0; i < msg.num_cmds; i++) {
+ if (msg.cmds[i][0].includes('RDREG') || msg.cmds[i][0].includes('GETTEMP')) {
+ msg_str += msg.cmds[i][0] + ' ' + msg.cmds[i][1] + '<br>';
+ }
+ else if (msg.cmds[i][0] == "" && (msg.cmds[i][1] == "PHY1_STATUS" || msg.cmds[i][1] == "PHY2_STATUS")) {
+ let val = parseInt(msg.cmds[i][2], 16) & 0x8;
+ if (val) {
+ msg_str += msg.cmds[i][1] + ': LOS = 1' + '<br>';
+ }
+ else {
+ msg_str += msg.cmds[i][1] + ': LOS = 0' + '<br>';
+ }
+ }
+ else {
+ msg_str += msg.cmds[i][0] + ' ' + msg.cmds[i][1] + ' ' + msg.cmds[i][2] + '<br>';
+ }
+ }
+
+ return msg_str;
+}
+
+// setInterval(function(){console.log(state)},1000);
+
+socket.onopen = function(e) {
+ console.log("[open] Connection established");
+ console.log("Sending to server");
+ socket.send("open"); // can send data as a string, Blob, or ArrayBuffer.
+};
+
+function update_mode(mode) {
+ if (mode == MODE_IDLE)
+ $('#mc-mode').innerText = "Idle";
+ else if (mode == MODE_LIVE || mode == MODE_FILE)
+ $('#mc-mode').innerText = "Running";
+ else
+ console.log("unsupported mode")
+}
+
+socket.onmessage = function(event) {
+ let num_msgs = 0;
+
+ let msg = JSON.parse(event.data);
+ if (msg.format == MSG_FORMAT_BASIC) {
+ if (typeof msg['mode'] !== "undefined") {
+ console.log("mode: ", msg['mode']);
+ update_mode(msg['mode']);
+ }
+ else if (typeof msg['fw_version'] !== "undefined") {
+ console.log("fw_version: ", msg['fw_version']);
+ update_fw_version(msg['fw_version']);
+ }
+ else if (typeof msg['fw_increment'] !== "undefined") {
+ console.log("fw_increment: ", msg['fw_increment']);
+ update_fw_increment(msg['fw_increment']);
+ }
+ else if (typeof msg['temperature'] !== "undefined") {
+ console.log("temperature: ", msg['temperature']);
+ update_temperature(msg['temperature']);
+ }
+ else
+ console.log("unsupported control");
+
+ return;
+ }
+
+ let height = 2 * msg.num_cmds;
+ if (height == 0) {
+ height = 2;
+ }
+
+ num_msgs += 1;
+ console.log("From server:", num_msgs, ': ', msg);
+
+ if (msg.port == PORT_PC) {
+ log.innerHTML += '<div class="mc-log-row style=height:' + height.toString() + 'rem"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc">' + log_msg(msg) + '</div>' +
+ '<div class="mc-log-col-phy0"></div>' +
+ '<div class="mc-log-col-phy1"></div></div>';
+ }
+ else if (msg.port == PORT_PHY0) {
+ log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc"></div>' +
+ '<div class="mc-log-col-phy0">' + log_msg(msg) +
+ '</div><div class="mc-log-col-phy1"></div></div>';
+ }
+ else if (msg.port == PORT_PHY1) {
+ log.innerHTML += '<div class="mc-log-row"><div class="mc-log-col-time">' + msg.time + '</div>' +
+ '<div class="mc-log-col-pc"></div>' +
+ '<div class="mc-log-col-phy0"></div>' +
+ '<div class="mc-log-col-phy1">' + log_msg(msg) + '</div></div>';
+ }
+
+ // socket.send("request");
+ state = "Request"
+};
+
+socket.onclose = function(event) {
+ state = "Closed"
+ if (event.wasClean) {
+ console.log(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
+ } else {
+ // e.g. server process killed or network down
+ // event.code is usually 1006 in this case
+ console.log('[close] Connection died');
+ }
+};
+
+socket.onerror = function(error) {
+ state = "Error"
+ console.log(`[error]`);
+};
+
+// When you've finished using the WebSocket connection,
+// call the WebSocket method close():
diff --git a/templates/base.html b/templates/base.html
new file mode 100644
index 0000000..c956dfd
--- /dev/null
+++ b/templates/base.html
@@ -0,0 +1,53 @@
+<!-- index.html -->
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8" />
+<meta name="viewport" content="width=device-width, initial-scale=1">
+<title>{{ title }}</title>
+<link rel="shortcut icon" href="../static/images/favicon.ico">
+<link rel="stylesheet" type="text/css" href="/static/css/base.css">
+{% if ss %}<link rel="stylesheet" type="text/css" href="/static/css/ss.css">{% endif %}
+</head>
+<body>
+ <div id="mc-main-window">
+ <header id="mc-header">
+ <div id="mc-banner">PI Explorer, Version {{ version }}</div>
+ <nav id="mc-menu">
+ <ul id="mc-menu-list">
+ <li><a href="/">Home</a></li>
+ <li><a href="/controller">Controller</a></li>
+ <li><a href="/mle">Machine Learning</a></li>
+ <li><a href="/fabric">Switch Fabric</a></li>
+ <li><a href="/mdio">MDIO</a></li>
+ {% if lmmi %}<li><a href="/lmmi">LMMI</a></li>{% endif %}
+ <li><a href="/help">Help</a></li>
+ </ul>
+ </nav>
+ </header>
+
+ <div id="mc-body" {% if app_layer %} class="mc-{{app_layer}}"{% endif %} data-fragments="{{num_fragments}}">
+ {% block content %}
+ {% endblock %}
+ </div>
+ </div>
+
+
+
+ <div id="mc-modal">
+ <div id="mc-modal-backdrop"></div>
+ <div id="mc-modal-body">
+ <button class="mc-quiet" id="mc-modal-close">close</button>
+ </div>
+ </div>
+
+ <div id="mc-loading">
+ <img src="/static/images/loading.gif" alt="loading">
+ </div>
+
+ <script src="/static/js/base.js"></script>
+ <script src="/static/js/modal.js"></script>
+ {% if app_layer %} <script src="/static/js/{{ app_layer }}.js"></script>{% endif %}
+ {% if ws %} <script src="/static/js/ws.js"></script>{% endif %}
+ {% if ss %} <script src="/static/js/ss.js"></script>{% endif %}
+</body> \ No newline at end of file
diff --git a/templates/controller.html b/templates/controller.html
new file mode 100644
index 0000000..cac36e2
--- /dev/null
+++ b/templates/controller.html
@@ -0,0 +1,50 @@
+<!-- controller.html,
+ -- Copyright (C) 2025 Private Island Networks Inc.
+-->
+{% extends "base.html" %} {% block content %}
+
+<h2>Controller</h2>
+<form id="mc-cont_message" action="." enctype="multipart/form-data">
+ <p>
+ <label>Message Type: <select name="type" id="cont_sel_msg_type"
+ class="mc-div-sel">
+ <option value="0">NULL</option>
+ <option value="1">Write</option>
+ <option value="2" selected>Read</option>
+ </select></label>
+ </p>
+
+ <p>
+ <input type="text" placeholder="token" id="cont_token" name="token">
+ </p>
+
+ <p>
+ <input type="text" placeholder="address" id="cont_addr" name="address">
+ </p>
+
+ <p>
+ <input type="text" placeholder="data" id="cont_data" name="data">
+ </p>
+
+ <p>
+ <button type="submit" value="submit">Submit</button>
+ </p>
+</form>
+
+ <div id="mc-log-hdr">
+ <div class="mc-log-col mc-log-col-time"
+ style="border: 0px solid green;">Time</div>
+ <div class="mc-log-col mc-log-col-pc"
+ style="border: 0px solid green;">PC</div>
+ <div class="mc-log-col mc-log-col-phy0"
+ style="border: 0px solid green;">PHY0</div>
+ </div>
+
+ {% include "divider.html" %}
+
+ <div id="mc-log">
+ <!-- Log Entries are Inserted Here -->
+ </div>
+
+
+{% endblock %}
diff --git a/templates/divider.html b/templates/divider.html
new file mode 100644
index 0000000..6cdb31a
--- /dev/null
+++ b/templates/divider.html
@@ -0,0 +1,3 @@
+<svg class="mc-divider">
+ <line x1="0" y1="0" x2="2000" y2="0" />
+</svg>
diff --git a/templates/fabric.html b/templates/fabric.html
new file mode 100644
index 0000000..b97eaec
--- /dev/null
+++ b/templates/fabric.html
@@ -0,0 +1,24 @@
+<!-- fabric.html,
+ -- Copyright (C) 2025 Private Island Networks Inc.
+-->
+{% extends "base.html" %}
+{% block content %}
+
+ <h2>Fabric {{ regs }}</h2>
+ <div class="mc-ss-main-panel">
+ <table class="mc-ss-table mc-table-striped">
+ <thead>
+ <tr>
+ <th class="mc-sortable" data-field="address">Address</th>
+ <th class="mc-sortable" data-field="register">Register</th>
+ <th class="mc-sortable" data-field="value">Value</th>
+ </tr>
+ </thead>
+ </table>
+ </div>
+
+
+ {% for key, value in regs.items() %} {{ key }}, {{ value }}<br>
+ {% endfor %}
+
+{% endblock %} \ No newline at end of file
diff --git a/templates/help.html b/templates/help.html
new file mode 100644
index 0000000..cf21066
--- /dev/null
+++ b/templates/help.html
@@ -0,0 +1,29 @@
+<!-- help.html,
+ -- Copyright (C) 2026 Private Island Networks Inc.
+-->
+{% extends "base.html" %} {% block content %}
+
+<p>
+ For help, please email <a href="mailto:opensource@privateisland.tech">Support</a>
+ or enter question on our <a href="https://privateisland.tech/forum" target="_blank">forum</a>
+</p>
+
+{% include "divider.html" %}
+
+
+<h3>Known Issues, as of 3/3/26:</h3>
+<ul>
+ <li>aio-http: Determine proper way to use WS for sending data that isn't in response to a request.</li>
+ <li>Fix blocking issue. Can we await "q.get(block=True)" in main.py?</li>
+ <li>Error handling in Controller and other forms. Need exception handling and then
+ return a meaningful JS error.</li>
+ <li>Close Websocket on refresh. On Unload.</li>
+ <li>Are multiple ws handlers needed for the different tabs?</li>
+ <li>Make sure there are no Python globals (e.g., q)</li>
+ <li>The JS logic for the MLE tab needs to be reviewed and fixed.</li>
+</ul>
+
+
+
+
+{% endblock %}
diff --git a/templates/index.html b/templates/index.html
new file mode 100755
index 0000000..dc400ce
--- /dev/null
+++ b/templates/index.html
@@ -0,0 +1,18 @@
+<!-- index.html,
+ -- Copyright (C) 2025 Private Island Networks Inc.
+-->
+{% extends "base.html" %}
+{% block content %}
+{% if fpga_query == 1 %}
+ <p>
+ FPGA Version <span id="mc-fw-version"><em>XX</em></span>.<span
+ id="mc-fw-increment"><em>YY</em></span> , FPGA Internal Temperature:
+ <span id="mc-temperature"><em>??</em></span>
+ </p>
+ {% endif %}
+
+<div id="betsy">
+ {% include "pi_arch_ml.svg" %}
+</div>
+
+{% endblock %} \ No newline at end of file
diff --git a/templates/lmmi.html b/templates/lmmi.html
new file mode 100644
index 0000000..eab3ca4
--- /dev/null
+++ b/templates/lmmi.html
@@ -0,0 +1,43 @@
+<!-- lmmi.html,
+ -- Copyright (C) 2025 Private Island Networks Inc.
+-->
+{% extends "base.html" %} {% block content %}
+
+<h2>SGMII_CDR 0 Registers</h2>
+<div class="mc-ss-main-panel">
+ <table class="mc-ss-table mc-table-striped">
+ <thead>
+ <tr>
+ <th class="mc-sortable" data-field="address">Address</th>
+ <th class="mc-sortable" data-field="register">Register</th>
+ <th class="mc-sortable" data-field="default">Default</th>
+ <th class="mc-sortable" data-field="value">Value</th>
+ <th class="mc-mdio-buttons mc-ss-table-col-buttons"><a
+ id="mc-ss-reload-all" class="mc-icon" data-action="reload"
+ title="reload"> <img
+ src="/static/images/icons-svg/refresh-black.svg" alt="reload"></a></th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for key, value in regs0.items() %}
+ <tr>
+ <td>{{ key }}</td>
+ <td>{{regs0[key][0]}}</td>
+ <td>{{regs0[key][1]}}</td>
+ <td class="mc-values">test</td>
+ <td>
+ <div class="mc-icons">
+ <a class="mc-icon" data-action="edit" title="edit"><img
+ src="/static/images/icons-svg/edit-black.svg" alt="edit"></a><a
+ class="mc-icon" data-action="admin" title="admin"><img
+ src="/static/images/icons-svg/gear-black.svg" alt="admin"></a>
+ </div>
+ </td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+</div>
+<br>
+
+{% endblock %}
diff --git a/templates/mdio.html b/templates/mdio.html
new file mode 100644
index 0000000..1a7bfb0
--- /dev/null
+++ b/templates/mdio.html
@@ -0,0 +1,44 @@
+<!-- mdio.html, Copyright (C) 2025 Private Island Networks Inc. -->
+{% extends "base.html" %}
+{% block content %}
+
+<h2>MDIO PHY0</h2>
+<div class="mc-ss-main-panel">
+ <table class="mc-ss-table mc-table-striped">
+ <thead>
+ <tr>
+ <th class="mc-sortable" data-field="address">Address</th>
+ <th class="mc-sortable" data-field="register">Register</th>
+ <th class="mc-sortable" data-field="default">Default</th>
+ <th class="mc-sortable" data-field="value">Value</th>
+ <th class="mc-mdio-buttons mc-ss-table-col-buttons"><a
+ id="mc-ss-reload-all" class="mc-icon" data-action="reload"
+ title="reload"> <img
+ src="/static/images/icons-svg/refresh-black.svg" alt="reload"></a></th>
+ </tr>
+ </thead>
+ <tbody>
+ {% for key, value in regs.items() %}
+ <tr>
+ <td>{{ key }}</td>
+ <td>{{regs[key][0]}}</td>
+ <td>{{regs[key][1]}}</td>
+ <td class="mc-values"></td>
+ <td>
+ <div class="mc-icons">
+ <a class="mc-icon" data-action="edit" title="edit"><img
+ src="/static/images/icons-svg/edit-black.svg" alt="edit"></a><a
+ class="mc-icon" data-action="admin" title="admin"><img
+ src="/static/images/icons-svg/gear-black.svg" alt="admin"></a>
+ </div>
+ </td>
+ </tr>
+ {% endfor %}
+ </tbody>
+ </table>
+</div>
+<br>
+
+{% endblock %}
+
+
diff --git a/templates/mle.html b/templates/mle.html
new file mode 100644
index 0000000..b7bc632
--- /dev/null
+++ b/templates/mle.html
@@ -0,0 +1,44 @@
+<!-- metrics.html,
+ -- Copyright (C) 2025 Private Island Networks Inc.
+-->
+{% extends "base.html" %}
+{% block content %}
+
+ <div id="mc-mode-box">
+ <p>
+ Viewing Mode: <span id="mc-mode">{{mode}}</span>
+ </p>
+ <input type="radio" id="mc-mode-live" class="mc-mode" name="mode"
+ value="live" checked /> <label for="live">Live</label> <input
+ type="radio" id="mc-mode-file" class="mc-mode" name="mode"
+ value="file" /> <label for="file">File</label> <input type="file"
+ id="mc-filename" name="filename" accept=".pcapng">
+ <button id="mc-start" class="mc-action"
+ style="background-color: green" data-action="start">Start</button>
+ <button id="mc-stop" class="mc-action" style="background-color: red"
+ data-action="stop">Stop</button>
+ <button id="mc-help" class="mc-action" style="background-color: blue"
+ data-action="help">Help</button>
+ <button id="mc-clear" class="mc-action"
+ style="background-color: yellow; color: black;" data-action="clr">Clear</button>
+ </div>
+
+ <br>
+
+ <div id="mc-log-hdr">
+ <div class="mc-log-col mc-log-col-time"
+ style="border: 0px solid green;">Time</div>
+ <div class="mc-log-col mc-log-col-pc"
+ style="border: 0px solid green;">PHY0</div>
+ <div class="mc-log-col mc-log-col-phy0"
+ style="border: 0px solid green;">PHY1</div>
+ <div class="mc-log-col mc-log-col-phy1"
+ style="border: 0px solid green;">PHY2</div>
+ </div>
+
+ <div id="mc-log">
+ <!-- Log Entries are Inserted Here -->
+ </div>
+
+
+{% endblock %} \ No newline at end of file
diff --git a/templates/pi_arch_ml.svg b/templates/pi_arch_ml.svg
new file mode 100644
index 0000000..601f184
--- /dev/null
+++ b/templates/pi_arch_ml.svg
@@ -0,0 +1,5996 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ id="betsy"
+ version="1.1"
+ inkscape:version="1.4.2 (ebf0e940, 2025-05-08)"
+ sodipodi:docname="pi_arch_ml.svg"
+ width="1200"
+ height="800"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <defs
+ id="defs4">
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect11"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect9"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect6"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect4"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect2"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker10439"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path10437"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker10141"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path10139"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker8435"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ viewBox="0 0 8.886927 5.078244"
+ markerWidth="8.8869267"
+ markerHeight="5.0782437"
+ preserveAspectRatio="xMidYMid">
+ <path
+ inkscape:connector-curvature="0"
+ id="path8433"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7591"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always"
+ viewBox="0 0 8.886927 5.078244"
+ markerWidth="8.8869267"
+ markerHeight="5.0782442"
+ preserveAspectRatio="xMidYMid">
+ <path
+ id="path7589"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7581"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path7579"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7571"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path7569"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6757"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6755"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker3541"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path3539" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker3103"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path3101" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker3093"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path3091" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker3047"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path3045"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker3037"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path3035"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker3027"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path3025"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker3017"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path3015"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2977"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2975"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2949"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2947"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2939"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2937" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2929"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2927" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2919"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2917"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2909"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2907"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2899"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2897"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2889"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2887"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2879"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2877"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2869"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2867"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2849"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2847" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2839"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2837"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2829"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2827"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2819"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2817"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2809"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2807"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2799"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2797"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2789"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2787"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2779"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2777" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2769"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2767"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2759"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2757"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2749"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2747"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2739"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2737"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2729"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2727"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2719"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2717" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2703"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2701"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2693"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2691"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2683"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2681"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2673"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2671"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2663"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2661"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2653"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2651"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2643"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2641" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2633"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2631"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2623"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2621"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2613"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2611"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2603"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2601"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2593"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2591"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2583"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2581" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2573"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2571"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2563"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2561"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2553"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2551"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2543"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2541"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2533"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2531"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2523"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2521"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2513"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2511"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker2503"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path2501"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2487"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2485"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2441"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2439"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2425"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2423"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2415"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2413"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2405"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2403"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2389"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2387"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2379"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2377"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker2369"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path2367"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7363"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7361"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7307"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7305"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7251"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7249"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7195"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7193"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7113"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7111"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7083"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7081"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7027"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7025" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6971"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6969" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6915"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6913" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6859"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6857" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6803"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6801" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6747"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ inkscape:connector-curvature="0"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6745" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6691"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6689"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6635"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6633"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6579"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6577"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6523"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6521"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6467"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6465"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6411"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6409"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker6355"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path6353"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect6301"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect6173"
+ effect="bspline"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect6041"
+ effect="bspline"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect5913"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect5569"
+ effect="bspline"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect5441"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect5253"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker4979"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path4977"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker10496"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path10494"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect10492"
+ effect="bspline"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect10489"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker9670"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path9668"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect9666"
+ effect="bspline"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect9663"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <inkscape:path-effect
+ only_selected="false"
+ apply_with_weight="true"
+ apply_no_weight="true"
+ helper_size="0"
+ steps="2"
+ weight="33.333333"
+ is_visible="true"
+ id="path-effect8500"
+ effect="bspline"
+ lpeversion="0"
+ uniform="false" />
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker7728"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ id="path7726"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <inkscape:path-effect
+ effect="bspline"
+ id="path-effect7358"
+ is_visible="true"
+ weight="33.333333"
+ steps="2"
+ helper_size="0"
+ apply_no_weight="true"
+ apply_with_weight="true"
+ only_selected="false"
+ lpeversion="0"
+ uniform="false" />
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7515"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mend"
+ inkscape:collect="always">
+ <path
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7513"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7497"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow1Mstart">
+ <path
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ id="path7495"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6797"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6795"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6779"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6777"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path3642"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5683"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5681"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker5665"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path5663"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4107"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4105"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4075"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4073"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4043"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4041"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker3899"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path3645"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7839"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Mend">
+ <path
+ transform="scale(-0.6)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path7837"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7691"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Mstart">
+ <path
+ transform="scale(0.6)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path7689"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:isstock="true"
+ style="overflow:visible"
+ id="marker7519"
+ refX="0"
+ refY="0"
+ orient="auto"
+ inkscape:stockid="Arrow2Mend">
+ <path
+ transform="scale(-0.6)"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ id="path7517"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Sstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker6916"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6914"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.2,0,0,0.2,1.2,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Sstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Sstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path6396"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.2,0,0,0.2,1.2,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend"
+ style="overflow:visible">
+ <path
+ id="path3951"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-1"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4048-7"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker575"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path573"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker579"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path577"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker583"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path581"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Lend"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4030"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker589"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path587"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
+ transform="matrix(-0.8,0,0,-0.8,-10,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker593"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path591"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker597"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path595"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lstart"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4045"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker603"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path601"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker607"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path605"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-2"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4048"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker613"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path611"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker617"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path615"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(1.1,0,0,1.1,1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker621"
+ style="overflow:visible">
+ <path
+ inkscape:connector-curvature="0"
+ id="path619"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-0"
+ style="overflow:visible">
+ <path
+ id="path3951-2"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1537"
+ style="overflow:visible">
+ <path
+ id="path1535"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1541"
+ style="overflow:visible">
+ <path
+ id="path1539"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1545"
+ style="overflow:visible">
+ <path
+ id="path1543"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1549"
+ style="overflow:visible">
+ <path
+ id="path1547"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1553"
+ style="overflow:visible">
+ <path
+ id="path1551"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker1557"
+ style="overflow:visible">
+ <path
+ id="path1555"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mstart-6"
+ style="overflow:visible"
+ inkscape:isstock="true"
+ inkscape:collect="always">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3642-3"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-0-3"
+ style="overflow:visible">
+ <path
+ id="path3951-2-9"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mstart-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3642-7"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker3899-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path3645-2"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Lend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Lend-0-1"
+ style="overflow:visible">
+ <path
+ id="path3951-2-3"
+ style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4107-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4105-1"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4075-53"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4073-7"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="marker4043-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4041-6"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1pt;stroke-opacity:1"
+ transform="matrix(-0.4,0,0,-0.4,-4,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="1"
+ inkscape:pageshadow="2"
+ inkscape:zoom="0.79178738"
+ inkscape:cx="549.38991"
+ inkscape:cy="301.84871"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="2560"
+ inkscape:window-height="1027"
+ inkscape:window-x="0"
+ inkscape:window-y="25"
+ inkscape:window-maximized="0"
+ units="px"
+ showguides="false"
+ fit-margin-left="25"
+ fit-margin-right="25"
+ fit-margin-bottom="25"
+ fit-margin-top="25"
+ inkscape:document-rotation="0"
+ inkscape:showpageshadow="2"
+ inkscape:pagecheckerboard="0"
+ inkscape:deskcolor="#d1d1d1" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(-93.941982,-218.07648)">
+ <rect
+ style="opacity:0.443;fill:#c8e7c6;fill-opacity:1;stroke:#c8e7c6;stroke-width:0.801285;stroke-linejoin:round;stroke-miterlimit:5.5;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect7467"
+ width="918.80066"
+ height="705.15906"
+ x="295.53638"
+ y="278.61893"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g6838"
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.4703755"
+ rx="4.1516762"
+ y="597.3775"
+ x="170.50954"
+ height="66.792107"
+ width="82.449463"
+ id="rect3808"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="196.83681"
+ y="634.75793"
+ id="text3810"><tspan
+ sodipodi:role="line"
+ id="tspan3812"
+ x="196.83681"
+ y="634.75793"
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY0</tspan></text>
+ </g>
+ <g
+ id="g6833"
+ transform="matrix(1.2043329,0,0,1.4407663,-62.883149,-276.75293)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="translate(15,10)"
+ id="g8188"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.4703755"
+ rx="4.1516762"
+ y="739.17847"
+ x="149.08096"
+ height="66.792107"
+ width="82.449463"
+ id="rect3816"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="175.92679"
+ y="776.54718"
+ id="text3818"><tspan
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154"
+ sodipodi:role="line"
+ id="tspan3820"
+ x="175.92679"
+ y="776.54718">PHY2</tspan></text>
+ </g>
+ </g>
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.536106;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2987"
+ width="62.697647"
+ height="566.9314"
+ x="839.33459"
+ y="373.69003"
+ rx="2.0290093"
+ ry="22.132849"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="931.36285"
+ y="650.46838"
+ id="text3825"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-size:15.8071px;line-height:1.25;stroke-width:1"
+ sodipodi:role="line"
+ id="tspan3827"
+ x="931.36285"
+ y="650.46838">switch</tspan></text>
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.15514;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1099"
+ width="108.17184"
+ height="195.63086"
+ x="956.73676"
+ y="623.1394"
+ rx="3.8508778"
+ ry="3.6379144"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="1071.1218"
+ y="665.12781"
+ id="text1103"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan1101"
+ x="1071.1218"
+ y="665.12781"
+ style="stroke-width:1">controller</tspan></text>
+ <rect
+ ry="1.7753763"
+ rx="3.8508778"
+ y="625.53204"
+ x="1091.7941"
+ height="95.47184"
+ width="108.17184"
+ id="rect1116"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.108379;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ id="text1120"
+ y="621.52893"
+ x="1217.8649"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ y="621.52893"
+ x="1217.8649"
+ id="tspan1118"
+ sodipodi:role="line"
+ style="stroke-width:1">mdio_cont</tspan></text>
+ <rect
+ ry="2.7044287"
+ rx="12.051319"
+ y="545.87592"
+ x="954.79584"
+ height="52.050407"
+ width="239.33101"
+ id="rect1122"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.317374;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="1119.7616"
+ y="530.08698"
+ id="text1126"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan1124"
+ x="1119.7616"
+ y="530.08698"
+ style="stroke-width:1">code / params / data</tspan></text>
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.108379;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1130"
+ width="108.17184"
+ height="95.47184"
+ x="1092.6543"
+ y="754.17188"
+ rx="3.8508778"
+ ry="1.7753763"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="1236.4421"
+ y="739.14105"
+ id="text1134"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan1132"
+ x="1236.4421"
+ y="739.14105"
+ style="stroke-width:1">mdio</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart)"
+ d="m 903.16389,726.13059 h 52.90462"
+ id="path7492"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 1007.2527,599.03441 v 23.66973"
+ id="path7494"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker8435);marker-end:url(#marker7591)"
+ d="m 1066.07,673.26798 h 23.8016"
+ id="path7496"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#marker8435);marker-end:url(#marker7581)"
+ d="m 1145.8799,722.8505 v 28.29819"
+ id="path7498"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker8435);marker-end:url(#marker7591)"
+ d="m 1201.6664,803.31448 h 70.5394"
+ id="path8201"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="1333.2504"
+ y="732.35455"
+ id="text8205"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan8203"
+ x="1333.2504"
+ y="732.35455"
+ style="stroke-width:1">MDIO</tspan></text>
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6055"
+ width="98.927353"
+ height="156.42606"
+ x="451.96918"
+ y="458.1481"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g6244-3-6"
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6242-4-7"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5659933"
+ ry="5.1820455" />
+ </g>
+ <g
+ id="g6304-7-5"
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6302-0-9"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ <text
+ id="text6308-9-7"
+ y="651.31836"
+ x="514.82501"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ id="tspan6306-1-8"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ y="651.31836"
+ x="514.82501"
+ sodipodi:role="line">fcs</tspan></text>
+ <g
+ id="g6324-9-0"
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g6318-1-3"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect6312-0-8"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g6316-7-4"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6314-9-4"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text6322-5-9"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan6320-1-0"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">sync fifo</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3047)"
+ d="M 635.28669,606.92008 H 662.8143"
+ id="path6364-0-6"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6366-9-1"
+ d="M 730.56236,606.92008 H 751.8489"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3037)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3027)"
+ d="M 817.24226,606.92008 H 838.5288"
+ id="path6370-8-7"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 477.98383,675.48471 v 13.12135"
+ id="path6378-3-8"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g6324-9-9-9"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g6318-1-5-7"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect6312-0-9-0"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g6316-7-0-6"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6314-9-1-0"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text6322-5-4-8"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan6320-1-1-4"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">pkt_filter</tspan></text>
+ </g>
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)"
+ id="g1850-1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g1844-9"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1838-8"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g1842-1"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1840-1"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text1848-7"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan1846-7">drop_fifo</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="624.61273"
+ y="567.60132"
+ id="text2339-0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan2337-7"
+ x="624.61273"
+ y="567.60132"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path3184-4"
+ d="m 694.93209,557.63997 v 25.46554"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3017)"
+ d="m 597.47921,586.78451 v -51.35885 h 63.00271"
+ id="path3634-9"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.26339px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart-6)"
+ d="M 514.71462,661.60451 H 838.7571"
+ id="path6049-5"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6060-1"
+ width="177.53699"
+ height="136.55833"
+ x="648.95526"
+ y="497.20551"
+ transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g6244-3-3"
+ transform="matrix(0.55561808,0,0,0.69221152,212.44595,448.36757)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6242-4-1"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5659933"
+ ry="5.1820455" />
+ </g>
+ <g
+ id="g6304-7-4"
+ transform="matrix(0.52272347,0,0,0.38979911,115.58362,707.85416)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6302-0-95"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ <text
+ id="text6308-9-8"
+ y="853.69525"
+ x="514.18518"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ id="tspan6306-1-6"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ y="853.69525"
+ x="514.18518"
+ sodipodi:role="line">fcs</tspan></text>
+ <g
+ id="g6324-9-04"
+ transform="matrix(1.1497588,0,0,1.4407663,18.419118,-139.01904)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g6318-1-8"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect6312-0-1"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g6316-7-8"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6314-9-3"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text6322-5-8"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan6320-1-3"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">sync fifo</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4043-2)"
+ d="m 634.70167,828.27258 h 27.52762"
+ id="path6364-0-1"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6366-9-16"
+ d="m 729.97735,828.27258 h 21.28653"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4075-53)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4107-2)"
+ d="m 816.65724,828.27258 h 21.28654"
+ id="path6370-8-3"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 477.39881,896.8372 v 13.12135"
+ id="path6378-3-81"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g6324-9-9-5"
+ transform="matrix(1.2043329,0,0,1.4407663,-106.57897,-209.94158)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g6318-1-5-8"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect6312-0-9-4"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g6316-7-0-5"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6314-9-1-9"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text6322-5-4-1"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan6320-1-1-0"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">pkt_filter</tspan></text>
+ </g>
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.69019,-139.01904)"
+ id="g1850-6"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g1844-4"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1838-6"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g1842-9"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1840-12"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text1848-4"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan1846-9">drop_fifo</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="623.97284"
+ y="769.97809"
+ id="text2339-4"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan2337-72"
+ x="623.97284"
+ y="769.97809"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path3184-6"
+ d="m 694.34707,778.99246 v 25.46555"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-1)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker3899-2)"
+ d="M 596.89419,808.137 V 756.77815 H 659.8969"
+ id="path3634-8"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.25715px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Mstart-4)"
+ d="m 517.31809,882.957 h 320.854"
+ id="path6049-7"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6060-6"
+ width="177.53699"
+ height="136.55833"
+ x="647.37769"
+ y="722.6817"
+ transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path7181"
+ d="m 236.36318,629.91742 h 74.15586"
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2441);marker-end:url(#marker2977)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.15749px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7497);marker-end:url(#marker7515)"
+ d="m 237.9872,850.45758 h 72.53184"
+ id="path7291"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="277.65887"
+ y="773.30872"
+ id="text7295"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan7293"
+ x="277.65887"
+ y="773.30872"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">RGMII</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="861.7677"
+ y="804.07611"
+ id="text7305"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan7303"
+ x="861.7677"
+ y="804.07611"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">tx_data</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="861.7677"
+ y="601.29865"
+ id="text7305-5"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan7303-9"
+ x="861.7677"
+ y="601.29865"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">tx_data</tspan></text>
+ <g
+ transform="matrix(0.55526963,0,0,0.99236661,92.839636,73.176934)"
+ id="g7338"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.6146636"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect7336"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(0.55526963,0,0,0.99236661,92.254621,292.33212)"
+ id="g7342"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.6146636"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect7340"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ id="text7350"
+ y="785.18317"
+ x="502.78534"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px"
+ y="785.18317"
+ x="502.78534"
+ id="tspan7348"
+ sodipodi:role="line">MAC</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="503.4252"
+ y="582.80634"
+ id="text7354"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan7352"
+ x="503.4252"
+ y="582.80634"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text>
+ <path
+ inkscape:original-d="m 408.22769,624.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect10492"
+ inkscape:connector-curvature="0"
+ id="path9638"
+ d="m 408.22769,624.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker7728)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2949)"
+ d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ id="path9644"
+ inkscape:connector-curvature="0"
+ inkscape:path-effect="#path-effect9666"
+ inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.108379;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect1846"
+ width="108.17184"
+ height="95.47184"
+ x="952.09143"
+ y="392.12793"
+ rx="3.8508778"
+ ry="1.7753763"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;line-height:1.25;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="1070.7019"
+ y="384.40421"
+ id="text1850"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan1848"
+ x="1070.7019"
+ y="384.40421"
+ style="stroke-width:1">machine </tspan><tspan
+ sodipodi:role="line"
+ x="1070.7019"
+ y="406.3584"
+ id="tspan1"
+ style="stroke-width:1">learning </tspan><tspan
+ sodipodi:role="line"
+ x="1070.7019"
+ y="428.31262"
+ id="tspan2"
+ style="stroke-width:1">engine</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path1852"
+ d="m 903.03894,437.97733 h 48.77161"
+ style="fill:none;stroke:#000000;stroke-width:0.960145px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)"
+ id="g5133"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5127"
+ width="82.449463"
+ height="66.792107"
+ x="170.50954"
+ y="597.3775"
+ rx="4.1516762"
+ ry="3.4703755" />
+ <text
+ id="text5131"
+ y="634.75793"
+ x="196.83681"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154"
+ y="634.75793"
+ x="196.83681"
+ id="tspan5129"
+ sodipodi:role="line">PHY0</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)"
+ id="g5149"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="5.1820455"
+ rx="9.5659933"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5147"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)"
+ id="g5153"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5151"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="514.82501"
+ y="651.31836"
+ id="text5157"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ x="514.82501"
+ y="651.31836"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ id="tspan5155">fcs</tspan></text>
+ <g
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)"
+ id="g5171"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5165"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5159"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5163"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5161"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5169"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5167">sync fifo</tspan></text>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path5173"
+ d="M 635.28669,606.92008 H 662.8143"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2919)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2909)"
+ d="M 730.56236,606.92008 H 751.8489"
+ id="path5175"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5177"
+ d="M 817.24226,606.92008 H 838.5288"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2899)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5179"
+ d="m 477.98383,675.48471 v 13.12135"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)"
+ id="g5193"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5187"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5181"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5185"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5183"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5191"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5189">pkt_filter</tspan></text>
+ </g>
+ <g
+ id="g5207"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g5201"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect5195"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g5199"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5197"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text5205"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan5203"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">drop_fifo</tspan></text>
+ </g>
+ <text
+ id="text5211"
+ y="567.60132"
+ x="624.61273"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1"
+ y="567.60132"
+ x="624.61273"
+ id="tspan5209"
+ sodipodi:role="line">Layer 3/4</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ d="m 694.93209,557.63997 v 25.46554"
+ id="path5213"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5215"
+ d="m 597.47921,586.78451 v -51.35885 h 63.00271"
+ style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2889)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2425);marker-end:url(#marker2879)"
+ d="m 236.36318,629.91742 h 74.15586"
+ id="path5219"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="277.65887"
+ y="571.67456"
+ id="text5223"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan5221"
+ x="277.65887"
+ y="571.67456"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">RGMII</tspan></text>
+ <text
+ id="text5249"
+ y="582.80634"
+ x="503.4252"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px"
+ y="582.80634"
+ x="503.4252"
+ id="tspan5247"
+ sodipodi:role="line">MAC</tspan></text>
+ <path
+ inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect5253"
+ inkscape:connector-curvature="0"
+ id="path5251"
+ d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2869)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)"
+ id="g5317"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5311"
+ width="82.449463"
+ height="66.792107"
+ x="170.50954"
+ y="597.3775"
+ rx="4.1516762"
+ ry="3.4703755" />
+ <text
+ id="text5315"
+ y="634.75793"
+ x="196.83681"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154"
+ y="634.75793"
+ x="196.83681"
+ id="tspan5313"
+ sodipodi:role="line">PHY0</tspan></text>
+ </g>
+ <rect
+ y="458.1481"
+ x="451.96918"
+ height="156.42606"
+ width="98.927353"
+ id="rect5331"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)"
+ id="g5335"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="5.1820455"
+ rx="9.5659933"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5333"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)"
+ id="g5339"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5337"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="514.82501"
+ y="651.31836"
+ id="text5343"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ x="514.82501"
+ y="651.31836"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ id="tspan5341">fcs</tspan></text>
+ <g
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)"
+ id="g5357"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5351"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5345"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5349"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5347"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5355"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5353">sync fifo</tspan></text>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path5359"
+ d="M 635.28669,606.92008 H 662.8143"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2839)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2829)"
+ d="M 730.56236,606.92008 H 751.8489"
+ id="path5361"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5363"
+ d="M 817.24226,606.92008 H 838.5288"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2819)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5365"
+ d="m 477.98383,675.48471 v 13.12135"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)"
+ id="g5379"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5373"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5367"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5371"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5369"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5377"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5375">pkt_filter</tspan></text>
+ </g>
+ <g
+ id="g5393"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g5387"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect5381"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g5385"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5383"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text5391"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan5389"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">drop_fifo</tspan></text>
+ </g>
+ <text
+ id="text5397"
+ y="567.60132"
+ x="624.61273"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1"
+ y="567.60132"
+ x="624.61273"
+ id="tspan5395"
+ sodipodi:role="line">Layer 3/4</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ d="m 694.93209,557.63997 v 25.46554"
+ id="path5399"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5401"
+ d="m 597.47921,586.78451 v -51.35885 h 63.00271"
+ style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2809)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <rect
+ transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)"
+ y="497.20551"
+ x="648.95526"
+ height="136.55833"
+ width="177.53699"
+ id="rect5405"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2415);marker-end:url(#marker2799)"
+ d="m 236.36318,629.91742 h 74.15586"
+ id="path5407"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ id="text5437"
+ y="582.80634"
+ x="503.4252"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px"
+ y="582.80634"
+ x="503.4252"
+ id="tspan5435"
+ sodipodi:role="line">MAC</tspan></text>
+ <path
+ inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect5441"
+ inkscape:connector-curvature="0"
+ id="path5439"
+ d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2789)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <g
+ id="g5449"
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-279.63446)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.4703755"
+ rx="4.1516762"
+ y="597.3775"
+ x="170.50954"
+ height="66.792107"
+ width="82.449463"
+ id="rect5443"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="196.83681"
+ y="634.75793"
+ id="text5447"><tspan
+ sodipodi:role="line"
+ id="tspan5445"
+ x="196.83681"
+ y="634.75793"
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY1</tspan></text>
+ </g>
+ <g
+ id="g5465"
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,227.01508)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5463"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5659933"
+ ry="5.1820455" />
+ </g>
+ <g
+ id="g5469"
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,486.50168)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5467"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ <text
+ id="text5473"
+ y="651.31836"
+ x="514.82501"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ id="tspan5471"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ y="651.31836"
+ x="514.82501"
+ sodipodi:role="line">fcs</tspan></text>
+ <g
+ id="g5487"
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-360.37153)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g5481"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect5475"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g5479"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5477"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text5485"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan5483"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">sync fifo</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2769)"
+ d="M 635.28669,606.92008 H 662.8143"
+ id="path5489"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5491"
+ d="M 730.56236,606.92008 H 751.8489"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2759)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2749)"
+ d="M 817.24226,606.92008 H 838.5288"
+ id="path5493"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 477.98383,675.48471 v 13.12135"
+ id="path5495"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g5509"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-431.29407)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g5503"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect5497"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g5501"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5499"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text5507"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan5505"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">pkt_filter</tspan></text>
+ </g>
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-360.37153)"
+ id="g5523"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5517"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5511"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5515"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5513"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5521"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5519">drop_fifo</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="624.61273"
+ y="567.60132"
+ id="text5527"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan5525"
+ x="624.61273"
+ y="567.60132"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path5529"
+ d="m 694.93209,557.63997 v 25.46554"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5535"
+ d="m 236.36318,629.91742 h 74.15586"
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2405);marker-end:url(#marker2739)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="503.4252"
+ y="582.80634"
+ id="text5565"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan5563"
+ x="503.4252"
+ y="582.80634"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2729)"
+ d="m 408.22769,470.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ id="path5567"
+ inkscape:connector-curvature="0"
+ inkscape:path-effect="#path-effect5569"
+ inkscape:original-d="m 408.22769,470.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)"
+ id="g5789"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5783"
+ width="82.449463"
+ height="66.792107"
+ x="170.50954"
+ y="597.3775"
+ rx="4.1516762"
+ ry="3.4703755" />
+ <text
+ id="text5787"
+ y="634.75793"
+ x="196.83681"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154"
+ y="634.75793"
+ x="196.83681"
+ id="tspan5785"
+ sodipodi:role="line">PHY0</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.00193;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7027)"
+ d="m 442.44046,444.15203 h -56.6072"
+ id="path5793"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ id="text5797"
+ y="380.15732"
+ x="435.88388"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-size:15.8071px;line-height:1.25;stroke-width:1"
+ y="380.15732"
+ x="435.88388"
+ id="tspan5795"
+ sodipodi:role="line">rx0_d</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="435.63553"
+ y="400.98508"
+ id="text5801"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-size:15.8071px;line-height:1.25;stroke-width:1"
+ sodipodi:role="line"
+ id="tspan5799"
+ x="435.63553"
+ y="400.98508">tx0_d</tspan></text>
+ <rect
+ y="256.4408"
+ x="451.96918"
+ height="156.42606"
+ width="98.927353"
+ id="rect5803"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)"
+ id="g5807"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="5.1820455"
+ rx="9.5659933"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5805"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)"
+ id="g5811"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5809"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="514.82501"
+ y="466.90259"
+ id="text5815"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ x="514.82501"
+ y="466.90259"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ id="tspan5813">fcs</tspan></text>
+ <g
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)"
+ id="g5829"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5823"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5817"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5821"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5819"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5827"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5825">sync fifo</tspan></text>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path5831"
+ d="M 635.28669,405.2128 H 662.8143"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2703)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2693)"
+ d="M 730.56236,405.2128 H 751.8489"
+ id="path5833"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5835"
+ d="M 817.24226,405.2128 H 838.5288"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2683)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5837"
+ d="m 477.98383,473.77743 v 13.12135"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)"
+ id="g5851"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5845"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5839"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5843"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5841"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5849"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5847">pkt_filter</tspan></text>
+ </g>
+ <g
+ id="g5865"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g5859"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect5853"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g5857"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5855"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text5863"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan5861"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">drop_fifo</tspan></text>
+ </g>
+ <text
+ id="text5869"
+ y="383.18552"
+ x="624.61273"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1"
+ y="383.18552"
+ x="624.61273"
+ id="tspan5867"
+ sodipodi:role="line">Layer 3/4</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ d="m 694.93209,355.93269 v 25.46554"
+ id="path5871"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5873"
+ d="m 597.47921,385.07723 v -51.35885 h 63.00271"
+ style="fill:none;stroke:#000000;stroke-width:0.984405px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2673)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5875"
+ d="M 514.71462,459.89723 H 838.7571"
+ style="fill:none;stroke:#000000;stroke-width:1.26339px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker6523)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <rect
+ transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)"
+ y="295.49966"
+ x="648.30432"
+ height="136.55833"
+ width="177.53699"
+ id="rect5877"
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2389);marker-end:url(#marker2663)"
+ d="m 236.36318,428.21014 h 74.15586"
+ id="path5879"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ id="text5887"
+ y="416.8829"
+ x="861.7677"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1"
+ y="416.8829"
+ x="861.7677"
+ id="tspan5885"
+ sodipodi:role="line">tx_data</tspan></text>
+ <g
+ id="g5905"
+ transform="matrix(0.55526963,0,0,0.99236661,92.839636,-130.72763)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5903"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="3.6146636" />
+ </g>
+ <text
+ id="text5909"
+ y="398.39056"
+ x="503.4252"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px"
+ y="398.39056"
+ x="503.4252"
+ id="tspan5907"
+ sodipodi:role="line">MAC</tspan></text>
+ <path
+ inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect5913"
+ inkscape:connector-curvature="0"
+ id="path5911"
+ d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2653)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <g
+ id="g5921"
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.4703755"
+ rx="4.1516762"
+ y="597.3775"
+ x="170.50954"
+ height="66.792107"
+ width="82.449463"
+ id="rect5915"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="196.83681"
+ y="634.75793"
+ id="text5919"><tspan
+ sodipodi:role="line"
+ id="tspan5917"
+ x="196.83681"
+ y="634.75793"
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY0</tspan></text>
+ </g>
+ <g
+ id="g5937"
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5935"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5659933"
+ ry="5.1820455" />
+ </g>
+ <g
+ id="g5941"
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5939"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ <text
+ id="text5945"
+ y="466.90259"
+ x="514.82501"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ id="tspan5943"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ y="466.90259"
+ x="514.82501"
+ sodipodi:role="line">fcs</tspan></text>
+ <g
+ id="g5959"
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g5953"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect5947"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g5951"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5949"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text5957"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan5955"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">sync fifo</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2633)"
+ d="M 635.28669,405.2128 H 662.8143"
+ id="path5961"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path5963"
+ d="M 730.56236,405.2128 H 751.8489"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2623)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2613)"
+ d="M 817.24226,405.2128 H 838.5288"
+ id="path5965"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 477.98383,473.77743 v 13.12135"
+ id="path5967"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g5981"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g5975"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect5969"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g5973"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect5971"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text5979"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan5977"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">pkt_filter</tspan></text>
+ </g>
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)"
+ id="g5995"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g5989"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5983"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g5987"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect5985"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text5993"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan5991">drop_fifo</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="624.61273"
+ y="383.18552"
+ id="text5999"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan5997"
+ x="624.61273"
+ y="383.18552"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path6001"
+ d="m 694.93209,355.93269 v 25.46554"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6007"
+ d="m 236.36318,428.21014 h 74.15586"
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2379);marker-end:url(#marker2603)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="503.4252"
+ y="398.39056"
+ id="text6037"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan6035"
+ x="503.4252"
+ y="398.39056"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2593)"
+ d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ id="path6039"
+ inkscape:connector-curvature="0"
+ inkscape:path-effect="#path-effect6041"
+ inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <g
+ id="g6049"
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.4703755"
+ rx="4.1516762"
+ y="597.3775"
+ x="170.50954"
+ height="66.792107"
+ width="82.449463"
+ id="rect6043"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="196.83681"
+ y="634.75793"
+ id="text6047"><tspan
+ sodipodi:role="line"
+ id="tspan6045"
+ x="196.83681"
+ y="634.75793"
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154">PHY0</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2583)"
+ d="m 384.95436,421.09977 h 57.10678"
+ id="path6051"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:none;stroke-width:1.00157;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6063"
+ width="98.927353"
+ height="156.42606"
+ x="451.96918"
+ y="256.4408"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g6067"
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6065"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5659933"
+ ry="5.1820455" />
+ </g>
+ <g
+ id="g6071"
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6069"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ <text
+ id="text6075"
+ y="466.90259"
+ x="514.82501"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ id="tspan6073"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ y="466.90259"
+ x="514.82501"
+ sodipodi:role="line">fcs</tspan></text>
+ <g
+ id="g6089"
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g6083"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect6077"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g6081"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6079"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text6087"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan6085"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">sync fifo</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2573)"
+ d="M 635.28669,405.2128 H 662.8143"
+ id="path6091"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6093"
+ d="M 730.56236,405.2128 H 751.8489"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2563)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2553)"
+ d="M 817.24226,405.2128 H 838.5288"
+ id="path6095"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="m 477.98383,473.77743 v 13.12135"
+ id="path6097"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g6111"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g6105"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect6099"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g6103"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6101"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text6109"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan6107"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">pkt_filter</tspan></text>
+ </g>
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)"
+ id="g6125"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g6119"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6113"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g6117"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6115"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text6123"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan6121">drop_fifo</tspan></text>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="624.61273"
+ y="383.18552"
+ id="text6129"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan6127"
+ x="624.61273"
+ y="383.18552"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">Layer 3/4</tspan></text>
+ <path
+ inkscape:connector-curvature="0"
+ id="path6131"
+ d="m 694.93209,355.93269 v 25.46554"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <rect
+ style="opacity:1;fill:none;fill-opacity:1;stroke:#000000;stroke-width:0.315989;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:0.315989, 2.52791;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6137"
+ width="177.53699"
+ height="136.55833"
+ x="648.30432"
+ y="295.49966"
+ transform="matrix(0.99999262,0.00384124,-0.00322815,0.99999479,0,0)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6139"
+ d="m 236.36318,428.21014 h 74.15586"
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker2369);marker-end:url(#marker2543)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="503.4252"
+ y="398.39056"
+ id="text6169"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan6167"
+ x="503.4252"
+ y="398.39056"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px">MAC</tspan></text>
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2533)"
+ d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ id="path6171"
+ inkscape:connector-curvature="0"
+ inkscape:path-effect="#path-effect6173"
+ inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-70.625287,-481.34174)"
+ id="g6181"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.211017;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6175"
+ width="82.449463"
+ height="66.792107"
+ x="170.50954"
+ y="597.3775"
+ rx="4.1516762"
+ ry="3.4703755" />
+ <text
+ id="text6179"
+ y="634.75793"
+ x="196.83681"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ style="font-size:12px;line-height:1.25;stroke-width:0.759154"
+ y="634.75793"
+ x="196.83681"
+ id="tspan6177"
+ sodipodi:role="line">PHY0</tspan></text>
+ </g>
+ <g
+ transform="matrix(0.55561808,0,0,0.69221152,213.03096,25.307814)"
+ id="g6197"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="5.1820455"
+ rx="9.5659933"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6195"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <g
+ transform="matrix(0.52272347,0,0,0.38979911,116.16864,284.7944)"
+ id="g6201"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6199"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="514.82501"
+ y="466.90259"
+ id="text6205"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ x="514.82501"
+ y="466.90259"
+ style="font-size:15.8071px;line-height:1.5;stroke-width:1"
+ id="tspan6203">fcs</tspan></text>
+ <g
+ transform="matrix(1.1497588,0,0,1.4407663,19.004127,-562.07881)"
+ id="g6219"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g6213"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6207"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g6211"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6209"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text6217"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan6215">sync fifo</tspan></text>
+ </g>
+ <path
+ inkscape:connector-curvature="0"
+ id="path6221"
+ d="M 635.28669,405.2128 H 662.8143"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2523)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2513)"
+ d="M 730.56236,405.2128 H 751.8489"
+ id="path6223"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6225"
+ d="M 817.24226,405.2128 H 838.5288"
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2503)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path6227"
+ d="m 477.98383,473.77743 v 13.12135"
+ style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ transform="matrix(1.2043329,0,0,1.4407663,-105.99397,-633.00134)"
+ id="g6241"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ id="g6235"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6229"
+ width="40"
+ height="114.28571"
+ x="875.10913"
+ y="718.02032"
+ rx="9.5719967"
+ ry="8.0417528" />
+ <g
+ id="g6233"
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ style="stroke-width:0.759154">
+ <rect
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect6231"
+ width="128.28937"
+ height="88.893425"
+ x="630.25018"
+ y="519.97479"
+ rx="9.5719967"
+ ry="4.6261048" />
+ </g>
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ x="644.8136"
+ y="674.24408"
+ id="text6239"><tspan
+ sodipodi:role="line"
+ x="644.8136"
+ y="674.24408"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ id="tspan6237">pkt_filter</tspan></text>
+ </g>
+ <g
+ id="g6255"
+ transform="matrix(1.2043329,0,0,1.4407663,-105.10518,-562.07881)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <g
+ id="g6249"
+ transform="matrix(0.43373144,0,0,0.19480755,277.82562,520.36535)"
+ style="stroke-width:0.759154">
+ <rect
+ ry="8.0417528"
+ rx="9.5719967"
+ y="718.02032"
+ x="875.10913"
+ height="114.28571"
+ width="40"
+ id="rect6243"
+ style="fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.759154;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:0.759154, 6.07323;stroke-dashoffset:0;stroke-opacity:1" />
+ <g
+ transform="matrix(1,0,0,1.7383417,200.71428,-205.99428)"
+ id="g6247"
+ style="stroke-width:0.759154">
+ <rect
+ ry="4.6261048"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect6245"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ </g>
+ <text
+ id="text6253"
+ y="674.24408"
+ x="644.8136"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:1.5;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154"
+ xml:space="preserve"><tspan
+ id="tspan6251"
+ style="font-size:12px;line-height:1.5;stroke-width:0.759154"
+ y="674.24408"
+ x="644.8136"
+ sodipodi:role="line">drop_fifo</tspan></text>
+ </g>
+ <text
+ id="text6259"
+ y="383.18552"
+ x="624.61273"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1"
+ y="383.18552"
+ x="624.61273"
+ id="tspan6257"
+ sodipodi:role="line">Layer 3/4</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:0.879363px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-0-3)"
+ d="m 694.93209,355.93269 v 25.46554"
+ id="path6261"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.17038px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#marker7083);marker-end:url(#marker7113)"
+ d="m 236.36318,428.21014 h 74.15586"
+ id="path6267"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:15.8071px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="277.65887"
+ y="387.25879"
+ id="text6271"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ sodipodi:role="line"
+ id="tspan6269"
+ x="277.65887"
+ y="387.25879"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1">RGMII</tspan></text>
+ <text
+ id="text6297"
+ y="398.39056"
+ x="503.4252"
+ style="font-style:normal;font-weight:normal;font-size:31.6141px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:17.5634px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:1px"
+ y="398.39056"
+ x="503.4252"
+ id="tspan6295"
+ sodipodi:role="line">MAC</tspan></text>
+ <path
+ inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect6301"
+ inkscape:connector-curvature="0"
+ id="path6299"
+ d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(1.2043329,0,0,1.4407663,21.420155,-57.756452)" />
+ <g
+ id="g3"
+ transform="matrix(1.2043329,0,0,1.4407663,52.732811,-66.401049)"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.46153494,0,0,0.36644536,-75.027742,276.8085)"
+ id="g2"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.6146636"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect2"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="224.49301"
+ y="488.05219"
+ id="text3"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"><tspan
+ sodipodi:role="line"
+ id="tspan3"
+ x="224.49301"
+ y="488.05219"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.759154px">DDRIO</tspan></text>
+ </g>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.00193;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7027)"
+ d="m 442.44046,642.97778 h -56.6072"
+ id="path3"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ id="text4"
+ y="561.9386"
+ x="435.38718"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-size:15.8071px;line-height:1.25;stroke-width:1"
+ y="561.9386"
+ x="435.38718"
+ id="tspan4"
+ sodipodi:role="line">rx1_d</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="435.88388"
+ y="583.01465"
+ id="text5"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-size:15.8071px;line-height:1.25;stroke-width:1"
+ sodipodi:role="line"
+ id="tspan5"
+ x="435.88388"
+ y="583.01465">tx1_d</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2583)"
+ d="m 384.95436,619.92552 h 57.10678"
+ id="path5"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1.00193;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker7027)"
+ d="m 442.80564,864.3552 h -56.6072"
+ id="path6"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <text
+ id="text6"
+ y="764.58661"
+ x="433.6488"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-size:15.8071px;line-height:1.25;stroke-width:1"
+ y="764.58661"
+ x="433.6488"
+ id="tspan6"
+ sodipodi:role="line">rx2_d</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:15.8071px;line-height:0%;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman';letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="433.89716"
+ y="785.66272"
+ id="text7"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-size:15.8071px;line-height:1.25;stroke-width:1"
+ sodipodi:role="line"
+ id="tspan7"
+ x="433.89716"
+ y="785.66272">tx2_d</tspan></text>
+ <path
+ style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker2583)"
+ d="m 382.91087,841.30294 h 57.10678"
+ id="path7"
+ inkscape:connector-curvature="0"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95" />
+ <g
+ id="g8"
+ transform="matrix(1.2043329,0,0,1.4407663,52.732811,-268.10833)"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.46153494,0,0,0.36644536,-75.027742,276.8085)"
+ id="g7"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.6146636"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect7"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="224.49301"
+ y="488.05219"
+ id="text8"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"><tspan
+ sodipodi:role="line"
+ id="tspan8"
+ x="224.49301"
+ y="488.05219"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.759154px">DDRIO</tspan></text>
+ </g>
+ <g
+ id="g10"
+ transform="matrix(1.2043329,0,0,1.4407663,52.732811,155.47695)"
+ style="stroke-width:0.759154">
+ <g
+ transform="matrix(0.46153494,0,0,0.36644536,-75.027742,276.8085)"
+ id="g9"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ style="stroke-width:0.759154">
+ <rect
+ ry="3.6146636"
+ rx="9.5719967"
+ y="519.97479"
+ x="630.25018"
+ height="88.893425"
+ width="128.28937"
+ id="rect8"
+ style="fill:#ffffff;fill-opacity:1;stroke:#008080;stroke-width:0.303662;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </g>
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-weight:normal;font-size:24px;line-height:125%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.759154px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ x="224.49301"
+ y="488.05219"
+ id="text9"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"><tspan
+ sodipodi:role="line"
+ id="tspan9"
+ x="224.49301"
+ y="488.05219"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, ';stroke-width:0.759154px">DDRIO</tspan></text>
+ </g>
+ <path
+ inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect2"
+ inkscape:connector-curvature="0"
+ id="path1"
+ d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(-1.2043329,0,0,1.4407663,1599.9174,-72.164114)" />
+ <path
+ inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect4"
+ inkscape:connector-curvature="0"
+ id="path2"
+ d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(-1.2043329,0,0,1.4407663,1599.9174,-56.315685)" />
+ <path
+ inkscape:original-d="m 408.22769,330.08871 c 12.76701,-10e-4 25.53305,-10e-4 38.29813,0"
+ inkscape:path-effect="#path-effect9"
+ inkscape:connector-curvature="0"
+ id="path8"
+ d="m 408.22769,330.08871 c 12.76701,0 25.53305,0 38.29813,0"
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.742829px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker2487)"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="matrix(-1.2043329,0,0,1.4407663,1599.9174,-40.467257)" />
+ <text
+ xml:space="preserve"
+ style="font-size:24.5888px;font-family:'System Font';-inkscape-font-specification:'System Font';text-align:start;writing-mode:lr-tb;direction:ltr;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ x="-432.30255"
+ y="1188.6198"
+ id="text11"
+ transform="matrix(0,-1.0937637,0.91427428,0,0,0)"><tspan
+ sodipodi:role="line"
+ id="tspan11"
+ x="-432.30255"
+ y="1188.6198"
+ style="stroke-width:1">. . .</tspan></text>
+ <text
+ id="text12"
+ y="364.19269"
+ x="1175.2745"
+ style="font-style:normal;font-weight:normal;font-size:14.0508px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1"
+ xml:space="preserve"
+ inkscape:export-filename="C:\Projects\web-eraser\develop\writeups\static\images\system\pi_fpga_arch.png"
+ inkscape:export-xdpi="121.95"
+ inkscape:export-ydpi="121.95"
+ transform="scale(0.91427428,1.0937637)"><tspan
+ style="font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:14.0508px;font-family:'Times New Roman';-inkscape-font-specification:'Times New Roman, Italic';stroke-width:1"
+ y="364.19269"
+ x="1175.2745"
+ id="tspan12"
+ sodipodi:role="line">from rx modules</tspan></text>
+ <g
+ id="g1"
+ transform="matrix(1.1360788,0,0,1.3591126,97.301533,-665.77706)"
+ style="stroke-width:0.804764;stroke-dasharray:none">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.804764;stroke-dasharray:none"
+ x="760.11414"
+ y="734.03497"
+ id="text100"><tspan
+ sodipodi:role="line"
+ id="tspan98"
+ x="760.11414"
+ y="734.03497"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.3333px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.804764;stroke-dasharray:none">Private Island </tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:10.6667px;line-height:1.25;font-family:sans-serif;stroke-width:0.804764;stroke-dasharray:none"
+ x="842.01526"
+ y="728.91071"
+ id="text112"><tspan
+ sodipodi:role="line"
+ id="tspan110"
+ x="842.01526"
+ y="728.91071"
+ style="font-size:10.6667px;stroke-width:0.804764;stroke-dasharray:none">®</tspan></text>
+ <g
+ id="g4423"
+ transform="matrix(4.8449659,0,0,4.8449659,356.43756,14.083193)"
+ style="stroke-width:0.166103;stroke-dasharray:none">
+ <text
+ xml:space="preserve"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.752px;line-height:1.25;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.166103;stroke-dasharray:none"
+ x="83.290543"
+ y="151.25542"
+ id="text4417"><tspan
+ sodipodi:role="line"
+ x="83.290543"
+ y="151.25542"
+ style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:2.752px;font-family:'Liberation Sans';-inkscape-font-specification:'Liberation Sans';stroke-width:0.166103;stroke-dasharray:none"
+ id="tspan4585">Machine Learning Enabled</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:2.82222px;line-height:1.25;font-family:sans-serif;stroke-width:0.166103;stroke-dasharray:none"
+ x="178.67143"
+ y="176.17197"
+ id="text4421"><tspan
+ sodipodi:role="line"
+ id="tspan4419"
+ x="178.67143"
+ y="176.17197"
+ style="font-size:2.82222px;stroke-width:0.166103;stroke-dasharray:none" /></text>
+ </g>
+ </g>
+ </g>
+</svg>

Highly Recommended Verilog Books