coverband 5.1.0 → 5.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/diagram.yml +16 -0
- data/.github/workflows/main.yml +5 -5
- data/README.md +7 -1
- data/changes.md +15 -56
- data/coverband.gemspec +10 -0
- data/diagram.svg +1 -0
- data/lib/coverband/adapters/base.rb +8 -7
- data/lib/coverband/adapters/file_store.rb +1 -1
- data/lib/coverband/adapters/hash_redis_store.rb +1 -1
- data/lib/coverband/adapters/null_store.rb +42 -0
- data/lib/coverband/adapters/redis_store.rb +1 -1
- data/lib/coverband/collectors/coverage.rb +19 -1
- data/lib/coverband/collectors/view_tracker.rb +27 -20
- data/lib/coverband/collectors/view_tracker_service.rb +3 -3
- data/lib/coverband/configuration.rb +11 -2
- data/lib/coverband/integrations/background.rb +6 -3
- data/lib/coverband/reporters/base.rb +1 -1
- data/lib/coverband/reporters/web.rb +4 -4
- data/lib/coverband/utils/railtie.rb +3 -2
- data/lib/coverband/utils/result.rb +1 -1
- data/lib/coverband/utils/source_file.rb +2 -2
- data/lib/coverband/version.rb +2 -2
- data/lib/coverband.rb +1 -0
- data/public/dependencies.js +4 -4
- data/roadmap.md +56 -0
- data/test/coverband/adapters/null_store_test.rb +39 -0
- data/test/coverband/configuration_test.rb +5 -5
- data/test/forked/rails_full_stack_test.rb +1 -1
- data/test/integration/full_stack_deferred_eager_test.rb +51 -0
- data/test/unique_files.rb +3 -3
- data/views/file_list.erb +2 -2
- metadata +20 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 18baa7cef0b3c95acb536629f605a8153cc662a8f5dc08240bfb4cea8e265bfa
|
4
|
+
data.tar.gz: aef6c09d712021cb74c07f21687bee9a271fbae31ab4dc340483cc5f8730728d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d905e7431fff8ad7083195e34aef71a88b0252595adf5d44cd321d744b02bd99c19e1272f5b71f92e725e143171c81a2954560f8dce57c95addcf1ebb3781886
|
7
|
+
data.tar.gz: f389a97e74d530dc8716b4bf1f905d96a6eb3bb65b5b5a30a2a58a17cfb63dee77522b2ee2fb20049a1044a36578b9e53da6d744f5ca6bc466e5a70c8eba4a81
|
@@ -0,0 +1,16 @@
|
|
1
|
+
name: Create diagram
|
2
|
+
on:
|
3
|
+
workflow_dispatch: {}
|
4
|
+
push:
|
5
|
+
branches:
|
6
|
+
- main
|
7
|
+
jobs:
|
8
|
+
get_data:
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
steps:
|
11
|
+
- name: Checkout code
|
12
|
+
uses: actions/checkout@master
|
13
|
+
- name: Update diagram
|
14
|
+
uses: githubocto/repo-visualizer@main
|
15
|
+
with:
|
16
|
+
excluded_paths: "ignore,.github"
|
data/.github/workflows/main.yml
CHANGED
@@ -3,9 +3,9 @@ name: CI
|
|
3
3
|
on:
|
4
4
|
# Triggers the workflow on push or pull request events but only for the master branch
|
5
5
|
push:
|
6
|
-
branches: [
|
6
|
+
branches: [main]
|
7
7
|
pull_request:
|
8
|
-
branches: [
|
8
|
+
branches: [main]
|
9
9
|
jobs:
|
10
10
|
test:
|
11
11
|
strategy:
|
@@ -17,12 +17,12 @@ jobs:
|
|
17
17
|
# remove until I sort out CI issues for truffle
|
18
18
|
# truffleruby,
|
19
19
|
# truffleruby-head,
|
20
|
-
ruby: [2.3, 2.4, 2.5, 2.6, 2.7, jruby, jruby-head]
|
21
|
-
redis-version: [5]
|
20
|
+
ruby: [2.3, 2.4, 2.5, 2.6, 2.7, "3.0", jruby, jruby-head]
|
21
|
+
redis-version: [4, 5, 6]
|
22
22
|
runs-on: ${{ matrix.os }}-latest
|
23
23
|
steps:
|
24
24
|
- uses: actions/checkout@v2
|
25
|
-
- uses: supercharge/redis-github-action@1.
|
25
|
+
- uses: supercharge/redis-github-action@1.2.0
|
26
26
|
- uses: ruby/setup-ruby@v1
|
27
27
|
with:
|
28
28
|
ruby-version: ${{ matrix.ruby }}
|
data/README.md
CHANGED
@@ -284,7 +284,7 @@ Between the release of 4.0 and 4.1 our data format changed. This resets all your
|
|
284
284
|
|
285
285
|
### Adding Rake Tasks outside of Rails
|
286
286
|
|
287
|
-
Rails apps should
|
287
|
+
Rails apps should automatically include the tasks via the Railtie.
|
288
288
|
|
289
289
|
For non Rails apps, either add the below to your `Rakefile` or to a file included in your `Rakefile` such as `lib/tasks/coverband.rake` if you want to break it up that way.
|
290
290
|
|
@@ -427,6 +427,12 @@ What is the coverage data in Redis?
|
|
427
427
|
|
428
428
|
`Coverband.configuration.store.coverage`
|
429
429
|
|
430
|
+
### Diagram
|
431
|
+
|
432
|
+
A diagram of the code.
|
433
|
+
|
434
|
+
![Visualization of this repo](./diagram.svg)
|
435
|
+
|
430
436
|
## Logo
|
431
437
|
|
432
438
|
The Coverband logo was created by [Dave Woodall](http://davewoodall.com). Thanks Dave!
|
data/changes.md
CHANGED
@@ -1,64 +1,23 @@
|
|
1
|
-
|
1
|
+
### Coverband 5.2.0
|
2
2
|
|
3
|
-
|
3
|
+
- (Fumiaki MATSUSHIMA) Fix CI setting for Ruby 3.0
|
4
|
+
- (Fumiaki MATSUSHIMA) Avoid calling coverage with the same type twice on get_coverage_report
|
5
|
+
- (kei-s) Fix filling zero for not loaded files
|
6
|
+
- (wonda-tea-coffee) cleanup readme / fix typos
|
7
|
+
- support deferred eager loading data
|
8
|
+
- (Donatas Stundys) Fix disabling views tracking
|
9
|
+
- (Simon) Improve View tracker to track render collection too
|
4
10
|
|
5
|
-
|
6
|
-
- [redis bitmaps](http://blog.getspool.com/2011/11/29/fast-easy-realtime-metrics-using-redis-bitmaps/)
|
7
|
-
- [redis bitfield](https://stackoverflow.com/questions/47100606/optimal-way-to-store-array-of-integers-in-redis-database)
|
8
|
-
- Add support for [zadd](http://redis.io/topics/data-types-intro) so one could determine single call versus multiple calls on a line, letting us determine the most executed code in production.
|
11
|
+
### Coverband 5.1.1
|
9
12
|
|
10
|
-
|
13
|
+
- Fix early report error
|
14
|
+
- Improved view tracker perf Hosam Aly
|
11
15
|
|
12
|
-
|
13
|
-
|
14
|
-
- Release will be aimed as significantly simplifying ease of use
|
15
|
-
- near zero config setup for Rails apps
|
16
|
-
- add built-in support for easy loading via Railties
|
17
|
-
- built in support for activejob, sidekiq, and other common frameworks
|
18
|
-
- reduced configuration options
|
19
|
-
- support oneshot
|
20
|
-
- drop middleware figure out a way to kick off background without middelware
|
21
|
-
- options on reporting
|
22
|
-
- background reporting
|
23
|
-
- or middleware reporting
|
24
|
-
- Support for file versions
|
25
|
-
- md5 or release tags
|
26
|
-
- add coverage timerange support
|
27
|
-
- Drop Simplecov dependency
|
28
|
-
- improved web reporting
|
29
|
-
- lists current config options
|
30
|
-
- eventually allow updating remote config
|
31
|
-
- full theming
|
32
|
-
- list redis data dump for debugging
|
33
|
-
- additional adapters: Memcache, S3, and ActiveRecord
|
34
|
-
- add articles / podcasts like prontos readme https://github.com/prontolabs/pronto
|
35
|
-
- Add detailed Gem usage report, if we collect and send gem usage we can give percentage of gem code used, which should help application developers know when to remove gem dependencies (0%) or perhaps inline single methods for little usage (using <= 5%) for example.
|
36
|
-
- add meta data information first seen last recorded to the coverage report views (probably need to drop simplecov for that).
|
37
|
-
- more details in this issue: https://github.com/danmayer/coverband/issues/118
|
38
|
-
- Make good video on setup, install, usage
|
39
|
-
- See if we can add support for views / templates
|
40
|
-
- using this technique https://github.com/ioquatix/covered
|
41
|
-
- Better default grouping (could use groups features for gems for rails controllers, models, lib, etc)
|
42
|
-
- Improved logging for easier debugging and development
|
43
|
-
- drop the verbose mode and better support standard logger levels
|
44
|
-
- Possibly setup a build assets system
|
45
|
-
- my JS rules expanded the compressed JS at the top of application.js, basically we want to stitch together JS
|
46
|
-
- I guess we could also load multiple JS files as most of the JS is just default compressed JS and a tiny amount of actual app JS.
|
47
|
-
- lazy load for Coverband results
|
48
|
-
- view layer file coverage
|
49
|
-
- move all code to work with relative paths leaving only stdlib Coverage working on full paths
|
50
|
-
- add gem_safe_lists to track only some gems
|
51
|
-
- add gem_details_safe list to report on details on some gems
|
52
|
-
- - display gems that are in loaded with 0 coverage, thanks @kbaum
|
53
|
-
|
54
|
-
# Alpha / Beta / Release Candidates
|
55
|
-
|
56
|
-
### Coverband 5.0.4
|
16
|
+
### Coverband 5.1.0
|
57
17
|
|
18
|
+
- add support for dead method detection rake task
|
58
19
|
- add support for tracking email view templates/partials
|
59
20
|
|
60
|
-
# Released
|
61
|
-
|
62
21
|
### Coverband 5.0.3
|
63
22
|
|
64
23
|
- fix for non standard root paths for view_tracker thx @markshawtoronto
|
@@ -149,7 +108,7 @@ Will be the fully modern release that drops maintenance legacy support in favor
|
|
149
108
|
- larger changes
|
150
109
|
- reduce memory usage
|
151
110
|
- fix issue where reports didn't include files with 0 activity
|
152
|
-
- updated runtime
|
111
|
+
- updated runtime relevant lines and runtime percentages
|
153
112
|
- add Oneshot coverage support for Ruby 2.6.0 thanks @zwalker
|
154
113
|
- I would consider this our test oneshot release, please report any issues
|
155
114
|
- improved control over memory vs functionality
|
@@ -181,7 +140,7 @@ Will be the fully modern release that drops maintenance legacy support in favor
|
|
181
140
|
|
182
141
|
### Coverband 4.2.0
|
183
142
|
|
184
|
-
**NOTE:** This release introduces load time and runtime Coverage. To get the full
|
143
|
+
**NOTE:** This release introduces load time and runtime Coverage. To get the full benefit of this feature you need to reset you coverage data (`rake coverband:clear` or clear via the web UI). Until you clear the combined result is still correct, but your runtime data will be mixed with previous data. This is due to an additive change in how we store coverage. We didn't reset by default as the coverage history for some folks may be more important than runtime breakdown.
|
185
144
|
|
186
145
|
- loadtime vs runtime coverage
|
187
146
|
- This fixes the coverage last seen date to exclude just load time data
|
data/coverband.gemspec
CHANGED
@@ -20,6 +20,16 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
22
|
spec.require_paths = %w[lib]
|
23
|
+
|
24
|
+
spec.required_ruby_version = '>= 2.3'
|
25
|
+
|
26
|
+
spec.metadata = {
|
27
|
+
"homepage_uri" => "https://github.com/danmayer/coverband",
|
28
|
+
"bug_tracker_uri" => "https://github.com/danmayer/coverband/issues",
|
29
|
+
"documentation_uri" => "https://github.com/danmayer/coverband",
|
30
|
+
"changelog_uri" => "https://github.com/danmayer/coverband/blob/main/changes.md",
|
31
|
+
"source_code_uri" => "https://github.com/danmayer/coverband",
|
32
|
+
}
|
23
33
|
|
24
34
|
spec.add_development_dependency "benchmark-ips"
|
25
35
|
spec.add_development_dependency "capybara"
|
data/diagram.svg
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
<svg width="1000" height="1000" style="background:white;font-family:sans-serif;overflow:visible" xmlns="http://www.w3.org/2000/svg"><defs><filter id="glow" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur stdDeviation="4" result="coloredBlur"></feGaussianBlur><feMerge><feMergeNode in="coloredBlur"></feMergeNode><feMergeNode in="SourceGraphic"></feMergeNode></feMerge></filter></defs><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(320.00612713573474, 687.2198622231438)"><circle r="41.02836011911288" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(661.4430539975467, 565.197145882038)"><circle r="305.5566428725191" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(288.90225953017995, 583.3423814043452)"><circle r="51.43100276127017" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(198.26743334655254, 337.6535126993426)"><circle r="194.4433571274809" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(208.85596035685901, 675.5911309430888)"><circle r="54.711392311283824" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(467.6228500582734, 199.50509802915866)"><circle r="92.27321821656155" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(310.0453070999505, 685.7487861972328)"><circle style="transition:all 0.5s ease-out" r="13.3014695682241" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(345.9707919366957, 685.9103241587442)"><circle style="transition:all 0.5s ease-out" r="12.030692758975125" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(328.90125923275815, 706.7811828362729)"><circle style="transition:all 0.5s ease-out" r="11.745793973078548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(328.9906330367507, 668.2014287736805)"><circle style="transition:all 0.5s ease-out" r="9.31760069097745" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(309.0185299873286, 660.3274729335391)"><circle style="transition:all 0.5s ease-out" r="8.977923069056144" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(305.71931566689045, 710.3858020752416)"><circle style="transition:all 0.5s ease-out" r="8.512461619911566" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(345.66018068614164, 666.4351119642289)"><circle style="transition:all 0.5s ease-out" r="4.2452658347361085" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(344.7727563464446, 702.5702159887435)"><circle style="transition:all 0.5s ease-out" r="1.4748230405423375" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(703.8139667594777, 527.1557713436439)"><circle style="transition:all 0.5s ease-out" r="16.536067250557842" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(778.8621990400648, 570.0854043526703)"><circle r="61.70172260960654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(717.5497323686653, 693.1410767346821)"><circle r="61.861756513460996" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(725.4786248202125, 443.35036035988065)"><circle r="61.70172260960654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(815.9255796199956, 665.2156778676142)"><circle r="26.457891906861885" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(830.9874716327291, 473.39307041316187)"><circle r="34.077322847649405" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(896.6002602399892, 619.8132053020157)"><circle r="52.168797786598724" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(853.6314842076885, 527.416647893843)"><circle style="transition:all 0.5s ease-out" r="15.964332930227892" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(526.6781412802873, 561.9831724861971)"><circle r="155.78475878682949" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(917.814299830758, 514.616450720902)"><circle r="41.243377971831976" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(856.6144727025029, 560.7986085603109)"><circle style="transition:all 0.5s ease-out" r="8.027776443517638" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(871.19797212995, 548.2872313784729)"><circle style="transition:all 0.5s ease-out" r="8.008399692008764" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(851.9451419704938, 574.3018675351775)"><circle style="transition:all 0.5s ease-out" r="3.073460851218337" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(718.5717760925036, 611.3724671382622)"><circle style="transition:all 0.5s ease-out" r="2.7982799722851825" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(792.267108681374, 498.57330372624574)"><circle style="transition:all 0.5s ease-out" r="2.3911113739020915" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(728.3581505248203, 518.04114658991)"><circle style="transition:all 0.5s ease-out" r="2.173265009607865" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(271.0965905323919, 583.3423814043452)"><circle r="29.927086668478605" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(320.67846974616026, 583.3423814043452)"><circle style="transition:all 0.5s ease-out" r="15.956545450286352" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(304.5879348819674, 601.004696104632)"><circle style="transition:all 0.5s ease-out" r="4.2379400901324145" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(24.105301487962493, 337.6535126993426)"><circle style="transition:all 0.5s ease-out" r="16.582978173887366" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(216.69953506794164, 337.6535126993426)"><circle r="172.31300831108828" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(39.16205879506066, 354.5160683323728)"><circle style="transition:all 0.5s ease-out" r="2.325227860290965" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(181.61749253292245, 668.8661822807059)"><circle style="transition:all 0.5s ease-out" r="23.655037168334218" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(235.25964076788608, 666.0924002361274)"><circle style="transition:all 0.5s ease-out" r="23.65109608528102" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(210.66402066765176, 709.4689523573958)"><circle r="17.785357089538007" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.5175141387871, 634.3371548057271)"><circle style="transition:all 0.5s ease-out" r="9.557945701792356" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(196.00848014520108, 637.0406468104858)"><circle style="transition:all 0.5s ease-out" r="8.050966987092513" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(207.80242421434497, 655.7034054899067)"><circle style="transition:all 0.5s ease-out" r="2.590703843132601" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(208.5500333850177, 680.6847390060008)"><circle style="transition:all 0.5s ease-out" r="2.578681950686416" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(235.94393651106756, 695.4894819767508)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(211.85180233036237, 648.399495385379)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(232.60833161946036, 636.7995615728715)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(203.07511719939444, 648.8406831768352)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#f1e05a;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(414.79764353602405, 225.1897322137628)"><circle style="transition:all 0.5s ease-out" r="30.53479061320098" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#563d7c;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(512.7910567195597, 234.721131053716)"><circle style="transition:all 0.5s ease-out" r="30.531737592085197" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(459.1689427139957, 257.5229674822785)"><circle style="transition:all 0.5s ease-out" r="21.235110665819438" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#f1e05a;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(463.6216214022966, 209.85675505437175)"><circle style="transition:all 0.5s ease-out" r="17.643364541120967" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(429.9770792294947, 163.4727445310884)"><circle r="24.555321990630027" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(500.186549985712, 164.97508910953462)"><circle r="31.810432068321326" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(450.81131758082375, 229.50956510863185)"><circle style="transition:all 0.5s ease-out" r="2.61458180267405" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(477.07868989293166, 228.88295830010998)"><circle style="transition:all 0.5s ease-out" r="2.578681950686416" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(469.50345812512296, 232.54388794748377)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(432.1882475855745, 257.02682062626695)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(476.72794923722097, 237.1965299805945)"><circle style="transition:all 0.5s ease-out" r="2.542275202002629" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(320.1615724594404, 804.9875239262727)"><circle style="transition:all 0.5s ease-out" r="30.541913142306747" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(392.23035259112095, 805.8219336390632)"><circle style="transition:all 0.5s ease-out" r="29.283952850675167" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(367.34422716445823, 852.8636618355339)"><circle style="transition:all 0.5s ease-out" r="14.435195443346569" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(357.5205254400031, 775.1921244857833)"><circle style="transition:all 0.5s ease-out" r="13.861991692422615" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(331.9580166207945, 760.1979925812761)"><circle style="transition:all 0.5s ease-out" r="12.57621012334402" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(343.2575132663275, 841.0833119950216)"><circle style="transition:all 0.5s ease-out" r="9.162913064921083" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#cb171e;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(381.75146532305723, 765.7569764071274)"><circle style="transition:all 0.5s ease-out" r="8.94324575496107" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(356.6611787355765, 825.4561565122851)"><circle style="transition:all 0.5s ease-out" r="8.226589586727627" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#199f4b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(323.50599601836205, 846.7736839717282)"><circle style="transition:all 0.5s ease-out" r="8.19252488725059" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(398.089846699721, 769.2095819314433)"><circle style="transition:all 0.5s ease-out" r="4.555951844425858" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000000;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(392.45292093509886, 842.494046836109)"><circle style="transition:all 0.5s ease-out" r="4.1937168964290805" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(356.7350615777879, 803.2215968544747)"><circle style="transition:all 0.5s ease-out" r="3.278905824283532" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(314.74280205744697, 768.344908753919)"><circle style="transition:all 0.5s ease-out" r="3.269415483613904" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(369.174101730346, 832.4259130160951)"><circle style="transition:all 0.5s ease-out" r="2.896494951407223" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(382.79807766688396, 839.6427821647144)"><circle style="transition:all 0.5s ease-out" r="2.6733437869089967" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#083fa1;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(359.2869568717172, 794.6203582125373)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(352.70915565180445, 792.7536887180717)"><circle style="transition:all 0.5s ease-out" r="1.1423930149246917" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(753.5596362032685, 535.6407941483997)"><circle style="transition:all 0.5s ease-out" r="15.962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(798.663927272489, 548.119233020521)"><circle r="19.787384039127623" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(766.2883984415777, 588.960636852518)"><circle r="36.021888760704144" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(769.0371260106745, 545.4545693588732)"><circle style="transition:all 0.5s ease-out" r="3.755941507256401" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(778.6753794152045, 548.3701311197658)"><circle style="transition:all 0.5s ease-out" r="3.113638515318736" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(696.0239805223459, 656.0331535622179)"><circle style="transition:all 0.5s ease-out" r="15.962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(737.5020999043077, 671.842246484952)"><circle r="20.304869232203533" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(703.4897781061119, 711.156141359216)"><circle r="36.00951663875224" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(711.4775362285075, 668.6377102267643)"><circle style="transition:all 0.5s ease-out" r="3.755941507256401" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(719.0744447884384, 673.3699656055273)"><circle style="transition:all 0.5s ease-out" r="1.9943247482976068" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(700.1760619834166, 408.90575015560984)"><circle style="transition:all 0.5s ease-out" r="15.962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(745.2803530526369, 421.3841890277315)"><circle r="19.787384039127623" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(712.9048242217254, 462.22559285972835)"><circle r="36.021888760704144" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(715.6535517908225, 418.71952536608353)"><circle style="transition:all 0.5s ease-out" r="3.755941507256401" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(725.2918051953524, 421.6350871269762)"><circle style="transition:all 0.5s ease-out" r="3.113638515318736" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(803.6657752472274, 665.2156778676142)"><circle style="transition:all 0.5s ease-out" r="10.499840439090226" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(828.2745436065875, 665.2156778676142)"><circle style="transition:all 0.5s ease-out" r="10.410680825266452" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(814.8825126291325, 471.9014647333349)"><circle style="transition:all 0.5s ease-out" r="14.205189639172147" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(842.9458791781938, 471.9014647333349)"><circle style="transition:all 0.5s ease-out" r="10.15992981488562" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(832.6634837676154, 493.5733678997594)"><circle style="transition:all 0.5s ease-out" r="10.129299869346374" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(832.468248782209, 451.8396887774334)"><circle style="transition:all 0.5s ease-out" r="8.7748872489836" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(884.8899766088309, 619.8145418044992)"><circle r="37.45851407917242" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(936.6061057709907, 619.8692027466992)"><circle style="transition:all 0.5s ease-out" r="9.162913064921083" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(931.2311553367789, 633.1154808281365)"><circle style="transition:all 0.5s ease-out" r="3.0633340993018727" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(930.7492409079526, 607.9361807812554)"><circle style="transition:all 0.5s ease-out" r="2.2297228532018036" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(927.9986814777568, 601.2905429812844)"><circle style="transition:all 0.5s ease-out" r="1.7627506917617404" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(927.141138054463, 639.8270113763984)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(924.6831244424147, 596.1969734465579)"><circle style="transition:all 0.5s ease-out" r="1.1148614266009018" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(509.4249285356714, 562.1946222515393)"><circle style="transition:all 0.5s ease-out" r="16.91506025174909" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(594.3124503916217, 565.9835650658088)"><circle r="57.33198252525728" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(458.0907571193278, 593.1292066147005)"><circle r="35.2528148144039" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(414.88568361282734, 523.3619964530677)"><circle r="34.50902657809284" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(524.6137748126339, 653.8856447809595)"><circle r="42.50018379580438" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(504.2599918459867, 488.51027072087896)"><circle r="49.11507108800636" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(583.0010716685049, 639.9767473618364)"><circle style="transition:all 0.5s ease-out" r="9.751055021892693" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(527.6526899395642, 545.4475095935835)"><circle style="transition:all 0.5s ease-out" r="4.670457772978104" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(907.9869266011098, 514.4932006928727)"><circle style="transition:all 0.5s ease-out" r="26.6938896210276" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(946.8516863127406, 512.6733510830546)"><circle style="transition:all 0.5s ease-out" r="9.002117708299165" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#89e051;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(941.3453524686073, 531.7603643529645)"><circle style="transition:all 0.5s ease-out" r="7.663405315177631" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(934.2807649769985, 492.7714582676552)"><circle style="transition:all 0.5s ease-out" r="4.201119756376969" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(937.4385793612382, 501.8101004126541)"><circle style="transition:all 0.5s ease-out" r="2.173265009607865" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000000;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(930.2155756741291, 536.0311532986414)"><circle style="transition:all 0.5s ease-out" r="1.0576504150570438" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(259.518743870329, 583.3423814043452)"><circle style="transition:all 0.5s ease-out" r="14.650992911412272" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(287.5967069913059, 583.3423814043452)"><circle style="transition:all 0.5s ease-out" r="9.72872311456112" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(277.2354541695488, 598.6899217127466)"><circle style="transition:all 0.5s ease-out" r="5.090657974259925" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#000080;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(276.7483048228305, 571.939668039613)"><circle style="transition:all 0.5s ease-out" r="2.3118258589796876" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(145.25770319262398, 347.7543374102047)"><circle style="transition:all 0.5s ease-out" r="23.17598217176223" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(238.1868617862445, 347.7543374102047)"><circle r="66.05492932685483" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(150.40313620896413, 415.6689140940739)"><circle r="41.23498602070316" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(157.2891680611386, 295.94756762971804)"><circle r="26.311271971547786" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(227.1728703659968, 461.4004553176369)"><circle r="44.42540354143981" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(207.220355770931, 225.65294906289358)"><circle r="56.21377770158369" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(127.76804995506313, 318.5472567152543)"><circle style="transition:all 0.5s ease-out" r="7.169001089524915" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(248.7747881613102, 274.5246908333765)"><circle style="transition:all 0.5s ease-out" r="4.2379400901324145" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(207.52084777414672, 708.6946540958185)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(215.57240372456096, 710.795424670564)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(209.74432958865998, 716.7004755537006)"><circle style="transition:all 0.5s ease-out" r="2.542275202002629" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(213.36419138389087, 702.8048897808065)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(200.14763069230133, 704.9177037219812)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ff9900;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(201.6956767097978, 714.5676526516697)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(221.32064796844276, 704.8812717823122)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(425.6422128963368, 162.4417101299878)"><circle style="transition:all 0.5s ease-out" r="2.6382436587484763" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(434.1038665559183, 162.67105152163336)"><circle style="transition:all 0.5s ease-out" r="2.6264393773510966" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(429.6891174962221, 169.8654956808588)"><circle style="transition:all 0.5s ease-out" r="2.61458180267405" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(430.0831706159547, 155.26282973030374)"><circle style="transition:all 0.5s ease-out" r="2.602670206316612" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(421.69443018484907, 154.98801443358713)"><circle style="transition:all 0.5s ease-out" r="2.590703843132601" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(421.2980568096617, 169.65093652988222)"><circle style="transition:all 0.5s ease-out" r="2.578681950686416" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(438.44925132528925, 155.48975873632295)"><circle style="transition:all 0.5s ease-out" r="2.5666037486861444" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(438.31442014870885, 169.9172836270514)"><circle style="transition:all 0.5s ease-out" r="2.5544684383925436" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(417.27084542574573, 162.04988626351707)"><circle style="transition:all 0.5s ease-out" r="2.542275202002629" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(413.00481685317766, 169.13733440056603)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(442.447691307665, 162.7450449773406)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(446.5766610045332, 169.85631614581192)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(434.4957507922767, 148.2381235078534)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(495.7269340957232, 164.93740302242793)"><circle style="transition:all 0.5s ease-out" r="23.652409852596865" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(525.6076142453301, 164.93740302242793)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(524.3065986096153, 173.57356523016165)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#CED6E0;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(524.2978094628161, 156.31514541157168)"><circle style="transition:all 0.5s ease-out" r="2.4929059353720087" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(794.3115613128424, 548.3884369429255)"><circle style="transition:all 0.5s ease-out" r="4.480300593536103" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(806.0909975844469, 549.4891618456526)"><circle style="transition:all 0.5s ease-out" r="4.149022367647345" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#cb171e;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(799.6722206022184, 557.8141231135588)"><circle style="transition:all 0.5s ease-out" r="3.1631430262014564" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(801.3136512701135, 540.200157982648)"><circle style="transition:all 0.5s ease-out" r="3.09361490881202" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(788.3084762609665, 539.7064741966074)"><circle style="transition:all 0.5s ease-out" r="2.874959374230404" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(788.3068341671311, 556.6463946748049)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(809.9366658474971, 540.5975789120278)"><circle style="transition:all 0.5s ease-out" r="2.338553057405247" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(749.1121721239192, 588.960636852518)"><circle r="9.230219996036654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(780.3263396611188, 588.960636852518)"><circle r="12.368505094153937" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(729.4399067074294, 672.5408595467391)"><circle style="transition:all 0.5s ease-out" r="7.059811018784862" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(748.6729619640861, 671.6170669833235)"><circle style="transition:all 0.5s ease-out" r="6.13173784630496" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(740.2393797952972, 682.4386492028383)"><circle style="transition:all 0.5s ease-out" r="4.38921382574377" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(739.2477133163067, 661.9911233336297)"><circle style="transition:all 0.5s ease-out" r="4.141526386154246" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(730.0658421306391, 660.3025268945785)"><circle style="transition:all 0.5s ease-out" r="1.9943247482976068" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(686.3259239104053, 711.156141359216)"><circle r="9.230219996036654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(717.527719325653, 711.156141359216)"><circle r="12.356132972202031" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(740.9279870929905, 421.6533929501359)"><circle style="transition:all 0.5s ease-out" r="4.480300593536103" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(752.707423364595, 422.75411785286315)"><circle style="transition:all 0.5s ease-out" r="4.149022367647345" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#cb171e;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(746.2886463823663, 431.07907912076934)"><circle style="transition:all 0.5s ease-out" r="3.1631430262014564" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(747.9300770502617, 413.4651139898584)"><circle style="transition:all 0.5s ease-out" r="3.09361490881202" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(734.9249020411145, 412.9714302038177)"><circle style="transition:all 0.5s ease-out" r="2.874959374230404" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(734.9232599472791, 429.91135068201515)"><circle style="transition:all 0.5s ease-out" r="2.53002320200653" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(756.5530916276454, 413.8625349192385)"><circle style="transition:all 0.5s ease-out" r="2.338553057405247" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(695.728597904067, 462.22559285972835)"><circle r="9.230219996036654" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(726.9427654412666, 462.22559285972835)"><circle r="12.368505094153937" style="transition:all 0.5s ease-out" stroke="#290819" stroke-opacity="0.2" stroke-width="1" fill="white"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(867.0862550749483, 619.8145418044992)"><circle style="transition:all 0.5s ease-out" r="15.956545450286352" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(902.695645606619, 619.8145418044992)"><circle style="transition:all 0.5s ease-out" r="15.954597986380854" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(580.3985974226808, 567.2505525402736)"><circle style="transition:all 0.5s ease-out" r="16.95542600234146" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(615.5545821073414, 566.3818509002887)"><circle style="transition:all 0.5s ease-out" r="15.011351401347815" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(600.5794310987299, 595.8796134081463)"><circle style="transition:all 0.5s ease-out" r="14.869927924942008" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(599.1052831344841, 539.3232677931711)"><circle style="transition:all 0.5s ease-out" r="13.454765530328515" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(569.3666812433207, 535.6573946180347)"><circle style="transition:all 0.5s ease-out" r="13.308475873460122" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(568.5312068735412, 596.4887631787894)"><circle style="transition:all 0.5s ease-out" r="11.399424014161312" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(626.7590081078295, 539.4140266471186)"><circle style="transition:all 0.5s ease-out" r="10.99142553315067" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(628.5411640038975, 591.6545739409809)"><circle style="transition:all 0.5s ease-out" r="10.202657254057277" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(552.5682365265508, 555.9939497900806)"><circle style="transition:all 0.5s ease-out" r="9.865106326893766" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(553.167369573287, 578.2776248325862)"><circle style="transition:all 0.5s ease-out" r="9.223751960876431" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(639.3524486248741, 557.3512787898457)"><circle style="transition:all 0.5s ease-out" r="7.242310074972875" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(639.1297469896806, 574.5259712391779)"><circle style="transition:all 0.5s ease-out" r="6.730846025504422" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(443.1279472755575, 589.7088549887073)"><circle style="transition:all 0.5s ease-out" r="16.20580608641313" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(476.1783866475844, 589.7088549887073)"><circle style="transition:all 0.5s ease-out" r="13.146386190610224" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(462.3452575333225, 613.537122174689)"><circle style="transition:all 0.5s ease-out" r="10.707894333070795" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(462.00715344906496, 570.4633844599532)"><circle style="transition:all 0.5s ease-out" r="7.055408267487435" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(405.56699693385883, 526.6734910382357)"><circle style="transition:all 0.5s ease-out" r="10.371806971074559" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(436.4675237211518, 522.2722882384146)"><circle style="transition:all 0.5s ease-out" r="9.899693259955423" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(423.6077246539724, 540.2193604303916)"><circle style="transition:all 0.5s ease-out" r="8.988300174892293" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(419.1810429974094, 509.1329499380168)"><circle style="transition:all 0.5s ease-out" r="8.624878122691213" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(399.7285580031692, 506.0403913677026)"><circle style="transition:all 0.5s ease-out" r="7.871426975209228" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(408.7064085222647, 542.8940167350435)"><circle style="transition:all 0.5s ease-out" r="2.949646081084676" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(506.4234530381738, 644.0395112565716)"><circle style="transition:all 0.5s ease-out" r="18.117784515166804" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(544.6851078263729, 644.0395112565716)"><circle style="transition:all 0.5s ease-out" r="16.445623178028775" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(527.1882488770412, 676.1313150264024)"><circle style="transition:all 0.5s ease-out" r="16.40779100650647" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(485.9731269470973, 488.2772033399708)"><circle style="transition:all 0.5s ease-out" r="19.06380440921506" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(534.2784964584926, 486.0206336860966)"><circle style="transition:all 0.5s ease-out" r="15.99350220894569" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(513.5526324378008, 512.4812144881755)"><circle style="transition:all 0.5s ease-out" r="14.426582557470395" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(511.1976439682407, 467.82133526899077)"><circle style="transition:all 0.5s ease-out" r="10.208746575550782" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(490.8332716302188, 456.4822124281169)"><circle style="transition:all 0.5s ease-out" r="9.899693259955423" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(488.9917656387057, 517.916095174863)"><circle style="transition:all 0.5s ease-out" r="7.528410829904971" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(218.93456647739885, 348.95346774867755)"><circle style="transition:all 0.5s ease-out" r="23.242922355571967" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(263.9351146143281, 348.95346774867755)"><circle style="transition:all 0.5s ease-out" r="18.059378686353792" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(245.7947550405941, 379.18737663918205)"><circle style="transition:all 0.5s ease-out" r="13.500875211505326" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(245.67652815520722, 319.99725473301305)"><circle style="transition:all 0.5s ease-out" r="12.474497315139766" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(219.20676560046553, 309.831120179233)"><circle style="transition:all 0.5s ease-out" r="12.182125038859114" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.85334832909004, 387.96960994469737)"><circle style="transition:all 0.5s ease-out" r="12.089951267952138" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(273.5461571960081, 316.70726279260816)"><circle style="transition:all 0.5s ease-out" r="11.890403485981688" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(274.11469022449035, 380.2367931703691)"><circle style="transition:all 0.5s ease-out" r="11.140249667407883" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(194.96164799158737, 320.2051914893777)"><circle style="transition:all 0.5s ease-out" r="10.490958576139553" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(194.70972958086608, 376.7512459477323)"><circle style="transition:all 0.5s ease-out" r="9.931031398674973" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(239.82245273904232, 294.9614051717947)"><circle style="transition:all 0.5s ease-out" r="9.538419745338018" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(236.49583067150002, 402.3367443995779)"><circle style="transition:all 0.5s ease-out" r="7.7480863976366114" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(286.93538480073454, 333.5474011873255)"><circle style="transition:all 0.5s ease-out" r="5.925569762880476" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(285.954078033244, 364.25128665726356)"><circle style="transition:all 0.5s ease-out" r="5.0539018402358575" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(132.78157982741305, 415.6689140940739)"><circle style="transition:all 0.5s ease-out" r="19.915182544148596" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(172.16744230061445, 415.6689140940739)"><circle style="transition:all 0.5s ease-out" r="15.772432834049349" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(155.7260393865441, 439.3651503492231)"><circle style="transition:all 0.5s ease-out" r="9.370806552102202" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(155.31546154243375, 397.2863936896258)"><circle style="transition:all 0.5s ease-out" r="5.467369551490778" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(149.09952327779507, 295.90826067905266)"><circle style="transition:all 0.5s ease-out" r="10.208746575550782" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(169.93751279456063, 295.90826067905266)"><circle style="transition:all 0.5s ease-out" r="6.930995846211307" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(162.4624908498601, 311.26251712993746)"><circle style="transition:all 0.5s ease-out" r="6.447909755686791" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(162.1240330366227, 283.1914108145922)"><circle style="transition:all 0.5s ease-out" r="4.2961962953012955" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(151.30362831345954, 278.2281554238704)"><circle style="transition:all 0.5s ease-out" r="3.909970179736407" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(205.3859573359486, 457.97014696905956)"><circle style="transition:all 0.5s ease-out" r="18.671848814367277" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(243.05039178277667, 457.97014696905956)"><circle style="transition:all 0.5s ease-out" r="15.294338537457344" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(227.375479140398, 487.5993668659222)"><circle style="transition:all 0.5s ease-out" r="14.527461474350467" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(227.09619780504374, 432.08644417178925)"><circle style="transition:all 0.5s ease-out" r="11.413045029910654" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(195.49497178488215, 225.2556552864816)"><circle style="transition:all 0.5s ease-out" r="19.712881259810555" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(237.16227513721782, 225.2556552864816)"><circle style="transition:all 0.5s ease-out" r="18.256174997521647" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.72493322809953, 259.3103500747116)"><circle style="transition:all 0.5s ease-out" r="17.256960153086474" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(217.6420656994693, 194.01105633179094)"><circle style="transition:all 0.5s ease-out" r="14.886635714397636" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(187.07262029166043, 190.69162712344047)"><circle style="transition:all 0.5s ease-out" r="12.16425706166288" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(190.03876620617802, 255.20722078859376)"><circle style="transition:all 0.5s ease-out" r="7.033353170486989" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(242.8620976628851, 197.0534564450387)"><circle style="transition:all 0.5s ease-out" r="6.817995190636699" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(745.6693187838464, 587.1343190816829)"><circle style="transition:all 0.5s ease-out" r="1.634707741806952" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#2b2b2b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(752.5985122622989, 587.1343190816829)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ece2a9;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(749.1717199151207, 592.9964269045531)"><circle style="transition:all 0.5s ease-out" r="1.495743561223205" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(775.9595045331009, 588.960636852518)"><circle style="transition:all 0.5s ease-out" r="4.303422871132548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(786.4788860797531, 588.960636852518)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(682.8830705703325, 709.3298235883809)"><circle style="transition:all 0.5s ease-out" r="1.634707741806952" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#2b2b2b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(689.812264048785, 709.3298235883809)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ece2a9;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(686.3854717016068, 715.1919314112512)"><circle style="transition:all 0.5s ease-out" r="1.495743561223205" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(713.173256319587, 711.156141359216)"><circle style="transition:all 0.5s ease-out" r="4.303422871132548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(723.6802657442873, 711.156141359216)"><circle style="transition:all 0.5s ease-out" r="2.5053394585642716" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(692.2857445639942, 460.39927508889326)"><circle style="transition:all 0.5s ease-out" r="1.634707741806952" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#2b2b2b;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(699.2149380424466, 460.39927508889326)"><circle style="transition:all 0.5s ease-out" r="1.5962386416420713" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#ece2a9;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(695.7881456952684, 466.2613829117635)"><circle style="transition:all 0.5s ease-out" r="1.495743561223205" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(722.5759303132487, 462.22559285972835)"><circle style="transition:all 0.5s ease-out" r="4.303422871132548" stroke-width="0" stroke="#374151"></circle></g><g style="fill:#701516;transition:transform 0s ease-out, fill 0.1s ease-out" transform="translate(733.0953118599009, 462.22559285972835)"><circle style="transition:all 0.5s ease-out" r="2.517711580516173" stroke-width="0" stroke="#374151"></circle></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(320.00612713573474, 687.2198622231438)"><path fill="none" d="M 0 46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 -46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 46.02836011911288" id="CircleText--1" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--1" startOffset="50%">views</textPath></text><path fill="none" d="M 0 46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 -46.02836011911288 A 46.02836011911288 46.02836011911288 0 0 1 0 46.02836011911288" id="CircleText--2" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--2" startOffset="50%">views</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(661.4430539975467, 565.197145882038)"><path fill="none" d="M 0 310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 -310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 310.5566428725191" id="CircleText--3" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--3" startOffset="50%">test</textPath></text><path fill="none" d="M 0 310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 -310.5566428725191 A 310.5566428725191 310.5566428725191 0 0 1 0 310.5566428725191" id="CircleText--4" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--4" startOffset="50%">test</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(288.90225953017995, 583.3423814043452)"><path fill="none" d="M 0 56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 -56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 56.43100276127017" id="CircleText--5" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--5" startOffset="50%">lua</textPath></text><path fill="none" d="M 0 56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 -56.43100276127017 A 56.43100276127017 56.43100276127017 0 0 1 0 56.43100276127017" id="CircleText--6" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--6" startOffset="50%">lua</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(198.26743334655254, 337.6535126993426)"><path fill="none" d="M 0 199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 -199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 199.4433571274809" id="CircleText--7" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--7" startOffset="50%">lib</textPath></text><path fill="none" d="M 0 199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 -199.4433571274809 A 199.4433571274809 199.4433571274809 0 0 1 0 199.4433571274809" id="CircleText--8" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--8" startOffset="50%">lib</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(208.85596035685901, 675.5911309430888)"><path fill="none" d="M 0 59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 -59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 59.71139231128382" id="CircleText--9" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--9" startOffset="50%">docs</textPath></text><path fill="none" d="M 0 59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 -59.71139231128382 A 59.71139231128382 59.71139231128382 0 0 1 0 59.71139231128382" id="CircleText--10" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--10" startOffset="50%">docs</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(467.6228500582734, 199.50509802915866)"><path fill="none" d="M 0 97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 -97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 97.27321821656155" id="CircleText--11" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--11" startOffset="50%">public</textPath></text><path fill="none" d="M 0 97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 -97.27321821656155 A 97.27321821656155 97.27321821656155 0 0 1 0 97.27321821656155" id="CircleText--12" transform="rotate(1)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:15px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--12" startOffset="50%">public</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(778.8621990400648, 570.0854043526703)"><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--13" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--13" startOffset="50%">rails6_dummy</textPath></text><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--14" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--14" startOffset="50%">rails6_dummy</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(717.5497323686653, 693.1410767346821)"><path fill="none" d="M 0 62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 -62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 62.86175651346099" id="CircleText--15" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--15" startOffset="50%">rails5_dummy</textPath></text><path fill="none" d="M 0 62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 -62.86175651346099 A 62.86175651346099 62.86175651346099 0 0 1 0 62.86175651346099" id="CircleText--16" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--16" startOffset="50%">rails5_dummy</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(725.4786248202125, 443.35036035988065)"><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--17" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--17" startOffset="50%">rails4_dummy</textPath></text><path fill="none" d="M 0 62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 -62.70172260960655 A 62.70172260960655 62.70172260960655 0 0 1 0 62.70172260960655" id="CircleText--18" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--18" startOffset="50%">rails4_dummy</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(815.9255796199956, 665.2156778676142)"><path fill="none" d="M 0 27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 -27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 27.45789190686189" id="CircleText--19" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--19" startOffset="50%">integration</textPath></text><path fill="none" d="M 0 27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 -27.45789190686189 A 27.45789190686189 27.45789190686189 0 0 1 0 27.45789190686189" id="CircleText--20" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--20" startOffset="50%">integration</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(830.9874716327291, 473.39307041316187)"><path fill="none" d="M 0 35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 -35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 35.077322847649405" id="CircleText--21" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--21" startOffset="50%">forked</textPath></text><path fill="none" d="M 0 35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 -35.077322847649405 A 35.077322847649405 35.077322847649405 0 0 1 0 35.077322847649405" id="CircleText--22" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--22" startOffset="50%">forked</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(896.6002602399892, 619.8132053020157)"><path fill="none" d="M 0 53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 -53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 53.16879778659873" id="CircleText--23" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--23" startOffset="50%">fixtures</textPath></text><path fill="none" d="M 0 53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 -53.16879778659873 A 53.16879778659873 53.16879778659873 0 0 1 0 53.16879778659873" id="CircleText--24" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--24" startOffset="50%">fixtures</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(526.6781412802873, 561.9831724861971)"><path fill="none" d="M 0 156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 -156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 156.78475878682949" id="CircleText--25" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--25" startOffset="50%">coverband</textPath></text><path fill="none" d="M 0 156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 -156.78475878682949 A 156.78475878682949 156.78475878682949 0 0 1 0 156.78475878682949" id="CircleText--26" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--26" startOffset="50%">coverband</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(917.814299830758, 514.616450720902)"><path fill="none" d="M 0 42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 -42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 42.243377971831976" id="CircleText--27" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--27" startOffset="50%">benchmarks</textPath></text><path fill="none" d="M 0 42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 -42.243377971831976 A 42.243377971831976 42.243377971831976 0 0 1 0 42.243377971831976" id="CircleText--28" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--28" startOffset="50%">benchmarks</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(271.0965905323919, 583.3423814043452)"><path fill="none" d="M 0 30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 -30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 30.92708666847861" id="CircleText--29" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--29" startOffset="50%">test</textPath></text><path fill="none" d="M 0 30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 -30.92708666847861 A 30.92708666847861 30.92708666847861 0 0 1 0 30.92708666847861" id="CircleText--30" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--30" startOffset="50%">test</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(216.69953506794164, 337.6535126993426)"><path fill="none" d="M 0 173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 -173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 173.31300831108828" id="CircleText--31" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--31" startOffset="50%">coverband</textPath></text><path fill="none" d="M 0 173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 -173.31300831108828 A 173.31300831108828 173.31300831108828 0 0 1 0 173.31300831108828" id="CircleText--32" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--32" startOffset="50%">coverband</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(429.9770792294947, 163.4727445310884)"><path fill="none" d="M 0 25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 -25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 25.555321990630027" id="CircleText--33" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--33" startOffset="50%">images</textPath></text><path fill="none" d="M 0 25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 -25.555321990630027 A 25.555321990630027 25.555321990630027 0 0 1 0 25.555321990630027" id="CircleText--34" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--34" startOffset="50%">images</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(500.186549985712, 164.97508910953462)"><path fill="none" d="M 0 32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 -32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 32.810432068321326" id="CircleText--35" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--35" startOffset="50%">colorbox</textPath></text><path fill="none" d="M 0 32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 -32.810432068321326 A 32.810432068321326 32.810432068321326 0 0 1 0 32.810432068321326" id="CircleText--36" transform="rotate(2)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:14px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--36" startOffset="50%">colorbox</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(798.663927272489, 548.119233020521)"><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--37" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--37" startOffset="50%">config</textPath></text><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--38" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--38" startOffset="50%">config</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(766.2883984415777, 588.960636852518)"><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--39" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--39" startOffset="50%">app</textPath></text><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--40" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--40" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(737.5020999043077, 671.842246484952)"><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--41" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--41" startOffset="50%">config</textPath></text><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--42" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--42" startOffset="50%">config</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(703.4897781061119, 711.156141359216)"><path fill="none" d="M 0 33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 -33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 33.00951663875224" id="CircleText--43" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--43" startOffset="50%">app</textPath></text><path fill="none" d="M 0 33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 -33.00951663875224 A 33.00951663875224 33.00951663875224 0 0 1 0 33.00951663875224" id="CircleText--44" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--44" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(745.2803530526369, 421.3841890277315)"><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--45" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--45" startOffset="50%">config</textPath></text><path fill="none" d="M 0 20 A 20 20 0 0 1 0 -20 A 20 20 0 0 1 0 20" id="CircleText--46" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--46" startOffset="50%">config</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(712.9048242217254, 462.22559285972835)"><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--47" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--47" startOffset="50%">app</textPath></text><path fill="none" d="M 0 33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 -33.021888760704144 A 33.021888760704144 33.021888760704144 0 0 1 0 33.021888760704144" id="CircleText--48" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--48" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(884.8899766088309, 619.8145418044992)"><path fill="none" d="M 0 34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 -34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 34.45851407917242" id="CircleText--49" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--49" startOffset="50%">app</textPath></text><path fill="none" d="M 0 34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 -34.45851407917242 A 34.45851407917242 34.45851407917242 0 0 1 0 34.45851407917242" id="CircleText--50" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--50" startOffset="50%">app</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(594.3124503916217, 565.9835650658088)"><path fill="none" d="M 0 54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 -54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 54.331982525257274" id="CircleText--51" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--51" startOffset="50%">utils</textPath></text><path fill="none" d="M 0 54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 -54.331982525257274 A 54.331982525257274 54.331982525257274 0 0 1 0 54.331982525257274" id="CircleText--52" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--52" startOffset="50%">utils</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(458.0907571193278, 593.1292066147005)"><path fill="none" d="M 0 32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 -32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 32.2528148144039" id="CircleText--53" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--53" startOffset="50%">reporters</textPath></text><path fill="none" d="M 0 32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 -32.2528148144039 A 32.2528148144039 32.2528148144039 0 0 1 0 32.2528148144039" id="CircleText--54" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--54" startOffset="50%">reporters</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(414.88568361282734, 523.3619964530677)"><path fill="none" d="M 0 31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 -31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 31.509026578092843" id="CircleText--55" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--55" startOffset="50%">integrations</textPath></text><path fill="none" d="M 0 31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 -31.509026578092843 A 31.509026578092843 31.509026578092843 0 0 1 0 31.509026578092843" id="CircleText--56" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--56" startOffset="50%">integrations</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(524.6137748126339, 653.8856447809595)"><path fill="none" d="M 0 39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 -39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 39.50018379580438" id="CircleText--57" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--57" startOffset="50%">collectors</textPath></text><path fill="none" d="M 0 39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 -39.50018379580438 A 39.50018379580438 39.50018379580438 0 0 1 0 39.50018379580438" id="CircleText--58" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--58" startOffset="50%">collectors</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(504.2599918459867, 488.51027072087896)"><path fill="none" d="M 0 46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 -46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 46.11507108800636" id="CircleText--59" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--59" startOffset="50%">adapters</textPath></text><path fill="none" d="M 0 46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 -46.11507108800636 A 46.11507108800636 46.11507108800636 0 0 1 0 46.11507108800636" id="CircleText--60" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--60" startOffset="50%">adapters</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(238.1868617862445, 347.7543374102047)"><path fill="none" d="M 0 63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 -63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 63.05492932685483" id="CircleText--61" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--61" startOffset="50%">utils</textPath></text><path fill="none" d="M 0 63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 -63.05492932685483 A 63.05492932685483 63.05492932685483 0 0 1 0 63.05492932685483" id="CircleText--62" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--62" startOffset="50%">utils</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(150.40313620896413, 415.6689140940739)"><path fill="none" d="M 0 38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 -38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 38.23498602070316" id="CircleText--63" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--63" startOffset="50%">reporters</textPath></text><path fill="none" d="M 0 38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 -38.23498602070316 A 38.23498602070316 38.23498602070316 0 0 1 0 38.23498602070316" id="CircleText--64" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--64" startOffset="50%">reporters</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(157.2891680611386, 295.94756762971804)"><path fill="none" d="M 0 23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 -23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 23.311271971547782" id="CircleText--65" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--65" startOffset="50%">integrations</textPath></text><path fill="none" d="M 0 23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 -23.311271971547782 A 23.311271971547782 23.311271971547782 0 0 1 0 23.311271971547782" id="CircleText--66" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--66" startOffset="50%">integrations</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(227.1728703659968, 461.4004553176369)"><path fill="none" d="M 0 41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 -41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 41.42540354143981" id="CircleText--67" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--67" startOffset="50%">collectors</textPath></text><path fill="none" d="M 0 41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 -41.42540354143981 A 41.42540354143981 41.42540354143981 0 0 1 0 41.42540354143981" id="CircleText--68" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--68" startOffset="50%">collectors</textPath></text></g><g style="pointer-events:none;transition:all 0.5s ease-out" transform="translate(207.220355770931, 225.65294906289358)"><path fill="none" d="M 0 53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 -53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 53.213777701583695" id="CircleText--69" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151" stroke="white" stroke-width="6"><textPath href="#CircleText--69" startOffset="50%">adapters</textPath></text><path fill="none" d="M 0 53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 -53.213777701583695 A 53.213777701583695 53.213777701583695 0 0 1 0 53.213777701583695" id="CircleText--70" transform="rotate(3)" style="pointer-events:none"></path><text text-anchor="middle" style="font-size:13px;transition:all 0.5s ease-out" fill="#374151"><textPath href="#CircleText--70" startOffset="50%">adapters</textPath></text></g><g style="fill:#CED6E0;transition:transform 0s ease-out" transform="translate(181.61749253292245, 668.8661822807059)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">coverban...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">coverban...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">coverban...</text></g><g style="fill:#CED6E0;transition:transform 0s ease-out" transform="translate(235.25964076788608, 666.0924002361274)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">coverban...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">coverban...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">coverban...</text></g><g style="fill:#f1e05a;transition:transform 0s ease-out" transform="translate(414.79764353602405, 225.1897322137628)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">dependenci...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">dependenci...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">dependenci...</text></g><g style="fill:#563d7c;transition:transform 0s ease-out" transform="translate(512.7910567195597, 234.721131053716)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">applicatio...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">applicatio...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">applicatio...</text></g><g style="fill:#083fa1;transition:transform 0s ease-out" transform="translate(320.1615724594404, 804.9875239262727)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">README.md</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">README.md</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">README.md</text></g><g style="fill:#083fa1;transition:transform 0s ease-out" transform="translate(392.23035259112095, 805.8219336390632)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">changes.md</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">changes.md</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">changes.md</text></g><g style="fill:#701516;transition:transform 0s ease-out" transform="translate(907.9869266011098, 514.4932006928727)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">benchmark...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">benchmark...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">benchmark...</text></g><g style="fill:#701516;transition:transform 0s ease-out" transform="translate(145.25770319262398, 347.7543374102047)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">configur...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">configur...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">configur...</text></g><g style="fill:#CED6E0;transition:transform 0s ease-out" transform="translate(495.7269340957232, 164.93740302242793)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">loading.gif</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">loading.gif</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">loading.gif</text></g><g style="fill:#701516;transition:transform 0s ease-out" transform="translate(218.93456647739885, 348.95346774867755)"><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;transition:all 0.5s ease-out" fill="#4B5563" text-anchor="middle" dominant-baseline="middle" stroke="white" stroke-width="3" stroke-linejoin="round">source_f...</text><text style="pointer-events:none;opacity:1;font-size:14px;font-weight:500;transition:all 0.5s ease-out" text-anchor="middle" dominant-baseline="middle">source_f...</text><text style="pointer-events:none;opacity:0.9;font-size:14px;font-weight:500;mix-blend-mode:color-burn;transition:all 0.5s ease-out" fill="#110101" text-anchor="middle" dominant-baseline="middle">source_f...</text></g><g transform="translate(940, 740)"><g transform="translate(0, 0)"><circle r="5" fill="#563d7c"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.css</text></g><g transform="translate(0, 15)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.erb</text></g><g transform="translate(0, 30)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.gemspec</text></g><g transform="translate(0, 45)"><circle r="5" fill="#000000"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.gitignore</text></g><g transform="translate(0, 60)"><circle r="5" fill="#ece2a9"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.haml</text></g><g transform="translate(0, 75)"><circle r="5" fill="#f1e05a"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.js</text></g><g transform="translate(0, 90)"><circle r="5" fill="#000080"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.lua</text></g><g transform="translate(0, 105)"><circle r="5" fill="#083fa1"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.md</text></g><g transform="translate(0, 120)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.rake</text></g><g transform="translate(0, 135)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.rb</text></g><g transform="translate(0, 150)"><circle r="5" fill="#701516"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.ru</text></g><g transform="translate(0, 165)"><circle r="5" fill="#89e051"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.sh</text></g><g transform="translate(0, 180)"><circle r="5" fill="#2b2b2b"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.slim</text></g><g transform="translate(0, 195)"><circle r="5" fill="#ff9900"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.svg</text></g><g transform="translate(0, 210)"><circle r="5" fill="#199f4b"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.txt</text></g><g transform="translate(0, 225)"><circle r="5" fill="#cb171e"></circle><text x="10" style="font-size:14px;font-weight:300" dominant-baseline="middle">.yml</text></g><g fill="#9CA3AF" style="font-weight:300;font-style:italic;font-size:12px">each dot sized by file size</g></g></svg>
|
@@ -52,8 +52,9 @@ module Coverband
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def get_coverage_report
|
55
|
-
|
56
|
-
data
|
55
|
+
coverage_cache = {}
|
56
|
+
data = Coverband.configuration.store.split_coverage(Coverband::TYPES, coverage_cache)
|
57
|
+
data.merge(Coverband::MERGED_TYPE => Coverband.configuration.store.merged_coverage(Coverband::TYPES, coverage_cache))
|
57
58
|
end
|
58
59
|
|
59
60
|
def covered_files
|
@@ -66,12 +67,12 @@ module Coverband
|
|
66
67
|
|
67
68
|
protected
|
68
69
|
|
69
|
-
def split_coverage(types)
|
70
|
+
def split_coverage(types, coverage_cache)
|
70
71
|
types.reduce({}) do |data, type|
|
71
72
|
if type == Coverband::RUNTIME_TYPE && Coverband.configuration.simulate_oneshot_lines_coverage
|
72
|
-
data.update(type => simulated_runtime_coverage)
|
73
|
+
data.update(type => coverage_cache[type] ||= simulated_runtime_coverage)
|
73
74
|
else
|
74
|
-
data.update(type => coverage(type))
|
75
|
+
data.update(type => coverage_cache[type] ||= coverage(type))
|
75
76
|
end
|
76
77
|
end
|
77
78
|
end
|
@@ -85,9 +86,9 @@ module Coverband
|
|
85
86
|
merge_reports(runtime_data, eager_data, skip_expansion: true)
|
86
87
|
end
|
87
88
|
|
88
|
-
def merged_coverage(types)
|
89
|
+
def merged_coverage(types, coverage_cache)
|
89
90
|
types.reduce({}) do |data, type|
|
90
|
-
merge_reports(data, coverage(type), skip_expansion: true)
|
91
|
+
merge_reports(data, coverage_cache[type] ||= coverage(type), skip_expansion: true)
|
91
92
|
end
|
92
93
|
end
|
93
94
|
|
@@ -14,7 +14,7 @@ module Coverband
|
|
14
14
|
#
|
15
15
|
# View Reports:
|
16
16
|
# Using this assumes you are syncing the coverage files
|
17
|
-
# to some shared storage that is
|
17
|
+
# to some shared storage that is accessible outside of the production server
|
18
18
|
# download files to a system where you want to view the reports..
|
19
19
|
# When viewing coverage from the filestore adapter it merges all coverage
|
20
20
|
# files matching the path pattern, in this case `log/coverage.log.*`
|
@@ -9,7 +9,7 @@ module Coverband
|
|
9
9
|
FILE_LENGTH_KEY = "file_length"
|
10
10
|
META_DATA_KEYS = [DATA_KEY, FIRST_UPDATED_KEY, LAST_UPDATED_KEY, FILE_HASH].freeze
|
11
11
|
###
|
12
|
-
# This key isn't related to the coverband version, but to the
|
12
|
+
# This key isn't related to the coverband version, but to the internal format
|
13
13
|
# used to store data to redis. It is changed only when breaking changes to our
|
14
14
|
# redis format are required.
|
15
15
|
###
|