Use go embed files for migration

This commit is contained in:
Abdulrahman Solanke 2023-05-20 22:16:31 +01:00
parent 03b903a00d
commit ee0297888d
27 changed files with 1865 additions and 8536 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
bin/
.idea/
*.db

View File

@ -1,13 +0,0 @@
language: go
go:
- tip
script:
- curl -fsSL https://get.docker.com/ | sudo sh
- docker login -u $DOCKER_USER -p $DOCKER_PASS
- make ci docker-commit-publish
after_success:
- if [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST_BRANCH" == "" ]; then make docker-latest-publish; fi
env:
global:
- secure: "ZiZE1QbYcePjWaO5y0zceuMTOzOVEpS/oaa1eknlaDBaIIQRxEcMIewT0ka95bPE/wxpigg7ow04YydYtXn/6wGZ7hBH5huEnDTcah1ip4pAcmS4MQ7Zs3XAP6Z0w8O7tH1jTSM7hwyZ+XY/g8UxVZu9f7l6Sm9nh7F2DVjkLLy4cp2kSvOAVq2TwWwRUKX8E7M7uG7AumBT7gHtUmzobS+dTIDSUjAixCtyxbzMnql8JEadLYGCtgPmWeJ1Mkko77KX1zYiR7BOcuRVw3Z7ZI0FP9XKJ4GBnBgZaJBSdkIE211QQg8tL0kvvekuwt4ib+li8I5MqOxurPC1DaLeMAkkDQd1VKhfJeeuziMaz0/knk+cWT0zn0vY59Bxz40u64qwmJFnWAPibZuGojRUcJRw6skRTspGiuQfXFaum8VgRBGOArp1H6l4yFv2RGrVimRssDhZyhWl8MBTExlofrdhSd9rTFRlFK2PyihMOquhRieohvvyvPlmyMyLT/cgNrrlgWbrkhGt4ZQTWhHJe+59pnIKkvgMXvxscnD4TDcgziaTUZlGJLBm84n5juOCp2KEHPWJUfEnrcwlGDhci8bt11ESiGy9LV7FiBIFiMTZVvmaiwjOlXSoQmKR4MPHk32IPjM3LZS7b3YH8bmV394tm1yV2TkyYpdh/ymoHpo="
- secure: "eJEKo69F66OdJiH9WlODQ5AwmU8vyZdU/6Bb669/FQaRC+hGXYcwK6rhaY305kt4Kzf9MMdDfkgsl+So7D13kerqbxXU4phkEwG/8PQ+PTG1PLfm226tMK8vCWqEbQQVYtu8dhKO1oVqv01bXQpJBEvJbdu0hemEjKkDrrssSDH/zagtUDnI+n2VQtb07olWT5/rp/qGhUELXp0aDMd7sPYlxfQgP/zM5rR3w9l/gU+V+zGNfU0PA6yl8nKmHx1YhsUCdlRECyWJQYQFgP5hnXVWZGYiScwwJWMhjDr45dT5NwVqE8Jg1l1PsZLe+jhMOyGWi03ycI/a+vO1gjxeMVcEkOdIfPkbz3ka8HR7IQHfSC1lEYM4fEyKJMCIACNU/4GZPX9kWGnRNtEEh6jpvmb+7utLbA505BZeq6lxe/Zr1k9WRs6WPLme2QQLEuvAAkMRysg/8jAOxUunlWxMGpa2evd0Xr8b4/jCWgywnQLWtgQFW8y5ACStRi94rlzl+VOsH51uuvW+otaYsGhhGuwGg4FfmWLtHVddSUJ360zRJCBjXXe7LpzlzsLbbCUQdwXt1ofC08UOIx2MRLqWGgmqPy716Gc6wJVxVzSWRhTIbKMKLnd8/JKBn+sJEApziQPC6EbqLXq5NuKKmha9bOqCu15uuYxAGMZ0Tj5/Ryw="

View File

@ -1,11 +1,19 @@
FROM golang:1.8.3 as builder
FROM golang:1.18 as builder
WORKDIR /go/src/github.com/sarkk0x0/orbiter
ADD . /go/src/github.com/sarkk0x0/orbiter/
RUN make build
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . ./
RUN mkdir /data && touch /data/sqlite.db
RUN CGO_ENABLED=0 GOOS=linux go build -o /orbiter
FROM scratch
COPY --from=builder /go/src/github.com/sarkk0x0/orbiter/bin/orbiter /bin/orbiter
# ENTRYPOINT ["orbiter"]
CMD ["/bin/orbiter", "daemon"]
COPY --from=builder /orbiter /orbiter
COPY --from=builder /data/sqlite.db /data/sqlite.db
ENV DB_PATH=/data/sqlite.db
CMD ["/orbiter", "daemon"]

View File

@ -41,7 +41,7 @@ func canScale(serviceId string, coolDown time.Duration) (retval bool, err error)
retval = false
err = nil
ctx := context.Background()
dockerClient, err := client.NewEnvClient()
dockerClient, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
logrus.WithField("error", err).Debug("Problem communication with Docker")
return

View File

@ -2,6 +2,7 @@ package cmd
import (
"flag"
"github.com/sarkk0x0/orbiter/migration"
"net/http"
"os"
"os/signal"
@ -37,6 +38,9 @@ func (c *DaemonCmd) Run(args []string) int {
logrus.SetLevel(logrus.DebugLevel)
logrus.Debug("Daemon started in debug mode")
}
migration.Migrate()
coreEngine := core.Core{
Autoscalers: autoscaler.Autoscalers{},
}

View File

@ -1,14 +0,0 @@
IP = $(shell docker-machine ip sw1)
init:
./cluster/create.sh
destroy:
docker-machine rm -f sw1 sw2 sw3
deploy:
docker stack deploy --compose-file stack.yml stack
ps:
docker service ls
docker stack ps stack
scale-up:
curl -X POST -v http://$(IP):8081/v1/orbiter/handle/autoswarm/stack_micro/up
scale-down:
curl -X POST -v http://$(IP):8081/v1/orbiter/handle/autoswarm/stack_micro/down

View File

@ -1,57 +0,0 @@
This is a tutorial to use orbiter as autoscaler with Docker Swarm.
Requirements:
* Docker CLI installed
* Docker Machine
* Virtualbox
1. Create a swarm cluster with 3 nodes. One manager and two workers. It uses
Docker Machine and Virtualbox as provider.
```
make init
```
2. Point Docker CLI to the right Docker machine. The master is called sw1.
```
eval $(docker-machine env sw1)
```
3. Deploy your stack. The stack contains two services, one called orbiter and
another called micro. Micro is the web app that we are autoscaling.
```
make deploy
```
4. This command shows the current situation. The first table represent the
number of services and how many task are running under a service. You should
see two services. Micro has 3 tasks.
```
make ps
```
5. There is an utility in the makefile to scale up and down micro.
```
make scale-up
make scale-down
```
6. You can check the number of tasks changing every time you scale with the
command:
```
make ps
```
7. At the end of the test you can clean your environment
```
make destroy
```
That's it. Have a look at the code in `./stack.yml` and `Makefile` to have more
information about how orbiter works.

View File

@ -1,24 +0,0 @@
#!/bin/bash
provider=virtualbox
echo "### Init Servers ###"
docker-machine create -d ${provider} sw1 &
docker-machine create -d ${provider} sw2 &
docker-machine create -d ${provider} sw3 &
wait
echo "### Configurate cluster ###"
MANAGER_IP=$(docker-machine ip sw1)
docker-machine ssh sw1 docker swarm init --advertise-addr ${MANAGER_IP}
TOKEN=$(docker-machine ssh sw1 docker swarm join-token -q worker)
docker-machine ssh sw2 docker swarm join --token ${TOKEN} ${MANAGER_IP}:2377
docker-machine ssh sw3 docker swarm join --token ${TOKEN} ${MANAGER_IP}:2377
# Information
echo ""
echo "CLUSTER INFORMATION"
echo "discovery token: ${TOKEN}"
echo "Environment variables to connect trough docker cli"
docker-machine env sw1

View File

@ -1,50 +0,0 @@
version: '3'
services:
orbiter:
image: gianarb/orbiter
command: daemon
ports:
- 8081:8000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
deploy:
placement:
constraints:
- node.role == manager
mode: replicated
replicas: 1
resources:
limits:
cpus: '0.25'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
micro:
image: gianarb/micro:1.2.0
labels: [orbiter=true]
networks:
- micro-net
ports:
- 8000:8000
deploy:
mode: replicated
replicas: 3
labels: [orbiter=true]
update_config:
parallelism: 2
delay: 3s
resources:
limits:
cpus: '0.25'
memory: 512M
reservations:
cpus: '0.25'
memory: 256M
restart_policy:
condition: on-failure
delay: 3s
max_attempts: 3
window: 5s
networks:
micro-net:

1
core/scheduler.go Normal file
View File

@ -0,0 +1 @@
package core

28
go.mod
View File

@ -4,6 +4,7 @@ go 1.18
require (
github.com/docker/docker v24.0.0+incompatible
github.com/golang-migrate/migrate/v4 v4.15.2
github.com/gorilla/mux v1.8.0
github.com/mitchellh/cli v1.1.5
github.com/pkg/errors v0.9.1
@ -22,27 +23,38 @@ require (
github.com/docker/go-units v0.5.0 // indirect
github.com/fatih/color v1.7.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/uuid v1.1.2 // indirect
github.com/hashicorp/errwrap v1.0.0 // indirect
github.com/hashicorp/go-multierror v1.0.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/hashicorp/errwrap v1.1.0 // indirect
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/huandu/xstrings v1.3.2 // indirect
github.com/imdario/mergo v0.3.11 // indirect
github.com/mattn/go-colorable v0.0.9 // indirect
github.com/mattn/go-isatty v0.0.3 // indirect
github.com/imdario/mergo v0.3.12 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
github.com/mattn/go-colorable v0.1.6 // indirect
github.com/mattn/go-isatty v0.0.12 // indirect
github.com/mitchellh/copystructure v1.0.0 // indirect
github.com/mitchellh/reflectwalk v1.0.0 // indirect
github.com/moby/term v0.5.0 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.2 // indirect
github.com/posener/complete v1.1.1 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect
github.com/shopspring/decimal v1.2.0 // indirect
github.com/spf13/cast v1.3.1 // indirect
golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a // indirect
go.uber.org/atomic v1.7.0 // indirect
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 // indirect
golang.org/x/mod v0.8.0 // indirect
golang.org/x/net v0.6.0 // indirect
golang.org/x/sys v0.5.0 // indirect
golang.org/x/time v0.3.0 // indirect
golang.org/x/tools v0.6.0 // indirect
gotest.tools/v3 v3.4.0 // indirect
modernc.org/cc/v3 v3.32.4 // indirect
modernc.org/ccgo/v3 v3.9.2 // indirect
modernc.org/libc v1.9.5 // indirect
modernc.org/mathutil v1.2.2 // indirect
modernc.org/memory v1.0.4 // indirect
modernc.org/opt v0.1.1 // indirect
modernc.org/sqlite v1.10.6 // indirect
modernc.org/strutil v1.1.0 // indirect
modernc.org/token v1.0.0 // indirect
)

1761
go.sum

File diff suppressed because it is too large Load Diff

64
migration/migrate.go Normal file
View File

@ -0,0 +1,64 @@
package migration
import (
"embed"
"fmt"
"github.com/golang-migrate/migrate/v4"
_ "github.com/golang-migrate/migrate/v4/database/sqlite"
"github.com/golang-migrate/migrate/v4/source/iofs"
"github.com/sirupsen/logrus"
"os"
)
//go:embed schema/*.sql
var fs embed.FS
func Migrate() {
d, err := iofs.New(fs, "schema")
if err != nil {
panic(fmt.Sprintf("unable to initiate migration due to: %s", err.Error()))
}
DbPath := os.Getenv("DB_PATH")
if DbPath == "" {
panic("unable to initiate migration due to: DB_PATH env not set")
}
m, err := migrate.NewWithSourceInstance(
"iofs",
d,
fmt.Sprintf("sqlite://%s", DbPath),
)
if err != nil {
panic(fmt.Sprintf("unable to initiate migration due to: %s", err.Error()))
}
previousVersion, _, err := m.Version()
if err != nil {
if err == migrate.ErrNilVersion {
logrus.Info("Previous migration version not found.")
previousVersion = 0
} else {
panic(fmt.Sprintf("unable to get current version of schema migration: %s", err.Error()))
}
}
err = m.Up()
if err != nil && err != migrate.ErrNoChange {
panic(fmt.Sprintf("unable to run migration due to: %s", err.Error()))
}
if err == nil {
currentVersion, _, err := m.Version()
if err != nil {
panic(fmt.Sprintf("unable to get current version of schema migration: %s", err.Error()))
}
logrus.WithField("prev:", previousVersion).WithField("curr:", currentVersion).Info("Migration complete")
} else {
logrus.Info("No migration pending")
}
if sourceErr, dbErr := m.Close(); sourceErr != nil || dbErr != nil {
logrus.WithError(sourceErr).WithError(dbErr).Info("Error when closing source and database connections.")
}
}

View File

@ -0,0 +1 @@
DROP TABLE IF EXISTS service_cron_schedules;

View File

@ -0,0 +1,6 @@
CREATE TABLE IF NOT EXISTS service_cron_schedules (
id INTEGER PRIMARY KEY AUTOINCREMENT,
service_id TEXT NOT NULL,
pattern TEXT NOT NULL,
created_at TEXT DEFAULT CURRENT_TIMESTAMP
);

View File

@ -1,13 +0,0 @@
{
"presets": [
"next/babel",
],
"env": {
"development": {
"plugins": ["inline-dotenv"]
},
"production": {
"plugins": ["transform-inline-environment-variables"]
}
}
}

View File

@ -1 +0,0 @@
API_HOST=http://localhost:3001

2
ui/.gitignore vendored
View File

@ -1,2 +0,0 @@
/node_modules/
/.next/

View File

@ -1,11 +0,0 @@
# Orbiter UI
User interface built with React + Next.js
# Mock Api
* /v1/orbiter/autoscaler [GET]
* /v1/orbiter/events [GET]
* /v1/orbiter/handle/{autoscaler_name}/{service_name}/inspect-service [GET]
* /v1/orbiter/handle/{autoscaler_name}/{service_name}/{direction} [POST]
* /v1/orbiter/health [GET]

View File

@ -1,205 +0,0 @@
{
"autoscaler": {
"data": [
{
"name": "autoswarm/frontend",
"replicas": 4
},
{
"name": "autoswarm/backend",
"replicas": 8
},
{
"name": "autoswarm/gateway",
"replicas": 2
},
{
"name": "autoswarm/monitoring",
"replicas": 1
}
]
},
"health": {
"status": true,
"info": {}
},
"events": {
},
"services-inspect": [
{
"id": "frontend",
"version": {
"index": 418
},
"createdAt": "2016-06-16T21:57:11.622222327Z",
"updatedAt": "2016-06-16T21:57:11.622222327Z",
"spec": {
"name": "frontend",
"taskTemplate": {
"containerSpec": {
"image": "alpine",
"args": [
"ping",
"docker.com"
]
},
"resources": {
"limits": {},
"reservations": {}
},
"restartPolicy": {
"condition": "any",
"maxAttempts": 0
},
"placement": {}
},
"mode": {
"replicated": {
"replicas": 4
}
},
"updateConfig": {
"parallelism": 1
},
"endpointSpec": {
"mode": "vip"
}
},
"endpoint": {
"spec": {}
}
},
{
"id": "backend",
"version": {
"index": 48
},
"createdAt": "2016-06-16T21:57:11.622222327Z",
"updatedAt": "2016-06-16T21:57:11.622222327Z",
"spec": {
"name": "backend",
"taskTemplate": {
"containerSpec": {
"image": "alpine",
"args": [
"ping",
"docker.com"
]
},
"resources": {
"limits": {},
"reservations": {}
},
"restartPolicy": {
"condition": "any",
"maxAttempts": 0
},
"placement": {}
},
"mode": {
"replicated": {
"replicas": 8
}
},
"updateConfig": {
"parallelism": 1
},
"endpointSpec": {
"mode": "vip"
}
},
"endpoint": {
"spec": {}
}
},
{
"id": "gateway",
"version": {
"index": 418
},
"createdAt": "2016-06-16T21:57:11.622222327Z",
"updatedAt": "2016-06-16T21:57:11.622222327Z",
"spec": {
"name": "gateway",
"taskTemplate": {
"containerSpec": {
"image": "alpine",
"args": [
"ping",
"docker.com"
]
},
"resources": {
"limits": {},
"reservations": {}
},
"restartPolicy": {
"condition": "any",
"maxAttempts": 0
},
"placement": {}
},
"mode": {
"replicated": {
"replicas": 2
}
},
"updateConfig": {
"parallelism": 1
},
"endpointSpec": {
"mode": "vip"
}
},
"endpoint": {
"spec": {}
}
},
{
"id": "monitoring",
"version": {
"index": 418
},
"createdAt": "2016-06-16T21:57:11.622222327Z",
"updatedAt": "2016-06-16T21:57:11.622222327Z",
"spec": {
"name": "monitoring",
"taskTemplate": {
"containerSpec": {
"image": "alpine",
"args": [
"ping",
"docker.com"
]
},
"resources": {
"limits": {},
"reservations": {}
},
"restartPolicy": {
"condition": "any",
"maxAttempts": 0
},
"placement": {}
},
"mode": {
"replicated": {
"replicas": 1
}
},
"updateConfig": {
"parallelism": 1
},
"endpointSpec": {
"mode": "vip"
}
},
"endpoint": {
"spec": {}
}
}
],
"services-scale-up": [],
"services-scale-down": []
}

View File

@ -1,18 +0,0 @@
const jsonServer = require('json-server')
const database = require('./db.json')
const server = jsonServer.create()
const router = jsonServer.router(database)
const middleware = jsonServer.defaults()
const rewriter = jsonServer.rewriter({
'/handle/:autoscaler_name/:service_name/inspect-service': '/services-inspect/:service_name',
'/handle/:autoscaler_name/:service_name/up': '/services-scale-up',
'/handle/:autoscaler_name/:service_name/down': '/services-scale-down'
})
server.use(rewriter)
server.use(middleware)
server.use(router)
server.listen(3001, () => {
console.log('JSON Server is running...', '\n')
})

View File

@ -1,60 +0,0 @@
import Link from 'next/link'
import Head from 'next/head'
import { Container, Grid, Header, List, Menu, Segment } from 'semantic-ui-react'
export default ({ children, title }) => (
<div>
<Head>
<title>Orbiter UI - { title }</title>
<link rel='stylesheet' href='//cdnjs.cloudflare.com/ajax/libs/semantic-ui/2.2.12/semantic.min.css' />
</Head>
<Segment inverted textAlign='center' vertical>
<Container>
<Menu fixed='top' inverted>
<Link href='/'>
<a className='header item'>
<img className='ui mini image' src='/static/logo-round.svg' style={{ marginRight: '1.5em' }} /> Orbiter UI
</a>
</Link>
</Menu>
</Container>
</Segment>
<Segment vertical style={{ padding: '5em 0em' }}>
<Container>
<Header as='h1' dividing>{ title }</Header>
{ children }
</Container>
</Segment>
<Segment inverted vertical style={{ padding: '3em 0em' }}>
<Container>
<Grid divided inverted stackable>
<Grid.Row>
<Grid.Column width={4}>
<Header inverted as='h4' content='About' />
<List link inverted>
<List.Item as='a'>Link 1</List.Item>
<List.Item as='a'>Link 2</List.Item>
<List.Item as='a'>Link 3</List.Item>
<List.Item as='a'>Link 4</List.Item>
</List>
</Grid.Column>
<Grid.Column width={4}>
<Header inverted as='h4' content='Services' />
<List link inverted>
<List.Item as='a'>Link 1</List.Item>
<List.Item as='a'>Link 2</List.Item>
<List.Item as='a'>Link 3</List.Item>
<List.Item as='a'>Link 4</List.Item>
</List>
</Grid.Column>
<Grid.Column width={8}>
<Header as='h4' inverted>Footer Header</Header>
<p>Description</p>
</Grid.Column>
</Grid.Row>
</Grid>
</Container>
</Segment>
</div>
)

7152
ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,37 +0,0 @@
{
"name": "orbiter-ui",
"version": "0.0.0",
"description": "UI for orbiter autoscaler",
"main": "index.js",
"scripts": {
"dev": "next & node api/server.js",
"build": "next build",
"start": "next start",
"lint": "standard",
"lint:fix": "standard --fix",
"test": "npm list 1>/dev/null"
},
"repository": {
"type": "git",
"url": "git+https://github.com/sarkk0x0/orbiter.git"
},
"author": "Andres Martin",
"license": "Apache-2.0",
"bugs": {
"url": "https://github.com/sarkk0x0/orbiter/issues"
},
"homepage": "https://github.com/sarkk0x0/orbiter/ui",
"dependencies": {
"babel-plugin-inline-dotenv": "^1.1.1",
"babel-plugin-transform-inline-environment-variables": "^0.2.0",
"isomorphic-fetch": "^2.2.1",
"next": "^3.0.6",
"react": "^15.6.1",
"react-dom": "^15.6.1",
"semantic-ui-react": "^0.72.0"
},
"devDependencies": {
"json-server": "^0.12.0",
"standard": "^10.0.3"
}
}

View File

@ -1,86 +0,0 @@
import React from 'react'
import Link from 'next/link'
import 'isomorphic-fetch' /* global fetch */
import {Button, Grid, Header, Segment} from 'semantic-ui-react'
import Layout from '../components/layout'
const MIN_REPLICAS = 1
export default class extends React.Component {
static async getInitialProps () {
const res = await fetch(`${process.env.API_HOST}/autoscaler`)
const json = await res.json()
return {
services: json.data
}
}
constructor (props) {
super(props)
this.state = {
services: props.services
}
}
scaleUp (serviceName) {
fetch(`${process.env.API_HOST}/handle/${serviceName}/up`, {
method: 'POST',
body: {} // just pass the instance
}).then(response => {
if (response.status === 201) {
// TODO: update react state manipulation with a better approach
const service = this.state.services.find(item => item.name === serviceName)
const others = this.state.services.filter(item => item.name !== serviceName)
this.setState({ services: [...others, { name: service.name, replicas: service.replicas + 1 }] })
}
})
}
scaleDown (serviceName) {
fetch(`${process.env.API_HOST}/handle/${serviceName}/down`, {
method: 'POST',
body: {} // just pass the instance
}).then(response => {
if (response.status === 201) {
// TODO: update react state manipulation with a better approach
const service = this.state.services.find(item => item.name === serviceName)
const others = this.state.services.filter(item => item.name !== serviceName)
this.setState({ services: [...others, { name: service.name, replicas: service.replicas - 1 }] })
}
})
}
render () {
return (
<Layout title='Dashboard'>
{
this.state.services
.sort((a, b) => a.name.localeCompare(b.name))
.map(service => (
<Segment key={service.name}>
<Grid>
<Grid.Column width={8} style={{ display: 'flex', alignItems: 'center' }}>
<Header as='h3'>
<Link href={{ pathname: '/service', query: { name: service.name } }}>
<a>{ service.name }</a>
</Link>
</Header>
</Grid.Column>
<Grid.Column width={4} style={{ display: 'flex', alignItems: 'center' }}>
<Header as='h3'>{ service.replicas }</Header>
</Grid.Column>
<Grid.Column floated='right' width={4} style={{ textAlign: 'right' }}>
<Button icon='plus' onClick={() => { this.scaleUp(service.name) }} />
<Button icon='minus' disabled={service.replicas <= MIN_REPLICAS} onClick={() => { this.scaleDown(service.name) }} />
</Grid.Column>
</Grid>
</Segment>
))
}
</Layout>
)
}
}

View File

@ -1,27 +0,0 @@
import React from 'react'
import 'isomorphic-fetch' /* global fetch */
import {Segment} from 'semantic-ui-react'
import Layout from '../components/layout'
export default class extends React.Component {
static async getInitialProps ({ query }) {
const res = await fetch(`${process.env.API_HOST}/handle/${query.name}/inspect-service`)
const json = await res.json()
return {
service: json
}
}
render () {
return (
<Layout title='Service info'>
<Segment>
<pre style={{ margin: '0' }}>{ JSON.stringify(this.props.service, null, ' ') }</pre>
</Segment>
</Layout>
)
}
}

View File

@ -1,739 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="45.30294mm"
height="42.97155mm"
viewBox="0 0 45.302941 42.971551"
version="1.1"
id="svg8"
sodipodi:docname="orbiter-gopher.svg"
inkscape:version="0.92.1 r15371"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\orbiter\orbiter-logo.png"
inkscape:export-xdpi="591.08875"
inkscape:export-ydpi="591.08875">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="180.64667"
inkscape:cy="65.463729"
inkscape:document-units="mm"
inkscape:current-layer="text6626"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:showpageshadow="false"
inkscape:snap-midpoints="true"
inkscape:snap-smooth-nodes="true"
inkscape:snap-intersection-paths="true"
inkscape:object-paths="true"
inkscape:snap-global="false"
inkscape:window-width="2560"
inkscape:window-height="1377"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="backdrop"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-53.542691,-96.521122)"
style="display:inline;opacity:1">
<ellipse
style="opacity:1;fill:#212121;fill-opacity:1;stroke:#15181a;stroke-width:0.27048403;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6628"
cx="76.19416"
cy="118.0069"
rx="22.516228"
ry="21.350533"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690"
r="0.18898803"
cy="107.36319"
cx="63.477875"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7"
r="0.18898803"
cy="109.83893"
cx="67.512772"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4"
r="0.18898803"
cy="102.11877"
cx="66.029213"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9"
r="0.18898803"
cy="111.63431"
cx="56.693199"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9-2"
r="0.18898803"
cy="125.93125"
cx="57.638142"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9-2-3-8"
r="0.18898803"
cy="100.76749"
cx="78.663071"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9-2-3-0"
r="0.18898803"
cy="100.90924"
cx="85.561127"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9-2-3-81"
r="0.18898803"
cy="130.86385"
cx="87.073036"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9-2-3-9"
r="0.18898803"
cy="137.05321"
cx="83.387772"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9-2-3-88"
r="0.18898803"
cy="125.33595"
cx="95.813736"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.02499999;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path6690-0-7-6-4-9-2-3-02"
r="0.18898803"
cy="117.33231"
cx="57.921623"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.15363808;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 73.857805,103.17328 0.312601,0.59449 -1.200246,0.63113 0.318514,0.60574 -0.605745,0.31851 0.321223,0.6109 -0.519214,0.27153 c 0.145284,0.27631 0.72668,1.32595 1.899713,1.24275 1.173037,-0.0832 3.175532,-1.20514 3.107646,-3.75971 0.336049,-0.20657 0.663286,-0.42206 0.65327,-0.98158 -0.325299,-0.0533 -0.586707,0.10969 -0.843465,0.28893 -0.207482,-0.23695 -0.470732,-0.38438 -0.796991,-0.4313 0.0072,0.40703 0.06988,0.7949 0.473284,1.06556 -0.0963,0.2354 -0.253328,0.30933 -0.39187,0.43241 l -0.439337,0.22954 -0.325534,-0.61909 -0.592393,0.31149 -0.631121,-1.20025 z"
id="rect6899"
inkscape:connector-curvature="0"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="fill:#f44336;fill-opacity:1;stroke:none;stroke-width:0.62940985px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 53.349609,70.615234 c -15.296021,1.113593 -29.671385,9.149783 -29.871093,16.267578 -0.584773,-1.621486 -0.8557,-2.436461 -0.441407,-3.46875 -2.602755,6.414003 -2.931985,12.821642 -1.830078,18.958988 -0.594171,-0.71356 -1.119973,-1.8098 -1.179687,-3.691409 -1.046288,3.825199 1.115334,6.262479 2.126953,7.355469 1.011619,1.09299 8.522378,18.69384 14.751953,26.00977 l 15.875,-18.1211 1.892578,-12.04687 c -3.337388,-5.386927 -6.644921,-8.149466 -10.738281,-9.443363 1.784585,0.980199 2.509908,2.856025 3.667969,4.253906 C 37.878078,90.591438 33.14075,90.514778 31.693359,89.933594 27.942401,88.219442 28.223306,85.256516 31.164062,82.0625 31.602528,81.716774 32.160538,80.504841 34.5625,80.75 33.973014,80.500481 33.463413,80.37243 33.017578,80.322266 37.370952,76.658612 44.788641,72.93451 53.349609,70.615234 Z"
transform="matrix(0.26458333,0,0,0.26458333,53.542691,96.521122)"
id="path7056"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:connector-curvature="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer6"
inkscape:label="whale" />
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="planet"
style="display:inline"
transform="translate(1.0370743,5.9995457)">
<ellipse
style="opacity:1;fill:#0277bd;fill-opacity:1;stroke:#15181a;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4497"
cx="31.041294"
cy="13.344828"
rx="12.520462"
ry="11.811756"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4501"
cx="37.466892"
cy="12.541629"
r="0.66145831"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4503"
cx="40.963169"
cy="15.990661"
r="0.56696427"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4505"
cx="37.041668"
cy="19.108965"
r="1.6536458"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4507"
cx="31.041294"
cy="22.132774"
r="1.842634"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4509"
cx="31.088541"
cy="18.589249"
r="0.51971728"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.75590551;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="M 96.476562,0.37890625 C 70.341448,0.37847171 49.154461,20.365717 49.154297,45.021484 c 1.64e-4,24.655768 21.187151,44.643013 47.322265,44.642578 -32.555001,-6.178799 -31.674711,-89.88557283 0,-89.28515575 z"
transform="matrix(0.26458333,0,0,0.26458333,5.5152223,1.4330715)"
id="path4497-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4511"
cx="24.662947"
cy="20.904352"
r="0.66145831"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4513"
cx="27.497768"
cy="15.187462"
r="1.7008928"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<circle
style="opacity:1;fill:#000000;fill-opacity:0.1747573;stroke:none;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
id="path4515"
cx="23.151041"
cy="12.305393"
r="0.66145831"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="fire"
transform="translate(1.0370743,5.9995457)"
style="display:inline">
<g
aria-label="rbiter"
style="font-style:normal;font-weight:normal;font-size:18.81172371px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.47029307"
id="text6626" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="rock"
style="display:inline;opacity:1"
transform="translate(1.0370743,5.9995457)">
<path
style="fill:#ff9800;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 23.718766,23.842387 c 0,0 2.448043,1.509349 2.973374,2.772921 0.525331,1.263572 0.283802,3.498351 -0.06682,4.777444 -0.350621,1.279093 -1.215723,2.525559 -2.23838,3.558026 -1.022658,1.032468 -3.60923,1.534284 -5.328688,1.753956 -0.884424,0.112991 -2.797843,-0.602774 -4.212068,-1.6503 -1.335246,-0.989026 -2.163939,-2.289181 -3.288183,-2.9601 C 9.2430153,30.712812 5.3567525,24.87949 5.5110292,19.866753 c 0.3480172,0.767039 0.3725521,1.729273 1.2361217,2.221679 0.031059,-1.319713 0.4701045,-2.492893 -1.1358954,-4.025748 2.7620802,0.979235 2.420129,1.98066 4.8172795,2.010601 2.39715,0.02994 2.677487,1.174401 5.472597,1.430495 z"
id="path7013"
inkscape:connector-curvature="0"
sodipodi:nodetypes="czzzsssccczcc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="fill:#ffeb3b;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 23.251044,26.114179 17.23748,33.23023 11.591411,30.557533 C 10.235485,29.096866 8.6878343,27.992259 7.916455,25.446005 8.2960392,25.600325 8.5318817,25.994214 9.1525767,25.746683 8.2724312,24.33219 8.1025745,23.272842 7.916455,22.205362 c 0.2568489,0.199021 0.428527,0.568383 0.9354434,0.267269 L 7.716003,20.033796 c 0.9118928,0.720204 1.5737063,1.815528 2.973373,1.804071 0.360595,-0.326598 -0.118851,-0.7582 -0.434313,-1.169305 2.254714,0.411512 4.148255,1.081004 5.779704,1.937705 z"
id="path7011"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="fill:#795548;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 22.017538,22.248686 c 0.393927,0.24989 1.435474,-0.0073 2.005325,0.447736 0.682409,0.561721 0.197885,1.275625 1.195033,1.919329 0.997145,0.643705 1.016254,2.560924 0.775682,3.078303 -0.240567,0.517378 0.399372,0.993775 -0.01939,1.855508 -0.418758,0.861734 -0.05345,1.187714 -0.163712,2.197176 -0.110258,1.009462 -0.336155,1.028018 -0.81249,1.163588 -0.476337,0.135565 -0.477102,0.264197 -0.722065,0.885724 -0.244963,0.621527 -1.101652,1.964453 -2.388164,1.765495 -1.286512,-0.198959 -1.364634,-0.190054 -1.968374,0.160794 -0.60374,0.350849 -1.291241,0.517819 -1.777849,-0.05436 C 17.654926,35.095794 16.953055,34.969298 16.354457,34.82732 15.755858,34.685341 15.55334,34.705357 14.953269,33.726621 14.353199,32.747884 12.827137,32.026726 11.92671,31.593863 11.026282,31.161 11.273459,30.950512 11.120414,30.322232 c -0.153046,-0.62828 -0.235984,-0.972264 -0.0673,-1.561368 0.168687,-0.589104 -0.106761,-1.295646 -0.473412,-2.359325 -0.36665,-1.063678 0.460117,-1.420805 0.592063,-2.346991 0.131947,-0.926185 1.146711,-1.531076 2.042761,-1.926102 0.896049,-0.395026 2.319678,-0.356529 3.17509,0.09333 0.855412,0.449855 1.198458,0.487082 1.867605,0.445094 0.669147,-0.04199 0.866349,-0.51959 1.480857,-0.940054 0.614509,-0.420465 1.885523,0.27199 2.279452,0.52188 z"
id="path4520"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zczzzzzzzzzzzzzzzzzzzzz"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.3;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 80.636719,104.29688 c -0.800232,-0.0366 -1.536549,0.0988 -2.117188,0.49609 -2.32255,1.58915 -3.066643,3.39403 -5.595703,3.55273 -2.529059,0.1587 -3.82554,0.0186 -7.058594,-1.68164 -3.233053,-1.70025 -8.492264,-1.89926 -11.878906,-0.40625 -6e-5,0.003 6e-5,0.005 0,0.008 -0.03872,0.0163 -0.08292,0.0281 -0.121094,0.0449 -3.386645,1.49301 -7.222005,3.77875 -7.720703,7.27929 -0.498693,3.50055 -3.624045,4.8509 -2.238281,8.8711 1.385768,4.0202 2.42662,6.68948 1.789062,8.91601 -0.637544,2.22654 -0.324535,3.52775 0.253907,5.90235 0.578438,2.3746 -0.356318,3.17062 3.046875,4.80664 3.403188,1.63602 9.171472,4.36138 11.439453,8.06054 2.267985,3.69916 3.034453,3.62355 5.296875,4.16016 2.262418,0.53661 4.914758,1.01515 6.753906,3.17774 1.839148,2.16255 4.436894,1.53112 6.71875,0.20507 2.281852,-1.32604 2.577049,-1.35939 7.439453,-0.60742 4.862408,0.75197 8.1015,-4.32475 9.027344,-6.67383 0.667746,-1.69422 0.863809,-2.41596 1.591797,-2.88086 -2.274083,0.71975 -4.666576,0.1688 -6.685547,-0.59179 -2.358686,-0.88857 -5.863026,1.21133 -7.140625,3.11133 -1.2776,1.9 -3.470899,4.55104 -4.646484,3.09765 -1.175585,-1.45339 -1.992446,-1.88392 -3.625,-1.38476 -1.632554,0.49916 -5.528114,-0.37033 -7.488282,-4.34766 -1.960168,-3.97733 -6.632139,-2.4607 -7.365234,-4.82031 -0.733095,-2.35962 2.43381,-3.95343 3.259766,-5.71485 0.825956,-1.76142 1.503021,-4.30616 -1.390625,-5.13867 -2.893646,-0.8325 -2.826777,1.8191 -4.367188,1.54297 -1.540412,-0.27613 -4.932915,-4.48585 -5.671875,-6.58398 -0.73896,-2.09813 -2.361577,-8.52578 -0.714844,-10.35743 1.646733,-1.83165 4.019566,-3.10418 5.673433,-6.33935 1.247327,0.8245 1.906874,3.19544 5.682036,3.83545 -0.492744,15.83922 27.585313,-9.22618 33.191406,-3.67188 -0.249876,-0.59596 -0.609344,-1.17164 -1.259765,-1.70703 -2.153768,-1.71982 -6.09122,-0.74694 -7.580078,-1.69141 -1.11665,-0.70833 -4.097351,-2.35884 -6.498047,-2.46874 z m 15.33789,5.86718 c 0.203366,0.48504 0.337633,0.9826 0.46875,1.49024 0,0 -0.01327,-0.85927 -0.46875,-1.49024 z m 1.289063,37.36328 c 0.382641,-0.1211 0.763234,-0.26805 1.136719,-0.46679 -0.50188,0.14283 -0.855335,0.2871 -1.136719,0.46679 z"
transform="matrix(0.26458333,0,0,0.26458333,-1.037074,-5.9995461)"
id="path4520-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccscccccsccsssccsccssssscscsszccccccccccccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.4;fill:#0e0e0e;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 22.420225,33.325963 c -0.773989,0.341514 -1.230774,0.663716 -1.025421,1.118157 0.205354,0.45444 0.934792,1.064396 1.651311,0.41983 0.716519,-0.644565 0.148099,-1.879502 -0.62589,-1.537987 z"
id="path6959"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzz"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.4;fill:#0e0e0e;fill-opacity:1;stroke:none;stroke-width:0.16660832px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 18.495865,34.865781 c 0.328513,-0.419365 0.596023,-0.648142 0.841499,-0.452307 0.245476,0.195835 0.504544,0.735641 0,1.072912 -0.504544,0.337271 -1.170012,-0.201241 -0.841499,-0.620605 z"
id="path6959-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzz"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.4;fill:#0e0e0e;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 14.779887,29.359723 c -0.490507,0.50688 -0.805552,-0.186729 -1.025421,0.362205 -0.219869,0.548934 0.863921,1.15889 1.58044,0.514324 0.716519,-0.644565 -0.06451,-1.383408 -0.555019,-0.876529 z"
id="path6959-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzz"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.4;fill:#0e0e0e;fill-opacity:1;stroke:none;stroke-width:0.26458332px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 23.071739,28.816381 c -0.773989,0.341514 -1.230774,0.663716 -1.025421,1.118157 0.205354,0.45444 0.934792,1.064396 1.651311,0.41983 0.716519,-0.644565 0.148099,-1.879502 -0.62589,-1.537987 z"
id="path6959-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="zzzz"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.375;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.320314,31.11579 c 0.04081,0.220092 0.157176,0.360267 0.364229,0.444962"
id="path4559"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.911054,31.660023 c 1.263597,0.526591 2.227045,1.316951 2.756217,2.488946"
id="path4576"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 24.938183,24.869706 c 0.789954,0.836612 0.957561,1.752673 0.701584,2.722808"
id="path4597"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 24.787844,24.744423 C 24.66237,24.665433 24.535881,24.586848 24.487166,24.477154"
id="path4599"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 24.532009,24.768394 c -0.125474,-0.07899 -0.210622,-0.204822 -0.223902,-0.355858"
id="path4599-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.231861,27.090433 c 0.125474,-0.07899 0.251963,-0.157575 0.300678,-0.267269"
id="path4599-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.562866,27.039234 c 0.125474,-0.07899 0.210622,-0.204822 0.223902,-0.355858"
id="path4599-6-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 22.084541,29.137707 c -0.125474,0.07899 -0.226906,0.21604 -0.275621,0.325734"
id="path4599-2-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 22.668611,28.798081 c -0.07118,0.03305 -0.172617,0.07823 -0.238036,0.133634"
id="path4599-2-1-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
</g>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="gopher"
transform="translate(1.0370743,5.9995457)">
<path
style="display:inline;fill:#81d4fa;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 20.051998,12.187181 20.73161,11.785152 C 19.521681,9.4902595 18.209045,10.59677 20.051998,12.187181 Z"
id="path9538"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="display:inline;fill:#81d4fa;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 15.158266,12.926759 c 0.0097,0.295207 -0.140239,0.485749 -0.32299,0.654753 -2.268788,-0.597914 -0.885476,-2.774504 0.32299,-0.654753 z"
id="path9538-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="display:inline;opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 57.175781,68.101562 c -2.41476,-0.02115 -3.051788,4.213933 2.552735,5.828126 -1.58735,-1.841096 -2.717127,-3.669826 -1.226563,-5.427735 -0.476214,-0.268106 -0.926482,-0.396889 -1.326172,-0.400391 z"
transform="matrix(0.26458333,0,0,0.26458333,-1.037074,-5.9995461)"
id="path9538-5-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:1;fill:#dbb69a;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.398182,21.207104 c 0.224342,-0.02794 1.838802,0.736132 1.610986,1.207636 -0.227816,0.471505 -2.164244,-0.07891 -2.283001,-0.20663 -0.25112,-0.270072 0.246388,-0.948002 0.672015,-1.001006 z"
id="path7191-0-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szss"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:1;fill:#dbb69a;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.157611,19.024107 c 2.039053,-1.389136 1.357322,-3.127928 -0.784763,-0.775897 0.03264,0.647614 0.335461,0.719691 0.784763,0.775897 z"
id="path7191-01"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="opacity:1;fill:#81d4fa;fill-opacity:1;stroke:#010101;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 23.718006,18.494753 c 0.968564,5.185495 -0.91786,3.725798 -3.508151,5.107918 -2.59029,1.38212 -5.14014,0.581804 -6.048446,-4.217958 -0.908306,-4.799764 0.250107,-7.221062 4.477542,-7.929767 4.227436,-0.708705 4.391542,3.359002 5.079055,7.039807 z"
id="path4522"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szzzs"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.10468853px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 18.669803,13.591658 0.236283,4.417799 c -1.191817,0.09135 -2.57313,-0.582783 -2.483905,-2.245705 0.08922,-1.662922 1.448518,-2.106517 2.247622,-2.172094 z"
id="path6378"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cczc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 22.134573,15.594598 c 0.122022,1.085597 0.417909,1.943508 1.503506,1.821486 1.085599,-0.122022 1.866731,-1.100992 1.744708,-2.186589 -0.122022,-1.085598 -1.100993,-1.866731 -2.18659,-1.744709 -1.085598,0.122023 -1.183646,1.024214 -1.061624,2.109812 z"
id="path9334-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sssss"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path9334"
cx="-17.076828"
cy="17.810764"
r="2.2207792"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
transform="matrix(-0.99374223,0.11169773,0.11169773,0.99374223,0,0)"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<circle
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04477805;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path9334-0"
cx="-18.094685"
cy="18.802183"
r="0.50264788"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
transform="matrix(-0.99374223,0.11169773,0.11169773,0.99374223,0,0)"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<circle
style="display:inline;opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.04477805;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path9334-0-3"
cx="-21.531988"
cy="18.740086"
r="0.50264794"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
transform="matrix(-0.99374223,0.11169773,0.11169773,0.99374223,0,0)"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="display:inline;opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.19783661;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 18.669803,13.591658 c -1.504397,0.631094 -1.903405,3.514942 0.236283,4.417799 -1.109074,-0.02645 -2.028501,-0.867304 -2.153654,-1.969613 -0.134155,-1.202033 0.718209,-2.290409 1.917371,-2.448186 z"
id="path9334-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.01357168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path9334-0-4"
cx="-18.38711"
cy="18.771772"
r="0.1523464"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
transform="matrix(-0.99374223,0.11169773,0.11169773,0.99374223,0,0)"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<circle
style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.01357168;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="path9334-0-4-5"
cx="-21.81683"
cy="18.664673"
r="0.1523464"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
transform="matrix(-0.99374223,0.11169773,0.11169773,0.99374223,0,0)"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="display:inline;opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.19783661;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 22.8168,13.572846 c -0.693625,0.954873 -0.209854,3.49414 0.57984,3.853475 -0.88908,-0.02545 -1.149632,-0.831643 -1.262046,-1.831769 -0.105923,-0.942368 -0.04555,-1.746096 0.682206,-2.021706 z"
id="path9334-8-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.09491766px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 22.392697,19.304219 c -0.118561,0.75472 -0.422964,0.638099 -0.708825,0.504541 -0.298019,-0.139241 -0.215066,-0.528333 -0.366314,-0.629113 -0.151247,-0.10078 -1.065279,-0.974532 -0.181036,-1.318137 l 0.902841,-0.04726 z"
id="path8279"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cszccc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 22.375921,18.172307 c 0,0 0.4674,1.178071 0.12844,1.416621 -0.338956,0.238556 -0.658838,0.164483 -0.903155,-0.1827 -0.244295,-0.347129 0.525655,-1.290735 0.525655,-1.290735 z"
id="path7331"
inkscape:connector-curvature="0"
sodipodi:nodetypes="czzcc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.17937197;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 22.126893,18.11553 0.24904,0.05679 c 0,0 0.113116,0.286112 0.187692,0.604507 -0.437592,0.117127 -0.82869,0.275723 -0.785381,0.82186 -0.06239,-0.05014 -0.121708,-0.113849 -0.176988,-0.19242 -0.244295,-0.347127 0.525645,-1.290726 0.525645,-1.290726 z"
id="path7331-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:1;fill:#dbb69a;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 21.145903,18.668686 c 0.468462,0.608096 0.59738,-0.019 0.994422,-0.07204 0.397045,-0.05304 0.411475,0.291288 0.788147,-0.201538 0.376669,-0.492836 -0.23194,-0.943232 -0.957351,-0.846317 -0.725409,0.09692 -1.293675,0.511806 -0.825215,1.119898 z"
id="path7313-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="czzszc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.41317266;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 21.708161,17.599839 c 0.04635,-0.01201 0.09428,-0.02213 0.142871,-0.03131 -0.206316,0.252342 -0.574985,0.864652 0.278428,1.030692 -0.388287,0.06317 -0.519621,0.671784 -0.983637,0.06946 -0.409902,-0.532085 -0.02599,-0.916209 0.562342,-1.06886 z"
id="path7313-1-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccsc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.5885343;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
d="m 21.455143,17.522199 c 0.03771,0.282321 0.669795,0.455159 0.925101,0.42105 0.255307,-0.03412 0.552583,-0.33111 0.514865,-0.613432 -0.03771,-0.282322 -0.132743,-0.438083 -0.765533,-0.353546 -0.632829,0.08453 -0.712155,0.263599 -0.674433,0.545928 z"
id="path7313"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szszs"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:1;fill:none;stroke:#000000;stroke-width:0.09491766px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 22.129456,18.599233 c 0.09566,0.310301 0.134367,0.635018 0.09822,1.116931"
id="path8086"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:normal"
d="m 69.59375,67.074219 c -12.052608,3.663549 -15.212184,12.687742 -12.150391,28.867187 2.811009,14.854214 9.781453,19.569274 17.589844,17.923824 -1.469315,-0.75909 -2.794999,-1.72888 -3.984386,-2.86804 -0.577089,-0.55272 -1.122091,-1.14531 -1.635845,-1.77305 -10.36448,-12.66412 -8.01101,-39.634777 0.180778,-42.149921 z"
id="path4522-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscssc"
transform="matrix(0.26458333,0,0,0.26458333,-1.037074,-5.9995461)"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:1;fill:#dbb69a;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 13.948909,17.324293 c -2.441885,-0.353047 -3.113729,1.389588 0.05455,1.102224 0.413389,-0.499579 0.238783,-0.75728 -0.05455,-1.102224 z"
id="path7191"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png" />
<path
style="display:inline;opacity:1;fill:#dbb69a;fill-opacity:1;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 16.904719,23.283933 c -0.170734,0.148191 -0.681571,1.859718 -0.178597,2.005436 0.502975,0.145717 1.387935,-1.662475 1.372318,-1.836176 -0.03302,-0.367298 -0.869799,-0.450404 -1.193721,-0.16926 z"
id="path7191-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="szss"
inkscape:export-filename="C:\Users\Marcus Olsson\Desktop\draft.png"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.15;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 69.744141,110.04688 c -0.741849,0.0272 -1.474492,0.23238 -1.933594,0.63085 -0.645294,0.5601 -2.574832,7.02934 -0.673828,7.58008 0.01063,0.003 1.943169,-1.11734 1.953889,-1.11467 -0.283043,-1.81105 -0.59762,-4.65369 1.120327,-7.07669 -0.155194,-0.01 -0.310036,-0.0253 -0.466797,-0.0195 z"
transform="matrix(0.26458333,0,0,0.26458333,-1.037074,-5.9995461)"
id="path7191-0-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.15;fill:#070503;fill-opacity:1;stroke:none;stroke-width:1.13385832;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 54.773438,87.960938 c -7.839722,-0.379853 -9.370717,5.346343 1.855468,4.328124 0.427335,-0.516432 0.717139,-0.489453 0.848268,-0.894562 0,0 -5.765686,1.051682 -5.897096,-0.892547 -0.13141,-1.944229 5.613192,-1.657744 5.613192,-1.657744 -0.204764,-0.387742 -0.418977,-0.306738 -0.771395,-0.721162 -0.576823,-0.0834 -1.125789,-0.136786 -1.648437,-0.162109 z"
transform="matrix(0.26458333,0,0,0.26458333,-1.037074,-5.9995461)"
id="path7191-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccczccc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.018275,22.141044 c 0.104448,-0.10523 0.20997,-0.210305 0.232713,-0.328154"
id="path4599-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.320178,22.012251 c 0.104448,-0.10523 0.159046,-0.247019 0.137948,-0.397162"
id="path4599-6-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
<path
style="display:inline;opacity:0.3;fill:none;stroke:#000000;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 18.848714,23.720462 c -0.146827,0.0206 -0.293068,-0.02061 -0.400655,-0.127446"
id="path4599-6-8-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc"
inkscape:export-xdpi="560.66998"
inkscape:export-ydpi="560.66998" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 48 KiB