ardtweeno 0.0.2 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/CHANGELOG +179 -1
- data/COPYING +4 -3
- data/Gemfile +29 -0
- data/Gemfile.lock +76 -0
- data/INSTALL +12 -0
- data/Procfile +1 -0
- data/README.md +26 -2
- data/Rakefile +14 -7
- data/lib/ardtweeno/api.rb +542 -0
- data/lib/ardtweeno/configreader.rb +65 -0
- data/lib/ardtweeno/db.rb +51 -0
- data/lib/ardtweeno/dispatcher.rb +538 -0
- data/lib/ardtweeno/exceptions.rb +33 -0
- data/lib/ardtweeno/node.rb +117 -0
- data/lib/ardtweeno/nodemanager.rb +300 -0
- data/lib/ardtweeno/packet.rb +98 -0
- data/lib/ardtweeno/restapi.rb +266 -0
- data/lib/ardtweeno/serialparser.rb +221 -0
- data/lib/ardtweeno.rb +120 -1
- data/public/glossy_green_button.svg +123 -0
- data/public/glossy_red_button.svg +75 -0
- data/public/main.css +129 -0
- data/public/raspberrypi.jpg +0 -0
- data/resources/conf.yaml +41 -0
- data/resources/nodelist.yaml +26 -0
- data/resources/serialparser.js +84 -0
- data/test/api_test.rb +255 -0
- data/test/dispatcher_test.rb +115 -0
- data/test/node_test.rb +105 -0
- data/test/nodemanager_test.rb +167 -0
- data/test/packet_test.rb +75 -0
- data/test/parser_test.rb +147 -0
- data/test/post_watch +11 -0
- data/test/rest_api_test.rb +248 -0
- data/test/run_mock +17 -0
- data/test/run_packet_push +14 -0
- data/test/serialport_mock.rb +43 -0
- data/test/test_helper.rb +15 -0
- data/test/tty0tty-1.1/AUTHORS +1 -0
- data/test/tty0tty-1.1/COPYING +340 -0
- data/test/tty0tty-1.1/INSTALL +18 -0
- data/test/tty0tty-1.1/README +52 -0
- data/test/tty0tty-1.1/THANKS +4 -0
- data/test/tty0tty-1.1/TODO +3 -0
- data/test/tty0tty-1.1/VERSION +4 -0
- data/test/tty0tty-1.1/module/Makefile +41 -0
- data/{bin/ardtweeno → test/tty0tty-1.1/module/Module.symvers} +0 -0
- data/test/tty0tty-1.1/module/modules.order +1 -0
- data/test/tty0tty-1.1/module/tty0tty.c +678 -0
- data/test/tty0tty-1.1/module/tty0tty.ko +0 -0
- data/test/tty0tty-1.1/module/tty0tty.mod.c +51 -0
- data/test/tty0tty-1.1/module/tty0tty.mod.o +0 -0
- data/test/tty0tty-1.1/module/tty0tty.o +0 -0
- data/test/tty0tty-1.1/pts/Makefile +10 -0
- data/test/tty0tty-1.1/pts/tty0tty +0 -0
- data/test/tty0tty-1.1/pts/tty0tty.c +222 -0
- data/views/createpost.erb +45 -0
- data/views/home.erb +59 -0
- metadata +89 -37
- data/README +0 -1
- data/test/Rakefile +0 -6
- data/test/features/ardtweeno.feature +0 -14
- data/test/features/step_definitions/ardtweeno_steps.rb +0 -24
@@ -0,0 +1,221 @@
|
|
1
|
+
####################################################################################################
|
2
|
+
# @author David Kirwan <davidkirwanirl@gmail.com>
|
3
|
+
# @description Core functions for the Ardtweeno SerialParser system
|
4
|
+
#
|
5
|
+
# @date 15-11-2012
|
6
|
+
####################################################################################################
|
7
|
+
|
8
|
+
# Imports
|
9
|
+
require 'rubygems'
|
10
|
+
require 'serialport'
|
11
|
+
require 'logger'
|
12
|
+
require 'yaml'
|
13
|
+
require 'json'
|
14
|
+
|
15
|
+
module Ardtweeno
|
16
|
+
|
17
|
+
##
|
18
|
+
# Ardtweeno::SerialParser class for the Ardtweeno system
|
19
|
+
#
|
20
|
+
class SerialParser
|
21
|
+
|
22
|
+
attr_accessor :sp, :log, :seqNo, :manager
|
23
|
+
|
24
|
+
##
|
25
|
+
# Ardtweeno::SerialParser#new constructor for the Ardtweeno system
|
26
|
+
#
|
27
|
+
# * *Args* :
|
28
|
+
# - ++ -> device String, speed Fixnum, timeout Fixnum, {:log}
|
29
|
+
# * *Returns* :
|
30
|
+
# -
|
31
|
+
# * *Raises* :
|
32
|
+
# -
|
33
|
+
#
|
34
|
+
def initialize(dev, speed, timeout, options={})
|
35
|
+
@log = options[:log] ||= Logger.new(STDOUT)
|
36
|
+
@log.level = Logger::WARN
|
37
|
+
|
38
|
+
@log.debug "Creating instance of Ardtweeno::SerialParser"
|
39
|
+
|
40
|
+
# Injection of NodeManager into the SerialParser
|
41
|
+
@manager = options[:manager] ||= nil
|
42
|
+
|
43
|
+
@seqNo = 0
|
44
|
+
|
45
|
+
begin
|
46
|
+
@sp = SerialPort.new(dev, speed)
|
47
|
+
@sp.read_timeout = timeout
|
48
|
+
rescue Exception => e
|
49
|
+
@log.fatal e.message
|
50
|
+
raise e
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
##
|
57
|
+
# Ardtweeno::SerialParser#read Reads data from the active SerialPort device and then validates
|
58
|
+
# returns data if valid JSON, otherwise returns empty JSON hash
|
59
|
+
#
|
60
|
+
# * *Args* :
|
61
|
+
# - ++ -> String, Fixnum, Fixnum, {:log}
|
62
|
+
# * *Returns* :
|
63
|
+
# - JSON if valid, otherwise empty JSON hash
|
64
|
+
# * *Raises* :
|
65
|
+
# -
|
66
|
+
#
|
67
|
+
def read()
|
68
|
+
data = @sp.read
|
69
|
+
|
70
|
+
@log.debug "Validating JSON data"
|
71
|
+
if SerialParser.valid_json?(data)
|
72
|
+
@log.debug "Data is valid JSON"
|
73
|
+
return data
|
74
|
+
else
|
75
|
+
@log.debug "Data is invalid JSON"
|
76
|
+
return '{}'
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
##
|
83
|
+
# Ardtweeno::SerialParser#convert Converts JSON string to Ardtweeno::Packet if possible
|
84
|
+
#
|
85
|
+
# * *Args* :
|
86
|
+
# - ++ -> JSON String
|
87
|
+
# * *Returns* :
|
88
|
+
# - Ardtweeno::Packet
|
89
|
+
# * *Raises* :
|
90
|
+
# - Ardtweeno::InvalidData
|
91
|
+
#
|
92
|
+
# {"seqNo":5,"data":[23.5,997.5,65],"key":"1234567890abcdef"}
|
93
|
+
def convert(packetdata)
|
94
|
+
if packetdata["data"].nil? then raise Ardtweeno::InvalidData, "Packet missing data" end
|
95
|
+
if packetdata["key"].nil? then raise Ardtweeno::InvalidData, "Packet missing key" end
|
96
|
+
|
97
|
+
return Ardtweeno::Packet.new(nextSeq(), packetdata["key"], packetdata["data"])
|
98
|
+
end
|
99
|
+
|
100
|
+
|
101
|
+
##
|
102
|
+
# Ardtweeno::SerialParser#store initiates the storage of an Ardtweeno::Packet
|
103
|
+
#
|
104
|
+
# * *Args* :
|
105
|
+
# - ++ -> Ardtweeno::Packet
|
106
|
+
# * *Returns* :
|
107
|
+
# - true
|
108
|
+
# * *Raises* :
|
109
|
+
# - Ardtweeno::InvalidData or Ardtweeno::ManagerNotDefined if manager is nil
|
110
|
+
#
|
111
|
+
def store(data)
|
112
|
+
|
113
|
+
if data.class == Ardtweeno::Packet
|
114
|
+
if @manager.nil?
|
115
|
+
raise Ardtweeno::ManagerNotDefined, "Error the SerialParser is not currently assigned a manager"
|
116
|
+
else
|
117
|
+
begin
|
118
|
+
# Search for the node which corresponds with this key
|
119
|
+
node = @manager.search({:key=>data.key})
|
120
|
+
|
121
|
+
# Then store the packet in its list
|
122
|
+
node.enqueue(data)
|
123
|
+
rescue Ardtweeno::NotInNodeList => e
|
124
|
+
raise Ardtweeno::NodeNotAuthorised, "Node is not authorised for this network, ignoring"
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# packet should be successfully added to its corresponding node
|
129
|
+
return true
|
130
|
+
else
|
131
|
+
raise Ardtweeno::InvalidData, "Data is invalid, ignoring"
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
##
|
138
|
+
# Ardtweeno::SerialParser#write initiates the conversion of an Ardtweeno::Packet to JSON
|
139
|
+
# before writing to a SerialPort device
|
140
|
+
#
|
141
|
+
# * *Args* :
|
142
|
+
# - ++ -> Ardtweeno::Packet
|
143
|
+
# * *Returns* :
|
144
|
+
# - true || false
|
145
|
+
# * *Raises* :
|
146
|
+
# -
|
147
|
+
#
|
148
|
+
def write(data)
|
149
|
+
@log.debug "Validating data"
|
150
|
+
if SerialParser.valid_json?(data)
|
151
|
+
@log.debug "Data validated"
|
152
|
+
@sp.write(data)
|
153
|
+
return true
|
154
|
+
else
|
155
|
+
@log.debug "Data is invalid"
|
156
|
+
return false
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
|
161
|
+
##
|
162
|
+
# Ardtweeno::SerialParser#valid_json? validates JSON data
|
163
|
+
#
|
164
|
+
# * *Args* :
|
165
|
+
# - ++ -> JSON String
|
166
|
+
# * *Returns* :
|
167
|
+
# - true || false
|
168
|
+
# * *Raises* :
|
169
|
+
# -
|
170
|
+
#
|
171
|
+
def self.valid_json?(json_)
|
172
|
+
begin
|
173
|
+
JSON.parse(json_)
|
174
|
+
return true
|
175
|
+
rescue Exception => e
|
176
|
+
return false
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
|
181
|
+
|
182
|
+
##
|
183
|
+
# Ardtweeno::SerialParser#nextSeq returns the next available sequence number
|
184
|
+
#
|
185
|
+
# * *Args* :
|
186
|
+
# - ++ ->
|
187
|
+
# * *Returns* :
|
188
|
+
# - Fixnum
|
189
|
+
# * *Raises* :
|
190
|
+
# -
|
191
|
+
#
|
192
|
+
def nextSeq()
|
193
|
+
@log.debug "Current Sequence Number: " + @seqNo.to_s
|
194
|
+
theSeq = @seqNo
|
195
|
+
@seqNo += 1
|
196
|
+
@log.debug "Current Sequence Number Incremented: " + @seqNo.to_s
|
197
|
+
|
198
|
+
return theSeq
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
##
|
203
|
+
# Ardtweeno::SerialParser#close Closes the SerialPort instance
|
204
|
+
#
|
205
|
+
# * *Args* :
|
206
|
+
# - ++ ->
|
207
|
+
# * *Returns* :
|
208
|
+
# -
|
209
|
+
# * *Raises* :
|
210
|
+
# -
|
211
|
+
#
|
212
|
+
def close()
|
213
|
+
@log.debug "Closing SerialPort device"
|
214
|
+
@sp.close
|
215
|
+
end
|
216
|
+
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
|
221
|
+
|
data/lib/ardtweeno.rb
CHANGED
@@ -1,2 +1,121 @@
|
|
1
|
-
|
1
|
+
####################################################################################################
|
2
|
+
# @author David Kirwan <davidkirwanirl@gmail.com>
|
3
|
+
# @description Ardtweeno Mesh Network Application Gateway
|
4
|
+
#
|
5
|
+
# @date 15-05-2013
|
6
|
+
####################################################################################################
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'logger'
|
10
|
+
require 'fileutils'
|
11
|
+
require 'ardtweeno/serialparser'
|
12
|
+
require 'ardtweeno/dispatcher'
|
13
|
+
require 'ardtweeno/exceptions'
|
14
|
+
require 'ardtweeno/packet'
|
15
|
+
require 'ardtweeno/nodemanager'
|
16
|
+
require 'ardtweeno/node'
|
17
|
+
require 'ardtweeno/configreader'
|
18
|
+
require 'ardtweeno/api'
|
19
|
+
require 'ardtweeno/db'
|
20
|
+
|
21
|
+
|
22
|
+
##
|
23
|
+
# Ardtweeno Mesh Network Application Gateway
|
24
|
+
#
|
25
|
+
# Software Gateway to allow collecting/broadcasting to/from a Mesh Network over serial. All data is
|
26
|
+
# stored to a database by default to allow later analysis and inclusion in automated reports
|
27
|
+
# generated by the system.
|
28
|
+
#
|
29
|
+
module Ardtweeno
|
30
|
+
class << self
|
31
|
+
|
32
|
+
|
33
|
+
# Constants
|
34
|
+
Ardtweeno::VERSION = "0.2.5" unless defined? Ardtweeno::VERSION
|
35
|
+
Ardtweeno::CONFIGPATH = ENV['HOME'] + "/.ardtweeno" unless defined? Ardtweeno::CONFIGPATH
|
36
|
+
Ardtweeno::DBPATH = Ardtweeno::CONFIGPATH + "/conf.yaml" unless defined? Ardtweeno::DBPATH
|
37
|
+
Ardtweeno::NODEPATH = Ardtweeno::CONFIGPATH + "/nodelist.yaml" unless defined? Ardtweeno::NODEPATH
|
38
|
+
|
39
|
+
# Class Variables
|
40
|
+
@@seqCount = 0 unless defined? @@seqCount
|
41
|
+
@@options = {} unless defined? @@options
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
##
|
46
|
+
# Ardtweeno#options returns the options hash
|
47
|
+
#
|
48
|
+
# * *Args* :
|
49
|
+
# - ++ ->
|
50
|
+
# * *Returns* :
|
51
|
+
# - Hash
|
52
|
+
# * *Raises* :
|
53
|
+
# -
|
54
|
+
#
|
55
|
+
def options()
|
56
|
+
return @@options
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
##
|
61
|
+
# Ardtweeno#nextSeq returns the next available sequence number
|
62
|
+
#
|
63
|
+
# * *Args* :
|
64
|
+
# - ++ ->
|
65
|
+
# * *Returns* :
|
66
|
+
# - Fixnum
|
67
|
+
# * *Raises* :
|
68
|
+
# -
|
69
|
+
#
|
70
|
+
def nextSeq()
|
71
|
+
@log = @@options[:log] ||= Logger.new(STDOUT)
|
72
|
+
@log.level = @@options[:level] ||= Logger::DEBUG
|
73
|
+
|
74
|
+
@log.debug "Current Sequence Number: " + @@seqCount.to_s
|
75
|
+
theSeq = @@seqCount
|
76
|
+
@@seqCount += 1
|
77
|
+
@log.debug "Current Sequence Number Incremented: " + @@seqCount.to_s
|
78
|
+
|
79
|
+
return theSeq
|
80
|
+
end
|
81
|
+
|
82
|
+
|
83
|
+
# Setup the system for the first time
|
84
|
+
def setup(options={})
|
85
|
+
@@options = options
|
86
|
+
|
87
|
+
@log = @@options[:log] ||= Logger.new(STDOUT)
|
88
|
+
@log.level = @@options[:level] ||= Logger::DEBUG
|
89
|
+
|
90
|
+
|
91
|
+
@log.debug "Checking to see if the configuration folder exists."
|
92
|
+
resourceDir = Ardtweeno::CONFIGPATH
|
93
|
+
@log.debug resourceDir
|
94
|
+
|
95
|
+
if File.directory?(resourceDir)
|
96
|
+
@log.debug "The folder already exists, do nothing."
|
97
|
+
else
|
98
|
+
@log.debug "Creating ~/.ardtweeno/ and installing the resources there."
|
99
|
+
|
100
|
+
begin
|
101
|
+
FileUtils.mkdir(resourceDir)
|
102
|
+
dbpath = File.expand_path(File.dirname(__FILE__) + '/../resources/conf.yaml')
|
103
|
+
nodepath = File.expand_path(File.dirname(__FILE__) + '/../resources/nodelist.yaml')
|
104
|
+
FileUtils.cp(dbpath, resourceDir)
|
105
|
+
FileUtils.cp(nodepath, resourceDir)
|
106
|
+
@log.debug "Successfully copied ~/.ardtweeno/conf.yaml"
|
107
|
+
@log.debug "Successfully copied ~/.ardtweeno/nodelist.yaml"
|
108
|
+
rescue Exception => e
|
109
|
+
@log.fatal e.message
|
110
|
+
@log.fatal e.backtrace
|
111
|
+
exit()
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
2
121
|
|
@@ -0,0 +1,123 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
<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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="400" height="400" id="svg11772" version="1.1" inkscape:version="0.48.0 r9654" sodipodi:docname="glossy_yellow_button.svg">
|
4
|
+
<defs id="defs11774">
|
5
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4156" id="linearGradient11748" gradientUnits="userSpaceOnUse" x1="241.40979" y1="287.49377" x2="315.47369" y2="367.88477"/>
|
6
|
+
<linearGradient id="linearGradient4156" inkscape:collect="always">
|
7
|
+
<stop id="stop4158" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
8
|
+
<stop id="stop4160" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
9
|
+
</linearGradient>
|
10
|
+
<filter id="filter6126" inkscape:collect="always" color-interpolation-filters="sRGB">
|
11
|
+
<feGaussianBlur id="feGaussianBlur6128" stdDeviation="0.53035713" inkscape:collect="always"/>
|
12
|
+
</filter>
|
13
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient7171" id="linearGradient11750" gradientUnits="userSpaceOnUse" x1="275.60828" y1="300.86383" x2="341.99622" y2="391.44925"/>
|
14
|
+
<linearGradient id="linearGradient7171">
|
15
|
+
<stop id="stop7173" offset="0" style="stop-color:#00112b;stop-opacity:1"/>
|
16
|
+
<stop id="stop7175" offset="1" style="stop-color:#0055d4;stop-opacity:1"/>
|
17
|
+
</linearGradient>
|
18
|
+
<radialGradient inkscape:collect="always" xlink:href="#linearGradient7111" id="radialGradient11752" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5932658,-0.5932658,0.7150464,-0.7150486,243.27022,849.03358)" cx="312.78131" cy="386.57211" fx="312.78131" fy="386.57211" r="53.035713"/>
|
19
|
+
<linearGradient id="linearGradient7111">
|
20
|
+
<stop id="stop7113" offset="0" style="stop-color:#ffffff;stop-opacity:0.40816328;"/>
|
21
|
+
<stop id="stop7115" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
22
|
+
</linearGradient>
|
23
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4148" id="linearGradient11754" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9553353,0,0,0.9553353,55.103173,472.67243)" x1="255.31609" y1="286.66653" x2="300.26785" y2="338.81863"/>
|
24
|
+
<linearGradient id="linearGradient4148" inkscape:collect="always">
|
25
|
+
<stop id="stop4150" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
26
|
+
<stop id="stop4152" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
27
|
+
</linearGradient>
|
28
|
+
<linearGradient y2="338.81863" x2="300.26785" y1="286.66653" x1="255.31609" gradientTransform="matrix(0.9553353,0,0,0.9553353,55.103173,472.67243)" gradientUnits="userSpaceOnUse" id="linearGradient11820" xlink:href="#linearGradient4148" inkscape:collect="always"/>
|
29
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4156-1" id="linearGradient11732" gradientUnits="userSpaceOnUse" x1="241.40979" y1="287.49377" x2="315.47369" y2="367.88477"/>
|
30
|
+
<linearGradient id="linearGradient4156-1" inkscape:collect="always">
|
31
|
+
<stop id="stop4158-0" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
32
|
+
<stop id="stop4160-0" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
33
|
+
</linearGradient>
|
34
|
+
<filter id="filter6126-7" inkscape:collect="always" color-interpolation-filters="sRGB">
|
35
|
+
<feGaussianBlur id="feGaussianBlur6128-1" stdDeviation="0.53035713" inkscape:collect="always"/>
|
36
|
+
</filter>
|
37
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient7199" id="linearGradient11734" gradientUnits="userSpaceOnUse" x1="275.60828" y1="300.86383" x2="341.99622" y2="391.44925"/>
|
38
|
+
<linearGradient id="linearGradient7199">
|
39
|
+
<stop style="stop-color:#550000;stop-opacity:1" offset="0" id="stop7201"/>
|
40
|
+
<stop style="stop-color:#ff0000;stop-opacity:1" offset="1" id="stop7203"/>
|
41
|
+
</linearGradient>
|
42
|
+
<radialGradient inkscape:collect="always" xlink:href="#linearGradient7111-1" id="radialGradient11736" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5932658,-0.5932658,0.7150464,-0.7150486,243.27022,849.03358)" cx="312.78131" cy="386.57211" fx="312.78131" fy="386.57211" r="53.035713"/>
|
43
|
+
<linearGradient id="linearGradient7111-1">
|
44
|
+
<stop id="stop7113-1" offset="0" style="stop-color:#ffffff;stop-opacity:0.40816328;"/>
|
45
|
+
<stop id="stop7115-8" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
46
|
+
</linearGradient>
|
47
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4148-9" id="linearGradient11738" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9553353,0,0,0.9553353,-84.896827,472.67243)" x1="255.31609" y1="286.66653" x2="300.26785" y2="338.81863"/>
|
48
|
+
<linearGradient id="linearGradient4148-9" inkscape:collect="always">
|
49
|
+
<stop id="stop4150-3" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
50
|
+
<stop id="stop4152-8" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
51
|
+
</linearGradient>
|
52
|
+
<linearGradient y2="338.81863" x2="300.26785" y1="286.66653" x1="255.31609" gradientTransform="matrix(0.9553353,0,0,0.9553353,-84.896827,472.67243)" gradientUnits="userSpaceOnUse" id="linearGradient11925" xlink:href="#linearGradient4148-9" inkscape:collect="always"/>
|
53
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4156-9" id="linearGradient11724" gradientUnits="userSpaceOnUse" x1="241.40979" y1="287.49377" x2="315.47369" y2="367.88477"/>
|
54
|
+
<linearGradient id="linearGradient4156-9" inkscape:collect="always">
|
55
|
+
<stop id="stop4158-08" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
56
|
+
<stop id="stop4160-1" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
57
|
+
</linearGradient>
|
58
|
+
<filter id="filter6126-75" inkscape:collect="always" color-interpolation-filters="sRGB">
|
59
|
+
<feGaussianBlur id="feGaussianBlur6128-0" stdDeviation="0.53035713" inkscape:collect="always"/>
|
60
|
+
</filter>
|
61
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient7228" id="linearGradient11726" gradientUnits="userSpaceOnUse" x1="275.60828" y1="300.86383" x2="341.99622" y2="391.44925"/>
|
62
|
+
<linearGradient id="linearGradient7228">
|
63
|
+
<stop id="stop7230" offset="0" style="stop-color:#806600;stop-opacity:1"/>
|
64
|
+
<stop id="stop7232" offset="1" style="stop-color:#ffcc00;stop-opacity:1"/>
|
65
|
+
</linearGradient>
|
66
|
+
<radialGradient inkscape:collect="always" xlink:href="#linearGradient7111-4" id="radialGradient11728" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5932658,-0.5932658,0.7150464,-0.7150486,243.27022,849.03358)" cx="312.78131" cy="386.57211" fx="312.78131" fy="386.57211" r="53.035713"/>
|
67
|
+
<linearGradient id="linearGradient7111-4">
|
68
|
+
<stop id="stop7113-6" offset="0" style="stop-color:#ffffff;stop-opacity:0.40816328;"/>
|
69
|
+
<stop id="stop7115-7" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
70
|
+
</linearGradient>
|
71
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4148-4" id="linearGradient11730" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9553353,0,0,0.9553353,-84.896827,592.67243)" x1="255.31609" y1="286.66653" x2="300.26785" y2="338.81863"/>
|
72
|
+
<linearGradient id="linearGradient4148-4" inkscape:collect="always">
|
73
|
+
<stop id="stop4150-5" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
74
|
+
<stop id="stop4152-5" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
75
|
+
</linearGradient>
|
76
|
+
<linearGradient y2="338.81863" x2="300.26785" y1="286.66653" x1="255.31609" gradientTransform="matrix(0.9553353,0,0,0.9553353,-84.896827,592.67243)" gradientUnits="userSpaceOnUse" id="linearGradient12030" xlink:href="#linearGradient4148-4" inkscape:collect="always"/>
|
77
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4156-18" id="linearGradient11740" gradientUnits="userSpaceOnUse" x1="241.40979" y1="287.49377" x2="315.47369" y2="367.88477"/>
|
78
|
+
<linearGradient id="linearGradient4156-18" inkscape:collect="always">
|
79
|
+
<stop id="stop4158-5" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
80
|
+
<stop id="stop4160-5" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
81
|
+
</linearGradient>
|
82
|
+
<filter id="filter6126-4" inkscape:collect="always" color-interpolation-filters="sRGB">
|
83
|
+
<feGaussianBlur id="feGaussianBlur6128-4" stdDeviation="0.53035713" inkscape:collect="always"/>
|
84
|
+
</filter>
|
85
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient7256" id="linearGradient11742" gradientUnits="userSpaceOnUse" x1="275.60828" y1="300.86383" x2="341.99622" y2="391.44925"/>
|
86
|
+
<linearGradient id="linearGradient7256">
|
87
|
+
<stop style="stop-color:#112b00;stop-opacity:1" offset="0" id="stop7258"/>
|
88
|
+
<stop style="stop-color:#66ff00;stop-opacity:1" offset="1" id="stop7260"/>
|
89
|
+
</linearGradient>
|
90
|
+
<radialGradient inkscape:collect="always" xlink:href="#linearGradient7111-0" id="radialGradient11744" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5932658,-0.5932658,0.7150464,-0.7150486,243.27022,849.03358)" cx="312.78131" cy="386.57211" fx="312.78131" fy="386.57211" r="53.035713"/>
|
91
|
+
<linearGradient id="linearGradient7111-0">
|
92
|
+
<stop id="stop7113-5" offset="0" style="stop-color:#ffffff;stop-opacity:0.40816328;"/>
|
93
|
+
<stop id="stop7115-9" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
94
|
+
</linearGradient>
|
95
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4148-1" id="linearGradient11746" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9553353,0,0,0.9553353,55.103173,592.67243)" x1="255.31609" y1="286.66653" x2="300.26785" y2="338.81863"/>
|
96
|
+
<linearGradient id="linearGradient4148-1" inkscape:collect="always">
|
97
|
+
<stop id="stop4150-9" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
98
|
+
<stop id="stop4152-86" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
99
|
+
</linearGradient>
|
100
|
+
<linearGradient y2="338.81863" x2="300.26785" y1="286.66653" x1="255.31609" gradientTransform="matrix(0.9553353,0,0,0.9553353,55.103173,592.67243)" gradientUnits="userSpaceOnUse" id="linearGradient12135" xlink:href="#linearGradient4148-1" inkscape:collect="always"/>
|
101
|
+
</defs>
|
102
|
+
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.98994949" inkscape:cx="211.24527" inkscape:cy="230.76804" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1280" inkscape:window-height="748" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1"/>
|
103
|
+
<metadata id="metadata11777">
|
104
|
+
<rdf:RDF>
|
105
|
+
<cc:Work rdf:about="">
|
106
|
+
<dc:format>image/svg+xml</dc:format>
|
107
|
+
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
108
|
+
<dc:title/>
|
109
|
+
</cc:Work>
|
110
|
+
</rdf:RDF>
|
111
|
+
</metadata>
|
112
|
+
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-652.36218)">
|
113
|
+
<g id="g11707" transform="matrix(2.9051461,0,0,2.9051461,-770.20152,-1760.1027)">
|
114
|
+
<path sodipodi:type="arc" style="fill:#999999;fill-opacity:1;stroke:none" id="path7234" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.9735424,0,0,0.9735424,39.076793,565.98894)"/>
|
115
|
+
<path sodipodi:type="arc" style="fill:url(#linearGradient11740);fill-opacity:1;stroke:none" id="path7236" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.9595959,0,0,0.9595959,43.313063,570.81603)"/>
|
116
|
+
<path transform="matrix(0.8735475,0,0,0.8735475,69.450248,600.5984)" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" sodipodi:ry="53.035713" sodipodi:rx="53.035713" sodipodi:cy="346.11218" sodipodi:cx="303.75" id="path7238" style="fill:#ececec;fill-opacity:1;stroke:none;filter:url(#filter6126-4)" sodipodi:type="arc"/>
|
117
|
+
<path sodipodi:type="arc" style="fill:#999999;fill-opacity:1;stroke:none;filter:url(#filter6126-4)" id="path7240" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.8383837,0,0,0.8383837,80.131258,612.76902)"/>
|
118
|
+
<path sodipodi:type="arc" style="fill:url(#linearGradient11742);fill-opacity:1;stroke:none" id="path7242" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.8058691,0,0,0.8058691,90.007588,624.02274)"/>
|
119
|
+
<path transform="matrix(0.7582525,0,0,0.7582525,105.73382,642.52374)" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" sodipodi:ry="53.035713" sodipodi:rx="53.035713" sodipodi:cy="346.11218" sodipodi:cx="303.75" id="path7244" style="fill:url(#radialGradient11744);fill-opacity:1;stroke:none" sodipodi:type="arc"/>
|
120
|
+
<path id="path7246" d="m 333.78625,862.76451 c -13.3306,0.30069 -26.18606,7.35801 -33.33579,19.74172 -7.69026,13.31988 -6.71392,29.26602 1.15447,41.33061 0.85306,-26.53161 21.13176,-46.51511 46.32378,-45.05384 8.25891,0.47907 16.05431,3.20007 22.85883,7.59075 -3.25775,-7.44975 -8.8171,-13.95312 -16.3937,-18.32748 -6.48672,-3.74508 -13.62489,-5.43927 -20.60759,-5.28176 z" style="opacity:0.31770833;fill:url(#linearGradient12135);fill-opacity:1;stroke:none" inkscape:connector-curvature="0"/>
|
121
|
+
</g>
|
122
|
+
</g>
|
123
|
+
</svg>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
2
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
3
|
+
<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:xlink="http://www.w3.org/1999/xlink" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="400" height="400" id="svg11772" version="1.1" inkscape:version="0.48.0 r9654" sodipodi:docname="glossy_blue_button.svg">
|
4
|
+
<defs id="defs11774">
|
5
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4156" id="linearGradient11748" gradientUnits="userSpaceOnUse" x1="241.40979" y1="287.49377" x2="315.47369" y2="367.88477"/>
|
6
|
+
<linearGradient id="linearGradient4156" inkscape:collect="always">
|
7
|
+
<stop id="stop4158" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
8
|
+
<stop id="stop4160" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
9
|
+
</linearGradient>
|
10
|
+
<filter id="filter6126" inkscape:collect="always" color-interpolation-filters="sRGB">
|
11
|
+
<feGaussianBlur id="feGaussianBlur6128" stdDeviation="0.53035713" inkscape:collect="always"/>
|
12
|
+
</filter>
|
13
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient7171" id="linearGradient11750" gradientUnits="userSpaceOnUse" x1="275.60828" y1="300.86383" x2="341.99622" y2="391.44925"/>
|
14
|
+
<linearGradient id="linearGradient7171">
|
15
|
+
<stop id="stop7173" offset="0" style="stop-color:#00112b;stop-opacity:1"/>
|
16
|
+
<stop id="stop7175" offset="1" style="stop-color:#0055d4;stop-opacity:1"/>
|
17
|
+
</linearGradient>
|
18
|
+
<radialGradient inkscape:collect="always" xlink:href="#linearGradient7111" id="radialGradient11752" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5932658,-0.5932658,0.7150464,-0.7150486,243.27022,849.03358)" cx="312.78131" cy="386.57211" fx="312.78131" fy="386.57211" r="53.035713"/>
|
19
|
+
<linearGradient id="linearGradient7111">
|
20
|
+
<stop id="stop7113" offset="0" style="stop-color:#ffffff;stop-opacity:0.40816328;"/>
|
21
|
+
<stop id="stop7115" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
22
|
+
</linearGradient>
|
23
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4148" id="linearGradient11754" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9553353,0,0,0.9553353,55.103173,472.67243)" x1="255.31609" y1="286.66653" x2="300.26785" y2="338.81863"/>
|
24
|
+
<linearGradient id="linearGradient4148" inkscape:collect="always">
|
25
|
+
<stop id="stop4150" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
26
|
+
<stop id="stop4152" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
27
|
+
</linearGradient>
|
28
|
+
<linearGradient y2="338.81863" x2="300.26785" y1="286.66653" x1="255.31609" gradientTransform="matrix(0.9553353,0,0,0.9553353,55.103173,472.67243)" gradientUnits="userSpaceOnUse" id="linearGradient11820" xlink:href="#linearGradient4148" inkscape:collect="always"/>
|
29
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4156-1" id="linearGradient11732" gradientUnits="userSpaceOnUse" x1="241.40979" y1="287.49377" x2="315.47369" y2="367.88477"/>
|
30
|
+
<linearGradient id="linearGradient4156-1" inkscape:collect="always">
|
31
|
+
<stop id="stop4158-0" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
32
|
+
<stop id="stop4160-0" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
33
|
+
</linearGradient>
|
34
|
+
<filter id="filter6126-7" inkscape:collect="always" color-interpolation-filters="sRGB">
|
35
|
+
<feGaussianBlur id="feGaussianBlur6128-1" stdDeviation="0.53035713" inkscape:collect="always"/>
|
36
|
+
</filter>
|
37
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient7199" id="linearGradient11734" gradientUnits="userSpaceOnUse" x1="275.60828" y1="300.86383" x2="341.99622" y2="391.44925"/>
|
38
|
+
<linearGradient id="linearGradient7199">
|
39
|
+
<stop style="stop-color:#550000;stop-opacity:1" offset="0" id="stop7201"/>
|
40
|
+
<stop style="stop-color:#ff0000;stop-opacity:1" offset="1" id="stop7203"/>
|
41
|
+
</linearGradient>
|
42
|
+
<radialGradient inkscape:collect="always" xlink:href="#linearGradient7111-1" id="radialGradient11736" gradientUnits="userSpaceOnUse" gradientTransform="matrix(-0.5932658,-0.5932658,0.7150464,-0.7150486,243.27022,849.03358)" cx="312.78131" cy="386.57211" fx="312.78131" fy="386.57211" r="53.035713"/>
|
43
|
+
<linearGradient id="linearGradient7111-1">
|
44
|
+
<stop id="stop7113-1" offset="0" style="stop-color:#ffffff;stop-opacity:0.40816328;"/>
|
45
|
+
<stop id="stop7115-8" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
46
|
+
</linearGradient>
|
47
|
+
<linearGradient inkscape:collect="always" xlink:href="#linearGradient4148-9" id="linearGradient11738" gradientUnits="userSpaceOnUse" gradientTransform="matrix(0.9553353,0,0,0.9553353,-84.896827,472.67243)" x1="255.31609" y1="286.66653" x2="300.26785" y2="338.81863"/>
|
48
|
+
<linearGradient id="linearGradient4148-9" inkscape:collect="always">
|
49
|
+
<stop id="stop4150-3" offset="0" style="stop-color:#ffffff;stop-opacity:1;"/>
|
50
|
+
<stop id="stop4152-8" offset="1" style="stop-color:#ffffff;stop-opacity:0;"/>
|
51
|
+
</linearGradient>
|
52
|
+
<linearGradient y2="338.81863" x2="300.26785" y1="286.66653" x1="255.31609" gradientTransform="matrix(0.9553353,0,0,0.9553353,-84.896827,472.67243)" gradientUnits="userSpaceOnUse" id="linearGradient11925" xlink:href="#linearGradient4148-9" inkscape:collect="always"/>
|
53
|
+
</defs>
|
54
|
+
<sodipodi:namedview id="base" pagecolor="#ffffff" bordercolor="#666666" borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:zoom="0.98994949" inkscape:cx="211.24527" inkscape:cy="230.76804" inkscape:document-units="px" inkscape:current-layer="layer1" showgrid="false" inkscape:window-width="1280" inkscape:window-height="748" inkscape:window-x="-8" inkscape:window-y="-8" inkscape:window-maximized="1"/>
|
55
|
+
<metadata id="metadata11777">
|
56
|
+
<rdf:RDF>
|
57
|
+
<cc:Work rdf:about="">
|
58
|
+
<dc:format>image/svg+xml</dc:format>
|
59
|
+
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
60
|
+
<dc:title/>
|
61
|
+
</cc:Work>
|
62
|
+
</rdf:RDF>
|
63
|
+
</metadata>
|
64
|
+
<g inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" transform="translate(0,-652.36218)">
|
65
|
+
<g id="g11689" transform="matrix(2.9051461,0,0,2.9051461,-368.53183,-1417.5461)">
|
66
|
+
<path sodipodi:type="arc" style="fill:#999999;fill-opacity:1;stroke:none" id="path7177" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.9735424,0,0,0.9735424,-100.92321,445.98894)"/>
|
67
|
+
<path sodipodi:type="arc" style="fill:url(#linearGradient11732);fill-opacity:1;stroke:none" id="path7179" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.9595959,0,0,0.9595959,-96.686937,450.81603)"/>
|
68
|
+
<path transform="matrix(0.8735475,0,0,0.8735475,-70.549757,480.5984)" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" sodipodi:ry="53.035713" sodipodi:rx="53.035713" sodipodi:cy="346.11218" sodipodi:cx="303.75" id="path7181" style="fill:#ececec;fill-opacity:1;stroke:none;filter:url(#filter6126-7)" sodipodi:type="arc"/>
|
69
|
+
<path sodipodi:type="arc" style="fill:#999999;fill-opacity:1;stroke:none;filter:url(#filter6126-7)" id="path7183" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.8383837,0,0,0.8383837,-59.868747,492.76902)"/>
|
70
|
+
<path sodipodi:type="arc" style="fill:url(#linearGradient11734);fill-opacity:1;stroke:none" id="path7185" sodipodi:cx="303.75" sodipodi:cy="346.11218" sodipodi:rx="53.035713" sodipodi:ry="53.035713" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" transform="matrix(0.8058691,0,0,0.8058691,-49.992417,504.02274)"/>
|
71
|
+
<path transform="matrix(0.7582525,0,0,0.7582525,-34.266187,522.52374)" d="m 356.78571,346.11218 c 0,29.29082 -23.74489,53.03572 -53.03571,53.03572 -29.29082,0 -53.03571,-23.7449 -53.03571,-53.03572 0,-29.29081 23.74489,-53.03571 53.03571,-53.03571 29.29082,0 53.03571,23.7449 53.03571,53.03571 z" sodipodi:ry="53.035713" sodipodi:rx="53.035713" sodipodi:cy="346.11218" sodipodi:cx="303.75" id="path7187" style="fill:url(#radialGradient11736);fill-opacity:1;stroke:none" sodipodi:type="arc"/>
|
72
|
+
<path id="path7189" d="m 193.78625,742.76451 c -13.3306,0.30069 -26.18606,7.35801 -33.33579,19.74172 -7.69026,13.31988 -6.71392,29.26602 1.15447,41.33061 0.85306,-26.53161 21.13176,-46.51511 46.32378,-45.05384 8.25891,0.47907 16.05431,3.20007 22.85883,7.59075 -3.25775,-7.44975 -8.8171,-13.95312 -16.3937,-18.32748 -6.48672,-3.74508 -13.62489,-5.43927 -20.60759,-5.28176 z" style="opacity:0.31770833;fill:url(#linearGradient11925);fill-opacity:1;stroke:none" inkscape:connector-curvature="0"/>
|
73
|
+
</g>
|
74
|
+
</g>
|
75
|
+
</svg>
|