memoria 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 327014add78eb897d6e5fc6c36581abedf838944b91e91e59da127b734262233
4
+ data.tar.gz: 445a593821ecb27e84c20dbcc73547d14827ccfe1925dfc662c1a145997e6e77
5
+ SHA512:
6
+ metadata.gz: b989197c7a7e40a3f276c03173d69faa15a9c1baa638ebc40c7fc3c3f1c1555a7efa2e156c34b937e128f5cba6a1d8b197f1458bec7a7f965c492ce061249446
7
+ data.tar.gz: 4ab5b92279c014b4e4dc7379162b8e0fc2417b82432e9b4152f9360e48ad990b8296013627d2bc32ceaa58bc6162c4e1a49d7b0d8f1e12c65a07757090fe8c60
@@ -0,0 +1,10 @@
1
+ # Unix-style newlines with a newline ending every file
2
+ [*]
3
+ end_of_line = lf
4
+ insert_final_newline = true
5
+ max_line_length = 120
6
+
7
+ # 2 space indentation
8
+ [*.rb]
9
+ indent_style = space
10
+ indent_size = 2
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ /measurements/
10
+ Gemfile.lock
11
+
12
+ # rspec failure tracking
13
+ .rspec_status
@@ -0,0 +1,21 @@
1
+ # Use this file to configure the Overcommit hooks you wish to use. This will
2
+ # extend the default configuration defined in:
3
+ # https://github.com/brigade/overcommit/blob/master/config/default.yml
4
+ #
5
+ # At the topmost level of this YAML file is a key representing type of hook
6
+ # being run (e.g. pre-commit, commit-msg, etc.). Within each type you can
7
+ # customize each hook, such as whether to only run it on certain files (via
8
+ # `include`), whether to only display output if it fails (via `quiet`), etc.
9
+ #
10
+ # For a complete list of hooks, see:
11
+ # https://github.com/brigade/overcommit/tree/master/lib/overcommit/hook
12
+ #
13
+ # For a complete list of options that you can use to customize hooks, see:
14
+ # https://github.com/brigade/overcommit#configuration
15
+ #
16
+ # Uncomment the following lines to make the configuration take effect.
17
+
18
+ PreCommit:
19
+ RuboCop:
20
+ enabled: true
21
+ on_warn: fail # Treat all warnings as failures
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -0,0 +1,34 @@
1
+ require: rubocop-rspec
2
+
3
+ AllCops:
4
+ DisplayCopNames: true
5
+
6
+ # ---------------------- Metrics ----------------------
7
+
8
+ Metrics/BlockLength:
9
+ Exclude:
10
+ - spec/**/*_spec.rb
11
+ - memoria.gemspec
12
+
13
+ Metrics/LineLength:
14
+ Max: 120
15
+
16
+ # ----------------------- RSpec -----------------------
17
+
18
+ RSpec/NestedGroups:
19
+ Enabled: false
20
+
21
+ RSpec/DescribeClass:
22
+ Exclude:
23
+ - spec/memoria/rspec_spec.rb
24
+ - spec/memoria/rspec/matcher_spec.rb
25
+
26
+ # ----------------------- Style -----------------------
27
+
28
+ Style/FrozenStringLiteralComment:
29
+ Enabled: false
30
+
31
+ Style/ModuleFunction:
32
+ Exclude:
33
+ - lib/memoria.rb
34
+ - lib/memoria/rspec/metadata_parser.rb
@@ -0,0 +1,22 @@
1
+ language: ruby
2
+ cache: bundler
3
+
4
+ env:
5
+ global:
6
+ - CC_TEST_REPORTER_ID=f9b83e168978e0bdefdb84b04fcb48eae2cf6d6b804ddf198cadef381b6ec06a
7
+
8
+ rvm:
9
+ - 2.5.0
10
+
11
+ before_install: gem install bundler -v 1.16.1
12
+
13
+ before_script:
14
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
15
+ - chmod +x ./cc-test-reporter
16
+ - ./cc-test-reporter before-build
17
+ scripts:
18
+ - bundle exec rspec
19
+ - bundle exec rubocop
20
+
21
+ after_script:
22
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
@@ -0,0 +1 @@
1
+ --plugin junk
@@ -0,0 +1,77 @@
1
+ threshold: 100
2
+ rules:
3
+ ApiTag::Presence:
4
+ enabled: true
5
+ exclude:
6
+ - Memoria::Configuration#validate_setting_existence
7
+ - Memoria::Configuration#validate_record_mode
8
+ - Memoria::Configuration#validate_snapshot_extension
9
+ - Memoria::SnapshotSaver#configuration
10
+ - Memoria::SnapshotSaver#absolute_path_to_file
11
+ - Memoria::SnapshotSaver#sanitized_file_name_from
12
+ - Memoria::SnapshotSaver#file_extension
13
+ - Memoria::SnapshotSaver#storage_location
14
+ - Memoria::RSpec::MetadataParser#find_description_in
15
+ - Memoria::RSpec::MetadataParser#find_example_group_in
16
+ ApiTag::Inclusion:
17
+ enabled: true
18
+ exclude:
19
+ - Memoria::Configuration#validate_setting_existence
20
+ - Memoria::Configuration#validate_record_mode
21
+ - Memoria::Configuration#validate_snapshot_extension
22
+ - Memoria::SnapshotSaver#configuration
23
+ - Memoria::SnapshotSaver#absolute_path_to_file
24
+ - Memoria::SnapshotSaver#sanitized_file_name_from
25
+ - Memoria::SnapshotSaver#file_extension
26
+ - Memoria::SnapshotSaver#storage_location
27
+ - Memoria::RSpec::MetadataParser#find_description_in
28
+ - Memoria::RSpec::MetadataParser#find_example_group_in
29
+ ApiTag::ProtectedMethod:
30
+ enabled: true
31
+ exclude: []
32
+ ApiTag::PrivateMethod:
33
+ enabled: false
34
+ ExampleTag:
35
+ enabled: true
36
+ exclude:
37
+ - Memoria::Errors::DuplicateSetting#message
38
+ - Memoria::Errors::InvalidConfiguration#message
39
+ - Memoria::Errors::InvalidRecordMode#message
40
+ - Memoria::Errors::InvalidSnapshotExtension#message
41
+ - Memoria::Configuration#snapshot_directory
42
+ - Memoria::Configuration#snapshot_record_mode
43
+ - Memoria::Configuration#snapshot_extension
44
+ - Memoria::Configuration#snapshot_directory=
45
+ - Memoria::Configuration#snapshot_record_mode=
46
+ - Memoria::Configuration#snapshot_extension=
47
+ - Memoria::Configuration#validate_setting_existence
48
+ - Memoria::Configuration#validate_record_mode
49
+ - Memoria::Configuration#validate_snapshot_extension
50
+ - Memoria::SnapshotSaver#configuration
51
+ - Memoria::SnapshotSaver#absolute_path_to_file
52
+ - Memoria::SnapshotSaver#sanitized_file_name_from
53
+ - Memoria::SnapshotSaver#file_extension
54
+ - Memoria::SnapshotSaver#storage_location
55
+ - Memoria::RSpec::MetadataParser#find_description_in
56
+ - Memoria::RSpec::MetadataParser#find_example_group_in
57
+ ReturnTag:
58
+ enabled: true
59
+ exclude:
60
+ - Memoria::Configuration#validate_setting_existence
61
+ - Memoria::Configuration#validate_record_mode
62
+ - Memoria::Configuration#validate_snapshot_extension
63
+ Summary::Presence:
64
+ enabled: true
65
+ exclude:
66
+ - Memoria::Configuration#snapshot_directory=
67
+ - Memoria::Configuration#snapshot_directory
68
+ - Memoria::Configuration#snapshot_record_mode
69
+ - Memoria::Configuration#snapshot_extension
70
+ Summary::Length:
71
+ enabled: false
72
+ Summary::Delimiter:
73
+ enabled: false
74
+ exclude: []
75
+ Summary::SingleLine:
76
+ enabled: true
77
+ exclude: []
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
+ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in memoria.gemspec
6
+ gemspec
@@ -0,0 +1,20 @@
1
+ guard :bundler do
2
+ watch('memoria.gemspec')
3
+ end
4
+
5
+ guard :bundler_audit, run_on_start: true do
6
+ watch('Gemfile.lock')
7
+ end
8
+
9
+ group :tests do
10
+ guard :rspec, all_on_start: true, cmd: 'bundle exec rspec --format progress' do
11
+ watch(%r{^spec/.+_spec\.rb$})
12
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
13
+ watch('spec/spec_helper.rb') { 'spec' }
14
+ end
15
+ end
16
+
17
+ guard :rubocop do
18
+ watch(/.+\.rb$/)
19
+ watch(%r{(?:.+/)?\.rubocop\.yml$}) { |m| File.dirname(m[0]) }
20
+ end
@@ -0,0 +1,90 @@
1
+ # Memoria
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/memoria.svg)](http://badge.fury.io/rb/memoria)
4
+ [![Build Status](https://travis-ci.org/wilsonsilva/memoria.svg?branch=master)](https://travis-ci.org/wilsonsilva/memoria)
5
+ [![Maintainability](https://api.codeclimate.com/v1/badges/ffa08ae5daf70c87c68f/maintainability)](https://codeclimate.com/github/wilsonsilva/memoria/maintainability)
6
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/ffa08ae5daf70c87c68f/test_coverage)](https://codeclimate.com/github/wilsonsilva/memoria/test_coverage)
7
+ [![Security](https://hakiri.io/github/wilsonsilva/memoria/master.svg)](https://hakiri.io/github/wilsonsilva/memoria/master)
8
+ [![Inline docs](http://inch-ci.org/github/wilsonsilva/memoria.svg?branch=master)](http://inch-ci.org/github/wilsonsilva/memoria)
9
+
10
+ Asserts the result of a given test by generating a rendered representation of its output. Inspired by Jest and VCR.
11
+
12
+ The first time your test is run, a representation of your expected output is saved to a file. The next time you
13
+ run the same test, a diff runs between a new and the previously stored snapshot. If there are no differences the test
14
+ passes, otherwise the test fails and the resulting diff is displayed.
15
+
16
+ ## Installation
17
+
18
+ Add this line to your application's Gemfile:
19
+
20
+ ```ruby
21
+ gem 'memoria'
22
+ ```
23
+
24
+ And then execute:
25
+
26
+ $ bundle
27
+
28
+ Or install it yourself as:
29
+
30
+ $ gem install memoria
31
+
32
+ ## Usage
33
+
34
+ ### RSpec
35
+
36
+ You can configure RSpec's integration in `spec_helper.rb`. Require `memoria/rspec` then run `Memoria.configure`:
37
+
38
+ ```ruby
39
+ Memoria.configure do |config|
40
+ config.configure_rspec_hooks
41
+ config.include_rspec_matchers
42
+ end
43
+ ```
44
+
45
+ The configuration above does two things:
46
+ - Includes the matcher `match_snapshot` in your RSpec test suite.
47
+ - Configures RSpec hooks to create snapshots named after the full spec example's description.
48
+
49
+ Use the provided matcher `match_snapshot` to verify if the expected output matches a previously recorded snapshot.
50
+
51
+ ```ruby
52
+ expect(view).to match_snapshot
53
+ ```
54
+
55
+ By default the snapshots will be stored in `spec/fixtures/snapshots`, but you can change this with the setting
56
+ `snapshot_directory`:
57
+
58
+ ```ruby
59
+ Memoria.configure do |config|
60
+ config.snapshot_directory = 'spec/snapshots'
61
+ end
62
+ ```
63
+
64
+ ### Cucumber
65
+ Under development.
66
+
67
+ ### Minitest
68
+ Under development.
69
+
70
+ ## Development
71
+
72
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can
73
+ also run `bin/console` for an interactive prompt that will allow you to experiment.
74
+
75
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the
76
+ version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version,
77
+ push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
78
+
79
+ ### Architecture
80
+
81
+ Memoria was designed using a modular plugin architecture. The core part of the gem has a single responsibility:
82
+ manage snapshots. Every test framework integration is done through a self-contained plugin. Plugins depend on the core,
83
+ but the core is unaware of the plugins. This allows me to extract the plugins into their own gems later, and
84
+ add new plugins with ease.
85
+
86
+ ![Class Diagram](https://github.com/wilsonsilva/memoria/blob/master/documentation/class-diagram.svg)
87
+
88
+ ## Contributing
89
+
90
+ Bug reports and pull requests are welcome on GitHub at https://github.com/wilsonsilva/memoria.
@@ -0,0 +1,22 @@
1
+ # Roadmap
2
+
3
+ ## Core
4
+ - [ ] Snapshot interpolation
5
+ - [ ] Snapshot partial matching
6
+ - [ ] Auto format the serialised snapshots
7
+ - [ ] Find and delete unused snapshots
8
+
9
+ ## Framework integrations
10
+ - [ ] `RSpec`
11
+ - [ ] `Minitest`
12
+ - [ ] `Cucumber`
13
+
14
+ ## Persistence
15
+ - [ ] Filesystem
16
+
17
+ ## Serialisation
18
+ - [ ] Plain text (WYSIWYG)
19
+ - [ ] Compressed
20
+
21
+ ## Other
22
+ - [ ] `Pry` integration
@@ -0,0 +1,32 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'bundler/audit/task'
3
+ require 'rspec/core/rake_task'
4
+ require 'yaml'
5
+ require 'yard/rake/yardoc_task'
6
+ require 'yard-junk/rake'
7
+ require 'yardstick/rake/measurement'
8
+ require 'yardstick/rake/verify'
9
+
10
+ yardstick_options = YAML.load_file('.yardstick.yml')
11
+
12
+ Bundler::Audit::Task.new
13
+ RSpec::Core::RakeTask.new(:spec)
14
+ YARD::Rake::YardocTask.new
15
+ YardJunk::Rake.define_task
16
+ Yardstick::Rake::Measurement.new(:yardstick_measure, yardstick_options)
17
+ Yardstick::Rake::Verify.new
18
+
19
+ task default: :spec
20
+
21
+ # Delete these files and folders when running rake clobber.
22
+ CLOBBER.include('coverage', '.rspec_status')
23
+
24
+ # Remove the report on rake clobber
25
+ CLEAN.include('measurements', 'doc', '.yardoc', 'tmp')
26
+
27
+ desc 'Run spec with coverage'
28
+ task :coverage do
29
+ ENV['COVERAGE'] = 'true'
30
+ Rake::Task['spec'].execute
31
+ `open coverage/index.html`
32
+ end
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'memoria'
5
+ require 'pry'
6
+
7
+ Pry.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,360 @@
1
+ <?xml version='1.0' encoding='utf-8'?>
2
+ <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'>
3
+ <svg xmlns='http://www.w3.org/2000/svg' viewBox='-13 -11 978 780' xmlns:xlink='http://www.w3.org/1999/xlink' width='978.0px' font-size='13' font-family='Arial, LiberationSans' version='1.1' height='780.0px'>
4
+ <defs>
5
+ <style type='text/css'><![CDATA[svg text {text-rendering: geometricPrecision;}]]></style> <linearGradient y1='0.0%' x1='0.0%' y2='100.0%' x2='0.0%' id='gradient-ffffff-eeeeee' spreadMethod='pad'>
6
+ <stop stop-opacity='1' offset='0' stop-color='rgb(255, 255, 255)'/>
7
+ <stop stop-opacity='1' offset='100' stop-color='rgb(238, 238, 238)'/>
8
+ </linearGradient>
9
+ <linearGradient y1='0.0%' x1='0.0%' y2='100.0%' x2='0.0%' id='gradient-ffffff-efe9de' spreadMethod='pad'>
10
+ <stop stop-opacity='1' offset='0' stop-color='rgb(255, 255, 255)'/>
11
+ <stop stop-opacity='1' offset='100' stop-color='rgb(239, 233, 222)'/>
12
+ </linearGradient>
13
+ </defs>
14
+ <desc>ClassDiagram</desc>
15
+ <g transform='translate(796.0,649.0)' id='_pjwTmkADEDaXxvbZkv6C9Q'>
16
+ <rect rx='3.0' ry='3.0' x='0.0' width='70.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='26.0px'/>
17
+ <text font-weight='bold' text-anchor='middle' x='35.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>RSpec</text>
18
+ <line y1='26.0' x1='0.0' y2='26.0' x2='70.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
19
+ </g>
20
+ <g transform='translate(17.0,128.0)' id='_pjvsgUADEDaXxvbZkv6C9Q'>
21
+ <rect rx='3.0' ry='3.0' x='0.0' width='150.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='90.0px'/>
22
+ <text font-weight='bold' text-anchor='middle' x='75.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>SnapshotSaver</text>
23
+ <line y1='26.0' x1='0.0' y2='26.0' x2='150.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
24
+ <g transform='translate(0.0,26.0)' id='_pjvsgkADEDaXxvbZkv6C9Q'>
25
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
26
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>write()</text>
27
+ </g>
28
+ <g transform='translate(0.0,46.0)' id='_pjvsg0ADEDaXxvbZkv6C9Q'>
29
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
30
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>read()</text>
31
+ </g>
32
+ <g transform='translate(0.0,66.0)' id='_pjvshEADEDaXxvbZkv6C9Q'>
33
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
34
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>snapshot_exists?()</text>
35
+ </g>
36
+ </g>
37
+ <g transform='translate(247.0,55.0)' id='_pjwTmUADEDaXxvbZkv6C9Q'>
38
+ <rect rx='3.0' ry='3.0' x='0.0' width='90.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='42.0px'/>
39
+ <text font-weight='bold' text-anchor='middle' x='45.0' y='18.0' font-size='12' fill='rgb(105, 105, 105)'>« Interface »</text>
40
+ <text font-weight='bold' text-anchor='middle' x='45.0' y='35.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Snapshot</text>
41
+ <line y1='42.0' x1='0.0' y2='42.0' x2='90.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
42
+ </g>
43
+ <g transform='translate(192.0,234.0)' id='_pjwTkkADEDaXxvbZkv6C9Q'>
44
+ <rect rx='3.0' ry='3.0' x='0.0' width='220.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='155.0px'/>
45
+ <text font-weight='bold' text-anchor='middle' x='110.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Memoria</text>
46
+ <line y1='26.0' x1='0.0' y2='26.0' x2='220.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
47
+ <g transform='translate(0.0,26.0)' id='_pjwTk0ADEDaXxvbZkv6C9Q'>
48
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
49
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>snapshots: Array</text>
50
+ </g>
51
+ <g transform='translate(0.0,46.0)' id='_pjwTlUADEDaXxvbZkv6C9Q'>
52
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
53
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>current_snapshot: Snapshot</text>
54
+ </g>
55
+ <g transform='translate(0.0,66.0)' id='_pjwTlkADEDaXxvbZkv6C9Q'>
56
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
57
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>configuration: Configuration</text>
58
+ </g>
59
+ <g transform='translate(0.0,86.0)' id='_pjwTmEADEDaXxvbZkv6C9Q'>
60
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
61
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>snapshot_saver: SnapshotSaver</text>
62
+ </g>
63
+ <line y1='107.0' x1='0.0' y2='107.0' x2='220.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
64
+ <g transform='translate(0.0,107.0)' id='_pjwTlEADEDaXxvbZkv6C9Q'>
65
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
66
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>configure()</text>
67
+ </g>
68
+ <g transform='translate(0.0,127.0)' id='_pjwTl0ADEDaXxvbZkv6C9Q'>
69
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
70
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>record(snapshot_name)()</text>
71
+ </g>
72
+ </g>
73
+ <g transform='translate(565.0,362.0)' id='_pjw6o0ADEDaXxvbZkv6C9Q'>
74
+ <rect rx='3.0' ry='3.0' x='0.0' width='196.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='70.0px'/>
75
+ <text font-weight='bold' text-anchor='middle' x='98.0' y='18.0' font-size='12' fill='rgb(105, 105, 105)'>« Interface »</text>
76
+ <text font-weight='bold' text-anchor='middle' x='98.0' y='35.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Configuration</text>
77
+ <line y1='42.0' x1='0.0' y2='42.0' x2='196.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
78
+ <g transform='translate(0.0,42.0)' id='_pjw6pEADEDaXxvbZkv6C9Q'>
79
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
80
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>add_setting(name, block)()</text>
81
+ </g>
82
+ </g>
83
+ <g transform='translate(555.0,214.0)' id='_pjvFckADEDaXxvbZkv6C9Q'>
84
+ <rect rx='3.0' ry='3.0' x='0.0' width='214.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='113.0px'/>
85
+ <text font-weight='bold' text-anchor='middle' x='107.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Configuration</text>
86
+ <line y1='26.0' x1='0.0' y2='26.0' x2='214.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
87
+ <g transform='translate(0.0,26.0)' id='_pjvFc0ADEDaXxvbZkv6C9Q'>
88
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
89
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>snapshot_dir: String</text>
90
+ </g>
91
+ <g transform='translate(0.0,46.0)' id='_pjvFdEADEDaXxvbZkv6C9Q'>
92
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
93
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>snapshot_extension: String</text>
94
+ </g>
95
+ <g transform='translate(0.0,66.0)' id='_pjvFdUADEDaXxvbZkv6C9Q'>
96
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
97
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>snapshot_record_mode: Symbol</text>
98
+ </g>
99
+ <line y1='87.0' x1='0.0' y2='87.0' x2='214.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
100
+ <g transform='translate(0.0,87.0)' id='_pjvFdkADEDaXxvbZkv6C9Q'>
101
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
102
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>add_setting(name, block)()</text>
103
+ </g>
104
+ </g>
105
+ <g transform='translate(241.0,128.0)' id='_pjwTkEADEDaXxvbZkv6C9Q'>
106
+ <rect rx='3.0' ry='3.0' x='0.0' width='102.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='48.0px'/>
107
+ <text font-weight='bold' text-anchor='middle' x='51.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Snapshot</text>
108
+ <line y1='26.0' x1='0.0' y2='26.0' x2='102.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
109
+ <g transform='translate(0.0,26.0)' id='_pjwTkUADEDaXxvbZkv6C9Q'>
110
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP////3+/ypvqCtuqCtvqDF0qzp5rzp4rjp5rkN/skOAskR/sk2Ftk2GtlWMulaMulaNulaMuV6Svl6RvV6SvV+SvWWWwGWXwGqawvr9/+35//b8//L7/+T3/+H3/+T4/+z6/+36/+P4/+f5//L8//b9/wWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACj1MwgAAAArdFJOU////////////////////////////////////////////////////////wAjyafQAAAAjklEQVR42lyPMQrCUBBE364bbbSwEcE+EO9/l0AqIZ0K2in8v7sWIkmc7s1MMSNnltI/xnjMcY8Rt4kPYNRjIYUUaCoYvr3vvvlzU0DxVyFiHetIcTDcgiZr4+EWYPjKrwC8udB3RtZTUSDGFgaMHDVBKqBBL7/pfQsaYIsXSsyMQHLeGGhhmN52HSTwGQCflTcMX9qOTgAAAABJRU5ErkJggg==' height='16.0'/>
111
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' fill='rgb(0, 0, 0)'>name: String</text>
112
+ </g>
113
+ </g>
114
+ <text text-anchor='middle' x='232.0' y='211.0' fill='rgb(0, 0, 0)'>« dependency »</text>
115
+ <text text-anchor='middle' x='482.0' y='266.0' fill='rgb(0, 0, 0)'>« dependency »</text>
116
+ <text text-anchor='middle' x='112.0' y='330.0' fill='rgb(0, 0, 0)'>« dependency »</text>
117
+ <g transform='translate(426.0,19.0)' id='_pjw6oUADEDaXxvbZkv6C9Q'>
118
+ <rect rx='3.0' ry='3.0' x='0.0' width='55.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-efe9de)' stroke='rgb(194, 183, 159)' look='allInOne' height='27.0px'/>
119
+ <rect x='0.0' width='490.0px' y='24.0' stroke-width='1.0' fill='url(#gradient-ffffff-efe9de)' stroke='rgb(194, 183, 159)' look='allInOne' height='128.0px'/>
120
+ <text font-weight='bold' text-anchor='middle' x='27.5' y='18.0' font-size='13' fill='rgb(128, 98, 33)'>Errors</text>
121
+ </g>
122
+ <g transform='translate(131.0,569.0)' id='_pjvsgEADEDaXxvbZkv6C9Q'>
123
+ <rect rx='3.0' ry='3.0' x='0.0' width='59.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-efe9de)' stroke='rgb(194, 183, 159)' look='allInOne' height='27.0px'/>
124
+ <rect x='0.0' width='596.0px' y='24.0' stroke-width='1.0' fill='url(#gradient-ffffff-efe9de)' stroke='rgb(194, 183, 159)' look='allInOne' height='146.0px'/>
125
+ <text font-weight='bold' text-anchor='middle' x='29.5' y='18.0' font-size='13' fill='rgb(128, 98, 33)'>RSpec</text>
126
+ </g>
127
+ <g transform='translate(575.0,128.0)' id='_pj3BREADEDaXxvbZkv6C9Q'>
128
+ <rect rx='3.0' ry='3.0' x='0.0' width='175.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='26.0px'/>
129
+ <text font-weight='bold' text-anchor='middle' x='87.5' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>InvalidSnapshotExtension</text>
130
+ <line y1='26.0' x1='0.0' y2='26.0' x2='175.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
131
+ </g>
132
+ <g transform='translate(765.0,128.0)' id='_pj2aNkADEDaXxvbZkv6C9Q'>
133
+ <rect rx='3.0' ry='3.0' x='0.0' width='132.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='26.0px'/>
134
+ <text font-weight='bold' text-anchor='middle' x='66.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>InvalidRecordMode</text>
135
+ <line y1='26.0' x1='0.0' y2='26.0' x2='132.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
136
+ </g>
137
+ <g transform='translate(145.0,673.0)' id='_pj0lCUADEDaXxvbZkv6C9Q'>
138
+ <rect rx='3.0' ry='3.0' x='0.0' width='162.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='50.0px'/>
139
+ <text font-weight='bold' text-anchor='middle' x='81.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>MetadataParser</text>
140
+ <line y1='26.0' x1='0.0' y2='26.0' x2='162.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
141
+ <g transform='translate(0.0,26.0)' id='_pj0lCkADEDaXxvbZkv6C9Q'>
142
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
143
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>find_description_for()</text>
144
+ </g>
145
+ </g>
146
+ <g transform='translate(525.0,610.0)' id='_pjz9-EADEDaXxvbZkv6C9Q'>
147
+ <rect rx='3.0' ry='3.0' x='0.0' width='190.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='69.0px'/>
148
+ <text font-weight='bold' text-anchor='middle' x='95.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Configurator</text>
149
+ <line y1='26.0' x1='0.0' y2='26.0' x2='190.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
150
+ <g transform='translate(0.0,26.0)' id='_pjz9-UADEDaXxvbZkv6C9Q'>
151
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
152
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>configure_rspec_hooks()</text>
153
+ </g>
154
+ <g transform='translate(0.0,46.0)' id='_pjz9-kADEDaXxvbZkv6C9Q'>
155
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
156
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>include_rspec_matchers()</text>
157
+ </g>
158
+ </g>
159
+ <g transform='translate(145.0,610.0)' id='_pjyv0kADEDaXxvbZkv6C9Q'>
160
+ <rect rx='3.0' ry='3.0' x='0.0' width='207.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='50.0px'/>
161
+ <text font-weight='bold' text-anchor='middle' x='103.5' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Metadata</text>
162
+ <line y1='26.0' x1='0.0' y2='26.0' x2='207.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
163
+ <g transform='translate(0.0,26.0)' id='_pjyv00ADEDaXxvbZkv6C9Q'>
164
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
165
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>current_example_metadata()</text>
166
+ </g>
167
+ </g>
168
+ <g transform='translate(594.0,63.0)' id='_pj3BT0ADEDaXxvbZkv6C9Q'>
169
+ <rect rx='3.0' ry='3.0' x='0.0' width='138.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='26.0px'/>
170
+ <text font-weight='bold' text-anchor='middle' x='69.0' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>InvalidConfiguration</text>
171
+ <line y1='26.0' x1='0.0' y2='26.0' x2='138.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
172
+ </g>
173
+ <g transform='translate(369.0,611.0)' id='_pjzW4EADEDaXxvbZkv6C9Q'>
174
+ <rect rx='3.0' ry='3.0' x='0.0' width='147.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='48.0px'/>
175
+ <text font-weight='bold' text-anchor='middle' x='73.5' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>Matcher</text>
176
+ <line y1='26.0' x1='0.0' y2='26.0' x2='147.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
177
+ <g transform='translate(0.0,26.0)' id='_pjzW4UADEDaXxvbZkv6C9Q'>
178
+ <image x='4.0' width='16.0' y='5.0' xlink:href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAG8dAAB6pAAA9NYAAIZwAAB37gAA9bAAADqjAAAVsi1zQqwAAAMAUExURQAAAP///8HBw6Ky1rfD3Ymh0au73Ku62Yag0aq72bPB27fD2b7J3YWh0Ieiz4ahzomk0Z2z2Ki72bPD3L7J23eXyIajz7TE27PD2rTD2maPxbvK38PP32OMwGSMvYamz7PE2LXE10V/vkh/v0d/vEiAvUh+vFGEu1OEvGaEpqC40kaBvUWAukd/ukmBvGGQvmSGqWOEpZ+61QA9cwA8cgA7cQI7cAM8czZ0rT16sEF9s0J9tUSBuE6GuVGFt2OGpmSHp2OEo2WGpWSFpAA8cAA9cAA7bwA8bgA9bgA7bQI8bgI8bD18slCGtWKFo2OGpGSHpQA9bAA7aDR3rAWBSUOcbHGxdf///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADH1d5AAAABYdFJOU////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wB4m8IIAAAA2UlEQVR42lSPzUoCURhAz/0cUrhjTYzuIu0PicZFy57ABxjQdxR8iQQJYmrTDYJZNEZQC2fGHPIndVyUkGdz4OyO6rCL/Mqkj//Ce8iR8Uge/sJzNUqG+etocH4PqA6TQEpfUzWvlBoOFDyKrsnOLnQi1weAEKRG37iTWWs8iJ9AqN9Ns/0sqL3oVf8YCl7UGO05lbKTDRer0FxZXNL8CE/tNMaHHgLx9+zkU9++gUDXgqK45Z8YH8DHAh3Z9tIGAWFtATUID2GNykFtb7vgq7y3vYV2G3JgMwDzTEnCPC8r9AAAAABJRU5ErkJggg==' height='16.0'/>
179
+ <text text-anchor='start' x='22.0' y='16.0' font-size='13' font-style='normal' fill='rgb(0, 0, 0)'>match_snapshot()</text>
180
+ </g>
181
+ </g>
182
+ <g transform='translate(446.0,128.0)' id='_pj3BUEADEDaXxvbZkv6C9Q'>
183
+ <rect rx='3.0' ry='3.0' x='0.0' width='115.0px' y='0.0' stroke-width='1.0' fill='url(#gradient-ffffff-eeeeee)' stroke='rgb(187, 187, 187)' look='allInOne' height='26.0px'/>
184
+ <text font-weight='bold' text-anchor='middle' x='57.5' y='19.0' font-size='13' font-style='normal' fill='rgb(3, 54, 86)'>DuplicateSetting</text>
185
+ <line y1='26.0' x1='0.0' y2='26.0' x2='115.0' stroke-width='1.0' stroke='rgb(187, 187, 187)' look='border'/>
186
+ </g>
187
+ <text text-anchor='middle' x='796.0' y='695.0' fill='rgb(0, 0, 0)'>« dependency »</text>
188
+ <text text-anchor='middle' x='481.0' y='391.0' fill='rgb(0, 0, 0)'>« dependency »</text>
189
+ <text text-anchor='middle' x='337.0' y='513.0' fill='rgb(0, 0, 0)'>« dependency »</text>
190
+ <text text-anchor='middle' x='714.0' y='199.0' fill='rgb(0, 0, 0)'>« dependency »</text>
191
+ <text text-anchor='middle' x='492.0' y='507.0' fill='rgb(0, 0, 0)'>« dependency »</text>
192
+ <text text-anchor='middle' x='454.0' y='199.0' fill='rgb(0, 0, 0)'>« dependency »</text>
193
+ <text text-anchor='middle' x='882.0' y='198.0' fill='rgb(0, 0, 0)'>« dependency »</text>
194
+ <text text-anchor='middle' x='694.0' y='515.0' fill='rgb(0, 0, 0)'>« dependency »</text>
195
+ <text text-anchor='middle' x='384.0' y='701.0' fill='rgb(0, 0, 0)'>« dependency »</text>
196
+ <g id='_pjsCIUADEDaXxvbZkv6C9Q'>
197
+ <polyline transform='translate(412.0,335.0) rotate(-90.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
198
+ <line y1='335.0' x1='544.0' y2='335.0' x2='412.0' stroke-dasharray='1, 2' id='_pj0lAUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
199
+ </g>
200
+ <g id='_pjueYUADEDaXxvbZkv6C9Q'>
201
+ <line y1='205.0' x1='292.0' y2='205.0' x2='292.0' stroke-dasharray='1, 2' id='_pj2aM0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
202
+ </g>
203
+ <g id='_pjsCJUADEDaXxvbZkv6C9Q'>
204
+ <polyline transform='translate(307.0,706.0) rotate(-90.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
205
+ <line y1='706.0' x1='416.0' y2='706.0' x2='307.0' stroke-dasharray='1, 2' id='_pj0lDEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
206
+ </g>
207
+ <g id='_pjueYEADEDaXxvbZkv6C9Q'>
208
+ <line y1='300.0' x1='89.0' y2='238.0' x2='89.0' stroke-dasharray='1, 2' id='_pj1zI0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
209
+ </g>
210
+ <g id='_pjueYEADEDaXxvbZkv6C9Q'>
211
+ <line y1='300.0' x1='192.0' y2='300.0' x2='89.0' stroke-dasharray='1, 2' id='_pj1zJUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
212
+ </g>
213
+ <g id='_pjt3WEADEDaXxvbZkv6C9Q'>
214
+ <line y1='280.0' x1='412.0' y2='280.0' x2='483.0' stroke-dasharray='1, 2' id='_pjyv0UADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
215
+ </g>
216
+ <g id='_pjsCIEADEDaXxvbZkv6C9Q'>
217
+ <polyline transform='translate(640.0,432.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
218
+ <line y1='521.0' x1='640.0' y2='432.0' x2='640.0' stroke-dasharray='1, 2' id='_pj0lCEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
219
+ </g>
220
+ <g id='_pjueYkADEDaXxvbZkv6C9Q'>
221
+ <polyline transform='translate(828.0,154.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
222
+ <line y1='184.0' x1='828.0' y2='154.0' x2='828.0' stroke-dasharray='1, 2' id='_pj2aP0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
223
+ </g>
224
+ <g id='_pjsCLEADEDaXxvbZkv6C9Q'>
225
+ <line y1='128.0' x1='292.0' y2='112.0' x2='292.0' stroke-dasharray='1, 2' id='_pj1zJ0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
226
+ </g>
227
+ <g id='_pjvFcUADEDaXxvbZkv6C9Q'>
228
+ <polyline transform='translate(507.0,154.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
229
+ <line y1='184.0' x1='507.0' y2='154.0' x2='507.0' stroke-dasharray='1, 2' id='_pj3oWEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
230
+ </g>
231
+ <g id='_pjt3VUADEDaXxvbZkv6C9Q'>
232
+ <line y1='128.0' x1='504.0' y2='108.0' x2='504.0' id='_pj3oUUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
233
+ </g>
234
+ <g id='_pjt3WUADEDaXxvbZkv6C9Q'>
235
+ <polyline transform='translate(796.0,662.0) rotate(90.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
236
+ <line y1='662.0' x1='762.0' y2='662.0' x2='796.0' stroke-dasharray='1, 2' id='_pj1MGUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
237
+ </g>
238
+ <g id='_pjt3WUADEDaXxvbZkv6C9Q'>
239
+ <line y1='662.0' x1='761.0' y2='662.0' x2='762.0' stroke-dasharray='1, 2' id='_pj1MF0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
240
+ </g>
241
+ <g id='_pjsCLEADEDaXxvbZkv6C9Q'>
242
+ <line y1='112.0' x1='292.0' y2='113.0' x2='292.0' stroke-dasharray='1, 2' id='_pj1zKkADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
243
+ </g>
244
+ <g id='_pjsCIEADEDaXxvbZkv6C9Q'>
245
+ <line y1='521.0' x1='640.0' y2='521.0' x2='640.0' stroke-dasharray='1, 2' id='_pj0lBkADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
246
+ </g>
247
+ <g id='_pjt3WEADEDaXxvbZkv6C9Q'>
248
+ <line y1='280.0' x1='483.0' y2='280.0' x2='484.0' stroke-dasharray='1, 2' id='_pjyIyEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
249
+ </g>
250
+ <g id='_pjsCIkADEDaXxvbZkv6C9Q'>
251
+ <line y1='611.0' x1='445.0' y2='518.0' x2='445.0' stroke-dasharray='1, 2' id='_pjzW40ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
252
+ </g>
253
+ <g id='_pjueYEADEDaXxvbZkv6C9Q'>
254
+ <polyline transform='translate(89.0,218.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
255
+ <line y1='238.0' x1='89.0' y2='218.0' x2='89.0' stroke-dasharray='1, 2' id='_pj1zIEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
256
+ </g>
257
+ <g id='_pjvFcUADEDaXxvbZkv6C9Q'>
258
+ <line y1='233.0' x1='507.0' y2='184.0' x2='507.0' stroke-dasharray='1, 2' id='_pj3oW0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
259
+ </g>
260
+ <g id='_pjueYUADEDaXxvbZkv6C9Q'>
261
+ <polyline transform='translate(292.0,176.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
262
+ <line y1='205.0' x1='292.0' y2='176.0' x2='292.0' stroke-dasharray='1, 2' id='_pj2aMEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
263
+ </g>
264
+ <g id='_pjsCIUADEDaXxvbZkv6C9Q'>
265
+ <line y1='590.0' x1='544.0' y2='335.0' x2='544.0' stroke-dasharray='1, 2' id='_pjz9_0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
266
+ </g>
267
+ <g id='_pjq0A0ADEDaXxvbZkv6C9Q'>
268
+ <line y1='345.0' x1='663.0' y2='344.0' x2='663.0' stroke-dasharray='1, 2' id='_pjyIwUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
269
+ </g>
270
+ <g id='_pjt3WEADEDaXxvbZkv6C9Q'>
271
+ <polyline transform='translate(555.0,280.0) rotate(90.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
272
+ <line y1='280.0' x1='484.0' y2='280.0' x2='555.0' stroke-dasharray='1, 2' id='_pjyIxUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
273
+ </g>
274
+ <g id='_pjt3VUADEDaXxvbZkv6C9Q'>
275
+ <line y1='108.0' x1='504.0' y2='109.0' x2='663.0' id='_pj3oVEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
276
+ </g>
277
+ <g id='_pjq0A0ADEDaXxvbZkv6C9Q'>
278
+ <line y1='327.0' x1='663.0' y2='345.0' x2='663.0' stroke-dasharray='1, 2' id='_pjw6r0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
279
+ </g>
280
+ <g id='_pjt3WUADEDaXxvbZkv6C9Q'>
281
+ <line y1='662.0' x1='727.0' y2='662.0' x2='761.0' stroke-dasharray='1, 2' id='_pj1MFEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
282
+ </g>
283
+ <g id='_pjsCIkADEDaXxvbZkv6C9Q'>
284
+ <polyline transform='translate(590.0,432.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
285
+ <line y1='519.0' x1='590.0' y2='432.0' x2='590.0' stroke-dasharray='1, 2' id='_pjz98EADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
286
+ </g>
287
+ <g id='_pjsCLEADEDaXxvbZkv6C9Q'>
288
+ <line y1='113.0' x1='292.0' y2='97.0' x2='292.0' stroke-dasharray='1, 2' id='_pj1zLEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
289
+ <polygon transform='translate(292.0,97.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-4.0,12.0 0.0,0.0 4.0,12.0'/>
290
+ </g>
291
+ <g id='_pjueYkADEDaXxvbZkv6C9Q'>
292
+ <line y1='230.0' x1='828.0' y2='184.0' x2='828.0' stroke-dasharray='1, 2' id='_pj3BQUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
293
+ </g>
294
+ <g id='_pjsCJUADEDaXxvbZkv6C9Q'>
295
+ <line y1='706.0' x1='620.0' y2='706.0' x2='416.0' stroke-dasharray='1, 2' id='_pj1MEEADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
296
+ </g>
297
+ <g id='_pjvFcEADEDaXxvbZkv6C9Q'>
298
+ <polyline transform='translate(662.0,154.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
299
+ <line y1='214.0' x1='662.0' y2='154.0' x2='662.0' stroke-dasharray='1, 2' id='_pj3BTUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
300
+ </g>
301
+ <g id='_pjsCJUADEDaXxvbZkv6C9Q'>
302
+ <line y1='679.0' x1='620.0' y2='706.0' x2='620.0' stroke-dasharray='1, 2' id='_pj1MEkADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
303
+ </g>
304
+ <g id='_pjrbGEADEDaXxvbZkv6C9Q'>
305
+ <polyline transform='translate(390.0,389.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-5.0,10.0 0.0,0.0 5.0,10.0'/>
306
+ <line y1='500.0' x1='390.0' y2='389.0' x2='390.0' stroke-dasharray='1, 2' id='_pjz990ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
307
+ </g>
308
+ <g id='_pjsCIEADEDaXxvbZkv6C9Q'>
309
+ <line y1='610.0' x1='640.0' y2='521.0' x2='640.0' stroke-dasharray='1, 2' id='_pj0lA0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
310
+ </g>
311
+ <g id='_pjsCIkADEDaXxvbZkv6C9Q'>
312
+ <line y1='518.0' x1='445.0' y2='519.0' x2='590.0' stroke-dasharray='1, 2' id='_pjzW5kADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
313
+ </g>
314
+ <g id='_pjt3U0ADEDaXxvbZkv6C9Q'>
315
+ <line y1='108.0' x1='663.0' y2='109.0' x2='663.0' id='_pj3BSUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
316
+ </g>
317
+ <g id='_pjt3UUADEDaXxvbZkv6C9Q'>
318
+ <line y1='108.0' x1='831.0' y2='109.0' x2='663.0' id='_pj2aO0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
319
+ </g>
320
+ <g id='_pjueYkADEDaXxvbZkv6C9Q'>
321
+ <line y1='230.0' x1='769.0' y2='230.0' x2='828.0' stroke-dasharray='1, 2' id='_pj3BQ0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
322
+ </g>
323
+ <g id='_pjt3U0ADEDaXxvbZkv6C9Q'>
324
+ <line y1='128.0' x1='663.0' y2='108.0' x2='663.0' id='_pj3BRUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
325
+ </g>
326
+ <g id='_pjrbGEADEDaXxvbZkv6C9Q'>
327
+ <line y1='611.0' x1='390.0' y2='500.0' x2='390.0' stroke-dasharray='1, 2' id='_pjz98kADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
328
+ </g>
329
+ <g id='_pjt3UUADEDaXxvbZkv6C9Q'>
330
+ <line y1='128.0' x1='831.0' y2='108.0' x2='831.0' id='_pj2aN0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
331
+ </g>
332
+ <g id='_pjvFcUADEDaXxvbZkv6C9Q'>
333
+ <line y1='233.0' x1='555.0' y2='233.0' x2='507.0' stroke-dasharray='1, 2' id='_pj3oXUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
334
+ </g>
335
+ <g id='_pjt3U0ADEDaXxvbZkv6C9Q'>
336
+ <line y1='109.0' x1='663.0' y2='89.0' x2='663.0' id='_pj3BS0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
337
+ <polygon transform='translate(663.0,89.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-6.0,10.0 0.0,0.0 6.0,10.0'/>
338
+ </g>
339
+ <g id='_pjrbGEADEDaXxvbZkv6C9Q'>
340
+ <line y1='500.0' x1='390.0' y2='500.0' x2='390.0' stroke-dasharray='1, 2' id='_pjz99UADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
341
+ </g>
342
+ <g id='_pjt3UUADEDaXxvbZkv6C9Q'>
343
+ <line y1='109.0' x1='663.0' y2='89.0' x2='663.0' id='_pj2aPUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
344
+ <polygon transform='translate(663.0,89.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-6.0,10.0 0.0,0.0 6.0,10.0'/>
345
+ </g>
346
+ <g id='_pjt3VUADEDaXxvbZkv6C9Q'>
347
+ <line y1='109.0' x1='663.0' y2='89.0' x2='663.0' id='_pj3oVkADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
348
+ <polygon transform='translate(663.0,89.0) rotate(-0.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-6.0,10.0 0.0,0.0 6.0,10.0'/>
349
+ </g>
350
+ <g id='_pjsCIUADEDaXxvbZkv6C9Q'>
351
+ <line y1='610.0' x1='544.0' y2='590.0' x2='544.0' stroke-dasharray='1, 2' id='_pjz9_EADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
352
+ </g>
353
+ <g id='_pjq0A0ADEDaXxvbZkv6C9Q'>
354
+ <line y1='344.0' x1='663.0' y2='362.0' x2='663.0' stroke-dasharray='1, 2' id='_pjyIw0ADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
355
+ <polygon transform='translate(663.0,362.0) rotate(-180.0)' stroke-width='1.0' fill='rgb(255, 255, 255)' stroke='rgb(0, 0, 0)' points='-4.0,12.0 0.0,0.0 4.0,12.0'/>
356
+ </g>
357
+ <g id='_pjueYUADEDaXxvbZkv6C9Q'>
358
+ <line y1='234.0' x1='292.0' y2='205.0' x2='292.0' stroke-dasharray='1, 2' id='_pj2aNUADEDaXxvbZkv6C9Q' stroke-width='1.0' fill='none' stroke='rgb(0, 0, 0)'/>
359
+ </g>
360
+ </svg>