nazar 1.1.0 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/README.md +3 -2
- data/lib/nazar/base_table.rb +1 -1
- data/lib/nazar/formatter/active_record_collection.rb +2 -0
- data/lib/nazar/formatter/generic.rb +3 -3
- data/lib/nazar/formatter/struct.rb +33 -0
- data/lib/nazar/horizontal_table.rb +7 -1
- data/lib/nazar/version.rb +1 -1
- data/lib/nazar/vertical_table.rb +48 -1
- data/lib/nazar.rb +14 -2
- data/nazar.gemspec +0 -3
- metadata +5 -33
- checksums.yaml.gz.sig +0 -0
- data/certs/krzyzak.pem +0 -27
- data.tar.gz.sig +0 -1
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d6d959973fd00cf0d233b01f69c7cd4bbd08889bc2251427ab855d24e13ce42
|
4
|
+
data.tar.gz: 233302d7d8b97a7299763c8f3ef70bb7182f34094f22033cc22a0781fa08379b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ab38635347ebc90e8439b8a59af77b52c38f90a73a58dfd347506e6b2c1c923b4e0a8f890bad5de1d1554eb9612871b14577bc26ca264dd36db3b391b645841b
|
7
|
+
data.tar.gz: 0b0f71f05886d5b65728ab935c0ae3bbcce5ee3411e4eeadb7639e30ec0133a3c6e023127ca6b981ee075db1a60819c2a9f2cf9ea78c2174c6dd86fd021abbc8
|
data/.rubocop.yml
CHANGED
@@ -6,6 +6,8 @@ Style/SymbolArray:
|
|
6
6
|
EnforcedStyle: brackets
|
7
7
|
Style/WordArray:
|
8
8
|
EnforcedStyle: brackets
|
9
|
+
Style/OpenStructUse:
|
10
|
+
Enabled: false
|
9
11
|
Metrics/BlockLength:
|
10
12
|
Exclude:
|
11
13
|
- 'spec/**/*_spec.rb'
|
@@ -15,3 +17,5 @@ Layout/EndAlignment:
|
|
15
17
|
EnforcedStyleAlignWith: variable
|
16
18
|
Layout/FirstArrayElementIndentation:
|
17
19
|
EnforcedStyle: consistent
|
20
|
+
Gemspec/DevelopmentDependencies:
|
21
|
+
Enabled: false
|
data/README.md
CHANGED
@@ -240,9 +240,10 @@ You can also configure behaviour of Nazar:
|
|
240
240
|
| `Nazar.config.formatter.layout` | `:auto` | Determines which layout should be used. See <a href="#layouts">Layouts</a> for more details |
|
241
241
|
| `Nazar.config.formatter.paginate` | `true` | Determines if results too long/wide should be printed directly, or paginated with `less`. Horizontal layout is always paginated.
|
242
242
|
| `Nazar.config.formatter.boolean` | ['✓', '✗'] | First item in array is a character for `true`, second for `false` |
|
243
|
-
| `Nazar.config.formatter.resize` | `true` | Determines if the table should always be resized to take full width |
|
244
243
|
| `Nazar.config.enable_shorthand_method` | true | Determines if shorthand method should be defined. See <a href="#opt-in-setup">Opt-in setup</a> for more details |
|
245
|
-
|
244
|
+
| `Nazar.config.table.resize` | `true` | Determines if the table should always be resized to take full width |
|
245
|
+
| `Nazar.config.table.min_width` | `nil` | Sets minimum width. By default uses the longest header length |
|
246
|
+
| `Nazar.config.table.max_width` | `nil` | Determines maximum table width. If `resize` is set to true, uses terminal width by default, otherwise uses content length |
|
246
247
|
## Contributing
|
247
248
|
|
248
249
|
Bug reports and pull requests are welcome on GitHub at https://github.com/krzyzak/nazar.
|
data/lib/nazar/base_table.rb
CHANGED
@@ -16,6 +16,8 @@ module Nazar
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def self.valid?(data)
|
19
|
+
return false if data.is_a?(Struct) || (defined?(OpenStruct) && data.is_a?(OpenStruct))
|
20
|
+
|
19
21
|
data.is_a?(ActiveRecord::Associations::CollectionProxy) ||
|
20
22
|
data.is_a?(ActiveRecord::Relation) ||
|
21
23
|
(data.is_a?(Enumerable) && data.first.is_a?(ActiveRecord::Base))
|
@@ -27,10 +27,10 @@ module Nazar
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def self.valid?(data)
|
30
|
-
|
31
|
-
compatible = item.respond_to?(:keys) && item.respond_to?(:values)
|
30
|
+
return false unless data.is_a?(Enumerable)
|
32
31
|
|
33
|
-
|
32
|
+
item = data&.first
|
33
|
+
item.respond_to?(:keys) && item.respond_to?(:values)
|
34
34
|
end
|
35
35
|
|
36
36
|
def valid?
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Nazar
|
4
|
+
module Formatter
|
5
|
+
class Struct
|
6
|
+
def initialize(item)
|
7
|
+
@collection = Array(item)
|
8
|
+
@attributes = item.to_h.keys
|
9
|
+
@item = item
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.valid?(data)
|
13
|
+
data.is_a?(::Struct) || data.is_a?(::OpenStruct)
|
14
|
+
end
|
15
|
+
|
16
|
+
def valid?
|
17
|
+
true
|
18
|
+
end
|
19
|
+
|
20
|
+
def headers
|
21
|
+
HeadersFormatter.new(attributes).format
|
22
|
+
end
|
23
|
+
|
24
|
+
def cells
|
25
|
+
@cells ||= @collection.map do |item|
|
26
|
+
item.each_pair do |_, value|
|
27
|
+
CellFormatter.new(value, type: nil).format
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Nazar
|
4
4
|
class HorizontalTable < BaseTable
|
5
5
|
def render
|
6
|
-
table.render(:unicode,
|
6
|
+
table.render(:unicode, options)
|
7
7
|
end
|
8
8
|
|
9
9
|
private
|
@@ -11,5 +11,11 @@ module Nazar
|
|
11
11
|
def summary_row(value)
|
12
12
|
super.fill(nil, 3, table.columns_size - 3)
|
13
13
|
end
|
14
|
+
|
15
|
+
def options
|
16
|
+
{ border: { separator: :each_row }, multiline: true, resize: resize }.tap do |hash|
|
17
|
+
hash[:width] = Nazar.config.table.max_width if Nazar.config.table.max_width
|
18
|
+
end
|
19
|
+
end
|
14
20
|
end
|
15
21
|
end
|
data/lib/nazar/version.rb
CHANGED
data/lib/nazar/vertical_table.rb
CHANGED
@@ -23,7 +23,7 @@ module Nazar
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def render
|
26
|
-
table.render_with(VerticalBorder,
|
26
|
+
table.render_with(VerticalBorder, options) do |renderer|
|
27
27
|
renderer.border.style = :green if Nazar.config.colors.enabled
|
28
28
|
renderer.border.separator = separators_around_each_item
|
29
29
|
end
|
@@ -37,6 +37,15 @@ module Nazar
|
|
37
37
|
@table ||= TTY::Table.new(rows: cells)
|
38
38
|
end
|
39
39
|
|
40
|
+
def options
|
41
|
+
{
|
42
|
+
multiline: true,
|
43
|
+
resize: resize,
|
44
|
+
column_widths: column_widths,
|
45
|
+
width: max_width
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
40
49
|
def cells
|
41
50
|
@cells.flat_map do |cell|
|
42
51
|
cell.map.with_index do |item, index|
|
@@ -50,5 +59,43 @@ module Nazar
|
|
50
59
|
(i % headers.size).zero? || ((i + 1) % headers.size).zero?
|
51
60
|
end
|
52
61
|
end
|
62
|
+
|
63
|
+
def column_widths
|
64
|
+
[headers_width, values_width]
|
65
|
+
end
|
66
|
+
|
67
|
+
def max_width
|
68
|
+
Nazar.config.table.max_width || default_width
|
69
|
+
end
|
70
|
+
|
71
|
+
def default_width
|
72
|
+
Nazar.config.table.resize ? TTY::Screen.width : natural_width + padding
|
73
|
+
end
|
74
|
+
|
75
|
+
def natural_width
|
76
|
+
content_size = headers_width + content_width
|
77
|
+
|
78
|
+
[content_size, TTY::Screen.width].min
|
79
|
+
end
|
80
|
+
|
81
|
+
def content_width
|
82
|
+
cells.flatten.map(&:size).max
|
83
|
+
end
|
84
|
+
|
85
|
+
def headers_width
|
86
|
+
[headers.map(&:size).max + 1, Nazar.config.table.min_width].compact.min
|
87
|
+
end
|
88
|
+
|
89
|
+
def values_width
|
90
|
+
if Nazar.config.table.resize
|
91
|
+
TTY::Screen.width - headers_width
|
92
|
+
else
|
93
|
+
[content_width, TTY::Screen.width - headers_width].min
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def padding
|
98
|
+
3
|
99
|
+
end
|
53
100
|
end
|
54
101
|
end
|
data/lib/nazar.rb
CHANGED
@@ -24,7 +24,12 @@ module Nazar # rubocop:disable Metrics/ModuleLength
|
|
24
24
|
setting :boolean, default: ['✓', '✗']
|
25
25
|
setting :layout, default: :auto
|
26
26
|
setting :paginate, default: true
|
27
|
+
end
|
28
|
+
|
29
|
+
setting :table do
|
27
30
|
setting :resize, default: true
|
31
|
+
setting :min_width, default: nil
|
32
|
+
setting :max_width, default: nil
|
28
33
|
end
|
29
34
|
|
30
35
|
setting :colors do
|
@@ -33,12 +38,12 @@ module Nazar # rubocop:disable Metrics/ModuleLength
|
|
33
38
|
|
34
39
|
setting :enable_shorthand_method, default: true
|
35
40
|
|
36
|
-
class << self
|
41
|
+
class << self # rubocop:disable Metrics/ClassLength
|
37
42
|
def formatters
|
38
43
|
@formatters ||= Set.new
|
39
44
|
end
|
40
45
|
|
41
|
-
def enable!(extensions: [:active_record, :csv])
|
46
|
+
def enable!(extensions: [:active_record, :csv, :struct])
|
42
47
|
return if @enabled
|
43
48
|
|
44
49
|
load_extensions!(extensions)
|
@@ -62,6 +67,12 @@ module Nazar # rubocop:disable Metrics/ModuleLength
|
|
62
67
|
register_formatter!('CSVTable', 'nazar/formatter/csv_table')
|
63
68
|
end
|
64
69
|
|
70
|
+
def load_struct!
|
71
|
+
require 'ostruct'
|
72
|
+
|
73
|
+
register_formatter!('Struct', 'nazar/formatter/struct')
|
74
|
+
end
|
75
|
+
|
65
76
|
def load_active_record!
|
66
77
|
require 'active_record'
|
67
78
|
|
@@ -108,6 +119,7 @@ module Nazar # rubocop:disable Metrics/ModuleLength
|
|
108
119
|
def load_extensions!(extensions)
|
109
120
|
load_active_record! if extensions.include?(:active_record)
|
110
121
|
load_csv! if extensions.include?(:csv)
|
122
|
+
load_struct! if extensions.include?(:struct)
|
111
123
|
load_sequel! if extensions.include?(:sequel)
|
112
124
|
end
|
113
125
|
|
data/nazar.gemspec
CHANGED
@@ -25,9 +25,6 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
|
25
25
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
26
|
spec.require_paths = ['lib']
|
27
27
|
|
28
|
-
spec.cert_chain = ['certs/krzyzak.pem']
|
29
|
-
spec.signing_key = File.expand_path('~/.ssh/gem-private_key.pem') if $PROGRAM_NAME =~ /gem\z/
|
30
|
-
|
31
28
|
spec.add_development_dependency 'activerecord', '>= 3.0', '< 6.2'
|
32
29
|
spec.add_development_dependency 'rubocop', '~> 1.21'
|
33
30
|
spec.add_development_dependency 'sequel', '~> 5.0'
|
metadata
CHANGED
@@ -1,42 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nazar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michał Krzyżanowski
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIEgjCCAuqgAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDDCptaWNo
|
14
|
-
YWwua3J6eXphbm93c2tpX2dpdGh1Yi9EQz1nbWFpbC9EQz1jb20wHhcNMjIwOTE5
|
15
|
-
MTQwNDQyWhcNMjMwOTE5MTQwNDQyWjA1MTMwMQYDVQQDDCptaWNoYWwua3J6eXph
|
16
|
-
bm93c2tpX2dpdGh1Yi9EQz1nbWFpbC9EQz1jb20wggGiMA0GCSqGSIb3DQEBAQUA
|
17
|
-
A4IBjwAwggGKAoIBgQC22POIs4KtFipZ5W1nYbBu2iUck//fJrhyssXVxnljkZr/
|
18
|
-
8P6/BH9SiWmyatDQ+LiYug72olUoMQ2wRoZzEn58ZllZlHfPJSQ5QnIjKjITWHJt
|
19
|
-
iBi/ou31T0/OU7KVnPzryMKBL9smbxhwRbBrQlT8nV5rfHXCrpvGdOElM3EvNWwR
|
20
|
-
HM7Klal/3zlr3q/X3BZQvOp8R8hmR6OYtgNrYclS6IkvqKpcD9Y3q8K4Snz6RZ3o
|
21
|
-
DGp0QW28cF5m6CJ+N7KpQkASPuFFMAjnqyhE6r5VsklxR7I083UI1JLVOq/+s6Yt
|
22
|
-
kbCBqscI55BwcYakszStNqJXiqrEOqUEdcg5tkzc0PFC+ZEzWbMU1RTox17N1pwG
|
23
|
-
VGtdE/3OxK2A/hm6GM/sFPR2ig7wRSBs6AI9bwbv259RzHvm4wr1yQDAQzuNWeyZ
|
24
|
-
Wd3/SkNDN3nEF9mTEF1pyRC4UO2+tvQc5YOoW66a6W/gNyhGQk4QFT39Pt1Mq/VX
|
25
|
-
Ec8+0b1uEAKvD+z9xPcCAwEAAaOBnDCBmTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
|
26
|
-
sDAdBgNVHQ4EFgQUSu4g81ThKkq44UAqzDkZQAEi4eUwLwYDVR0RBCgwJoEkbWlj
|
27
|
-
aGFsLmtyenl6YW5vd3NraStnaXRodWJAZ21haWwuY29tMC8GA1UdEgQoMCaBJG1p
|
28
|
-
Y2hhbC5rcnp5emFub3dza2krZ2l0aHViQGdtYWlsLmNvbTANBgkqhkiG9w0BAQsF
|
29
|
-
AAOCAYEAfmM8QzJAfeZkmHonfleoiIIFNSeG84wK/MWBGKr0VMIalhNHpR6DQbao
|
30
|
-
5kAQh7PMWjPr0n3ZHUT4QU7lqp1/eiErEXtKAExnxRefzWSHNm0WjXT/dIyFUbYQ
|
31
|
-
rRnKtabxRNWtRIrK3GecPBDtAVTRtYQQkCaSwbwE37sHJhntS/Dvnl8pw2THq7ef
|
32
|
-
XbhPDcqmP+yWRCszn9Hzda19+8VA6Sn+fIwevXMUgvb3VHqLYcIO2amHtnCeM8Q5
|
33
|
-
caYBi+Tx9EDFh04EE4rbUGX25RcLO43j3ShLLqfW6QHFUtJIKS7WhgBVoEGvNA35
|
34
|
-
2KAZEiV7+ByRFKndeJmFtom0GMNBYPQW4l96aCrQJZyVhWSWGQZornxbH+hylJEp
|
35
|
-
on5yD3vJbVQXzwm0Z4I1IH5xc4YbEepCQRK6u/cT6NuiQqbqeW82BxjXMPu4HVBy
|
36
|
-
WXVb638bzH4OYBIYuGcw50jqBK1SyDx4exzThr6KxSiGwhAKj2xFqy51MIQjfUN0
|
37
|
-
TL5B7Buq
|
38
|
-
-----END CERTIFICATE-----
|
39
|
-
date: 2022-10-12 00:00:00.000000000 Z
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-07-01 00:00:00.000000000 Z
|
40
12
|
dependencies:
|
41
13
|
- !ruby/object:Gem::Dependency
|
42
14
|
name: activerecord
|
@@ -201,7 +173,6 @@ files:
|
|
201
173
|
- Rakefile
|
202
174
|
- bin/console
|
203
175
|
- bin/setup
|
204
|
-
- certs/krzyzak.pem
|
205
176
|
- lib/nazar.rb
|
206
177
|
- lib/nazar/base_table.rb
|
207
178
|
- lib/nazar/cell_formatter.rb
|
@@ -214,6 +185,7 @@ files:
|
|
214
185
|
- lib/nazar/formatter/sequel_collection.rb
|
215
186
|
- lib/nazar/formatter/sequel_interface.rb
|
216
187
|
- lib/nazar/formatter/sequel_item.rb
|
188
|
+
- lib/nazar/formatter/struct.rb
|
217
189
|
- lib/nazar/headers_formatter.rb
|
218
190
|
- lib/nazar/horizontal_table.rb
|
219
191
|
- lib/nazar/renderer.rb
|
@@ -242,7 +214,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
242
214
|
- !ruby/object:Gem::Version
|
243
215
|
version: '0'
|
244
216
|
requirements: []
|
245
|
-
rubygems_version: 3.
|
217
|
+
rubygems_version: 3.4.6
|
246
218
|
signing_key:
|
247
219
|
specification_version: 4
|
248
220
|
summary: Nazar is a tool that enhances default IRB/Pry inspect output
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data/certs/krzyzak.pem
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
-----BEGIN CERTIFICATE-----
|
2
|
-
MIIEgjCCAuqgAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MTMwMQYDVQQDDCptaWNo
|
3
|
-
YWwua3J6eXphbm93c2tpX2dpdGh1Yi9EQz1nbWFpbC9EQz1jb20wHhcNMjIwOTE5
|
4
|
-
MTQwNDQyWhcNMjMwOTE5MTQwNDQyWjA1MTMwMQYDVQQDDCptaWNoYWwua3J6eXph
|
5
|
-
bm93c2tpX2dpdGh1Yi9EQz1nbWFpbC9EQz1jb20wggGiMA0GCSqGSIb3DQEBAQUA
|
6
|
-
A4IBjwAwggGKAoIBgQC22POIs4KtFipZ5W1nYbBu2iUck//fJrhyssXVxnljkZr/
|
7
|
-
8P6/BH9SiWmyatDQ+LiYug72olUoMQ2wRoZzEn58ZllZlHfPJSQ5QnIjKjITWHJt
|
8
|
-
iBi/ou31T0/OU7KVnPzryMKBL9smbxhwRbBrQlT8nV5rfHXCrpvGdOElM3EvNWwR
|
9
|
-
HM7Klal/3zlr3q/X3BZQvOp8R8hmR6OYtgNrYclS6IkvqKpcD9Y3q8K4Snz6RZ3o
|
10
|
-
DGp0QW28cF5m6CJ+N7KpQkASPuFFMAjnqyhE6r5VsklxR7I083UI1JLVOq/+s6Yt
|
11
|
-
kbCBqscI55BwcYakszStNqJXiqrEOqUEdcg5tkzc0PFC+ZEzWbMU1RTox17N1pwG
|
12
|
-
VGtdE/3OxK2A/hm6GM/sFPR2ig7wRSBs6AI9bwbv259RzHvm4wr1yQDAQzuNWeyZ
|
13
|
-
Wd3/SkNDN3nEF9mTEF1pyRC4UO2+tvQc5YOoW66a6W/gNyhGQk4QFT39Pt1Mq/VX
|
14
|
-
Ec8+0b1uEAKvD+z9xPcCAwEAAaOBnDCBmTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIE
|
15
|
-
sDAdBgNVHQ4EFgQUSu4g81ThKkq44UAqzDkZQAEi4eUwLwYDVR0RBCgwJoEkbWlj
|
16
|
-
aGFsLmtyenl6YW5vd3NraStnaXRodWJAZ21haWwuY29tMC8GA1UdEgQoMCaBJG1p
|
17
|
-
Y2hhbC5rcnp5emFub3dza2krZ2l0aHViQGdtYWlsLmNvbTANBgkqhkiG9w0BAQsF
|
18
|
-
AAOCAYEAfmM8QzJAfeZkmHonfleoiIIFNSeG84wK/MWBGKr0VMIalhNHpR6DQbao
|
19
|
-
5kAQh7PMWjPr0n3ZHUT4QU7lqp1/eiErEXtKAExnxRefzWSHNm0WjXT/dIyFUbYQ
|
20
|
-
rRnKtabxRNWtRIrK3GecPBDtAVTRtYQQkCaSwbwE37sHJhntS/Dvnl8pw2THq7ef
|
21
|
-
XbhPDcqmP+yWRCszn9Hzda19+8VA6Sn+fIwevXMUgvb3VHqLYcIO2amHtnCeM8Q5
|
22
|
-
caYBi+Tx9EDFh04EE4rbUGX25RcLO43j3ShLLqfW6QHFUtJIKS7WhgBVoEGvNA35
|
23
|
-
2KAZEiV7+ByRFKndeJmFtom0GMNBYPQW4l96aCrQJZyVhWSWGQZornxbH+hylJEp
|
24
|
-
on5yD3vJbVQXzwm0Z4I1IH5xc4YbEepCQRK6u/cT6NuiQqbqeW82BxjXMPu4HVBy
|
25
|
-
WXVb638bzH4OYBIYuGcw50jqBK1SyDx4exzThr6KxSiGwhAKj2xFqy51MIQjfUN0
|
26
|
-
TL5B7Buq
|
27
|
-
-----END CERTIFICATE-----
|
data.tar.gz.sig
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
�s�/>��p���띡"�:y��s1�)F���3#$w7a�S�t�ϩH̑P �!�0O�)���Jl��JX��Q�H���S��������bh]Т���*Tk���e�����8�#[���ð�N���y�%+c:@Nҟ��,mgÕ� �'�.;V�4ɍ5�s��sm-հ�Rb�Rwh�1�/GE��d�|TA����>|��1���ܒ�2V����x ��@�<�������ermF�xS�fCئ��SY��\R��W�琲O���AG�v�,��(��g���j��C�t�yW�P��xo᥏ȫ��"��K�<n����;�O�H���d�)����
|
metadata.gz.sig
DELETED
Binary file
|