image_size 2.0.2 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cc2fd112a73bfb6540f6844eff148ceda9792676aa326f7f0d71930185d9d818
4
- data.tar.gz: b965c3a296577b850b386b7c6627351675d80f455860f71aad1a45422f27791c
3
+ metadata.gz: 9ecfd6172b63860fd5e18bf96cdfc79c7ab275f52643d6069ef4386978a70187
4
+ data.tar.gz: c0be8f8fea7b00fb2ad849598fb461238942a836f89dd63edc452432637e1fd5
5
5
  SHA512:
6
- metadata.gz: 961fce55de8805b2bb69e78fe0d180f2e5778e632d9dcbeb2ee3c098db28b8a55fade49d53a1a82b521d79544440cff89c1baaf9ea64187b25457944f5a70957
7
- data.tar.gz: 2acd7259a332525bd594aae5e2c9fb2514d65e2b6fa8d0846d8e9dc6baaeece14652c75311d608bdfbd8c64f995ff908752fdf777a23c86afced341fc02c2a4b
6
+ metadata.gz: 1536d248784158f8163a3fd7cde488af4a5dbd6e5ccfde7e40e491f5679db4bdd87a0834de00c077d3312090e36c677d6df29fed85cd3b45596b1303831fb33b
7
+ data.tar.gz: 2251c45b938da475db4a03ea570bdc3e2b513309817a874c9e0b4b458b83d67f7687af691a84a6f98aaa39de6241a5e4dc8f8177552f0ac9e051b494626398e0
@@ -3,6 +3,7 @@ inherit_from: .rubocop_todo.yml
3
3
  AllCops:
4
4
  Exclude:
5
5
  - '*.gemspec'
6
+ NewCops: enable
6
7
 
7
8
  Layout/AccessModifierIndentation:
8
9
  EnforcedStyle: outdent
@@ -13,6 +14,9 @@ Layout/CaseIndentation:
13
14
  Layout/EndAlignment:
14
15
  EnforcedStyleAlignWith: variable
15
16
 
17
+ Layout/LineLength:
18
+ Max: 120
19
+
16
20
  Layout/SpaceBeforeBlockBraces:
17
21
  EnforcedStyle: no_space
18
22
  EnforcedStyleForEmptyBraces: no_space
@@ -27,13 +31,13 @@ Metrics/BlockLength:
27
31
  Metrics/ClassLength:
28
32
  Enabled: false
29
33
 
30
- Metrics/LineLength:
31
- Max: 120
32
-
33
34
  Metrics/MethodLength:
34
35
  Enabled: false
35
36
 
36
- Naming/UncommunicativeMethodParamName:
37
+ Naming/MethodParameterName:
38
+ Enabled: false
39
+
40
+ Style/AccessorGrouping:
37
41
  Enabled: false
38
42
 
39
43
  Style/Alias:
@@ -45,9 +49,18 @@ Style/EmptyCaseCondition:
45
49
  Style/Encoding:
46
50
  Enabled: false
47
51
 
52
+ Style/HashEachMethods:
53
+ Enabled: true
54
+
48
55
  Style/HashSyntax:
49
56
  EnforcedStyle: hash_rockets
50
57
 
58
+ Style/HashTransformKeys:
59
+ Enabled: false
60
+
61
+ Style/HashTransformValues:
62
+ Enabled: false
63
+
51
64
  Style/IfUnlessModifier:
52
65
  Enabled: false
53
66
 
@@ -62,3 +75,6 @@ Style/TrailingCommaInArrayLiteral:
62
75
 
63
76
  Style/TrailingCommaInHashLiteral:
64
77
  EnforcedStyleForMultiline: comma
78
+
79
+ Style/UnpackFirst:
80
+ Enabled: false
@@ -1,24 +1,27 @@
1
1
  # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2018-04-23 23:58:18 +0200 using RuboCop version 0.55.0.
2
+ # `rubocop --auto-gen-config --no-auto-gen-timestamp`
3
+ # using RuboCop version 0.89.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 6
9
+ # Offense count: 8
10
+ # Configuration parameters: IgnoredMethods.
10
11
  Metrics/AbcSize:
11
- Max: 41
12
+ Max: 43
12
13
 
13
- # Offense count: 3
14
+ # Offense count: 5
15
+ # Configuration parameters: IgnoredMethods.
14
16
  Metrics/CyclomaticComplexity:
15
- Max: 20
17
+ Max: 21
16
18
 
17
19
  # Offense count: 2
20
+ # Configuration parameters: IgnoredMethods.
18
21
  Metrics/PerceivedComplexity:
19
- Max: 20
22
+ Max: 21
20
23
 
21
- # Offense count: 7
24
+ # Offense count: 8
22
25
  # Cop supports --auto-correct.
23
26
  Style/PerlBackrefs:
24
27
  Exclude:
@@ -1,24 +1,27 @@
1
1
  sudo: false
2
+ dist: trusty
2
3
  language: ruby
3
4
  before_install:
4
5
  - gem install bundler || gem install bundler --version '< 2'
5
6
  rvm:
6
- - '1.8.7-p371'
7
+ - '1.8.7-p374'
7
8
  - '1.9.3-p551'
8
9
  - '2.0.0-p648'
9
10
  - '2.1.10'
10
11
  - '2.2.10'
11
12
  - '2.3.8'
12
- - '2.4.6'
13
- - '2.5.5'
14
- - '2.6.3'
15
- - 'jruby-9.1.9.0'
13
+ - '2.4.10'
14
+ - '2.5.8'
15
+ - '2.6.6'
16
+ - '2.7.1'
17
+ - 'jruby-9.1.17.0'
18
+ - 'jruby-9.2.11.1'
16
19
  script: bundle exec rspec
17
20
  matrix:
18
21
  include:
19
- - env: RUBOCOP=✓
20
- rvm: '2.6.3'
22
+ - env: RUBOCOP=1
23
+ rvm: '2.6.6'
21
24
  script: bundle exec rubocop
22
- - env: CHECK_RUBIES=✓
23
- rvm: '2.6.3'
25
+ - env: CHECK_RUBIES=1
26
+ rvm: '2.6.6'
24
27
  script: bundle exec travis_check_rubies
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## unreleased
4
4
 
5
+ ## v2.1.0 (2020-08-09)
6
+
7
+ * Add handling of JPEG 2000: part 1 (jp2), part 2 (jpx) and codestream (j2c) [#13](https://github.com/toy/image_size/issues/13) [@toy](https://github.com/toy)
8
+ * Correct handling of pam images and cleanup handling of Netpbm images (pbm, pgm, pnm) [@toy](https://github.com/toy)
9
+
5
10
  ## v2.0.2 (2019-07-14)
6
11
 
7
12
  * Remove deprecated `rubyforge_project` attribute from gemspec [rubygems/rubygems#2436](https://github.com/rubygems/rubygems/pull/2436) [@toy](https://github.com/toy)
@@ -4,7 +4,7 @@
4
4
  # image_size
5
5
 
6
6
  measure image size using pure Ruby
7
- formats: `apng`, `bmp`, `cur`, `gif`, `jpeg`, `ico`, `mng`, `pbm`, `pcx`, `pgm`, `png`, `ppm`, `psd`, `swf`, `tiff`, `xbm`, `xpm`, `webp`
7
+ formats: `apng`, `bmp`, `cur`, `gif`, `ico`, `j2c`, `jp2`, `jpeg`, `jpx`, `mng`, `pam`, `pbm`, `pcx`, `pgm`, `png`, `ppm`, `psd`, `svg`, `swf`, `tiff`, `webp`, `xbm`, `xpm`
8
8
 
9
9
  ## Installation
10
10
 
@@ -2,10 +2,10 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = 'image_size'
5
- s.version = '2.0.2'
5
+ s.version = '2.1.0'
6
6
  s.summary = %q{Measure image size using pure Ruby}
7
- s.description = %q{Measure following file dimensions: apng, bmp, cur, gif, jpeg, ico, mng, pbm, pcx, pgm, png, ppm, psd, swf, tiff, xbm, xpm, webp}
8
- s.homepage = "http://github.com/toy/#{s.name}"
7
+ s.description = %q{Measure following file dimensions: apng, bmp, cur, gif, ico, j2c, jp2, jpeg, jpx, mng, pam, pbm, pcx, pgm, png, ppm, psd, svg, swf, tiff, webp, xbm, xpm}
8
+ s.homepage = "https://github.com/toy/#{s.name}"
9
9
  s.authors = ['Keisuke Minami', 'Ivan Kuchin']
10
10
  s.license = 'Ruby'
11
11
 
@@ -23,6 +23,6 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.add_development_dependency 'rspec', '~> 3.0'
25
25
  if RUBY_VERSION >= '2.2'
26
- s.add_development_dependency 'rubocop', '~> 0.59'
26
+ s.add_development_dependency 'rubocop', '~> 0.59', '!= 0.78.0'
27
27
  end
28
28
  end
@@ -17,6 +17,7 @@ class ImageSize
17
17
 
18
18
  class ImageReader # :nodoc:
19
19
  attr_reader :data
20
+
20
21
  def initialize(data_or_io)
21
22
  @io = if data_or_io.is_a?(String)
22
23
  StringIO.new(data_or_io)
@@ -84,28 +85,28 @@ class ImageSize
84
85
  private
85
86
 
86
87
  SVG_R = /<svg\b([^>]*)>/.freeze
88
+ XML_R = /<\?xml|<!--/.freeze
87
89
  def detect_format(ir)
88
90
  head = ir[0, 1024]
89
91
  case
90
- when head[0, 6] =~ /GIF8[79]a/ then :gif
91
- when head[0, 8] == "\211PNG\r\n\032\n" then detect_png_type(ir)
92
- when head[0, 8] == "\212MNG\r\n\032\n" then :mng
93
- when head[0, 2] == "\377\330" then :jpeg
94
- when head[0, 2] == 'BM' then :bmp
95
- when head[0, 2] =~ /P[1-7]/ then :ppm
96
- when head =~ /\#define\s+\S+\s+\d+/ then :xbm
97
- when head[0, 4] == "II*\000" then :tiff
98
- when head[0, 4] == "MM\000*" then :tiff
99
- when head =~ %r{/\* XPM \*/} then :xpm
100
- when head[0, 4] == '8BPS' then :psd
101
- when head[0, 3] =~ /[FC]WS/ then :swf
102
- when head[SVG_R] ||
103
- head =~ /<\?xml|<!--/ && ir[0, 4096][SVG_R]
104
- then :svg
105
- when head[0, 2] =~ /\n[\000-\005]/ then :pcx
106
- when head[0, 12] =~ /RIFF(?m:....)WEBP/ then :webp
107
- when head[0, 4] == "\000\000\001\000" then :ico
108
- when head[0, 4] == "\000\000\002\000" then :cur
92
+ when head[0, 6] =~ /GIF8[79]a/ then :gif
93
+ when head[0, 8] == "\211PNG\r\n\032\n" then detect_png_type(ir)
94
+ when head[0, 8] == "\212MNG\r\n\032\n" then :mng
95
+ when head[0, 2] == "\377\330" then :jpeg
96
+ when head[0, 2] == 'BM' then :bmp
97
+ when head[0, 3] =~ /P[1-6]\s|P7\n/ then detect_pnm_type(ir)
98
+ when head =~ /\#define\s+\S+\s+\d+/ then :xbm
99
+ when %W[II*\0 MM\0*].include?(head[0, 4]) then :tiff
100
+ when head =~ %r{/\* XPM \*/} then :xpm
101
+ when head[0, 4] == '8BPS' then :psd
102
+ when head[0, 3] =~ /[FC]WS/ then :swf
103
+ when head =~ SVG_R || (head =~ XML_R && ir[0, 4096][SVG_R]) then :svg
104
+ when head[0, 2] =~ /\n[\0-\5]/ then :pcx
105
+ when head[0, 12] =~ /RIFF(?m:....)WEBP/ then :webp
106
+ when head[0, 4] == "\0\0\1\0" then :ico
107
+ when head[0, 4] == "\0\0\2\0" then :cur
108
+ when head[0, 12] == "\0\0\0\fjP \r\n\207\n" then detect_jpeg2000_type(ir)
109
+ when head[0, 4] == "\377O\377Q" then :j2c
109
110
  end
110
111
  end
111
112
 
@@ -122,6 +123,26 @@ private
122
123
  :png
123
124
  end
124
125
 
126
+ def detect_pnm_type(ir)
127
+ case ir[0, 2]
128
+ when 'P1', 'P4' then :pbm
129
+ when 'P2', 'P5' then :pgm
130
+ when 'P3', 'P6' then :ppm
131
+ when 'P7' then :pam
132
+ end
133
+ end
134
+
135
+ def detect_jpeg2000_type(ir)
136
+ return unless ir[16, 4] == 'ftyp'
137
+
138
+ # using xl-box would be weird, but doesn't seem to contradict specification
139
+ skip = ir[12, 4] == "\0\0\0\1" ? 16 : 8
140
+ case ir[12 + skip, 4]
141
+ when 'jp2 ' then :jp2
142
+ when 'jpx ' then :jpx
143
+ end
144
+ end
145
+
125
146
  def size_of_gif(ir)
126
147
  ir[6, 4].unpack('vv')
127
148
  end
@@ -187,12 +208,38 @@ private
187
208
  header = ir[0, 1024]
188
209
  header.gsub!(/^\#[^\n\r]*/m, '')
189
210
  header =~ /^(P[1-6])\s+?(\d+)\s+?(\d+)/m
190
- case $1
191
- when 'P1', 'P4' then @format = :pbm
192
- when 'P2', 'P5' then @format = :pgm
193
- end
194
211
  [$2.to_i, $3.to_i]
195
212
  end
213
+ alias_method :size_of_pbm, :size_of_ppm
214
+ alias_method :size_of_pgm, :size_of_ppm
215
+
216
+ def size_of_pam(ir)
217
+ width = height = nil
218
+ offset = 3
219
+ loop do
220
+ if ir[offset, 1] == '#'
221
+ offset += 1 until ["\n", '', nil].include?(ir[offset, 1])
222
+ offset += 1
223
+ else
224
+ chunk = ir[offset, 32]
225
+ case chunk
226
+ when /\AWIDTH (\d+)\n/
227
+ width = $1.to_i
228
+ when /\AHEIGHT (\d+)\n/
229
+ height = $1.to_i
230
+ when /\AENDHDR\n/
231
+ break
232
+ when /\A(?:DEPTH|MAXVAL) \d+\n/, /\ATUPLTYPE \S+\n/
233
+ # ignore
234
+ else
235
+ raise FormatError, "Unexpected data in PAM header: #{chunk.inspect}"
236
+ end
237
+ offset += $&.length
238
+ break if width && height
239
+ end
240
+ end
241
+ [width, height]
242
+ end
196
243
 
197
244
  def size_of_xbm(ir)
198
245
  ir[0, 1024] =~ /^\#define\s*\S*\s*(\d+)\s*\n\#define\s*\S*\s*(\d+)/mi
@@ -255,7 +302,7 @@ private
255
302
  value_bit_length = ir[8, 1].unpack('B5').first.to_i(2)
256
303
  bit_length = 5 + value_bit_length * 4
257
304
  rect_bits = ir[8, bit_length / 8 + 1].unpack("B#{bit_length}").first
258
- values = rect_bits.unpack('@5' + "a#{value_bit_length}" * 4).map{ |bits| bits.to_i(2) }
305
+ values = rect_bits[5..-1].unpack("a#{value_bit_length}" * 4).map{ |bits| bits.to_i(2) }
259
306
  x_min, x_max, y_min, y_max = values
260
307
  [(x_max - x_min) / 20, (y_max - y_min) / 20]
261
308
  end
@@ -299,4 +346,44 @@ private
299
346
  [(w16 | w8 << 16) + 1, (h16 | h8 << 16) + 1]
300
347
  end
301
348
  end
349
+
350
+ def size_of_jp2(ir)
351
+ offset = 12
352
+ stop = nil
353
+ in_header = false
354
+ loop do
355
+ break if stop && offset >= stop
356
+ break if ir[offset, 4] == '' || ir[offset, 4].nil?
357
+
358
+ size = ir[offset, 4].unpack('N')[0]
359
+ type = ir[offset + 4, 4]
360
+
361
+ data_offset = 8
362
+ case size
363
+ when 1
364
+ size = ir[offset, 8].unpack('Q>')[0]
365
+ data_offset = 16
366
+ raise FormatError, "Unexpected xl-box size #{size}" if (1..15).include?(size)
367
+ when 2..7
368
+ raise FormatError, "Reserved box size #{size}"
369
+ end
370
+
371
+ if type == 'jp2h'
372
+ stop = offset + size unless size.zero?
373
+ offset += data_offset
374
+ in_header = true
375
+ elsif in_header && type == 'ihdr'
376
+ return ir[offset + data_offset, 8].unpack('NN').reverse
377
+ else
378
+ break if size.zero? # box to the end of file
379
+
380
+ offset += size
381
+ end
382
+ end
383
+ end
384
+ alias_method :size_of_jpx, :size_of_jp2
385
+
386
+ def size_of_j2c(ir)
387
+ ir[8, 8].unpack('NN')
388
+ end
302
389
  end
@@ -5,7 +5,12 @@ require 'image_size'
5
5
  require 'tempfile'
6
6
 
7
7
  describe ImageSize do
8
+ MAX_FILESIZE = 16_384
9
+
8
10
  (Dir['spec/images/*/*.*'] + [__FILE__]).each do |path|
11
+ filesize = File.size(path)
12
+ warn "#{path} is too big #{filesize} (max #{MAX_FILESIZE})" if filesize > MAX_FILESIZE
13
+
9
14
  describe "for #{path}" do
10
15
  let(:name){ File.basename(path) }
11
16
  let(:attributes) do
Binary file
File without changes
@@ -0,0 +1,8 @@
1
+ P7
2
+ WIDTH 22
3
+ HEIGHT 25
4
+ DEPTH 3
5
+ MAXVAL 255
6
+ TUPLTYPE RGB
7
+ ENDHDR
8
+ JMRGJONQVKNSRVZY^b{��|��osyz����Ǎ��v|�������UY_ORT�^_�ts�_b`FH�`aDGLHJPJMQfjnflplqu}�����u{�������nsw[`d]bgqv}aej>AFLLO�`c�ro�bdxORlsvZ_ccknS[^imrwz��������������ɑ��UY]���u{~��glosz~X^b�_^�li�lk���dimORWORWRUZY\a������������������UW\������]`ehmqOPU>AHfOR�lj�kjv}�KNSKOREILEIMTX[LQUAEJHJOZ]a_di���muz������=<BSUZrv|���}pt�jh�liPWZGJOIMPEILDHK=AE`eiuz~������}��������������XZ_MMR[^e�������ed�heHKPPSWFKNAFIMRV`hk���������nuxW\`V[_CHLu|����[^dBBGDHMBEJomr�hf�geJMSZ\aDILekn������dimPUYMNSBBGCDIFGLDEJ]`f���chlDGLT\^EMQ]MQ�ji�ecoehXadJMR���Y]a_afcdjORWKNTMTYJNRFFICCG]`d���z�==BFGLAEK�VX�ki�ec�nrLQWNSZdjmkqtBBHABGPX]^ltScgIMPCDHJJNQTX�����JKPPSX_^d�__�jf�ca�st�_bjX[jsw���^eh=@EIPUQX^RW\UY]JNR@AEegn���v{FFLmuy�]_�ec�gd�ca�zx�zx�po�cg~����y��YZ^CEIEGKSUZejnMRUZ]b���osxADIm[_�_`�ca�ec�db�st�|}�zy�vt�gh�ot�����Ϣ��ehlEGLX]`PRVX[_���dek7<@�RT�b_�a_�`^�ca�ux�{~�|z�yv�{w�rp�ii�����������ntwDDIgjn���`cjSSW�^^�gd�b`�`^�b`�yv�wx�xu�|x�yu�vs�vs�oo�ii�km������FHMimq���QX_x`d�fe�fb�da�b`�ca�wu�rp�vt�us�tr�vs�ts�sr�po�uv�ml�x|V[_gin���OU[�Z\�fc�ea�db�ca�b`�zx�tq�vt�us�wt�vs�wt�sq�rr�st�sq�giTX\SVZ���fbg�ce�eb�ca�ec�db�ec�yu�ur�sq�sr�vs�xu�xs�tq�xt�ws�xt�ihKMRchm���]NP�ge�eb�ca�db�ec�fd�zv�sq�rq�sr�rp�xu�so�rp�tq�qn�uq�bcHIN\bgo|�wQU�jh�fd�ca�b`�ca�ec�zy�xt�tr�vs�sr�sr�tq�sp�rp�kj�mk�^^HLPLOTfqv�UV�jf�ec�db�b`�cb�ca�ss�{w�us�tr�ur�wt�tq�qo�ro�lj�on�ZZ=BFNNTRZ_�YY�ie�db�db�`_�_^�`_�ij�~|�vs�ur�sq�pn�qo�ol�ji�mj�qn�Z]CFL]_dLIN�aa�fb�ca�cb�a`�__�]^x_^�{x�ws�wt�sp�pn�po�lknZ^�lk�pmxXYDINkrwkUX�mj�db�fdX[�Y\�`_�]]�gi�vs�us�xu�tr�nk�lj�nk�jj�mk�kjlPR?CGGIP�bb�pm�fd�da�Y\�]]�b_�`_�ru�ml�ur�wu�tr�pk�lg�oi�oj�pl�kiaMO;@EPGI�kj�he�fd�fc�b`�a^�b`�_^
Binary file
@@ -0,0 +1,4 @@
1
+ P5
2
+ 22 25
3
+ 255
4
+ MJQNU]��sÑ{��YRh�mLmGJMikp��z��r_aueALi�rXr^jZmz����ŗX�z�ky]k��hRRU\������W��`lPAT~|NNHHWPEJ]c�t��=Uv�s|VJLHG@dy�������ZM^��v|KSJEQg���t[ZG{�^BHEnx{M\Hj��hTNBDGE`�gGZLQ}yg_M�\adRNSMFC`�~=GE_yzPRipBBWj`LDJT��KS_n~w�i\q�d@OWVXMAg�zFtgz{w���j��ZEGUiQ]�sD_rwyx|���ss�ͩhG\R[�e;]wutw������u����sDj�cSm{vtv��������{w��Hl�We{zxvw����������~{Zi�Te{yxwv�����������qWV�ctywyxy�����������rMg�Qzywxyz�����������lIazY~zwvwy���������~�gKOo_yxvww~���������cANYe~xxutup�������w�cF_Jq{wxvtsd������x_�_HqZ�xzahvrm�����{�~VBIl�zweowu{{�������~Q?I||zzwuvt
@@ -0,0 +1,4 @@
1
+ P6
2
+ 22 25
3
+ 255
4
+ JMRGJONQVKNSRVZY^b{��|��osyz����Ǎ��v|�������UY_ORT�^_�ts�_b`FH�`aDGLHJPJMQfjnflplqu}�����u{�������nsw[`d]bgqv}aej>AFLLO�`c�ro�bdxORlsvZ_ccknS[^imrwz��������������ɑ��UY]���u{~��glosz~X^b�_^�li�lk���dimORWORWRUZY\a������������������UW\������]`ehmqOPU>AHfOR�lj�kjv}�KNSKOREILEIMTX[LQUAEJHJOZ]a_di���muz������=<BSUZrv|���}pt�jh�liPWZGJOIMPEILDHK=AE`eiuz~������}��������������XZ_MMR[^e�������ed�heHKPPSWFKNAFIMRV`hk���������nuxW\`V[_CHLu|����[^dBBGDHMBEJomr�hf�geJMSZ\aDILekn������dimPUYMNSBBGCDIFGLDEJ]`f���chlDGLT\^EMQ]MQ�ji�ecoehXadJMR���Y]a_afcdjORWKNTMTYJNRFFICCG]`d���z�==BFGLAEK�VX�ki�ec�nrLQWNSZdjmkqtBBHABGPX]^ltScgIMPCDHJJNQTX�����JKPPSX_^d�__�jf�ca�st�_bjX[jsw���^eh=@EIPUQX^RW\UY]JNR@AEegn���v{FFLmuy�]_�ec�gd�ca�zx�zx�po�cg~����y��YZ^CEIEGKSUZejnMRUZ]b���osxADIm[_�_`�ca�ec�db�st�|}�zy�vt�gh�ot�����Ϣ��ehlEGLX]`PRVX[_���dek7<@�RT�b_�a_�`^�ca�ux�{~�|z�yv�{w�rp�ii�����������ntwDDIgjn���`cjSSW�^^�gd�b`�`^�b`�yv�wx�xu�|x�yu�vs�vs�oo�ii�km������FHMimq���QX_x`d�fe�fb�da�b`�ca�wu�rp�vt�us�tr�vs�ts�sr�po�uv�ml�x|V[_gin���OU[�Z\�fc�ea�db�ca�b`�zx�tq�vt�us�wt�vs�wt�sq�rr�st�sq�giTX\SVZ���fbg�ce�eb�ca�ec�db�ec�yu�ur�sq�sr�vs�xu�xs�tq�xt�ws�xt�ihKMRchm���]NP�ge�eb�ca�db�ec�fd�zv�sq�rq�sr�rp�xu�so�rp�tq�qn�uq�bcHIN\bgo|�wQU�jh�fd�ca�b`�ca�ec�zy�xt�tr�vs�sr�sr�tq�sp�rp�kj�mk�^^HLPLOTfqv�UV�jf�ec�db�b`�cb�ca�ss�{w�us�tr�ur�wt�tq�qo�ro�lj�on�ZZ=BFNNTRZ_�YY�ie�db�db�`_�_^�`_�ij�~|�vs�ur�sq�pn�qo�ol�ji�mj�qn�Z]CFL]_dLIN�aa�fb�ca�cb�a`�__�]^x_^�{x�ws�wt�sp�pn�po�lknZ^�lk�pmxXYDINkrwkUX�mj�db�fdX[�Y\�`_�]]�gi�vs�us�xu�tr�nk�lj�nk�jj�mk�kjlPR?CGGIP�bb�pm�fd�da�Y\�]]�b_�`_�ru�ml�ur�wu�tr�pk�lg�oi�oj�pl�kiaMO;@EPGI�kj�he�fd�fc�b`�a^�b`�_^
@@ -0,0 +1,27 @@
1
+ P1
2
+ 22 25
3
+ 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 1 1 1 1 1 1 1
4
+ 1 1 1 1 1 1 0 0 1 0 0 0 0 1 0 1 1 1 1 1 1 1
5
+ 1 1 1 1 1 1 0 0 0 0 0 0 1 0 1 0 1 1 1 1 1 0
6
+ 1 1 1 1 1 1 0 0 0 0 0 0 1 0 0 1 1 1 1 1 0 1
7
+ 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 0
8
+ 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 0 0 1 1
9
+ 1 1 1 1 1 1 0 0 0 1 1 1 1 0 0 1 1 1 1 1 0 1
10
+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0
11
+ 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
12
+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1
13
+ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 0 0 0
14
+ 0 1 0 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 1
15
+ 1 0 0 0 1 1 0 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1
16
+ 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 1 1 1 1
17
+ 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 1 1 1 0 1 1 0
18
+ 0 0 1 0 1 0 0 0 1 0 1 1 1 1 0 1 1 0 1 0 1 1
19
+ 1 0 0 1 0 1 0 0 1 0 0 1 1 1 0 1 1 1 0 1 1 0
20
+ 0 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 0 1 0 0 1
21
+ 1 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 0 1
22
+ 0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 0 0 1 1 1
23
+ 1 0 0 1 1 0 1 0 0 1 0 1 1 1 1 1 1 0 0 1 1 1
24
+ 1 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 1 1 1 0 1
25
+ 1 0 0 0 0 1 0 1 1 0 1 1 1 1 1 0 1 0 1 1 1 1
26
+ 1 0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 0 1 1 1 0 0
27
+ 1 0 0 1 0 0 1 0 1 0 1 1 1 1 1 1 1 1 0 1 1 0
@@ -0,0 +1,28 @@
1
+ P2
2
+ 22 25
3
+ 255
4
+ 77 74 81 78 85 93 129 129 115 127 195 145 123 169 147 89 82 104 135 109 76 109
5
+ 71 74 77 105 107 112 132 169 122 151 204 114 95 97 117 101 65 76 105 133 114 88
6
+ 114 94 106 90 109 122 165 164 178 187 197 151 88 134 122 130 107 121 93 107 128 127
7
+ 158 104 82 82 85 92 144 155 154 180 157 183 87 182 145 96 108 80 65 84 127 126
8
+ 124 78 78 72 72 87 80 69 74 93 99 157 116 160 139 61 85 118 141 115 124 127
9
+ 86 74 76 72 71 64 100 121 139 170 132 142 154 182 160 90 77 94 142 145 118 124
10
+ 75 83 74 69 81 103 137 170 158 116 91 90 71 123 173 94 66 72 69 110 120 123
11
+ 77 92 72 106 138 140 104 84 78 66 68 71 69 96 161 103 71 90 76 81 125 121
12
+ 103 95 77 134 92 97 100 82 78 83 77 70 67 96 185 126 61 71 69 95 127 121
13
+ 122 80 82 105 112 66 66 87 106 96 76 68 74 84 180 130 75 83 95 110 126 119
14
+ 131 105 92 113 140 100 64 79 87 86 88 77 65 103 189 122 70 116 103 122 123 119
15
+ 138 138 128 106 127 158 128 90 69 71 85 105 81 93 191 115 68 95 114 119 121 120
16
+ 124 142 140 137 115 115 168 205 169 104 71 92 82 91 185 101 59 93 119 117 116 119
17
+ 131 140 140 138 140 131 117 132 146 166 148 115 68 106 192 99 83 109 123 118 116 118
18
+ 138 137 137 140 138 135 136 129 123 119 138 140 72 108 178 87 101 123 122 120 118 119
19
+ 136 132 136 135 134 135 134 134 128 133 126 123 90 105 177 84 101 123 121 120 119 118
20
+ 138 134 136 135 136 135 136 133 131 132 134 113 87 86 163 99 116 121 119 121 120 121
21
+ 137 134 133 133 135 137 137 134 137 136 138 114 77 103 147 81 122 121 119 120 121 122
22
+ 139 133 132 132 129 137 132 132 134 131 135 108 73 97 122 89 126 122 119 118 119 121
23
+ 137 137 134 135 133 133 134 133 132 126 129 103 75 79 111 95 127 121 120 118 119 119
24
+ 126 140 135 134 134 136 134 131 133 127 131 99 65 78 89 101 126 120 120 117 116 117
25
+ 112 143 135 134 133 130 132 129 119 127 133 99 70 95 74 113 123 119 120 118 116 115
26
+ 100 139 136 136 133 131 132 120 95 127 132 95 72 113 90 128 120 122 97 104 118 114
27
+ 109 133 135 137 134 128 127 127 123 128 126 86 66 73 108 131 122 119 101 111 119 117
28
+ 123 123 135 136 134 130 127 129 129 130 126 81 63 73 124 124 122 122 119 117 118 116
@@ -0,0 +1,28 @@
1
+ P3
2
+ 22 25
3
+ 255
4
+ 74 77 82 71 74 79 78 81 86 75 78 83 82 86 90 89 94 98 123 130 133 124 130 134 111 115 121 122 128 133 189 196 199 141 146 149 118 124 128 162 170 173 141 148 152 85 89 95 79 82 84 141 94 95 205 116 115 162 95 98 96 70 72 156 96 97
5
+ 68 71 76 72 74 80 74 77 81 102 106 110 102 108 112 108 113 117 125 133 136 161 171 173 117 123 128 144 152 157 197 206 209 110 115 119 91 96 100 93 98 103 113 118 125 97 101 106 62 65 70 76 76 79 139 96 99 205 114 111 173 98 100 120 79 82
6
+ 108 115 118 90 95 99 99 107 110 83 91 94 105 109 114 119 122 127 158 166 169 156 166 167 170 180 181 180 188 191 190 198 201 145 153 155 85 89 93 129 135 138 117 123 127 126 131 136 103 108 111 115 122 126 88 94 98 150 95 94 205 108 105 200 108 107
7
+ 151 159 162 100 105 109 79 82 87 79 82 87 82 85 90 89 92 97 138 145 148 149 156 160 149 155 159 175 181 185 150 159 162 176 184 188 85 87 92 177 183 185 139 146 149 93 96 101 104 109 113 79 80 85 62 65 72 102 79 82 199 108 106 198 107 106
8
+ 118 125 128 75 78 83 75 79 82 69 73 76 69 73 77 84 88 91 76 81 85 65 69 74 72 74 79 90 93 97 95 100 105 151 158 164 109 117 122 154 161 164 137 139 144 61 60 66 83 85 90 114 118 124 133 143 149 125 112 116 192 106 104 199 108 105
9
+ 80 87 90 71 74 79 73 77 80 69 73 76 68 72 75 61 65 69 96 101 105 117 122 126 134 140 143 166 171 175 125 133 137 135 143 149 148 155 161 176 183 189 156 160 167 88 90 95 77 77 82 91 94 101 135 143 149 144 145 147 179 101 100 199 104 101
10
+ 72 75 80 80 83 87 70 75 78 65 70 73 77 82 86 96 104 107 130 138 141 163 171 174 151 159 162 110 117 120 87 92 96 86 91 95 67 72 76 117 124 131 166 174 183 91 94 100 66 66 71 68 72 77 66 69 74 111 109 114 179 104 102 200 103 101
11
+ 74 77 83 90 92 97 68 73 76 101 107 110 131 139 142 136 141 145 100 105 109 80 85 89 77 78 83 66 66 71 67 68 73 70 71 76 68 69 74 93 96 102 153 163 167 99 104 108 68 71 76 84 92 94 69 77 81 93 77 81 194 106 105 196 101 99
12
+ 111 101 104 88 97 100 74 77 82 128 135 139 89 93 97 95 97 102 99 100 106 79 82 87 75 78 84 77 84 89 74 78 82 70 70 73 67 67 71 93 96 100 177 187 188 122 127 131 61 61 66 70 71 76 65 69 75 129 86 88 204 107 105 196 101 99
13
+ 164 110 114 76 81 87 78 83 90 100 106 109 107 113 116 66 66 72 65 66 71 80 88 93 94 108 116 83 99 103 73 77 80 67 68 72 74 74 78 81 84 88 172 182 185 127 131 135 74 75 80 80 83 88 95 94 100 167 95 95 203 106 102 193 99 97
14
+ 188 115 116 139 95 98 106 88 91 106 115 119 131 142 144 94 101 104 61 64 69 73 80 85 81 88 94 82 87 92 85 89 93 74 78 82 64 65 69 101 103 110 182 190 196 118 123 127 70 70 76 109 117 121 137 93 95 199 101 99 197 103 100 194 99 97
15
+ 200 122 120 199 122 120 188 112 111 132 99 103 126 127 131 151 159 164 121 129 132 89 90 94 67 69 73 69 71 75 83 85 90 101 106 110 77 82 85 90 93 98 184 193 198 111 115 120 65 68 73 109 91 95 184 95 96 195 99 97 195 101 99 195 100 98
16
+ 159 115 116 207 124 125 205 122 121 206 118 116 159 103 104 130 111 116 170 167 171 197 207 207 162 171 174 101 104 108 69 71 76 88 93 96 80 82 86 88 91 95 178 187 192 100 101 107 55 60 64 133 82 84 197 98 95 191 97 95 191 96 94 194 99 97
17
+ 183 117 120 204 123 126 202 124 122 202 121 118 206 123 119 194 114 112 163 105 105 152 127 129 156 143 146 162 167 170 140 150 154 110 116 119 68 68 73 103 106 110 184 194 199 96 99 106 83 83 87 163 94 94 200 103 100 192 98 96 191 96 94 193 98 96
18
+ 204 121 118 201 119 120 201 120 117 202 124 120 200 121 117 201 118 115 204 118 115 197 111 111 189 105 105 165 107 109 150 135 138 132 142 148 70 72 77 105 109 113 169 180 185 81 88 95 120 96 100 199 102 101 198 102 98 194 100 97 193 98 96 194 99 97
19
+ 201 119 117 200 114 112 201 118 116 202 117 115 201 116 114 201 118 115 200 116 115 203 115 114 189 112 111 194 117 118 189 109 108 133 120 124 86 91 95 103 105 110 170 179 183 79 85 91 140 90 92 203 102 99 195 101 97 195 100 98 194 99 97 192 98 96
20
+ 200 122 120 201 116 113 202 118 116 201 117 115 200 119 116 199 118 115 201 119 116 202 115 113 193 114 114 193 115 116 206 115 113 147 103 105 84 88 92 83 86 90 153 165 167 102 98 103 176 99 101 198 101 98 194 99 97 196 101 99 195 100 98 195 101 99
21
+ 199 121 117 200 117 114 200 115 113 200 115 114 200 118 115 200 120 117 200 120 115 200 116 113 201 120 116 200 119 115 206 120 116 150 105 104 75 77 82 99 104 109 138 149 154 93 78 80 193 103 101 197 101 98 194 99 97 195 100 98 196 101 99 196 102 100
22
+ 202 122 118 199 115 113 201 114 113 196 115 114 187 114 112 200 120 117 198 115 111 200 114 112 201 116 113 198 113 110 204 117 113 143 98 99 72 73 78 92 98 103 111 124 129 119 81 85 202 106 104 198 102 100 194 99 97 193 98 96 194 99 97 195 101 99
23
+ 195 122 121 202 120 116 201 116 114 200 118 115 198 115 114 201 115 114 200 116 113 200 115 112 201 114 112 198 107 106 203 109 107 137 94 94 72 76 80 76 79 84 102 113 118 133 85 86 204 106 102 196 101 99 195 100 98 194 98 96 195 99 98 194 99 97
24
+ 167 115 115 206 123 119 200 117 115 201 116 114 200 117 114 201 119 116 201 116 113 199 113 111 205 114 111 199 108 106 205 111 110 132 90 90 61 66 70 78 78 84 82 90 95 147 89 89 204 105 101 196 100 98 195 100 98 194 96 95 195 95 94 195 96 95
25
+ 137 105 106 208 126 124 200 118 115 199 117 114 201 115 113 199 112 110 201 113 111 196 111 108 166 106 105 193 109 106 207 113 110 130 90 93 67 70 76 93 95 100 76 73 78 170 97 97 201 102 98 195 99 97 197 99 98 194 97 96 195 95 95 194 93 94
26
+ 120 95 94 201 123 120 200 119 115 199 119 116 199 115 112 200 112 110 205 112 111 167 108 107 110 90 94 198 108 107 205 112 109 120 88 89 68 73 78 107 114 119 107 85 88 199 109 106 196 100 98 196 102 100 127 88 91 158 89 92 199 96 95 193 93 93
27
+ 132 103 105 188 118 115 201 117 115 200 120 117 200 116 114 198 110 107 199 108 106 189 110 107 188 106 106 200 109 107 198 107 106 108 80 82 63 67 71 71 73 80 146 98 98 204 112 109 198 102 100 190 100 97 144 89 92 176 93 93 196 98 95 194 96 95
28
+ 154 114 117 176 109 108 203 117 114 201 119 117 201 116 114 199 112 107 198 108 103 197 111 105 199 111 106 199 112 108 196 107 105 97 77 79 59 64 69 80 71 73 188 107 106 197 104 101 196 102 100 195 102 99 199 98 96 194 97 94 193 98 96 194 95 94
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: image_size
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.2
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Keisuke Minami
8
8
  - Ivan Kuchin
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-07-14 00:00:00.000000000 Z
12
+ date: 2020-08-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -32,6 +32,9 @@ dependencies:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
34
  version: '0.59'
35
+ - - "!="
36
+ - !ruby/object:Gem::Version
37
+ version: 0.78.0
35
38
  type: :development
36
39
  prerelease: false
37
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -39,9 +42,12 @@ dependencies:
39
42
  - - "~>"
40
43
  - !ruby/object:Gem::Version
41
44
  version: '0.59'
42
- description: 'Measure following file dimensions: apng, bmp, cur, gif, jpeg, ico, mng,
43
- pbm, pcx, pgm, png, ppm, psd, swf, tiff, xbm, xpm, webp'
44
- email:
45
+ - - "!="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.78.0
48
+ description: 'Measure following file dimensions: apng, bmp, cur, gif, ico, j2c, jp2,
49
+ jpeg, jpx, mng, pam, pbm, pcx, pgm, png, ppm, psd, svg, swf, tiff, webp, xbm, xpm'
50
+ email:
45
51
  executables: []
46
52
  extensions: []
47
53
  extra_rdoc_files: []
@@ -56,38 +62,47 @@ files:
56
62
  - image_size.gemspec
57
63
  - lib/image_size.rb
58
64
  - spec/image_size_spec.rb
59
- - spec/images/apng/192x110.apng
60
65
  - spec/images/bmp/v2.42x50.bmp
61
66
  - spec/images/bmp/v3-bottom2top.42x50.bmp
62
67
  - spec/images/bmp/v3-top2bottom.42x50.bmp
63
- - spec/images/cur/50x256.cur
68
+ - spec/images/cur/32x256.cur
64
69
  - spec/images/gif/668x481.gif
65
- - spec/images/ico/256x27.ico
66
- - spec/images/jpeg/320x240.jpeg
67
- - spec/images/jpeg/extraneous-bytes.320x240.jpeg
68
- - spec/images/mng/612x132.mng
69
- - spec/images/pbm/85x55.pbm
70
+ - spec/images/ico/32x256.ico
71
+ - spec/images/jp2/163x402.jp2
72
+ - spec/images/jp2/176x373.jpx
73
+ - spec/images/jp2/224x293.j2c
74
+ - spec/images/jpeg/436x429.jpeg
75
+ - spec/images/jpeg/extraneous-bytes.436x429.jpeg
76
+ - spec/images/mng/61x42.mng
70
77
  - spec/images/pcx/70x60.pcx
71
- - spec/images/pgm/90x55.pgm
78
+ - spec/images/png/192x110.apng
72
79
  - spec/images/png/640x532.png
80
+ - spec/images/pnm/22x25.pam
81
+ - spec/images/pnm/22x25.pbm
82
+ - spec/images/pnm/22x25.pgm
83
+ - spec/images/pnm/22x25.ppm
84
+ - spec/images/pnm/ascii.22x25.pbm
85
+ - spec/images/pnm/ascii.22x25.pgm
86
+ - spec/images/pnm/ascii.22x25.ppm
73
87
  - spec/images/psd/16x20.psd
74
88
  - spec/images/svg/72x100.svg
75
89
  - spec/images/swf/450x200.swf
76
- - spec/images/tiff/48x64.tiff
90
+ - spec/images/tiff/big-endian.68x49.tiff
91
+ - spec/images/tiff/little-endian.40x68.tiff
77
92
  - spec/images/webp/extended.16x32.webp
78
93
  - spec/images/webp/lossless.16x32.webp
79
94
  - spec/images/webp/lossy.16x32.webp
80
95
  - spec/images/xbm/16x32.xbm
81
96
  - spec/images/xpm/24x32.xpm
82
- homepage: http://github.com/toy/image_size
97
+ homepage: https://github.com/toy/image_size
83
98
  licenses:
84
99
  - Ruby
85
100
  metadata:
86
101
  bug_tracker_uri: https://github.com/toy/image_size/issues
87
102
  changelog_uri: https://github.com/toy/image_size/blob/master/CHANGELOG.markdown
88
- documentation_uri: https://www.rubydoc.info/gems/image_size/2.0.2
103
+ documentation_uri: https://www.rubydoc.info/gems/image_size/2.1.0
89
104
  source_code_uri: https://github.com/toy/image_size
90
- post_install_message:
105
+ post_install_message:
91
106
  rdoc_options: []
92
107
  require_paths:
93
108
  - lib
@@ -102,30 +117,39 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
117
  - !ruby/object:Gem::Version
103
118
  version: '0'
104
119
  requirements: []
105
- rubygems_version: 3.0.3
106
- signing_key:
120
+ rubygems_version: 3.1.4
121
+ signing_key:
107
122
  specification_version: 4
108
123
  summary: Measure image size using pure Ruby
109
124
  test_files:
110
125
  - spec/image_size_spec.rb
111
- - spec/images/apng/192x110.apng
112
126
  - spec/images/bmp/v2.42x50.bmp
113
127
  - spec/images/bmp/v3-bottom2top.42x50.bmp
114
128
  - spec/images/bmp/v3-top2bottom.42x50.bmp
115
- - spec/images/cur/50x256.cur
129
+ - spec/images/cur/32x256.cur
116
130
  - spec/images/gif/668x481.gif
117
- - spec/images/ico/256x27.ico
118
- - spec/images/jpeg/320x240.jpeg
119
- - spec/images/jpeg/extraneous-bytes.320x240.jpeg
120
- - spec/images/mng/612x132.mng
121
- - spec/images/pbm/85x55.pbm
131
+ - spec/images/ico/32x256.ico
132
+ - spec/images/jp2/163x402.jp2
133
+ - spec/images/jp2/176x373.jpx
134
+ - spec/images/jp2/224x293.j2c
135
+ - spec/images/jpeg/436x429.jpeg
136
+ - spec/images/jpeg/extraneous-bytes.436x429.jpeg
137
+ - spec/images/mng/61x42.mng
122
138
  - spec/images/pcx/70x60.pcx
123
- - spec/images/pgm/90x55.pgm
139
+ - spec/images/png/192x110.apng
124
140
  - spec/images/png/640x532.png
141
+ - spec/images/pnm/22x25.pam
142
+ - spec/images/pnm/22x25.pbm
143
+ - spec/images/pnm/22x25.pgm
144
+ - spec/images/pnm/22x25.ppm
145
+ - spec/images/pnm/ascii.22x25.pbm
146
+ - spec/images/pnm/ascii.22x25.pgm
147
+ - spec/images/pnm/ascii.22x25.ppm
125
148
  - spec/images/psd/16x20.psd
126
149
  - spec/images/svg/72x100.svg
127
150
  - spec/images/swf/450x200.swf
128
- - spec/images/tiff/48x64.tiff
151
+ - spec/images/tiff/big-endian.68x49.tiff
152
+ - spec/images/tiff/little-endian.40x68.tiff
129
153
  - spec/images/webp/extended.16x32.webp
130
154
  - spec/images/webp/lossless.16x32.webp
131
155
  - spec/images/webp/lossy.16x32.webp
Binary file
Binary file
Binary file
Binary file
@@ -1,5 +0,0 @@
1
- P5
2
- #Created with The GIMP
3
- 90 55
4
- 255
5
- ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������
Binary file