Compare commits

...

9 Commits

Author SHA1 Message Date
829d01bf06 update: javscript not loading 2024-04-02 12:09:28 +02:00
e1de2cbf77 update 2024-04-02 11:13:35 +02:00
5891da6fa5 update 2024-03-29 11:22:52 +01:00
83f97a8d65 update 2024-03-29 10:43:00 +01:00
33eba8fcfb update 2024-03-28 12:43:09 +01:00
Your Name
2f0d08cf0a update 2024-03-28 09:56:53 +01:00
Your Name
cbc84b434b update 2024-03-28 09:53:35 +01:00
Your Name
5b5c0ca098 update 2024-03-28 09:46:50 +01:00
Your Name
b6b70dde04 cleanup 2024-03-28 09:43:59 +01:00
67 changed files with 3818 additions and 1212 deletions

4
.gitignore vendored
View File

@ -1 +1,3 @@
*.pgm *.pgm
maps/
__pycache__/

Binary file not shown.

View File

@ -1,29 +0,0 @@
-----BEGIN CERTIFICATE-----
MIIFCTCCAvGgAwIBAgIUSToN1sKvyyEHUX43N0x2pJ2tozYwDQYJKoZIhvcNAQEL
BQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MB4XDTIzMDgyMzE0NDgwMFoXDTI0MDgy
MjE0NDgwMFowFDESMBAGA1UEAwwJbG9jYWxob3N0MIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAuz16ToP/oe0GlHELnOxXVMbQ4ygDhAoJRDW+h3AN01QP
GD8hKByM5QKUd1bnUa40jKeENerJLVpwvYW+wksIw8OEoU+XKLQav59LkumMx94Y
92vhfYPEdjJGfBSemf4GALw0GmeizeglGKQAomBN2fV0Wege77T6aE3GSafzmgWk
WKIXLzYd0C+fzMUnf7TtbpacG71D1VAryedq2/srR6ZnrP92SyWB6vJt9kdFxhie
V0zdrmiLhKbj4QBHn2ZfBzBe33eLHEJc7DlQ7fkQr58PVnF35h0lIYC2YdZjGSIe
1r12HGCvjDlDX3ygznsnMIIOGPd78vzpiVUlIk1MLqS4FeAMqyTFuljZ7UjG2+Yf
p+9gJ/3vfbCiWmtwJOuZvCeXvCwUGlvJH7aFan9UKG0OCuIOBY+8ZqkbgKQ8lCNv
hk5HD8z49pa2u9Tzau68KMLOIhJ000sPW17RrWTrQK0izLeNmxlUvNFtg65pCpE7
yUinlKVfBjPraK1htuZL/E0MZ1sq9YV/VbjFQnrhad1bZ+DvLRuX2Ehd8gsUt6UL
hQW3vq7GmXo0u+xT1XIkCEYdNUGo4xXKr925MmcRVa6gR5dsAuAoQ5cN/5z4wnJt
eNonakERtPomAC/ACTsbr3RjpG6h0jPHXta5XC+PKydV9riuk/LAIRIF0dKGfHUC
AwEAAaNTMFEwHQYDVR0OBBYEFKL/qoyl0fc1f6VBhW5GJDpae5a7MB8GA1UdIwQY
MBaAFKL/qoyl0fc1f6VBhW5GJDpae5a7MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
hvcNAQELBQADggIBADoEzbUqOiTbTOppCRP3q+l8Z3mlymtZgz/BcyGms+8B2LMC
xSJ88+lkg23XG8KQ+oIOHDaLBsVUePeSLLt3MAtDMbBEDUsUf2nWK+l3IbNlMxTn
1beb/FM1QRwLfbqGvVi7afpZvLH7wJc2SCv+996eW/Hau5yDxntqupjAd1G7pDrJ
PQMJhmWg1VQHxBC1MyMVdz8r4nqBSIKN5XMxdrZitXOa6c2b2/SvolGN6UEUD1at
LAbS1nXloBNVuOrmTCxRxCKxec8+2qs4QOc/Ux7jF9Q65TkW1IkucnDaOluDcufY
n4GQXaRFyQJInoGpWlOM3hJ2ZlhlQj+tjuvTyu7uWCINC4r0bYqpIpY4mWzXKRFT
e5M4nVy8YukjsM82zZRvXdD8Mlfuxb8xkpQBdqVClO24TSjZOCAw4qsizpV/N7S9
NmQ5+2CI4l3KvhH1gAjtXvNOOicn7laXDtz5wc1fZxmUptQQp5JXFtSguLpJpGli
r7s8wRPnVJW3HhjNIzYIzOm3J4dtl1+ZqHGfeFes+8ty2HAJK1AmnRvt8UQK3VjR
YrlzbM6+cjzmJQ3S3LTXOi0Zssf6SQspCaAMP8hUXhZyi8y7PMNHpp/LuUEFox03
/L8X5DB9SXofdFp+1jVh6WZCV8wt39Fxo+l+5afpeIc138XOkgvsrBFNzTi9
-----END CERTIFICATE-----

27
config/box_filter.yaml Normal file
View File

@ -0,0 +1,27 @@
scan_to_scan_filter_chain:
ros__parameters:
filter1:
name: box_filter
type: laser_filters/LaserScanBoxFilter
params:
box_frame: laser_frame
max_x: 0.80 #was 0.16
max_y: 0.18 #was 0.17
max_z: 0.1
min_x: -0.41 #was -0.41
min_y: -0.18 # was -0.17
min_z: -0.2
invert: false # activate to remove all points outside of the box
name: shadows
type: laser_filters/ScanShadowsFilter
params:
min_angle: 10
max_angle: 170
neighbors: 20
window: 1
name: dark_shadows
type: laser_filters/LaserScanIntensityFilter
params:
lower_threshold: 100
upper_threshold: 10000
disp_histogram: 0

34
config/caddy/Caddyfile Normal file
View File

@ -0,0 +1,34 @@
# {
# debug
# }
http://cps-seggy {
root * /usr/share/caddy
file_server browse
handle_path /config* {
reverse_proxy http://olivetin:1337
}
handle_path /viz* {
reverse_proxy http://foxglove:8080
}
# this is not working right now
handle_path /joy* {
reverse_proxy http://host.docker.internal:8000
}
}
http://cps-seggy.local {
root * /usr/share/caddy
file_server browse
handle_path /config {
reverse_proxy http://olivetin:1337
}
handle_path /viz* {
reverse_proxy http://foxglove:8080
}
}

View File

@ -0,0 +1,69 @@
<!doctype html>
<html lang="en">
<head>
<title>ROS + Bootstrap 4 demo</title>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<body class="bg-light">
<!-- SPEED -->
<div class="row">
<div class="col-md-4"></div>
<div class=" col-md-4">
<label for="robot-speed">
<strong>Robot speed</strong>
</label>
<input type="range" min="15" max="80" class="custom-range" id="robot-speed">
</div>
<div class="col-md-4"></div>
</div>
<!-- VIDEO -->
<div class="row my-4">
<div class="col d-flex justify-content-center">
<img src="" class="p-1 bg-dark" alt="" id="video" />
</div>
</div>
<!-- JOYSTICK -->
<div class="row my-4">
<div class="col">
<div class="d-flex justify-content-center" style="width: 210px; height: 210px;">
<div id="joystick"></div>
</div>
</div>
</div>
<!-- INFO -->
<div class="row my-4">
<div class="col-md-2"></div>
<div class="col-md-8">
<div class="alert alert-success">
<h4 class="alert-heading">ROS + Bootstrap interface demo</h4>
<ul>
<li>set speed using a slider</li>
<li>use joystick or WASD keys on keyboard to move </li>
</ul>
</div>
</div>
<div class="col-md-2"></div>
</div>
<!-- Optional JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/roslibjs/1.1.0/roslib.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/eventemitter3/5.0.1/index.min.js"></script>
<script src="https://github.com/GT-RAIL/keyboardteleopjs/raw/develop/build/keyboardteleop.min.js"></script>
<script src="//yoannmoinet.github.io/nipplejs/javascripts/nipplejs.js"></script>
<script src="webui.js"></script>
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>

View File

@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>ROS + Bootstrap 5 demo</title>
<!-- Required meta tags -->
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<!-- Bootstrap CSS v5.2.1 -->
<link
href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-T3c6CoIi6uLrA9TneNEoa7RxnatzjcDSCmG1MXxSR1GAsXEV/Dwwykc2MPK8M2HN"
crossorigin="anonymous"
/>
</head>
<body>
<body class="bg-light"></body>
<header>
<!-- place navbar here -->
</header>
<main>
<!-- SPEED -->
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<label for="robot-speed">
<strong>Robot speed</strong>
</label>
<input
type="range"
min="15"
max="80"
class="custom-range"
id="robot-speed"
/>
</div>
<div class="col-md-4"></div>
</div>
<!-- VIDEO -->
<div class="row my-4">
<div class="col d-flex justify-content-center">
<img src="" class="p-1 bg-dark" alt="" id="video" />
</div>
</div>
<!-- JOYSTICK -->
<div class="row my-4">
<div class="col">
<div
class="d-flex justify-content-center"
style="width: 210px; height: 210px"
>
<div id="joystick"></div>
</div>
</div>
</div>
<!-- INFO -->
<div class="row my-4">
<div class="col-md-2"></div>
<div class="col-md-8">
<div class="alert alert-success">
<h4 class="alert-heading">ROS + Bootstrap interface demo</h4>
<ul>
<li>set speed using a slider</li>
<li>use joystick or WASD keys on keyboard to move</li>
</ul>
</div>
</div>
<div class="col-md-2"></div>
</div>
</main>
<footer>
<!-- place footer here -->
</footer>
<!-- Optional JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/roslibjs/1.1.0/roslib.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/eventemitter3/5.0.1/index.min.js"></script>
<script src="https://github.com/GT-RAIL/keyboardteleopjs/raw/develop/build/keyboardteleop.min.js"></script>
<script src="//yoannmoinet.github.io/nipplejs/javascripts/nipplejs.js"></script>
<script src="webui.js"></script>
<!-- Bootstrap JavaScript Libraries -->
<script
src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"
integrity="sha384-I7E8VVD/ismYTF4hNIPjVp/Zjvgyol6VFvRkX/vR+Vc4jQkC+hVqc2pM8ODewa9r"
crossorigin="anonymous"
></script>
<script
src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.min.js"
integrity="sha384-BBtl+eGJRgqQAUMxJ7pMwbEyER4l1g+O15P+16Ep7Q9Q+zqX6gSbd85u4mG4QzX+"
crossorigin="anonymous"
></script>
</body>
</html>

View File

@ -0,0 +1,139 @@
// Begin by creating some global variables:
var twist;
var cmdVel;
var publishImmidiately = true;
var robot_IP;
var manager;
var teleop;
var ros;
// Write a function to send ROS messages with velocity for robot:
function moveAction(linear, angular) {
if (linear !== undefined && angular !== undefined) {
twist.linear.x = linear;
twist.angular.z = angular;
} else {
twist.linear.x = 0;
twist.angular.z = 0;
}
cmdVel.publish(twist);
}
// Write a function to create velocity message publisher:
function initVelocityPublisher() {
// Init message with zero values.
twist = new ROSLIB.Message({
linear: {
x: 0,
y: 0,
z: 0
},
angular: {
x: 0,
y: 0,
z: 0
}
});
// Init topic object
cmdVel = new ROSLIB.Topic({
ros: ros,
name: '/cmd_vel',
messageType: 'geometry_msgs/Twist'
});
// Register publisher within ROS system
cmdVel.advertise();
}
// Write a function to create keyboard controller object:
function initTeleopKeyboard() {
// Use w, s, a, d keys to drive your robot
// Check if keyboard controller was aready created
if (teleop == null) {
// Initialize the teleop.
teleop = new KEYBOARDTELEOP.Teleop({
ros: ros,
topic: '/cmd_vel'
});
}
// Add event listener for slider moves
robotSpeedRange = document.getElementById("robot-speed");
robotSpeedRange.oninput = function () {
teleop.scale = robotSpeedRange.value / 100
}
}
// Write a function to create joystick object:
function createJoystick() {
// Check if joystick was aready created
if (manager == null) {
joystickContainer = document.getElementById('joystick');
// joystck configuration, if you want to adjust joystick, refer to:
// https://yoannmoinet.github.io/nipplejs/
var options = {
zone: joystickContainer,
position: { left: 50 + '%', top: 105 + 'px' },
mode: 'static',
size: 200,
color: '#0066ff',
restJoystick: true
};
manager = nipplejs.create(options);
// event listener for joystick move
manager.on('move', function (evt, nipple) {
// nipplejs returns direction is screen coordiantes
// we need to rotate it, that dragging towards screen top will move robot forward
var direction = nipple.angle.degree - 90;
if (direction > 180) {
direction = -(450 - nipple.angle.degree);
}
// convert angles to radians and scale linear and angular speed
// adjust if youwant robot to drvie faster or slower
var lin = Math.cos(direction / 57.29) * nipple.distance * 0.005;
var ang = Math.sin(direction / 57.29) * nipple.distance * 0.05;
// nipplejs is triggering events when joystic moves each pixel
// we need delay between consecutive messege publications to
// prevent system from being flooded by messages
// events triggered earlier than 50ms after last publication will be dropped
if (publishImmidiately) {
publishImmidiately = false;
moveAction(lin, ang);
setTimeout(function () {
publishImmidiately = true;
}, 50);
}
});
// event litener for joystick release, always send stop message
manager.on('end', function () {
moveAction(0, 0);
});
}
}
// …and finally main app initialization:
window.onload = function () {
// determine robot address automatically
// robot_IP = location.hostname;
// set robot address statically
robot_IP = "100.105.121.16";
// // Init handle for rosbridge_websocket
ros = new ROSLIB.Ros({
url: "ws://" + robot_IP + ":9090"
});
initVelocityPublisher();
// get handle for video placeholder
video = document.getElementById('video');
// Populate video source
video.src = "http://" + robot_IP + ":8080/stream?topic=/camera/rgb/image_raw&type=mjpeg&quality=80";
video.onload = function () {
// joystick and keyboard controls will be available only when video is correctly loaded
createJoystick();
initTeleopKeyboard();
};
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@ -0,0 +1,95 @@
<!DOCTYPE html>
<html>
<!-- ersetze die Links + QR Codes unter den Kommentaren -->
<head>
<title>CPS Bot Overview</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="style.css">
</head>
<header>
<h1 id="HEADLINE">CPS Seggy Overview<img src="CPS_Logo_White_square_TRANSP.png" id="LOGO"></h1>
</header>
<body>
<div class="box" id="RIGHT">
<div id="BLOCK_ONE">
<p class="mini-heads">Teleop:</p>
<!-- again -->
<!-- Replace link at href -->
<!-- hier Link zu Joystick -->
<a href="http://cps-seggy.local:8000/">
<img src="joystick.png" class="qr qr_2"></a>
<br>
</div>
<div id="BLOCK_ONE">
<p class="mini-heads">Robot Configuration:</p>
<!-- again -->
<!-- Replace link at href -->
<!-- hier Link zu WebGui -->
<a href="/config/">
<img src="wrench.svg" class="qr qr_2"></a>
<br>
</div>
<p id="SPACE"> </p>
<div id="BLOCK_TWO">
<p class="mini-heads">Data View:</p>
<!-- again -->
<!-- hier Link zu Manual -->
<a href="/viz/">
<img src="safety-glasses.svg" class="qr qr_2">
</a>
<br>
</div>
<p id="SPACE"> </p>
<div id="BLOCK_THREE">
<p class="mini-heads">Manual:</p>
<!-- again -->
<!-- hier Link zu Manual -->
<a href="https://cps.unileoben.ac.at">
<img src="blueprint.svg" class="qr qr_2">
</a>
<br>
</div>
</div>
<div class="box" id="LEFT">
<p class="mini-heads">Connect to Wi-Fi:</p>
<!-- replace mit relativen Link!!!, bei mir spinnts und es wird das gebrochene Bild symbol angezeigt. Anders geht
es allerdings, falls nicht bei dir sags mir -->
<img src="qr-loki.wifi.svg" class="qr">
<div id="NORM_SET">
<table>
<tr>
<td>SSID:</td>
<td>cps-loki</td>
</tr>
<tr>
<td>Password: </td>
<td>cps-loki</td>
</tr>
</table>
</div>
</div>
<div class="info">
<!-- Link zum Lehrstuhl, einfach den ganzen Div Block rausnehmen falls du das nicht willst -->
<a href="https://cps.unileoben.ac.at/">Check us out!</a>
</div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

View File

@ -0,0 +1,508 @@
<?xml version="1.0" encoding="utf-8"?>
<!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="1160px" height="1160px" viewBox="0 0 1160 1160" enable-background="new 0 0 1160 1160" xml:space="preserve">
<rect x="0" y="0" width="1160" height="1160" fill="rgb(255,255,255)" /><g transform="translate(80,80)"><g transform="translate(320,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(120,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(120,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(200,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(200,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(120,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(200,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(120,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(720,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(0,720) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(80,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g><g transform="translate(800,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g><g transform="translate(80,800) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g></g></svg>

After

Width:  |  Height:  |  Size: 34 KiB

View File

@ -0,0 +1,728 @@
<?xml version="1.0" encoding="utf-8"?>
<!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="1155px" height="1155px" viewBox="0 0 1155 1155" enable-background="new 0 0 1155 1155" xml:space="preserve">
<rect x="0" y="0" width="1155" height="1155" fill="rgb(255,255,255)" /><g transform="translate(70,70)"><g transform="translate(280,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,0) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,35) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,70) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,105) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,140) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,175) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,210) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,245) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(140,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(210,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,280) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,315) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(210,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,350) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(35,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(140,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,385) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(210,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,420) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(140,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,455) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(35,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(140,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(210,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,490) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(35,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,525) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(35,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(210,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,560) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(140,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(175,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,595) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(35,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(210,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,630) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(35,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,665) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(35,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(70,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(105,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(210,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(245,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,700) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,735) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,770) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,805) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,840) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(385,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,875) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(735,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(945,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,910) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(350,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(420,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(455,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(525,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(770,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(805,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(875,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(910,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(980,945) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(315,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(490,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(595,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(630,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(665,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(700,980) scale(0.35,0.35)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,0) scale(2.45, 2.45)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(770,0) scale(2.45, 2.45)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(0,770) scale(2.45, 2.45)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(70,70) scale(1.05, 1.05)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g><g transform="translate(840,70) scale(1.05, 1.05)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g><g transform="translate(70,840) scale(1.05, 1.05)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g></g></svg>

After

Width:  |  Height:  |  Size: 50 KiB

View File

@ -0,0 +1,552 @@
<?xml version="1.0" encoding="utf-8"?>
<!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="1160px" height="1160px" viewBox="0 0 1160 1160" enable-background="new 0 0 1160 1160" xml:space="preserve">
<rect x="0" y="0" width="1160" height="1160" fill="rgb(255,255,255)" /><g transform="translate(80,80)"><g transform="translate(320,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,0) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,40) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,80) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,120) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,160) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,200) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,240) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,280) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(120,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(200,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,320) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(120,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,360) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,400) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(120,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(200,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,440) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(200,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,480) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,520) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(40,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,560) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(200,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,600) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(80,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(160,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(240,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(280,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,640) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,680) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,720) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,760) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(600,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,800) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(560,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(720,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,840) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,880) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(760,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(800,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(880,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(920,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,920) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(320,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(360,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(400,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(440,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(480,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(520,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(640,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(680,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(840,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(960,960) scale(0.4,0.4)"><g transform="" style="fill: rgb(16, 64, 102);">
<rect width="100" height="100"/>
</g></g><g transform="translate(0,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(720,0) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(0,720) scale(2.8, 2.8)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<path style="fill:none;" d="M65.859,15.008H34.141c-4.082,0-7.869,1.258-10.979,3.398c-2.419,1.665-4.428,3.864-5.848,6.421
C15.838,27.484,15,30.526,15,33.758v32.471c0,10.344,8.586,18.76,19.145,18.76L50,84.992l15.855-0.004
C76.414,84.988,85,76.572,85,66.229V33.758C85,23.419,76.414,15.008,65.859,15.008z"/>
<path d="M65.859,0.008H34.141h0C18.683,0.008,5.587,10.221,1.4,24.18c-0.433,1.444-0.771,2.928-1.006,4.445
C0.135,30.299,0,32.013,0,33.758v32.471c0,18.619,15.32,33.76,34.141,33.76L50,99.992l15.859-0.004
c18.82,0,34.141-15.141,34.141-33.76V33.758C100,15.148,84.68,0.008,65.859,0.008z M85,66.229c0,10.344-8.586,18.76-19.145,18.76
L50,84.992l-15.855-0.004C23.586,84.988,15,76.572,15,66.229V33.758c0-3.231,0.838-6.273,2.313-8.931
c1.42-2.557,3.429-4.756,5.848-6.421c3.11-2.141,6.897-3.398,10.979-3.398h31.719C76.414,15.008,85,23.419,85,33.758V66.229z"/>
</g>
</g></g><g transform="translate(80,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g><g transform="translate(800,80) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g><g transform="translate(80,800) scale(1.2, 1.2)"><g transform="" style="fill: rgb(16, 64, 102);">
<g>
<g id="XMLID_1_">
<g>
<path d="M27.351,100c-15.09,0-27.365-12.032-27.365-26.808V26.794c0-4.616,1.2-8.96,3.301-12.761
c2.029-3.658,4.901-6.802,8.36-9.174C16.09,1.801,21.506,0,27.336,0h45.327c15.076,0,27.351,12.018,27.351,26.793v46.398
c0,14.775-12.274,26.808-27.351,26.808H50H27.351z"/>
</g>
<g>
</g>
</g>
</g>
</g></g></g></svg>

After

Width:  |  Height:  |  Size: 37 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 80 KiB

View File

@ -0,0 +1 @@
<svg id="icons" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><defs><style>.cls-1{fill:#b7e29c;}.cls-2{fill:#97cc83;}.cls-3{fill:#f4d647;}.cls-4{fill:#f4a742;}.cls-5{fill:#5282ef;}.cls-6{fill:#a2bdf4;}.cls-7{fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px;}</style></defs><title>safety-glasses</title><path class="cls-1" d="M48,37a33.319,33.319,0,0,1,8.56,1.083A27.63,27.63,0,0,0,64,39a27.643,27.643,0,0,0,7.44-.917A33.308,33.308,0,0,1,80,37h22.474a1,1,0,0,0,.85-1.536C96.759,24.828,84.651,18,64,18S31.241,24.828,24.675,35.464A1,1,0,0,0,25.526,37Z"/><path class="cls-1" d="M90,91c-15.884,0-19.965-7.631-22.665-12.681C65.561,75,64.656,75,64,75s-1.56,0-3.335,3.319C57.964,83.369,53.883,91,38,91c-5.978,0-10.526-1.4-13.985-3.723a1,1,0,0,0-1.487,1.229C28.428,101.418,40.846,110,64,110s35.572-8.582,41.473-21.495a1,1,0,0,0-1.487-1.229C100.526,89.6,95.978,91,90,91Z"/><path class="cls-2" d="M67.33,78.32a26.676,26.676,0,0,0,4.57,6.64,282.35,282.35,0,0,0-15.14,24.73C38.2,108.07,27.78,100,22.53,88.51a1,1,0,0,1,1.48-1.23C27.47,89.6,32.02,91,38,91c15.88,0,19.96-7.63,22.67-12.68C62.44,75,63.34,75,64,75S65.56,75,67.33,78.32Z"/><path class="cls-2" d="M102.47,37H80a33.7,33.7,0,0,0-8.56,1.08c-.89.21-1.73.41-2.67.57A170.727,170.727,0,0,1,91.95,24.34a32.506,32.506,0,0,1,11.37,11.12A1,1,0,0,1,102.47,37Z"/><g id="_Group_" data-name="&lt;Group&gt;"><path class="cls-3" d="M113,46v4a2.006,2.006,0,0,1-2,2h-4.33c-.23,0-.45-.01-.68-.02a11.881,11.881,0,0,1-2.59-.43l-7.39-2.1A12,12,0,0,0,92.74,49s-10.25,2.86-27.5,2.99h-.01c-.41.01-.82.01-1.23.01-5.4,0-10.14-.27-14.14-.65h-.01A91.913,91.913,0,0,1,35.26,49a12,12,0,0,0-3.27.45l-7.39,2.1a11.881,11.881,0,0,1-2.59.43c-.23.01-.45.02-.68.02H17a2.006,2.006,0,0,1-2-2V46a4,4,0,0,1,4-4H48c7,0,8,2,16,2s9-2,16-2h29A4,4,0,0,1,113,46Z"/><path class="cls-4" d="M106.67,52h3.32c0,17-1.04,34-19.99,34C68,86,75,70,64,70S60,86,38,86C19.05,86,18.01,69,18.01,52h3.32c.23,0,.45-.01.68-.02V52c0,7.02.29,12.77,1.22,17.29a21.68,21.68,0,0,0,2.42,6.75C28.03,80.04,31.88,82,38,82c10.49,0,12.45-3.67,14.73-7.92C54.55,70.67,57.05,66,64,66s9.45,4.67,11.27,8.08C77.55,78.33,79.51,82,90,82c13.6,0,15.99-9.67,15.99-30v-.02C106.22,51.99,106.44,52,106.67,52Z"/><path class="cls-5" d="M105.99,51.98V52c0,20.33-2.39,30-15.99,30-10.49,0-12.45-3.67-14.73-7.92C73.45,70.67,70.95,66,64,66s-9.45,4.67-11.27,8.08C50.45,78.33,48.49,82,38,82c-6.12,0-9.97-1.96-12.35-5.96,6.37-7.39,18.66-18.12,39.58-24.05h.01C82.49,51.86,92.74,49,92.74,49a12,12,0,0,1,3.27.45l7.39,2.1A11.881,11.881,0,0,0,105.99,51.98Z"/><path class="cls-6" d="M64,52c.41,0,.82,0,1.23-.01C44.31,57.92,32.02,68.65,25.65,76.04a21.68,21.68,0,0,1-2.42-6.75A60.754,60.754,0,0,1,49.85,51.35h.01C53.86,51.73,58.6,52,64,52Z"/><path class="cls-5" d="M35.26,49a91.913,91.913,0,0,0,14.59,2.35A60.754,60.754,0,0,0,23.23,69.29C22.3,64.77,22.01,59.02,22.01,52v-.02a11.881,11.881,0,0,0,2.59-.43l7.39-2.1A12,12,0,0,1,35.26,49Z"/><path class="cls-7" d="M18.01,52c0,17,1.04,34,19.99,34,22,0,15-16,26-16s4,16,26,16c18.95,0,19.99-17,19.99-34"/><path class="cls-7" d="M65.24,51.99C82.49,51.86,92.74,49,92.74,49a12,12,0,0,1,3.27.45l7.39,2.1a11.881,11.881,0,0,0,2.59.43c.23.01.45.02.68.02H111a2.006,2.006,0,0,0,2-2V46a4,4,0,0,0-4-4H80c-7,0-8,2-16,2s-9-2-16-2H19a4,4,0,0,0-4,4v4a2.006,2.006,0,0,0,2,2h4.33c.23,0,.45-.01.68-.02a11.881,11.881,0,0,0,2.59-.43l7.39-2.1A12,12,0,0,1,35.26,49a91.913,91.913,0,0,0,14.59,2.35"/><path class="cls-7" d="M49.86,51.35c4,.38,8.74.65,14.14.65.41,0,.82,0,1.23-.01"/><path class="cls-7" d="M105.99,51.98V52c0,20.33-2.39,30-15.99,30-10.49,0-12.45-3.67-14.73-7.92C73.45,70.67,70.95,66,64,66s-9.45,4.67-11.27,8.08C50.45,78.33,48.49,82,38,82c-6.12,0-9.97-1.96-12.35-5.96a21.68,21.68,0,0,1-2.42-6.75C22.3,64.77,22.01,59.02,22.01,52v-.02"/><path class="cls-7" d="M23.23,69.29A60.754,60.754,0,0,1,49.85,51.35h.01"/><path class="cls-7" d="M25.65,76.04c6.37-7.39,18.66-18.12,39.58-24.05h.01"/></g></svg>

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -0,0 +1,247 @@
html
{
background-color: rgb(51, 51, 51);
font-family: sans-serif;
padding-bottom: 50px;
}
#HEADLINE
{
font-family:'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
text-align: center;
color: white;
background-color: rgb(1, 115, 126);
box-shadow: 0px 15px 0px -5px rgb(1, 89, 97);
margin-top: 2px;
}
#LOGO
{
height: 1em;
width: auto;
float: right;
margin-top: 2px;
padding-left: 12px;
padding-right: 12px;
background-color: inherit;
}
.mini-heads
{
color: white;
font-weight: 700;
}
#LEFT
{
float: left;
max-width: 49.5%;
text-align: center;
}
#RIGHT
{
float: right;
max-width: 49.5%;
flex-direction: row;
text-align: center;
}
.qr
{
max-width: 59.5%;
height: auto;
object-fit: cover;
border-color: black;
border: 3px solid;
border-radius: 10%;
}
.qr_2
{
width: 35%;
height: auto;
}
table, td
{
color: white;
width: 70%;
line-height: 190%;
border: 1px solid rgb(76, 76, 76);
background-color: rgb(34, 34, 34);
border-collapse: collapse;
margin-left: auto;
margin-right: auto;
}
#SPACE
{
padding: 3px;
}
#NORM_SET
{
padding-top: 6px;
}
.link
{
color: white;
background-color: rgb(1, 115, 126);
padding-left: 10px;
padding-right: 10px;
border-radius: 3px;
text-decoration: none;
}
.link:hover
{
color: rgb(206, 206, 206);
}
.link:visited
{
color: rgb(75, 75, 75);
background-color: rgb(1, 89, 97);
}
.info
{
color: white;
background-color: rgb(34, 34, 34);
padding-top: 3px;
padding-right: 6px;
text-indent: 6px;
position: fixed;
bottom: 0px;
right: 6px;
border: 1px solid rgb(76, 76, 76);
}
.info:hover
{
cursor: pointer;
}
.info:visited
{
color: rgb(206, 206, 206);
}
a, a:visited, a:hover, a:active {
text-decoration: none;
color: inherit;
}
/* Phone */ /* pract. ab 400% zoom (inludkiert) am pc */
@media only screen and (max-width : 480px)
{
#LEFT
{
width: 100%;
max-width: none;
clear: both;
text-align: center;
}
#RIGHT
{
max-width: none;
padding-top: 10px;
}
.qr
{
max-width: 43.9%;
}
.qr_2
{
width: 29%;
}
}
/* Tablet / Ipad */ /* pract. ab 200% Zoom (nicht inkludiert) am pc */
@media only screen and (max-width : 767px) and (min-width: 481px)
{
#LEFT
{
max-width: none;
width: 100%;
clear: both;
text-align: center;
}
.qr
{
max-width: 35%;
}
table td
{
font-size: large;
}
.mini-heads
{
font-size: x-large;
}
#RIGHT
{
max-width: none;
}
#SPACE
{
padding: none;
display: none;
}
#BLOCK_ONE
{
max-width: 49.5%;
float: left;
}
#BLOCK_TWO
{
max-width: 49.5%;
float: right;
}
#BLOCK_THREE
{
max-width: 49.5%;
float: right;
}
.qr_2
{
max-width: 80%;
width: 50%;
}
.link
{
font-size: larger;
}
.info
{
font-size: larger;
}
}

View File

@ -0,0 +1 @@
<svg id="icons" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128"><defs><style>.cls-1{fill:#9addf7;}.cls-2{fill:#65c7e5;}.cls-3{fill:#cbccd3;}.cls-4{fill:#a5a7ad;}.cls-5{fill:none;stroke:#000;stroke-linecap:round;stroke-linejoin:round;stroke-width:2px;}.cls-6{opacity:0.16;}</style></defs><title>wrench</title><path class="cls-1" d="M108.91,50.84a1,1,0,0,0-1.57-.62c-5.62,4.09-10.88,5.38-15.64,6.53-3.79.92-7.06,1.71-10.22,3.9a19.456,19.456,0,0,0-3.84,3.7C66.47,78.2,51.65,95.15,42.5,105.22a1,1,0,0,0,.42,1.62A63.082,63.082,0,0,0,64,110a78.244,78.244,0,0,0,8.64-.45,49.668,49.668,0,0,0,17.25-4.75C105.07,97.12,110,81.74,110,64A74.515,74.515,0,0,0,108.91,50.84ZM73.98,18.61A77.519,77.519,0,0,0,64,18c-9.06,0-16.47,1.31-22.5,3.69A33.934,33.934,0,0,0,26.95,32.2C20.39,40.47,18,51.67,18,64a65.914,65.914,0,0,0,2.58,19.37.993.993,0,0,0,1.63.42c4.55-4.21,10.43-9.52,16.74-15.09,2.68-2.37,5.44-4.78,8.21-7.18,5.14-4.45,10.32-8.84,15.12-12.78a19.294,19.294,0,0,0,3.03-3.05c3.47-4.53,3.86-8.9,4.24-13.12.34-3.79.68-7.71,3.6-10.65l1.46-1.66A1,1,0,0,0,73.98,18.61Z"/><path class="cls-2" d="M45.74,30.99l-4.01,7A2,2,0,0,1,39.99,39H32.01a2,2,0,0,1-1.74-1.01L26.95,32.2A33.934,33.934,0,0,1,41.5,21.69a1.858,1.858,0,0,1,.23.32l4.01,7A2,2,0,0,1,45.74,30.99Z"/><path class="cls-2" d="M94.993,70.5H91.007a2,2,0,0,0-1.735,1.006l-2.006,3.5a2,2,0,0,0,0,1.989l2.006,3.5A2,2,0,0,0,91.007,81.5h3.985a2,2,0,0,0,1.735-1.006l2.006-3.5a2,2,0,0,0,0-1.989l-2.006-3.5A2,2,0,0,0,94.993,70.5Z"/><path class="cls-2" d="M47.16,61.52c-2.77,2.4-5.53,4.81-8.21,7.18a1.934,1.934,0,0,1-.68-.71l-2.01-3.5a2,2,0,0,1,0-1.98l2.01-3.5A2,2,0,0,1,40.01,58h3.98a2,2,0,0,1,1.74,1.01Z"/><path class="cls-2" d="M89.89,104.8a49.668,49.668,0,0,1-17.25,4.75l-1.53-5.65a1.991,1.991,0,0,1,.51-1.94l5.65-5.65a2,2,0,0,1,1.94-.52L87,97.9a2.011,2.011,0,0,1,1.4,1.41Z"/><g id="_Group_" data-name="&lt;Group&gt;"><path class="cls-3" d="M92.89,42l-1.76,3.63c-.04.08-.08.16-.13.24a1.986,1.986,0,0,1-1.47.88,1.574,1.574,0,0,1-.53-.01,1.721,1.721,0,0,1-.54-.18l-.85-.42-.61-.3-1.18-.58-1.8-.88L83,43.88l-.78-.38-.97-.48a1.274,1.274,0,0,1-.25-.15,1.869,1.869,0,0,1-.47-.46,2.012,2.012,0,0,1-.2-2.09L81,38.93l1.09-2.25a1.98,1.98,0,0,1,.91-.92,2.107,2.107,0,0,1,.73-.21,1.9,1.9,0,0,1,1.03.2l.24.12.63.31,1.37.67.43.21,1.57.78.23.11,1.77.87.02.01.95.47a2.03,2.03,0,0,1,.92,2.7Z"/><path class="cls-3" d="M94.4,16.02a2,2,0,0,1,1.66,2.86L90.14,31.7,79.35,26.67a15.038,15.038,0,0,1,3.72-6.24A14.881,14.881,0,0,1,94.4,16.02Z"/><path class="cls-4" d="M111.47,22.16c1.8,5.55,3.17,14.29-2.91,20.43-11.01,11.11-20.5,7.4-29.93,13.96a23.949,23.949,0,0,0-4.88,4.66C58.54,80.07,37.58,103.5,32.09,109.04a9.941,9.941,0,0,1-14.16,0,10.171,10.171,0,0,1,0-14.29c5.5-5.55,28.81-26.79,47.52-42.15a24.047,24.047,0,0,0,3.82-3.86c7.55-9.83,3.53-19.36,7.43-23.3l2.65,1.23L90.14,31.7l4.02,1.87a4.013,4.013,0,0,0,1.99.36l5.43-.42a4.014,4.014,0,0,0,3.53-2.86l2.54-8.43A2,2,0,0,1,111.47,22.16ZM92.89,42a2.032,2.032,0,0,0-.92-2.7l-7.21-3.55a1.987,1.987,0,0,0-2.67.93l-1.76,3.64a2.035,2.035,0,0,0,.92,2.7l7.21,3.54a1.979,1.979,0,0,0,2.67-.93ZM25.02,106A3.952,3.952,0,0,0,29,102.02,4.046,4.046,0,0,0,24.98,98,3.952,3.952,0,0,0,21,101.98,4.046,4.046,0,0,0,25.02,106Z"/><path class="cls-5" d="M79.35,26.67,76.7,25.44c-3.9,3.94.12,13.47-7.43,23.3a24.047,24.047,0,0,1-3.82,3.86C46.74,67.96,23.43,89.2,17.93,94.75a10.171,10.171,0,0,0,0,14.29,9.941,9.941,0,0,0,14.16,0c5.49-5.54,26.45-28.97,41.66-47.83a23.949,23.949,0,0,1,4.88-4.66c9.43-6.56,18.92-2.85,29.93-13.96,6.08-6.14,4.71-14.88,2.91-20.43a2,2,0,0,0-3.82.06l-2.54,8.43a4.014,4.014,0,0,1-3.53,2.86l-5.43.42a4.013,4.013,0,0,1-1.99-.36L90.14,31.7Z"/><path class="cls-5" d="M21,101.98A3.952,3.952,0,0,1,24.98,98,4.046,4.046,0,0,1,29,102.02,3.952,3.952,0,0,1,25.02,106,4.046,4.046,0,0,1,21,101.98Z"/><path class="cls-5" d="M79.35,26.67a15.038,15.038,0,0,1,3.72-6.24A14.881,14.881,0,0,1,94.4,16.02a2,2,0,0,1,1.66,2.86L90.14,31.7"/><path class="cls-5" d="M80.33,40.32l1.76-3.64a1.987,1.987,0,0,1,2.67-.93l7.21,3.55a2.032,2.032,0,0,1,.92,2.7l-1.76,3.63a1.979,1.979,0,0,1-2.67.93l-7.21-3.54A2.035,2.035,0,0,1,80.33,40.32Z"/><line class="cls-5" x1="86.72" y1="36.71" x2="83.3" y2="44.03"/><line class="cls-5" x1="90.31" y1="38.48" x2="86.9" y2="45.79"/></g><g class="cls-6"><path d="M30.172,91.172,58.879,63.879a3,3,0,0,1,4.243,4.243L35.828,96.828a4,4,0,0,1-5.8-5.514C30.072,91.269,30.127,91.215,30.172,91.172Z"/></g></svg>

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -0,0 +1,35 @@
showNavigation: false
logLevel: "INFO"
showNewVersions: false
showFooter: false
actions:
- title: "Start Navigation Stack"
shell: docker start ros2_rmp-navigation-1
icon: '<img src = "customIcons/nav2_start.png" width = "48px"/>'
- title: "Stop Navigation Stack"
shell: docker stop ros2_rmp-navigation-1
icon: '<img src = "customIcons/nav2_stop.png" width = "48px"/>'
- title: "Start Mapping"
shell: docker start ros2_rmp-mapping-1
icon: '<img src = "customIcons/mapping_start.gif" width = "48px"/>'
- title: "Stop Mapping"
shell: docker stop ros2_rmp-mapping-1
icon: '<img src = "customIcons/mapping_stop.gif" width = "48px"/>'
- title: "Restart Teleop"
icon: '<img src = "customIcons/gamepad.png" width = "48px"/>'
shell: docker restart ros2_rmp-teleop-1
- title: Restart or Shutdown System
icon: restart
shell: systemctl {{ choice }}
arguments:
- name: choice
title: Pick one
choices:
- value: reboot
- value: shutdown
# This will SSH into a server an run the command 'service httpd restart'
# - title: Restart httpd on Server 1
# shell: ssh bjorn@loki.local 'echo "it works"'
# icon: ping
# timeout: 5

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 MiB

After

Width:  |  Height:  |  Size: 13 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

View File

@ -0,0 +1 @@
ba1fa920-2863-4600-994f-23559acfcab2

View File

@ -1,28 +1,5 @@
version: "3.9" version: "3.9"
# First network configuration. Change this to the network interface you want to use primarily. (Better configuration for multiple Network interfaces needed).
networks:
# rmp:
# driver: macvlan
# driver_opts:
# parent: eno1 # robot network interface
# ipam:
# config:
# - subnet: 192.168.0.0/24
# gateway: 192.168.0.1
# ip_range: 192.168.0.200/25
# aux_addresses:
# net-address: 192.168.0.100 #? what is this for --> to exclude addresses from buing used.
# make new bridge network for ros
rmp:
driver: bridge
# ipam:
# config:
# - subnet:
# add this mountpoint to all services: - ./customize/entrypoint.sh:/entrypoint.sh
# Attention: child services will inherit settings from their parents. So if you set a network_mode: host in the base service, all child services will also use host networking. This is not always what you want. So be careful with this.
services: services:
# Base image containing dependencies. # Base image containing dependencies.
base: base:
@ -62,10 +39,6 @@ services:
- ./config/entrypoint.sh:/entrypoint.sh - ./config/entrypoint.sh:/entrypoint.sh
- ./config/cyclonedds.xml:/cyclonedds.xml - ./config/cyclonedds.xml:/cyclonedds.xml
# networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
# rmp:
# #ipv4_address: 192.168.0.101 #actually don't need to set ips. they are set automatically by docker-compose. SHould be inherited by all child services.
# Overlay image containing the project specific source code. # Overlay image containing the project specific source code.
overlay: overlay:
extends: base extends: base
@ -95,10 +68,6 @@ services:
tags: tags:
- ghcr.io/bjoernellens1/ros2_rmp/rmp:guis - ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
target: guis target: guis
x-bake:
platforms:
- linux/arm64
- linux/amd64
command: > command: >
/bin/bash /bin/bash
devices: devices:
@ -141,8 +110,8 @@ services:
ros2 launch cps_rmp220_support robot_lidar.launch.py serial_port:=/dev/rplidarA1 ros2 launch cps_rmp220_support robot_lidar.launch.py serial_port:=/dev/rplidarA1
devices: devices:
- /dev/rplidarA1:/dev/rplidarA1 #udevrules needed for this to work: - /dev/rplidarA1:/dev/rplidarA1 #udevrules needed for this to work:
# SUBSYSTEM=="tty", ATTRS{serial}=="0001", SYMLINK+="segway" # SUBSYSTEM=="tty", ATTRS{serial}=="0001", SYMLINK+="segway"
# SUBSYSTEM=="tty", ATTRS{serial}=="3453995662b3af4f81f4a69eba5f3f29", SYMLINK+="rplidarA1" # SUBSYSTEM=="tty", ATTRS{serial}=="3453995662b3af4f81f4a69eba5f3f29", SYMLINK+="rplidarA1"
# Lidar filtering node. # Lidar filtering node.
lidar_filter: lidar_filter:
@ -214,20 +183,7 @@ services:
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
command: > command: >
ros2 launch cps_rmp220_support rviz.launch.py ros2 launch cps_rmp220_support rviz.launch.py
# Needed to display graphical applications
privileged: true # really necessary?
environment:
# Allows graphical programs in the container.
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
volumes:
# Allows graphical programs in the container.
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
# Foxglove Studio Bridge # Foxglove Studio Bridge
foxglove_bridge: foxglove_bridge:
extends: overlay extends: overlay
@ -240,22 +196,14 @@ services:
stdin_open: true stdin_open: true
tty: true tty: true
# Networking # Networking
network_mode: bridge networks:
- caddy_network
ports: ports:
- 8080:8080 - 8080:8080
depends_on: depends_on:
- foxglove_bridge - foxglove_bridge
volumes: volumes:
- ./foxglove/default.json:/foxglove/default-layout.json - ./config/foxglove/default.json:/foxglove/default-layout.json
# USB Camera Stream
cam:
extends: overlay
command: >
ros2 run ros2_cam_openCV cam_node
devices:
- /dev/video0:/dev/video0
# ROS2 Frontier exploration # ROS2 Frontier exploration
explorer: explorer:
@ -272,41 +220,41 @@ services:
### Images for ROS1 Interactions ### Images for ROS1 Interactions
#ROS1 Bridge #ROS1 Bridge
ros1bridge: # ros1bridge:
image: ghcr.io/bjoernellens1/ros2_rmp/ros1bridge # image: ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
command: > # command: >
ros2 run ros1_bridge dynamic_bridge --bridge-all-2to1-topics # ros2 run ros1_bridge dynamic_bridge --bridge-all-2to1-topics
build: # build:
context: . # context: .
dockerfile: docker/Dockerfile # dockerfile: docker/Dockerfile
tags: # tags:
- ghcr.io/bjoernellens1/ros2_rmp/ros1bridge # - ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
args: # args:
ROS_DISTRO: humble # ROS_DISTRO: humble
target: bridge # target: bridge
x-bake: # x-bake:
platforms: # platforms:
#- linux/arm64 # #- linux/arm64
- linux/amd64 # - linux/amd64
# Networking and IPC for ROS 2 # # Networking and IPC for ROS 2
network_mode: host # network_mode: host
ipc: host # ipc: host
environment: # environment:
- ROS_DOMAIN_ID=5 # - ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp # - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here # - ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
#ROS1 roscore #ROS1 roscore
roscore: # roscore:
command: > # command: >
roscore # roscore
extends: ros1bridge # extends: ros1bridge
network_mode: host # network_mode: host
ipc: host # ipc: host
environment: # environment:
- ROS_DOMAIN_ID=5 # - ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp # - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here # - ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
## Configure on ROS1 Hosts ## Configure on ROS1 Hosts
# seggy 192.168.0.100 # seggy 192.168.0.100
@ -338,7 +286,7 @@ services:
ros2 launch depthai_examples stereo.launch.py ros2 launch depthai_examples stereo.launch.py
#devices: #devices:
#- /dev/oakd-lite:/dev/oakd-lite # need corresponding udevrules for this to work: #- /dev/oakd-lite:/dev/oakd-lite # need corresponding udevrules for this to work:
# SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666", SYMLINK+="oakd-lite" # SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666", SYMLINK+="oakd-lite"
#- /dev/:/dev/ #- /dev/:/dev/
device_cgroup_rules: device_cgroup_rules:
- 'c 189:* rmw' - 'c 189:* rmw'
@ -360,25 +308,108 @@ services:
- DISPLAY=${DISPLAY} - DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1 - QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all - NVIDIA_DRIVER_CAPABILITIES=all
zerotier: ################################################################################################################################
image: "zyclonite/zerotier:router" # Core Services for Web Management #
container_name: zerotier-one ################################################################################################################################
devices: caddy:
- /dev/net/tun image: caddy:latest
network_mode: host networks:
- caddy_network
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "80:80"
- "443:443"
volumes: volumes:
- '/var/lib/zerotier-one:/var/lib/zerotier-one' - ./config/caddy/Caddyfile:/etc/caddy/Caddyfile
cap_add: - ./config/caddy/content:/usr/share/caddy/
- NET_ADMIN restart: always
- SYS_ADMIN depends_on:
- NET_RAW - foxglove
restart: unless-stopped - olivetin
# roscore:
# image: husarion/ros1-bridge:foxy-0.9.6-20230327-stable
# command: |
# bash -c "source /opt/ros/noetic/setup.bash && roscore"
# network_mode: host
# environment:
# - ROS_DOMAIN_ID=5
# restart: always
# Webui Stuff
# need to properly setup ros1bridge initialization
ros1bridge:
image: husarion/ros1-bridge:foxy-0.9.6-20230327-stable
command: |
sh /opt/ros/noetic/setup.sh && ros2 run ros1_bridge dynamic_bridge
network_mode: host
ipc: host
environment: environment:
- TZ=Europe/Amsterdam - ROS_DOMAIN_ID=5
- PUID=1000 - RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
- PGID=1000 restart: always
- ZEROTIER_ONE_LOCAL_PHYS=enp5s0 wlx00e04c5513fc # change for actual interfaces webui-joystick:
- ZEROTIER_ONE_USE_IPTABLES_NFT=false image: husarion/webui-ros-joystick:noetic-0.0.1-20230510-stable
- ZEROTIER_ONE_GATEWAY_MODE=inbound # might change to both ways network_mode: host
#- ZEROTIER_ONE_NETWORK_IDS= # does not really do much? ipc: host
environment:
- ROS_DOMAIN_ID=5
restart: always
depends_on:
- ros1bridge
command: roslaunch webui-ros-joystick webui.launch
olivetin:
container_name: olivetin
image: jamesread/olivetin
#image: ghcr.io/bjoernellens1/cps_bot_mini_ws/olivetin
build:
context: .
dockerfile: docker/Dockerfile
tags:
- ghcr.io/bjoernellens1/cps_bot_mini_ws/olivetin
target: olivetin
x-bake:
platforms:
#- linux/arm64
- linux/amd64
user: root
privileged: true
volumes:
- ./config/olivetin/:/config/ # here is config.yaml and icons located
- ./config/olivetin/icons:/var/www/olivetin/customIcons
- .:/repo
- /var/run/docker.sock:/var/run/docker.sock
# - /var/lib/docker:/var/lib/docker
- ~/.ssh/id_rsa:/root/.ssh/id_rsa
networks:
- caddy_network
ports:
- "1337:1337"
restart: always
# Webcam stream with ffmpeg x264 compression
# need to add ros-humble-v4l2-camera
webcam:
#extends: overlay
build: https://github.com/bjoernellens1/image-transport-docker/raw/main/demo/webcam/Dockerfile.webcam
image: husarion/image-transport:humble-4.2.0
devices:
- /dev/video1:/dev/video0
- /dev/dri:/dev/dri
volumes:
- ./:/repo
command: >
ros2 launch /repo/webcam.launch.py
ffmpeg_encoding:=libx264
ffmpeg_preset:=ultrafast
ffmpeg_tune:=zerolatency
################################################################################################################################
# Docker related extra stuff #
################################################################################################################################
networks:
caddy_network:
driver: bridge

View File

@ -1,460 +0,0 @@
version: "3.9"
# First network configuration. Change this to the network interface you want to use primarily. (Better configuration for multiple Network interfaces needed).
networks:
rmp:
driver: macvlan
driver_opts:
parent: eno1 # robot network interface
ipam:
config:
- subnet: 192.168.0.0/24
gateway: 192.168.0.1
ip_range: 192.168.0.200/25
aux_addresses:
net-address: 192.168.0.100 #? what is this for --> to exclude addresses from buing used.
services:
# Base image containing dependencies.
base:
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:base
build:
context: .
dockerfile: docker/Dockerfile
tags:
- ghcr.io/bjoernellens1/ros2_rmp/rmp:base
args:
ROS_DISTRO: humble
target: base
x-bake:
platforms:
- linux/arm64
- linux/amd64
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
# Needed to display graphical applications
#privileged: true
environment:
# Allows graphical programs in the container.
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all
volumes:
# Allows graphical programs in the container.
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
rmp:
#ipv4_address: 192.168.0.101 #actually don't need to set ips. they are set automatically by docker-compose. SHould be inherited by all child services.
# Overlay image containing the project specific source code.
overlay:
extends: base
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:overlay
build:
context: .
dockerfile: docker/Dockerfile
tags:
- ghcr.io/bjoernellens1/ros2_rmp/rmp:overlay
target: overlay
x-bake:
platforms:
- linux/arm64
- linux/amd64
volumes:
- .:/repo
command: >
/bin/bash
# Additional dependencies for GUI applications
guis:
extends: overlay
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
build:
context: .
dockerfile: docker/Dockerfile
tags:
- ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
target: guis
x-bake:
platforms:
- linux/arm64
- linux/amd64
#entrypoint: /bin/bash
command: >
/bin/bash
# Robot State Publisher
rsp:
extends: overlay
command: >
ros2 launch cps_rmp220_support rsp.launch.py
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# Controller
controller:
extends: base
command: >
ros2 run segwayrmp SmartCar --ros-args -r cmd_vel:=cmd_vel_out -p serial_full_name:=/dev/segway
devices:
- /dev/segway:/dev/segway
- /dev/ttyUSB0:/dev/ttyUSB0
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
# Needed to display graphical applications
privileged: false
# depends_on:
# - robot_state_publisher
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# teleop
teleop:
extends: base
depends_on:
- controller
command: >
ros2 launch rmp220_teleop robot_joystick.launch.py
devices:
- /dev/input/js0:/dev/input/js0
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
# Needed to display graphical applications
privileged: true
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# lidar
lidar:
extends: overlay
command: >
ros2 launch cps_rmp220_support robot_lidar.launch.py serial_port:=/dev/rplidarA1
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
# depends_on:
# - robot_state_publisher
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
devices:
- /dev/rplidarA1:/dev/rplidarA1 #udevrules needed for this to work:
# SUBSYSTEM=="tty", ATTRS{serial}=="0001", SYMLINK+="segway"
# SUBSYSTEM=="tty", ATTRS{serial}=="3453995662b3af4f81f4a69eba5f3f29", SYMLINK+="rplidarA1"
# localiaztion by ekf node
ekf:
extends: overlay
depends_on:
- controller
- rsp
command: >
ros2 launch cps_rmp220_support robot_localization.launch.py
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# mapping
mapping:
extends: overlay
depends_on:
- ekf
- rsp
- lidar
command: >
ros2 launch cps_rmp220_support robot_mapping.launch.py
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# slam-toolbox-localization
localization:
extends: overlay
depends_on:
- ekf
- rsp
- lidar
command: >
ros2 launch cps_rmp220_support robot_mapping_localization.launch.py map_file_name:=/repo/maps/map.yaml
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# amcl_localization
amcl:
extends: overlay
depends_on:
- ekf
- rsp
- lidar
command: >
ros2 launch cps_rmp220_support robot_amcl.launch.py map:=/repo/maps/map.yaml
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# navigation
navigation:
extends: overlay
depends_on:
- controller
- teleop
- rsp
- lidar
- ekf
- oakd
# command: >
# ros2 launch cps_rmp220_support robot_navigation.launch.py
# map_subscribe_transient_local:=true
command: >
ros2 launch nav2_bringup bringup_launch.py slam:=True map:=/repo/maps/map_current.sav.yaml use_sim_time:=False use_composition:=True params_file:=/overlay_ws/src/cps_rmp220_support/config/nav2_params.yaml
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# bash
bash:
extends: overlay
command: >
/bin/bash
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
# rviz2
rviz2:
#extends: guis
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
# command: >
# ros2 launch cps_rmp220_support robot_rviz2.launch.py
command: >
ros2 launch cps_rmp220_support rviz.launch.py
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
network_mode: host
ipc: host
# Needed to display graphical applications
privileged: true
environment:
# Allows graphical programs in the container.
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
volumes:
# Allows graphical programs in the container.
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
# Foxglove Studio Bridge
foxglove_bridge:
extends: overlay
command: >
ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
rmp:
ipv4_address: 192.168.0.201 #actually don't need to set ips. they are set automatically by docker-compose. SHould be inherited by all child services.
# Foxglove Studio Webserver
foxglove_webserver:
image: ghcr.io/foxglove/studio:latest
stdin_open: true
tty: true
# Networking
network_mode: bridge
ports:
- 8080:8080
depends_on:
- foxglove_bridge
volumes:
- ./foxglove/default.json:/foxglove/default-layout.json
# USB Camera Stream
cam:
extends: overlay
command: >
ros2 run ros2_cam_openCV cam_node
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
devices:
- /dev/video0:/dev/video0
# ROS2 Frontier exploration
explorer:
extends: overlay
depends_on:
- controller
- teleop
- rsp
- lidar
- ekf
- navigation
command: >
ros2 launch cps_rmp220_support robot_exploration.launch.py
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
### Images for ROS1 Interactions
#ROS1 Bridge
ros1bridge:
image: ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
command: >
ros2 run ros1_bridge dynamic_bridge --bridge-all-2to1-topics
build:
context: .
dockerfile: docker/Dockerfile
tags:
- ghcr.io/bjoernellens1/ros2_rmp/ros1bridge
args:
ROS_DISTRO: humble
target: bridge
x-bake:
platforms:
#- linux/arm64
- linux/amd64
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
#ROS1 roscore
roscore:
command: >
roscore
extends: ros1bridge
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
- ROS_MASTER_URI=http://localhost:11311 # is configured to run roscore on the robot but could change to local ros1 machine here
# ROS2 oak-d-lite camera
oakd:
extends: overlay
command: >
ros2 launch depthai_examples stereo.launch.py
stdin_open: true
tty: true
# Networking and IPC for ROS 2
#network_mode: host
ipc: host
environment:
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
#privileged: true
#devices:
#- /dev/oakd-lite:/dev/oakd-lite # need corresponding udevrules for this to work:
# SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666", SYMLINK+="oakd-lite"
#- /dev/:/dev/
device_cgroup_rules:
- 'c 189:* rmw'
volumes:
- /dev/bus/usb:/dev/bus/usb
# for testing the oak-d-lite camera -> works now with cgroup rules
depthai:
image: luxonis/depthai:latest
command: >
python3 /depthai/depthai_demo.py
stdin_open: true
tty: true
device_cgroup_rules:
- 'c 189:* rmw'
volumes:
- /dev/bus/usb:/dev/bus/usb
environment:
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all

BIN
docs/loki_overview.odg Normal file

Binary file not shown.

View File

@ -1,62 +0,0 @@
services:
### Husarnet VPN Container for remote access
husarnet:
image: husarnet/husarnet
restart: unless-stopped
volumes:
- /var/lib/husarnet # This will persist your Husarnet Client keys, thus IP of the container will be stable/the same between (re)boots
sysctls:
- net.ipv6.conf.all.disable_ipv6=0 # Husarnet is using IPv6 for the internal connections
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun
env_file:
- ./husarnet/.env # create .env file in the same folder as Dockerfile and specify HOSTNAME and JOINCODE there
color_controller:
build:
dockerfile: husarnet/Dockerfile
volumes:
- ./husarnet/cyclonedds.xml:/cyclonedds.xml
command:
- bash
- -c
- |
export CYCLONEDDS_URI=file:///cyclonedds.xml
ros2 run my_demo_pkg color_controller
network_mode: service:husarnet
move_controller:
build:
dockerfile: husarnet/Dockerfile
volumes:
- ./husarnet/cyclonedds.xml:/cyclonedds.xml
command:
- bash
- -c
- |
export CYCLONEDDS_URI=file:///cyclonedds.xml
ros2 run my_demo_pkg move_controller
network_mode: service:husarnet
turtle_sim:
image: osrf/ros:galactic-desktop
privileged: true
environment:
# Allows graphical programs in the container.
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all
volumes:
# Allows graphical programs in the container.
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
- ./husarnet/cyclonedds.xml:/cyclonedds.xml
command:
- bash
- -c
- |
export CYCLONEDDS_URI=file:///cyclonedds.xml
ros2 run turtlesim turtlesim_node
network_mode: service:husarnet # This is the most important line in this setup. This will put the Husarnet Client in the same network namespace as your app (in this example: turtle_sim)

View File

@ -1,27 +0,0 @@
#!/bin/bash
# Basic entrypoint for ROS / Colcon Docker containers
# Source ROS 2
source /opt/ros/${ROS_DISTRO}/setup.bash
echo "Sourced ROS 2 ${ROS_DISTRO}"
# Source the base workspace, if built
if [ -f ${UNDERLAY_WS}/install/setup.bash ]
then
source ${UNDERLAY_WS}/install/setup.bash
#export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:$(ros2 pkg prefix turtlebot3_gazebo)/share/turtlebot3_gazebo/models
echo "Sourced Bot Mini base workspace"
fi
# Source the overlay workspace, if built
if [ -f /overlay_ws/install/setup.bash ]
then
source /overlay_ws/install/setup.bash
#export GAZEBO_MODEL_PATH=$GAZEBO_MODEL_PATH:$(ros2 pkg prefix tb3_worlds)/share/tb3_worlds/models
echo "Sourced Bot Mini overlay workspace"
fi
# Copy over files
cp -r /overlay_ws/src/* /repo/src/
wait

View File

@ -1,19 +0,0 @@
#!/bin/bash
# Specify the name of your Python script
SCRIPT_NAME="robot_config.py"
# Check if the script exists in the current directory
if [ -f "$SCRIPT_NAME" ]; then
# Check if /usr/local/bin is writable
if [ -w "/usr/local/bin" ]; then
# Copy the script to /usr/local/bin
sudo cp "$SCRIPT_NAME" "/usr/local/bin"
sudo chmod +x "/usr/local/bin/$SCRIPT_NAME"
echo "Script '$SCRIPT_NAME' has been installed in /usr/local/bin."
else
echo "Error: /usr/local/bin is not writable. You may need to use 'sudo' to install the script."
fi
else
echo "Error: Script '$SCRIPT_NAME' not found in the current directory."
fi

52
key.pem
View File

@ -1,52 +0,0 @@
-----BEGIN PRIVATE KEY-----
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQC7PXpOg/+h7QaU
cQuc7FdUxtDjKAOECglENb6HcA3TVA8YPyEoHIzlApR3VudRrjSMp4Q16sktWnC9
hb7CSwjDw4ShT5cotBq/n0uS6YzH3hj3a+F9g8R2MkZ8FJ6Z/gYAvDQaZ6LN6CUY
pACiYE3Z9XRZ6B7vtPpoTcZJp/OaBaRYohcvNh3QL5/MxSd/tO1ulpwbvUPVUCvJ
52rb+ytHpmes/3ZLJYHq8m32R0XGGJ5XTN2uaIuEpuPhAEefZl8HMF7fd4scQlzs
OVDt+RCvnw9WcXfmHSUhgLZh1mMZIh7WvXYcYK+MOUNffKDOeycwgg4Y93vy/OmJ
VSUiTUwupLgV4AyrJMW6WNntSMbb5h+n72An/e99sKJaa3Ak65m8J5e8LBQaW8kf
toVqf1QobQ4K4g4Fj7xmqRuApDyUI2+GTkcPzPj2lra71PNq7rwows4iEnTTSw9b
XtGtZOtArSLMt42bGVS80W2DrmkKkTvJSKeUpV8GM+torWG25kv8TQxnWyr1hX9V
uMVCeuFp3Vtn4O8tG5fYSF3yCxS3pQuFBbe+rsaZejS77FPVciQIRh01QajjFcqv
3bkyZxFVrqBHl2wC4ChDlw3/nPjCcm142idqQRG0+iYAL8AJOxuvdGOkbqHSM8de
1rlcL48rJ1X2uK6T8sAhEgXR0oZ8dQIDAQABAoICABwvlX1DRpSQEzj+SXK+aykS
YriHOfxC7IEtm/hUaGhjE4ChZDLfFWCWAlZyqRC1KijwQKlDJjSjFCybeQtTc0bQ
5GLKEeWpMwuchapgaPZfWx/HyCJ2Vvk5+T1Nd1CUGkA7FJbS+gGIDCmI6qWG3MFO
P00XcazA8B8Kcip9U2Dgr4w+HkJXoaZIvQP8u8TwLfvDRU2xsIfocScMJJxn02yO
QrYaoKqQQ13kT6ROt1SqOQ/IPOi3ySTXYJ9qxN1ccjqpT+bQ3oqK/OT8fc/M+fON
/KeVHijwQzonX40b0kAi0ESgMar07QgtSJSTtLtQc6ZMNaYRf0GlS9yGCjh/LVPo
IFCKjpSDfp2J9Q7RSFKdb8tghcTfQNAg/6zen1JnE5iUBiaQZfIj7+iD5hQfn9a2
I1Fs3m1or3n1Z+BUg7vkDPQCyRkVEBXkKsbpD3T2cnxY9sfF0+ClmdfBQyCcLG5p
mf6XAWQEiJrQ9iWuQYWpHDqaatan6G5ym8Wy7nJYdjJgJTszzduUSt176W8R7bGW
73y9de+kEODQsxehSpkTVEqsMEgpTAKi5u59RRhj4OT9Lbvk9Xs9OH23aUcVUu5H
urMIAKdsjlAUhLSPupDr4bJPRM9N4t2v709VeH170Z/9X5j7LbF++Wh2t+UXprmb
0nDk5fjfzJnjXJQgd+nRAoIBAQDpUc+3MuLadphfyM5b5xc9A/8TuwW5a2jcLi1h
6NlZa63qPbGvEk3kUw71ELrh8NorRqvn895CJUG4K+zVUTl9dgsXqla7GWZFHIXW
2641R4p8HQNwNFP7KIyvvv5l72A+wWf1jpZiXXYNinrHDtPgdVXEFMDhDLibu6AK
jsfdNOXDE+mmxMTSwwgJ9blZkdp1pBEWYCZsqW/yED6pLdTh8ZRPGHOb24x6HksZ
Z/Gc4SIOrj5jrt3/M9oEymP+fQnF/StlnVsRnai6hBQX9khlS3pjneLOCLJfhpt/
qcIDL03KsIhf0miIkOpNTATL4SGsWDBAQp17eN4UToacARRpAoIBAQDNcPlDVBqt
K+fy9BBR9HBzBQlx6XkrmZ9Cgje/FrpMT+2UZ5wqMMPyB7SdoXkxx0CpB3ajOost
i92fk7Y03xHXS3COGLKhWqDNhH1Uotlp3wpeOWx3DlAFRcIvy86iDzTa/hGaq8Kp
2HPw0YqcxQjwYQzILBfZx3DRuQ8bt3Wiqxer/K+NRDnass/ZUTqz6nZcadMj6NiS
Zlwm7ErjhjdYRc6amTZMtxOenxP8cAtNW+RBZ7JbUEhAhE8zU42wZI+DxhvM0mTg
/CrRaYVE6YyAnaYo0RuJCRldz6obbgABn0q8qoY1Rmxjm+Do27hsrQgAB9Z/gmAp
hdU2+S270fYtAoIBAQCuEYlEhkRU9HHN1ESQsCHYNakSEU+9+/JpglH9X/j4C6ve
vFRZ5vARzh20m9yxQD2kV79c98Xz11PmkW7J3yVjArRX3Y+DWvm/yf3YRGD+AvfA
jOzJw2B8Ws5LN9UYO7S0XRqwSsbLcCrpA02CQP+10BRCi7EytYjtNte5yLg3woVA
OxTwhJDLJRJUS+0SdAxmBBdzeBxyqR6Jm7EECttuDgu1zupBd1SgrwUcWT4a6qO8
DCcju4yIHykitdRQQv0Np0m/L9yHkfYV4QAUuHtehycyNtLFIBvjxMsyPXYvZhVF
iNrVkmbGrEcBkBtr9/RlXg3xg0F2osAcqlEnBm8xAoIBADGLZkGrfcd3iDeaTnlF
Rv0mINH86UDvim3is4j89S7EM9qPZiTyn761xwQg1faARAK/jwfsbXYtfeQnHlD/
3vCZ++n44NNy5MbLheIsZ9xVcs2ocZUAuaGb4iner9V7b1bE4P/5HjgRwFw6XIBU
MESwUwHPSG034OhjBda8Vr1FH69VgAzEgGNSrjeNlGehSqwcxVOqqtgboWutnp3i
V2SNaTb1bhfwKuYdHRfK+Z7NY222kVfeM56Digopw0jf55By7W9m6fcsOTNJjF9D
J6Q44MKFM2vH6vspwq9cxtmdTcvUIAunESqwg/wESSTEUeKYAU285m39HZ9lVncu
On0CggEAEk6pzS5OX7DSWqrTnYd9T83lr7RzFQpWpbeK7OOidMUYm/MHx7I2UyLN
V0K/ChkYowm69VvHJW9mcSHo0RAZiokBegJP8fhU0RJJaWyED+wdw2vOHlwAI7WP
hj3xCOT8D+qfx12wVqo6c0jRXnNUsd5V9DPtMkn7YFYuq56gSqwlLvIpuhfU8dJM
dCznLvjQqRQhqMk3p0bbcy4+EICR19F8UzgUfqWITwrdIriWQEWzDXIZvsBjxpaE
PenJGHMSac7xOU/hdljj6FSpwu03aA0HklCQhwpfNDd+KPR7ntNE1DBEn93/bScb
O61K2Igm/AywqweBe9cWRgB7lOXwIA==
-----END PRIVATE KEY-----

Binary file not shown.

View File

@ -1,7 +0,0 @@
image: map_floor_save.pgm
mode: trinary
resolution: 0.05
origin: [-13.7, -5.57, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

View File

@ -1,7 +0,0 @@
image: map_floor_mainb_save_retouched.pgm
mode: trinary
resolution: 0.05
origin: [-66.2, -24.5, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

View File

@ -1,7 +0,0 @@
image: map_floor_mainb_save.pgm
mode: trinary
resolution: 0.05
origin: [-20.9, -7.03, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

Binary file not shown.

View File

@ -1,7 +0,0 @@
image: map_floor_03-10-23.sav.pgm
mode: trinary
resolution: 0.05
origin: [-27.2, -0.0189, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -1,7 +0,0 @@
image: map_floor_mainb_save_retouched.pgm
mode: trinary
resolution: 0.05
origin: [-20.9, -7.03, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@ -1,7 +0,0 @@
image: map_floor_save.pgm
mode: trinary
resolution: 0.05
origin: [-13.7, -5.57, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

File diff suppressed because one or more lines are too long

View File

@ -1,7 +0,0 @@
image: map_openlabday.pgm
mode: trinary
resolution: 0.05
origin: [-13.5, -20.9, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

File diff suppressed because one or more lines are too long

View File

@ -1,7 +0,0 @@
image: map_save_16.10..pgm
mode: trinary
resolution: 0.05
origin: [-25.7, -17, 0]
negate: 0
occupied_thresh: 0.65
free_thresh: 0.25

Binary file not shown.

Binary file not shown.

View File

@ -1,71 +0,0 @@
#!/usr/bin/env python3
import os
import subprocess
# Function to get the path to the docker-compose.yaml file
def get_compose_file_path():
path = input("Enter the path to the docker-compose.yaml file (press Enter for current directory): ").strip()
return path if path else "docker-compose.yaml"
# Initialize the path to the docker-compose.yaml file
compose_file_path = get_compose_file_path()
# Define a list to keep track of running services
running_services = []
# Function to check if a service is already running
def is_service_running(service_name):
return service_name in running_services
# Function to start a service
def start_service(service_name):
if not is_service_running(service_name):
print(f"Starting {service_name}...")
subprocess.run(["docker", "compose", "-f", compose_file_path, "up", "-d", service_name])
running_services.append(service_name)
else:
print(f"{service_name} is already running.")
# Function to stop a service
def stop_service(service_name):
if is_service_running(service_name):
print(f"Stopping {service_name}...")
subprocess.run(["docker", "compose", "-f", compose_file_path, "down", "-v", "--remove-orphans", service_name])
running_services.remove(service_name)
else:
print(f"{service_name} is not running.")
# Main program
if __name__ == "__main__":
while True:
print("Options:")
print("1. Start Controller, Teleop, RSP, Lidar")
print("2. Start AMCL and Navigation")
print("3. Start Mapping and Navigation")
print("4. Stop AMCL and Mapping")
print("5. Change docker-compose.yaml file path")
print("6. Quit")
choice = input("Enter your choice: ")
if choice == "1":
start_service("controller")
start_service("teleop")
start_service("rsp")
start_service("lidar")
elif choice == "2":
start_service("amcl")
start_service("navigation")
elif choice == "3":
start_service("mapping")
start_service("navigation")
elif choice == "4":
stop_service("amcl")
stop_service("mapping")
elif choice == "5":
compose_file_path = get_compose_file_path()
elif choice == "6":
break
else:
print("Invalid choice. Please try again.")

View File

@ -1,70 +0,0 @@
networks:
pc: # config for this pc. Only required for running the containers locally on the pc. For instance rviz2 or guis with gazebo.
driver: macvlan
driver_opts:
parent: wlx00e04c5513fc # pc network interface: here my wifi card. Can be found with ifconfig.
ipam:
config:
- subnet: 192.168.0.0/24
gateway: 192.168.0.1
ip_range: 192.168.0.200/25
aux_addresses:
net-address: 192.168.0.100 #? what is this for --> to exclude addresses from buing used.
services:
# rviz2
rviz2:
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
# command: >
# ros2 launch cps_rmp220_support robot_rviz2.launch.py
command: >
ros2 launch cps_rmp220_support rviz.launch.py
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
network_mode: host
ipc: host
# Needed to display graphical applications
privileged: true
environment:
# Allows graphical programs in the container.
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
volumes:
# Allows graphical programs in the container.
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
# networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
# pc:
# ipv4_address: 192.168.0.201 #here need to set fixed ip to avoid collissions with other containers on robot.
rviz2-depthai:
image: luxonis/depthai-ros:humble-latest
command: >
ros2 launch cps_rmp220_support rviz.launch.py
# Interactive shell
stdin_open: true
tty: true
# Networking and IPC for ROS 2
network_mode: host
ipc: host
# Needed to display graphical applications
privileged: true
environment:
# Allows graphical programs in the container.
- DISPLAY=${DISPLAY}
- QT_X11_NO_MITSHM=1
- NVIDIA_DRIVER_CAPABILITIES=all
- ROS_DOMAIN_ID=5
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
volumes:
# Allows graphical programs in the container.
- /tmp/.X11-unix:/tmp/.X11-unix:rw
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
# networks: # not using bridging anymore, instead try using all services on macvlan? let's see... shoudl word for now. Bridging does definitely not work because multicast is not supported here.
# pc:
# ipv4_address: 192.168.0.201 #here need to set fixed ip to avoid collissions with other containers on robot.

View File

@ -1,47 +0,0 @@
{
"version": "1.1",
"engine": "linux|Transformer|1.40.6|1.40.6|latest",
"containerized": false,
"host_distro": {
"name": "NixOS",
"version": "23.11",
"display_name": "NixOS 23.11 (Tapir)"
},
"type": "build",
"state": "error",
"target_reference": "ubuntu",
"system": {
"type": "",
"release": "",
"distro": {
"name": "",
"version": "",
"display_name": ""
}
},
"source_image": {
"identity": {
"id": ""
},
"size": 0,
"size_human": "",
"create_time": "",
"docker_version": "",
"architecture": "",
"container_entry": {
"exe_path": ""
}
},
"minified_image_size": 0,
"minified_image_size_human": "",
"minified_image": "",
"minified_image_has_data": false,
"minified_by": 0,
"artifact_location": "",
"container_report_name": "",
"seccomp_profile_name": "",
"apparmor_profile_name": "",
"image_stack": null,
"image_created": false,
"image_build_engine": ""
}

View File

@ -1,52 +0,0 @@
#!/usr/bin/env python3
import subprocess
# Define the stacks
stack1 = ["controller", "teleop", "rsp", "lidar"]
stack2 = stack1 + ["mapping", "navigation"]
stack3 = stack1 + ["amcl", "navigation"]
# Function to start a stack
def start_stack(stack):
print(f"Starting {', '.join(stack)}...")
subprocess.run(["docker", "compose", "up", "-d"] + stack)
# Function to stop a stack
def stop_stack(stack):
print(f"Stopping {', '.join(stack)}...")
subprocess.run(["docker", "compose", "down", "-v", "--remove-orphans"] + stack)
# Main program
if __name__ == "__main__":
while True:
print("Options:")
print("1. Start Stack 1")
print("2. Start Stack 2")
print("3. Start Stack 3")
print("4. Stop Stack 1")
print("5. Stop Stack 2")
print("6. Stop Stack 3")
print("7. Quit")
choice = input("Enter your choice: ")
if choice == "1":
stop_stack(stack2 + stack3) # Stop stack2 and stack3 to avoid interference
start_stack(stack1)
elif choice == "2":
stop_stack(stack1 + stack3) # Stop stack1 and stack3 to avoid interference
start_stack(stack2)
elif choice == "3":
stop_stack(stack1 + stack2) # Stop stack1 and stack2 to avoid interference
start_stack(stack3)
elif choice == "4":
stop_stack(stack1)
elif choice == "5":
stop_stack(stack2)
elif choice == "6":
stop_stack(stack3)
elif choice == "7":
break
else:
print("Invalid choice. Please try again.")

View File

@ -1 +0,0 @@
docker compose up -d controller teleop rsp lidar mapping navigation

View File

@ -1 +0,0 @@
docker compose up -d controller teleop rsp lidar amcl navigation

View File

@ -1 +0,0 @@
docker compose up -d controller teleop rsp lidar

133
test.rviz
View File

@ -1,133 +0,0 @@
Panels:
- Class: rviz_common/Displays
Help Height: 85
Name: Displays
Property Tree Widget:
Expanded:
- /Global Options1
- /Status1
Splitter Ratio: 0.5
Tree Height: 528
- Class: rviz_common/Selection
Name: Selection
- Class: rviz_common/Tool Properties
Expanded:
- /2D Goal Pose1
- /Publish Point1
Name: Tool Properties
Splitter Ratio: 0.5886790156364441
- Class: rviz_common/Views
Expanded:
- /Current View1
Name: Views
Splitter Ratio: 0.5
- Class: rviz_common/Time
Experimental: false
Name: Time
SyncMode: 0
SyncSource: ""
Visualization Manager:
Class: ""
Displays:
- Alpha: 0.5
Cell Size: 1
Class: rviz_default_plugins/Grid
Color: 160; 160; 164
Enabled: true
Line Style:
Line Width: 0.029999999329447746
Value: Lines
Name: Grid
Normal Cell Count: 0
Offset:
X: 0
Y: 0
Z: 0
Plane: XY
Plane Cell Count: 10
Reference Frame: <Fixed Frame>
Value: true
Enabled: true
Global Options:
Background Color: 48; 48; 48
Fixed Frame: map
Frame Rate: 30
Name: root
Tools:
- Class: rviz_default_plugins/Interact
Hide Inactive Objects: true
- Class: rviz_default_plugins/MoveCamera
- Class: rviz_default_plugins/Select
- Class: rviz_default_plugins/FocusCamera
- Class: rviz_default_plugins/Measure
Line color: 128; 128; 0
- Class: rviz_default_plugins/SetInitialPose
Covariance x: 0.25
Covariance y: 0.25
Covariance yaw: 0.06853891909122467
Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /initialpose
- Class: rviz_default_plugins/SetGoal
Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /goal_pose
- Class: rviz_default_plugins/PublishPoint
Single click: true
Topic:
Depth: 5
Durability Policy: Volatile
History Policy: Keep Last
Reliability Policy: Reliable
Value: /clicked_point
Transformation:
Current:
Class: rviz_default_plugins/TF
Value: true
Views:
Current:
Class: rviz_default_plugins/Orbit
Distance: 10
Enable Stereo Rendering:
Stereo Eye Separation: 0.05999999865889549
Stereo Focal Distance: 1
Swap Stereo Eyes: false
Value: false
Focal Point:
X: 0
Y: 0
Z: 0
Focal Shape Fixed Size: true
Focal Shape Size: 0.05000000074505806
Invert Z Axis: false
Name: Current View
Near Clip Distance: 0.009999999776482582
Pitch: 0.785398006439209
Target Frame: <Fixed Frame>
Value: Orbit (rviz)
Yaw: 0.785398006439209
Saved: ~
Window Geometry:
Displays:
collapsed: false
Height: 845
Hide Left Dock: false
Hide Right Dock: false
QMainWindow State: 000000ff00000000fd00000004000000000000015a000002a6fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000006b00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000a3fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c0061007900730100000044000002a6000000eb00fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f000002a6fc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a005600690065007700730100000044000002a6000000b900fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e10000019700000003000004af0000003efc0100000002fb0000000800540069006d00650100000000000004af000002d200fffffffb0000000800540069006d0065010000000000000450000000000000000000000238000002a600000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000
Selection:
collapsed: false
Time:
collapsed: false
Tool Properties:
collapsed: false
Views:
collapsed: false
Width: 1199
X: 199
Y: 115

View File

88
webcam.launch.py Normal file
View File

@ -0,0 +1,88 @@
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration, ThisLaunchFileDir
from launch.conditions import IfCondition, UnlessCondition
from launch.substitutions import TextSubstitution
def generate_launch_description():
# Declare launch arguments
video_device_arg = DeclareLaunchArgument(
'video_device', default_value='/dev/video0',
description='Video device path')
pixel_format_arg = DeclareLaunchArgument(
'pixel_format', default_value='YUYV',
description='Pixel format')
output_encoding_arg = DeclareLaunchArgument(
'output_encoding', default_value='yuv422_yuy2',
description='Output encoding')
image_size_arg = DeclareLaunchArgument(
'image_size', default_value='[640, 480]',
description='Image size')
camera_frame_id_arg = DeclareLaunchArgument(
'camera_frame_id', default_value='camera_optical_link',
description='Camera frame ID')
params_file_arg = DeclareLaunchArgument(
'params_file', default_value='',
description='Path to the parameters file')
device_namespace_arg = DeclareLaunchArgument(
'device_namespace', default_value='camera',
description='Device namespace')
ffmpeg_encoding_arg = DeclareLaunchArgument(
'ffmpeg_encoding', default_value='libx264',
description='FFMPEG encoding')
ffmpeg_preset_arg = DeclareLaunchArgument(
'ffmpeg_preset', default_value='ultrafast',
description='FFMPEG preset')
ffmpeg_tune_arg = DeclareLaunchArgument(
'ffmpeg_tune', default_value='zerolatency',
description='FFMPEG tune')
# v4l2_camera node configuration
v4l2_camera_node = Node(
package='v4l2_camera',
executable='v4l2_camera_node',
name='camera',
namespace=LaunchConfiguration('device_namespace'),
parameters=[
{
'video_device': LaunchConfiguration('video_device'),
'pixel_format': LaunchConfiguration('pixel_format'),
'output_encoding': LaunchConfiguration('output_encoding'),
'image_size': LaunchConfiguration('image_size'),
'camera_frame_id': LaunchConfiguration('camera_frame_id'),
'camera_name': LaunchConfiguration('device_namespace'),
'camera_link_frame_id': [LaunchConfiguration('device_namespace'), TextSubstitution(text='_link')],
'ffmpeg_image_transport.encoding': LaunchConfiguration('ffmpeg_encoding'),
'ffmpeg_image_transport.preset': LaunchConfiguration('ffmpeg_preset'),
'ffmpeg_image_transport.tune': LaunchConfiguration('ffmpeg_tune'),
},
LaunchConfiguration('params_file')
],
# Add any necessary remappings here
)
# Assemble the launch description
return LaunchDescription([
video_device_arg,
pixel_format_arg,
output_encoding_arg,
image_size_arg,
camera_frame_id_arg,
params_file_arg,
device_namespace_arg,
ffmpeg_encoding_arg,
ffmpeg_preset_arg,
ffmpeg_tune_arg,
v4l2_camera_node
])