Compare commits
1 Commits
Author | SHA1 | Date | |
---|---|---|---|
9b9f26c145 |
4
.gitignore
vendored
@ -1,3 +1 @@
|
||||
*.pgm
|
||||
maps/
|
||||
__pycache__/
|
||||
*.pgm
|
29
cert.pem
Normal file
@ -0,0 +1,29 @@
|
||||
-----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-----
|
@ -1,27 +0,0 @@
|
||||
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
|
@ -1,34 +0,0 @@
|
||||
# {
|
||||
# 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
|
||||
}
|
||||
}
|
@ -1,69 +0,0 @@
|
||||
<!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>
|
@ -1,103 +0,0 @@
|
||||
<!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>
|
@ -1,139 +0,0 @@
|
||||
// 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();
|
||||
};
|
||||
}
|
Before Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 5.8 KiB |
@ -1,95 +0,0 @@
|
||||
<!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>
|
Before Width: | Height: | Size: 21 KiB |
@ -1,508 +0,0 @@
|
||||
<?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>
|
Before Width: | Height: | Size: 34 KiB |
@ -1,728 +0,0 @@
|
||||
<?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>
|
Before Width: | Height: | Size: 50 KiB |
@ -1,552 +0,0 @@
|
||||
<?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>
|
Before Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 80 KiB |
@ -1 +0,0 @@
|
||||
<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="<Group>"><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>
|
Before Width: | Height: | Size: 3.8 KiB |
@ -1,247 +0,0 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -1 +0,0 @@
|
||||
<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="<Group>"><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>
|
Before Width: | Height: | Size: 4.3 KiB |
@ -11,7 +11,7 @@ echo "Sourced ROS 2 ${ROS_DISTRO}"
|
||||
if [ -f ${UNDERLAY_WS}/install/setup.bash ]
|
||||
then
|
||||
source ${UNDERLAY_WS}/install/setup.bash
|
||||
vcs pull ${UNDERLAY_WS}/src
|
||||
# vcs pull ${UNDERLAY_WS}/src
|
||||
echo "Sourced CPS RMP 220 base workspace"
|
||||
fi
|
||||
|
||||
@ -19,7 +19,7 @@ fi
|
||||
if [ -f /overlay_ws/install/setup.bash ]
|
||||
then
|
||||
source /overlay_ws/install/setup.bash
|
||||
vcs pull /overlay_ws/src
|
||||
# vcs pull /overlay_ws/src
|
||||
echo "Sourced CPS RMP 220 Overlay workspace"
|
||||
fi
|
||||
|
||||
@ -32,67 +32,19 @@ then
|
||||
fi
|
||||
|
||||
# Implement updating all repositories at launch
|
||||
if [ -f ${UNDERLAY_WS}/]
|
||||
then
|
||||
cd ${UNDERLAY_WS}
|
||||
vcs pull src
|
||||
echo "Updated base workspace"
|
||||
fi
|
||||
|
||||
if [ -f /overlay_ws/]
|
||||
then
|
||||
cd /overlay_ws
|
||||
vcs pull src
|
||||
echo "Updated overlay workspace"
|
||||
fi
|
||||
|
||||
# configure container networking to use zerotier interface as standard gateway
|
||||
# this might be for later
|
||||
# if [ -f /zerotier-one/zerotier-cli ]
|
||||
# if [ -f ${UNDERLAY_WS}/]
|
||||
# then
|
||||
# /zerotier-one/zerotier-cli join 8056c2e21c000001
|
||||
# echo "Joined zerotier network"
|
||||
# fi
|
||||
# # set standard gateway to zerotier interface
|
||||
# ip route del default
|
||||
# ip route add default via $(ip addr show zt* | grep -Po 'inet \K[\d.]+')
|
||||
# echo "Set zerotier interface as standard gateway"
|
||||
# this should now route the ros2 traffic through zerotier?
|
||||
|
||||
# # Find the ZeroTier interface name dynamically
|
||||
# zerotier_interface=$(ip addr show | awk '/^.*: zt/{print $2}' | cut -d ':' -f 1)
|
||||
|
||||
# if [ -z "$zerotier_interface" ]; then
|
||||
# echo "ZeroTier interface not found."
|
||||
# exit 1
|
||||
# cd ${UNDERLAY_WS}
|
||||
# vcs pull src
|
||||
# echo "Updated base workspace"
|
||||
# fi
|
||||
|
||||
# # Set the standard gateway to the ZeroTier interface
|
||||
# ip route del default
|
||||
# ip route add default via $(ip addr show "$zerotier_interface" | grep -Po 'inet \K[\d.]+')
|
||||
|
||||
# echo "Set ZeroTier interface '$zerotier_interface' as the standard gateway."
|
||||
|
||||
# Changing apporach to just configure the cyconedds to use the zerotier interface
|
||||
|
||||
# For now add respective ip apps to do the stuff below:
|
||||
apt update && apt install -y iproute2
|
||||
|
||||
# Find the ZeroTier interface name dynamically
|
||||
# zerotier_interface=$(ip addr show | awk '/^.*: zt/{print $2}' | cut -d ':' -f 1)
|
||||
|
||||
# if [ -z "$zerotier_interface" ]; then
|
||||
# echo "ZeroTier interface not found."
|
||||
# exit 1
|
||||
# if [ -f /overlay_ws/]
|
||||
# then
|
||||
# cd /overlay_ws
|
||||
# vcs pull src
|
||||
# echo "Updated overlay workspace"
|
||||
# fi
|
||||
|
||||
# echo "Using ZeroTier interface: $zerotier_interface"
|
||||
|
||||
# # Set the path to your CycloneDDS configuration file
|
||||
# config_file="/cyclonedds.xml"
|
||||
|
||||
# # Replace the content between <NetworkInterfaceAddress> tags
|
||||
# sed -i "s|<NetworkInterfaceAddress>.*</NetworkInterfaceAddress>|<NetworkInterfaceAddress>$zerotier_interface</NetworkInterfaceAddress>|g" "$config_file"
|
||||
|
||||
# Execute the command passed into this entrypoint
|
||||
exec "$@"
|
@ -254,52 +254,139 @@ bt_navigator_navigate_to_pose_rclcpp_node:
|
||||
# RotateToGoal.scale: 32.0
|
||||
# RotateToGoal.slowing_factor: 5.0
|
||||
# RotateToGoal.lookahead_time: -1.0
|
||||
# controller_server:
|
||||
# ros__parameters:
|
||||
# use_sim_time: True
|
||||
# controller_frequency: 100.0 # was 20.0
|
||||
# min_x_velocity_threshold: 0.001
|
||||
# min_y_velocity_threshold: 0.5
|
||||
# min_theta_velocity_threshold: 0.001
|
||||
# progress_checker_plugins: ["progress_checker"] # progress_checker_plugin: "progress_checker" For Humble and older
|
||||
# goal_checker_plugins: ["goal_checker"]
|
||||
# controller_plugins: ["FollowPath"]
|
||||
|
||||
# progress_checker:
|
||||
# plugin: "nav2_controller::SimpleProgressChecker"
|
||||
# required_movement_radius: 0.5
|
||||
# movement_time_allowance: 10.0
|
||||
# goal_checker:
|
||||
# plugin: "nav2_controller::SimpleGoalChecker"
|
||||
# xy_goal_tolerance: 0.25 # was 0.25
|
||||
# yaw_goal_tolerance: 0.25 # was 0.25
|
||||
# stateful: True
|
||||
# FollowPath:
|
||||
# plugin: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"
|
||||
# desired_linear_vel: 0.5
|
||||
# lookahead_dist: 0.6
|
||||
# min_lookahead_dist: 0.3
|
||||
# max_lookahead_dist: 0.9
|
||||
# lookahead_time: 1.5
|
||||
# rotate_to_heading_angular_vel: 1.8
|
||||
# transform_tolerance: 0.1
|
||||
# use_velocity_scaled_lookahead_dist: false
|
||||
# min_approach_linear_velocity: 0.007 # was 0.05
|
||||
# approach_velocity_scaling_dist: 0.6
|
||||
# use_collision_detection: true
|
||||
# max_allowed_time_to_collision_up_to_carrot: 1.0
|
||||
# use_regulated_linear_velocity_scaling: true
|
||||
# use_fixed_curvature_lookahead: false
|
||||
# curvature_lookahead_dist: 0.25
|
||||
# use_cost_regulated_linear_velocity_scaling: false
|
||||
# regulated_linear_scaling_min_radius: 0.9
|
||||
# regulated_linear_scaling_min_speed: 0.25
|
||||
# use_rotate_to_heading: false # was true, cannot be set together with allow_reversing
|
||||
# allow_reversing: true # was false
|
||||
# rotate_to_heading_min_angle: 0.785
|
||||
# max_angular_accel: 3.2
|
||||
# max_robot_pose_search_dist: 10.0
|
||||
# use_interpolation: true # was false
|
||||
controller_server:
|
||||
ros__parameters:
|
||||
use_sim_time: True
|
||||
controller_frequency: 100.0 # was 20.0
|
||||
min_x_velocity_threshold: 0.001
|
||||
min_y_velocity_threshold: 0.5
|
||||
min_theta_velocity_threshold: 0.001
|
||||
progress_checker_plugins: ["progress_checker"] # progress_checker_plugin: "progress_checker" For Humble and older
|
||||
goal_checker_plugins: ["goal_checker"]
|
||||
controller_plugins: ["FollowPath"]
|
||||
|
||||
progress_checker:
|
||||
plugin: "nav2_controller::SimpleProgressChecker"
|
||||
required_movement_radius: 0.5
|
||||
movement_time_allowance: 10.0
|
||||
goal_checker:
|
||||
plugin: "nav2_controller::SimpleGoalChecker"
|
||||
xy_goal_tolerance: 0.25 # was 0.25
|
||||
yaw_goal_tolerance: 0.25 # was 0.25
|
||||
stateful: True
|
||||
controller_frequency: 50.0 # was 30.0 # ! must be float!
|
||||
FollowPath:
|
||||
plugin: "nav2_regulated_pure_pursuit_controller::RegulatedPurePursuitController"
|
||||
desired_linear_vel: 0.5
|
||||
lookahead_dist: 0.6
|
||||
min_lookahead_dist: 0.3
|
||||
max_lookahead_dist: 0.9
|
||||
lookahead_time: 1.5
|
||||
rotate_to_heading_angular_vel: 1.8
|
||||
plugin: "nav2_mppi_controller::MPPIController"
|
||||
time_steps: 56
|
||||
model_dt: 0.05
|
||||
batch_size: 1000 # was 2000
|
||||
vx_std: 0.2
|
||||
vy_std: 0.2
|
||||
wz_std: 0.4
|
||||
vx_max: 0.5
|
||||
vx_min: -0.35
|
||||
vy_max: 0.5
|
||||
wz_max: 1.9
|
||||
iteration_count: 1
|
||||
prune_distance: 1.7
|
||||
transform_tolerance: 0.1
|
||||
use_velocity_scaled_lookahead_dist: false
|
||||
min_approach_linear_velocity: 0.007 # was 0.05
|
||||
approach_velocity_scaling_dist: 0.6
|
||||
use_collision_detection: true
|
||||
max_allowed_time_to_collision_up_to_carrot: 1.0
|
||||
use_regulated_linear_velocity_scaling: true
|
||||
use_fixed_curvature_lookahead: false
|
||||
curvature_lookahead_dist: 0.25
|
||||
use_cost_regulated_linear_velocity_scaling: false
|
||||
regulated_linear_scaling_min_radius: 0.9
|
||||
regulated_linear_scaling_min_speed: 0.25
|
||||
use_rotate_to_heading: false # was true, cannot be set together with allow_reversing
|
||||
allow_reversing: true # was false
|
||||
rotate_to_heading_min_angle: 0.785
|
||||
max_angular_accel: 3.2
|
||||
max_robot_pose_search_dist: 10.0
|
||||
use_interpolation: true # was false
|
||||
temperature: 0.3
|
||||
gamma: 0.015
|
||||
motion_model: "DiffDrive"
|
||||
visualize: false
|
||||
reset_period: 1.0 # (only in Humble)
|
||||
regenerate_noises: false
|
||||
TrajectoryVisualizer:
|
||||
trajectory_step: 5
|
||||
time_step: 3
|
||||
AckermannConstraints:
|
||||
min_turning_r: 0.1 # was0.2 # only active for ackermann
|
||||
critics: ["ConstraintCritic", "ObstaclesCritic", "GoalCritic", "GoalAngleCritic", "PathAlignCritic", "PathFollowCritic", "PathAngleCritic", "PreferForwardCritic"]
|
||||
ConstraintCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
cost_weight: 4.0
|
||||
GoalCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
cost_weight: 5.0
|
||||
threshold_to_consider: 1.4
|
||||
GoalAngleCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
cost_weight: 3.0
|
||||
threshold_to_consider: 0.5
|
||||
PreferForwardCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
cost_weight: 10.0 # was 5.0
|
||||
threshold_to_consider: 0.5
|
||||
ObstaclesCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
repulsion_weight: 1.5
|
||||
critical_weight: 20.0
|
||||
consider_footprint: true # was false
|
||||
collision_cost: 10000.0
|
||||
collision_margin_distance: 0.1
|
||||
near_goal_distance: 0.5
|
||||
inflation_radius: 0.35 #was0.55 # (only in Humble)
|
||||
cost_scaling_factor: 10.0 # (only in Humble)
|
||||
PathAlignCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
cost_weight: 14.0
|
||||
max_path_occupancy_ratio: 0.05
|
||||
trajectory_point_step: 3
|
||||
threshold_to_consider: 0.5
|
||||
offset_from_furthest: 20
|
||||
use_path_orientations: true # was false
|
||||
PathFollowCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
cost_weight: 5.0
|
||||
offset_from_furthest: 5
|
||||
threshold_to_consider: 1.4
|
||||
PathAngleCritic:
|
||||
enabled: true
|
||||
cost_power: 1
|
||||
cost_weight: 2.0
|
||||
offset_from_furthest: 4
|
||||
threshold_to_consider: 0.5
|
||||
max_angle_to_furthest: 1.0
|
||||
mode: 0
|
||||
# TwirlingCritic:
|
||||
# enabled: true
|
||||
# twirling_cost_power: 1
|
||||
# twirling_cost_weight: 10.0
|
||||
|
||||
|
||||
local_costmap:
|
||||
@ -319,8 +406,8 @@ local_costmap:
|
||||
plugins: ["voxel_layer", "inflation_layer"]
|
||||
inflation_layer:
|
||||
plugin: "nav2_costmap_2d::InflationLayer"
|
||||
cost_scaling_factor: 2.0 # was 3.0 ;exponential rate at which the obstacle cost drops off (default: 10)
|
||||
inflation_radius: 0.70 # max. distance from an obstacle at which costs are incurred for planning paths.
|
||||
cost_scaling_factor: 10.0 # was 3.0 ;exponential rate at which the obstacle cost drops off (default: 10)
|
||||
inflation_radius: 0.35 # max. distance from an obstacle at which costs are incurred for planning paths.
|
||||
voxel_layer:
|
||||
plugin: "nav2_costmap_2d::VoxelLayer"
|
||||
enabled: True
|
||||
@ -390,7 +477,7 @@ global_costmap:
|
||||
inflation_layer:
|
||||
plugin: "nav2_costmap_2d::InflationLayer"
|
||||
cost_scaling_factor: 10.0 # was 3.0
|
||||
inflation_radius: 0.55
|
||||
inflation_radius: 0.35
|
||||
always_send_full_costmap: True
|
||||
|
||||
map_server:
|
||||
@ -418,27 +505,67 @@ map_saver:
|
||||
# tolerance: 0.5
|
||||
# use_astar: false
|
||||
# allow_unknown: true
|
||||
# planner_server:
|
||||
# ros__parameters:
|
||||
# planner_plugins: ["GridBased"]
|
||||
# use_sim_time: True
|
||||
# GridBased:
|
||||
# plugin: "nav2_smac_planner/SmacPlanner2D"
|
||||
# tolerance: 0.125 # tolerance for planning if unable to reach exact pose, in meters
|
||||
# downsample_costmap: false # whether or not to downsample the map
|
||||
# downsampling_factor: 1 # multiplier for the resolution of the costmap layer (e.g. 2 on a 5cm costmap would be 10cm)
|
||||
# allow_unknown: true # allow traveling in unknown space
|
||||
# max_iterations: 1000000 # maximum total iterations to search for before failing (in case unreachable), set to -1 to disable
|
||||
# max_on_approach_iterations: 1000 # maximum number of iterations to attempt to reach goal once in tolerance
|
||||
# max_planning_time: 2.0 # max time in s for planner to plan, smooth
|
||||
# cost_travel_multiplier: 2.0 # Cost multiplier to apply to search to steer away from high cost areas. Larger values will place in the center of aisles more exactly (if non-`FREE` cost potential field exists) but take slightly longer to compute. To optimize for speed, a value of 1.0 is reasonable. A reasonable tradeoff value is 2.0. A value of 0.0 effective disables steering away from obstacles and acts like a naive binary search A*.
|
||||
# use_final_approach_orientation: true # Whether to set the final path pose at the goal's orientation to the requested orientation (false) or in line with the approach angle so the robot doesn't rotate to heading (true)
|
||||
# smoother:
|
||||
# max_iterations: 1000
|
||||
# w_smooth: 0.3
|
||||
# w_data: 0.2
|
||||
# tolerance: 0.1
|
||||
planner_server:
|
||||
ros__parameters:
|
||||
planner_plugins: ["GridBased"]
|
||||
use_sim_time: True
|
||||
|
||||
GridBased:
|
||||
plugin: "nav2_smac_planner/SmacPlanner2D"
|
||||
tolerance: 0.125 # tolerance for planning if unable to reach exact pose, in meters
|
||||
downsample_costmap: false # whether or not to downsample the map
|
||||
downsampling_factor: 1 # multiplier for the resolution of the costmap layer (e.g. 2 on a 5cm costmap would be 10cm)
|
||||
allow_unknown: true # allow traveling in unknown space
|
||||
max_iterations: 1000000 # maximum total iterations to search for before failing (in case unreachable), set to -1 to disable
|
||||
max_on_approach_iterations: 1000 # maximum number of iterations to attempt to reach goal once in tolerance
|
||||
max_planning_time: 2.0 # max time in s for planner to plan, smooth
|
||||
cost_travel_multiplier: 2.0 # Cost multiplier to apply to search to steer away from high cost areas. Larger values will place in the center of aisles more exactly (if non-`FREE` cost potential field exists) but take slightly longer to compute. To optimize for speed, a value of 1.0 is reasonable. A reasonable tradeoff value is 2.0. A value of 0.0 effective disables steering away from obstacles and acts like a naive binary search A*.
|
||||
use_final_approach_orientation: true # Whether to set the final path pose at the goal's orientation to the requested orientation (false) or in line with the approach angle so the robot doesn't rotate to heading (true)
|
||||
plugin: "nav2_smac_planner/SmacPlannerHybrid"
|
||||
downsample_costmap: false # whether or not to downsample the map
|
||||
downsampling_factor: 1 # multiplier for the resolution of the costmap layer (e.g. 2 on a 5cm costmap would be 10cm)
|
||||
tolerance: 0.25 # dist-to-goal heuristic cost (distance) for valid tolerance endpoints if exact goal cannot be found.
|
||||
allow_unknown: true # allow traveling in unknown space
|
||||
max_iterations: 1000000 # maximum total iterations to search for before failing (in case unreachable), set to -1 to disable
|
||||
max_on_approach_iterations: 1000 # Maximum number of iterations after within tolerances to continue to try to find exact solution
|
||||
max_planning_time: 5.0 # max time in s for planner to plan, smooth
|
||||
motion_model_for_search: "DUBIN" # Hybrid-A* Dubin, Redds-Shepp
|
||||
angle_quantization_bins: 72 # Number of angle bins for search
|
||||
analytic_expansion_ratio: 3.5 # The ratio to attempt analytic expansions during search for final approach.
|
||||
analytic_expansion_max_length: 3.0 # For Hybrid/Lattice nodes: The maximum length of the analytic expansion to be considered valid to prevent unsafe shortcutting
|
||||
analytic_expansion_max_cost: true # The maximum single cost for any part of an analytic expansion to contain and be valid, except when necessary on approach to goal
|
||||
analytic_expansion_max_cost_override: false # Whether or not to override the maximum cost setting if within critical distance to goal (ie probably required)
|
||||
minimum_turning_radius: 0.20 # was 0.40 # minimum turning radius in m of path / vehicle
|
||||
reverse_penalty: 1.0 #was2.0 # Penalty to apply if motion is reversing, must be => 1
|
||||
change_penalty: 0.0 # Penalty to apply if motion is changing directions (L to R), must be >= 0
|
||||
non_straight_penalty: 2.0 #was 1.2 # Penalty to apply if motion is non-straight, must be => 1
|
||||
cost_penalty: 2.0 # Penalty to apply to higher cost areas when adding into the obstacle map dynamic programming distance expansion heuristic. This drives the robot more towards the center of passages. A value between 1.3 - 3.5 is reasonable.
|
||||
retrospective_penalty: 0.015
|
||||
lookup_table_size: 20.0 # Size of the dubin/reeds-sheep distance window to cache, in meters.
|
||||
cache_obstacle_heuristic: true #was false # Cache the obstacle map dynamic programming distance expansion heuristic between subsiquent replannings of the same goal location. Dramatically speeds up replanning performance (40x) if costmap is largely static.
|
||||
debug_visualizations: false # For Hybrid nodes: Whether to publish expansions on the /expansions topic as an array of poses (the orientation has no meaning) and the path's footprints on the /planned_footprints topic. WARNING: heavy to compute and to display, for debug only as it degrades the performance.
|
||||
use_quadratic_cost_penalty: True #was False
|
||||
downsample_obstacle_heuristic: True
|
||||
allow_primitive_interpolation: False
|
||||
smooth_path: True # If true, does a simple and quick smoothing post-processing to the path
|
||||
|
||||
smoother:
|
||||
max_iterations: 1000
|
||||
w_smooth: 0.3
|
||||
w_data: 0.2
|
||||
tolerance: 0.1
|
||||
tolerance: 1.0e-10
|
||||
do_refinement: true
|
||||
refinement_num: 2
|
||||
|
||||
smoother_server:
|
||||
ros__parameters:
|
||||
|
@ -1,35 +0,0 @@
|
||||
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
|
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 137 KiB |
Before Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 78 KiB |
@ -1 +0,0 @@
|
||||
ba1fa920-2863-4600-994f-23559acfcab2
|
@ -1,5 +1,28 @@
|
||||
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:
|
||||
# Base image containing dependencies.
|
||||
base:
|
||||
@ -38,6 +61,11 @@ services:
|
||||
- ${XAUTHORITY:-$HOME/.Xauthority}:/root/.Xauthority
|
||||
- ./config/entrypoint.sh:/entrypoint.sh
|
||||
- ./config/cyclonedds.xml:/cyclonedds.xml
|
||||
restart: unless-stopped
|
||||
|
||||
# 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:
|
||||
@ -68,6 +96,10 @@ services:
|
||||
tags:
|
||||
- ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
||||
target: guis
|
||||
x-bake:
|
||||
platforms:
|
||||
- linux/arm64
|
||||
- linux/amd64
|
||||
command: >
|
||||
/bin/bash
|
||||
devices:
|
||||
@ -110,8 +142,8 @@ services:
|
||||
ros2 launch cps_rmp220_support robot_lidar.launch.py serial_port:=/dev/rplidarA1
|
||||
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"
|
||||
# SUBSYSTEM=="tty", ATTRS{serial}=="0001", SYMLINK+="segway"
|
||||
# SUBSYSTEM=="tty", ATTRS{serial}=="3453995662b3af4f81f4a69eba5f3f29", SYMLINK+="rplidarA1"
|
||||
|
||||
# Lidar filtering node.
|
||||
lidar_filter:
|
||||
@ -119,7 +151,7 @@ services:
|
||||
command: >
|
||||
ros2 launch cps_rmp220_support robot_scan_filter.launch.py
|
||||
|
||||
# localiaztion by ekf node
|
||||
# localization by ekf node
|
||||
ekf:
|
||||
extends: overlay
|
||||
depends_on:
|
||||
@ -169,7 +201,7 @@ services:
|
||||
- ekf
|
||||
- oakd
|
||||
command: >
|
||||
ros2 launch nav2_bringup bringup_launch.py slam:=True map:=/repo/maps/map.yaml use_sim_time:=False use_composition:=True params_file:=/repo/config/nav2_params.yaml
|
||||
ros2 launch nav2_bringup bringup_launch.py slam:=False map:=/repo/maps/map_01-26-24.yaml use_sim_time:=False use_composition:=True params_file:=/repo/config/nav2_params.yaml
|
||||
#maps/map_openlabday.yaml
|
||||
# bash
|
||||
bash:
|
||||
@ -183,12 +215,28 @@ services:
|
||||
image: ghcr.io/bjoernellens1/ros2_rmp/rmp:guis
|
||||
command: >
|
||||
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_bridge:
|
||||
extends: overlay
|
||||
command: >
|
||||
ros2 launch foxglove_bridge foxglove_bridge_launch.xml port:=8765
|
||||
#tls:=true certfile:=/certs/foxgloveCert.crt keyfile:=/certs/foxgloveKey.key
|
||||
volumes:
|
||||
- /opt/cps/certs:/certs
|
||||
|
||||
# Foxglove Studio Webserver
|
||||
foxglove:
|
||||
@ -196,14 +244,22 @@ services:
|
||||
stdin_open: true
|
||||
tty: true
|
||||
# Networking
|
||||
networks:
|
||||
- caddy_network
|
||||
network_mode: bridge
|
||||
ports:
|
||||
- 8080:8080
|
||||
depends_on:
|
||||
- foxglove_bridge
|
||||
volumes:
|
||||
- ./config/foxglove/default.json:/foxglove/default-layout.json
|
||||
- ./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
|
||||
explorer:
|
||||
@ -220,41 +276,41 @@ services:
|
||||
|
||||
### 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
|
||||
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
|
||||
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
|
||||
|
||||
## Configure on ROS1 Hosts
|
||||
# seggy 192.168.0.100
|
||||
@ -275,9 +331,9 @@ services:
|
||||
|
||||
# In order to connect to the ROS-master, we execute locally on robot2:
|
||||
|
||||
# export ROS_MASTER_URI=http://192.1.1.1:11311
|
||||
# export ROS_IP=192.168.1.2
|
||||
# export ROS_HOSTNAME=192.168.1.2
|
||||
# export ROS_MASTER_URI=http://192.168.0.100:11311
|
||||
# export ROS_IP=192.168.0.?
|
||||
# export ROS_HOSTNAME=192.168.1.?
|
||||
|
||||
# ROS2 oak-d-lite camera
|
||||
oakd:
|
||||
@ -286,7 +342,7 @@ services:
|
||||
ros2 launch depthai_examples stereo.launch.py
|
||||
#devices:
|
||||
#- /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/
|
||||
device_cgroup_rules:
|
||||
- 'c 189:* rmw'
|
||||
@ -308,108 +364,25 @@ services:
|
||||
- DISPLAY=${DISPLAY}
|
||||
- QT_X11_NO_MITSHM=1
|
||||
- NVIDIA_DRIVER_CAPABILITIES=all
|
||||
|
||||
################################################################################################################################
|
||||
# Core Services for Web Management #
|
||||
################################################################################################################################
|
||||
caddy:
|
||||
image: caddy:latest
|
||||
networks:
|
||||
- caddy_network
|
||||
extra_hosts:
|
||||
- "host.docker.internal:host-gateway"
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./config/caddy/Caddyfile:/etc/caddy/Caddyfile
|
||||
- ./config/caddy/content:/usr/share/caddy/
|
||||
restart: always
|
||||
depends_on:
|
||||
- foxglove
|
||||
- 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:
|
||||
- ROS_DOMAIN_ID=5
|
||||
- RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
|
||||
restart: always
|
||||
webui-joystick:
|
||||
image: husarion/webui-ros-joystick:noetic-0.0.1-20230510-stable
|
||||
network_mode: host
|
||||
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
|
||||
zerotier:
|
||||
image: "zyclonite/zerotier:router"
|
||||
container_name: zerotier-one
|
||||
devices:
|
||||
- /dev/video1:/dev/video0
|
||||
- /dev/dri:/dev/dri
|
||||
- /dev/net/tun
|
||||
network_mode: host
|
||||
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
|
||||
- '/var/lib/zerotier-one:/var/lib/zerotier-one'
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
- SYS_ADMIN
|
||||
- NET_RAW
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
- TZ=Europe/Amsterdam
|
||||
- PUID=1000
|
||||
- PGID=1000
|
||||
- ZEROTIER_ONE_LOCAL_PHYS=enp5s0 wlx00e04c5513fc # change for actual interfaces
|
||||
- ZEROTIER_ONE_USE_IPTABLES_NFT=false
|
||||
- ZEROTIER_ONE_GATEWAY_MODE=inbound # might change to both ways
|
||||
#- ZEROTIER_ONE_NETWORK_IDS= # does not really do much?
|
||||
|
460
docker-compose.yaml.bak
Normal file
@ -0,0 +1,460 @@
|
||||
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
|
||||
|
62
husarnet.yaml
Normal file
@ -0,0 +1,62 @@
|
||||
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)
|
27
init_repo.sh
Normal file
@ -0,0 +1,27 @@
|
||||
#!/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
|
19
install.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/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
Normal file
@ -0,0 +1,52 @@
|
||||
-----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-----
|
BIN
map_floor_save.pgm
Normal file
7
map_floor_save.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
7
maps/map.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
7
maps/map.yaml.bak
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
7
maps/map_01-26-24.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
image: map_01-26-24.pgm
|
||||
mode: trinary
|
||||
resolution: 0.02
|
||||
origin: [-4, -14.8, 0]
|
||||
negate: 0
|
||||
occupied_thresh: 0.65
|
||||
free_thresh: 0.25
|
BIN
maps/map_floor_03-10-23.sav.pgm
Normal file
7
maps/map_floor_03-10-23.sav.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
Before Width: | Height: | Size: 13 MiB After Width: | Height: | Size: 14 MiB |
BIN
maps/map_floor_03-10-23.ser.posegraph
Normal file
BIN
maps/map_floor_mainb_full_save.pgm
Normal file
5
maps/map_floor_mainb_save.pgm
Normal file
7
maps/map_floor_mainb_save.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
5
maps/map_floor_mainb_save_retouched.pgm
Normal file
BIN
maps/map_floor_save.pgm
Normal file
7
maps/map_floor_save.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
4
maps/map_openlabday.pgm
Normal file
7
maps/map_openlabday.yaml
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
4
maps/map_save_16.10..pgm
Normal file
7
maps/map_save_16.10..yaml
Normal file
@ -0,0 +1,7 @@
|
||||
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
|
BIN
maps/map_ser_16.10..data
Normal file
BIN
maps/map_ser_16.10..posegraph
Normal file
71
robot_config.py
Normal file
@ -0,0 +1,71 @@
|
||||
#!/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.")
|
70
rviz2.yaml
Normal file
@ -0,0 +1,70 @@
|
||||
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.
|
47
slim.report.json
Normal file
@ -0,0 +1,47 @@
|
||||
{
|
||||
"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": ""
|
||||
}
|
52
stack_manager.py
Normal file
@ -0,0 +1,52 @@
|
||||
#!/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.")
|
1
start_mapping.sh
Normal file
@ -0,0 +1 @@
|
||||
docker compose up -d controller teleop rsp lidar mapping navigation
|
1
start_navigation.sh
Normal file
@ -0,0 +1 @@
|
||||
docker compose up -d controller teleop rsp lidar amcl navigation
|
1
start_robot.sh
Normal file
@ -0,0 +1 @@
|
||||
docker compose up -d controller teleop rsp lidar
|
133
test.rviz
Normal file
@ -0,0 +1,133 @@
|
||||
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
|
0
update_20.10.2023
Normal file
@ -1,88 +0,0 @@
|
||||
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
|
||||
])
|
||||
|