sys-cpu 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5a8e944d3ba7367653fde3b252a10381b3e20871
4
+ data.tar.gz: 9791c3ff4bd7adcc847a67d7064517bd818e9f0f
5
+ SHA512:
6
+ metadata.gz: a71eca1b427859d7486637ca9016f209fad1c1cccce23b6c370ed0f33090b93077ec4946485621bfdeddd9d54c9a5852aa5c4ebfe5888921e38e8c17b7070dab
7
+ data.tar.gz: 86571ddb4165ba50cf9afa7c073d55b345cf36f4a6dceb56af67672ec209b01a1c6d7160da137c17233de79b09e379621cd425fd7fb5c3473abe17d09f589776
Binary file
Binary file
data/CHANGES CHANGED
@@ -1,3 +1,10 @@
1
+ == 0.7.2 - 5-Sep-2015
2
+ * Replaced a global array with a constant in the Linux version. Thanks go
3
+ to Yorick Peterse for the patch.
4
+ * Added method comments back to the Unix version.
5
+ * Added a sys-cpu.rb stub file for your convenience.
6
+ * This gem is now signed.
7
+
1
8
  == 0.7.1 - 2-May-2013
2
9
  * Added a workaround for a win32ole bug in the Windows version.
3
10
  * Reorganized code so that there is now a single gem rather than three
data/MANIFEST CHANGED
@@ -4,6 +4,7 @@
4
4
  * Rakefile
5
5
  * README
6
6
  * sys-cpu.gemspec
7
+ * certs/djberg96_pub.pem
7
8
  * doc/bsd.txt
8
9
  * doc/hpux.txt
9
10
  * doc/linux.txt
data/README CHANGED
@@ -61,7 +61,7 @@
61
61
  Artistic 2.0
62
62
 
63
63
  = Copyright
64
- (C) 2003-2013 Daniel J. Berger, All Rights Reserved
64
+ (C) 2003-2015 Daniel J. Berger, All Rights Reserved
65
65
 
66
66
  = Warranty
67
67
  This package is provided "as is" and without any express or
data/Rakefile CHANGED
@@ -9,14 +9,16 @@ CLEAN.include('**/*.gem', '**/*.rbc', '**/*.rbx')
9
9
  namespace 'gem' do
10
10
  desc "Create the sys-cpu gem"
11
11
  task :create => [:clean] do
12
+ require 'rubygems/package'
12
13
  spec = eval(IO.read('sys-cpu.gemspec'))
13
- Gem::Builder.new(spec).build
14
+ spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
15
+ Gem::Package.build(spec)
14
16
  end
15
17
 
16
18
  desc "Install the sys-cpu gem"
17
19
  task :install => [:create] do
18
20
  file = Dir["*.gem"].first
19
- sh "gem install #{file}"
21
+ sh "gem install -l #{file}"
20
22
  end
21
23
  end
22
24
 
@@ -0,0 +1,21 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
3
+ cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
4
+ MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
5
+ ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
6
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
7
+ Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
8
+ S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
9
+ gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
10
+ FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
11
+ zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
12
+ DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
13
+ nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
14
+ bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
15
+ ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
16
+ tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
17
+ /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
18
+ wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
19
+ EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
20
+ tGSHgAmcLlkdGgan182qsE/4kKM=
21
+ -----END CERTIFICATE-----
@@ -0,0 +1 @@
1
+ require_relative 'sys/cpu'
@@ -2,6 +2,13 @@
2
2
  # depending on which platform you're on.
3
3
  require 'rbconfig'
4
4
 
5
+ module Sys
6
+ class CPU
7
+ # The version of the sys-cpu gem.
8
+ VERSION = '0.7.2'
9
+ end
10
+ end
11
+
5
12
  case RbConfig::CONFIG['host_os']
6
13
  when /linux/i
7
14
  require File.join(File.dirname(__FILE__), 'linux', 'sys', 'cpu')
@@ -7,7 +7,7 @@ module Sys
7
7
 
8
8
  cpu_file = "/proc/cpuinfo"
9
9
  cpu_hash = {}
10
- $cpu_array = []
10
+ CPU_ARRAY = []
11
11
 
12
12
  # Parse the info out of the /proc/cpuinfo file
13
13
  IO.foreach(cpu_file){ |line|
@@ -21,7 +21,7 @@ module Sys
21
21
  val.strip! if val
22
22
 
23
23
  if cpu_hash.has_key?(key)
24
- $cpu_array.push(cpu_hash.dup)
24
+ CPU_ARRAY.push(cpu_hash.dup)
25
25
  cpu_hash.clear
26
26
  end
27
27
 
@@ -35,18 +35,15 @@ module Sys
35
35
  cpu_hash[key] = val
36
36
  }
37
37
 
38
- $cpu_array.push(cpu_hash)
38
+ CPU_ARRAY.push(cpu_hash)
39
39
 
40
40
  # :startdoc:
41
41
 
42
42
  class CPU
43
43
 
44
- # The version of the sys-cpu library.
45
- VERSION = '0.7.1'
46
-
47
44
  # :stopdoc:
48
45
 
49
- CPUStruct = Struct.new("CPUStruct", *$cpu_array.first.keys)
46
+ CPUStruct = Struct.new("CPUStruct", *CPU_ARRAY.first.keys)
50
47
 
51
48
  # :startdoc:
52
49
 
@@ -57,7 +54,7 @@ module Sys
57
54
  #
58
55
  def self.processors
59
56
  array = []
60
- $cpu_array.each{ |hash|
57
+ CPU_ARRAY.each{ |hash|
61
58
  struct = CPUStruct.new
62
59
  struct.members.each{ |m| struct.send("#{m}=", hash["#{m}"]) }
63
60
  if block_given?
@@ -74,10 +71,10 @@ module Sys
74
71
  # Create singleton methods for each of the attributes.
75
72
  #
76
73
  def self.method_missing(id, arg=0)
77
- rv = $cpu_array[arg][id.to_s]
74
+ rv = CPU_ARRAY[arg][id.to_s]
78
75
  if rv.nil?
79
76
  id = id.to_s + "?"
80
- rv = $cpu_array[arg][id]
77
+ rv = CPU_ARRAY[arg][id]
81
78
  end
82
79
  rv
83
80
  end
@@ -9,9 +9,6 @@ module Sys
9
9
  # Error raised if any of the CPU methods fail.
10
10
  class Error < StandardError; end
11
11
 
12
- # The version of the sys-cpu library
13
- VERSION = '0.7.1'
14
-
15
12
  CTL_HW = 6 # Generic hardware/cpu
16
13
 
17
14
  HW_MACHINE = 1 # Machine class
@@ -89,6 +86,10 @@ module Sys
89
86
  )
90
87
  end
91
88
 
89
+ # Returns the cpu's architecture. On most systems this will be identical
90
+ # to the CPU.machine method. On OpenBSD it will be identical to the CPU.model
91
+ # method.
92
+ #
92
93
  def self.architecture
93
94
  if respond_to?(:sysinfo, true)
94
95
  buf = 0.chr * 257
@@ -131,6 +132,10 @@ module Sys
131
132
  end
132
133
  end
133
134
 
135
+ # Returns the number of cpu's on your system. Note that each core on
136
+ # multi-core systems are counted as a cpu, e.g. one dual core cpu would
137
+ # return 2, not 1.
138
+ #
134
139
  def self.num_cpu
135
140
  if respond_to?(:sysctlbyname, true)
136
141
  optr = FFI::MemoryPointer.new(:long)
@@ -167,6 +172,10 @@ module Sys
167
172
  end
168
173
  end
169
174
 
175
+ # Returns the cpu's class type. On most systems this will be identical
176
+ # to the CPU.architecture method. On OpenBSD it will be identical to the
177
+ # CPU.model method.
178
+ #
170
179
  def self.machine
171
180
  if respond_to?(:sysctl, true)
172
181
  buf = 0.chr * 32
@@ -192,6 +201,8 @@ module Sys
192
201
  end
193
202
  end
194
203
 
204
+ # Returns a string indicating the cpu model.
205
+ #
195
206
  def self.model
196
207
  if RbConfig::CONFIG['host_os'] =~ /darwin/i
197
208
  ptr = FFI::MemoryPointer.new(:long)
@@ -242,6 +253,8 @@ module Sys
242
253
  end
243
254
  end
244
255
 
256
+ # Returns an integer indicating the speed of the CPU.
257
+ #
245
258
  def self.freq
246
259
  if respond_to?(:sysctlbyname, true)
247
260
  optr = FFI::MemoryPointer.new(:long)
@@ -291,6 +304,9 @@ module Sys
291
304
  end
292
305
  end
293
306
 
307
+ # Returns an array of three floats indicating the 1, 5 and 15 minute load
308
+ # average.
309
+ #
294
310
  def self.load_avg
295
311
  if respond_to?(:getloadavg, true)
296
312
  loadavg = FFI::MemoryPointer.new(:double, 3)
@@ -303,6 +319,10 @@ module Sys
303
319
  end
304
320
  end
305
321
 
322
+ # Returns the floating point processor type.
323
+ #
324
+ # Not supported on all platforms.
325
+ #
306
326
  def self.fpu_type
307
327
  raise NoMethodError unless respond_to?(:processor_info, true)
308
328
 
@@ -317,6 +337,11 @@ module Sys
317
337
  pinfo[:pi_fputypes].to_s
318
338
  end
319
339
 
340
+ # Returns the current state of processor +num+, or 0 if no number is
341
+ # specified.
342
+ #
343
+ # Not supported on all platforms.
344
+ #
320
345
  def self.state(num = 0)
321
346
  raise NoMethodError unless respond_to?(:processor_info, true)
322
347
 
@@ -17,9 +17,6 @@ module Sys
17
17
  # Error raised if any of the Sys::CPU methods fail.
18
18
  class Error < StandardError; end
19
19
 
20
- # The version of the sys-cpu library
21
- VERSION = '0.7.1'
22
-
23
20
  private
24
21
 
25
22
  # Base connect string
@@ -1,24 +1,26 @@
1
1
  require 'rubygems'
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = 'sys-cpu'
5
- spec.version = '0.7.1'
6
- spec.author = 'Daniel J. Berger'
7
- spec.email = 'djberg96 at nospam at gmail dot com'
8
- spec.homepage = 'https://github.com/djberg96/sys-cpu'
9
- spec.summary = 'A Ruby interface for providing CPU information'
10
- spec.test_file = 'test/test_sys_cpu.rb'
11
- spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
4
+ spec.name = 'sys-cpu'
5
+ spec.version = '0.7.2'
6
+ spec.author = 'Daniel J. Berger'
7
+ spec.email = 'djberg96 at nospam at gmail dot com'
8
+ spec.license = 'Artistic 2.0'
9
+ spec.homepage = 'https://github.com/djberg96/sys-cpu'
10
+ spec.summary = 'A Ruby interface for providing CPU information'
11
+ spec.test_file = 'test/test_sys_cpu.rb'
12
+ spec.files = Dir['**/*'].reject{ |f| f.include?('git') }
13
+ spec.cert_chain = ['certs/djberg96_pub.pem']
12
14
 
13
- spec.rubyforge_project = 'sysutils'
14
15
  spec.extra_rdoc_files = ['CHANGES', 'README', 'MANIFEST']
15
16
 
16
17
  # The ffi dependency is only relevent for the Unix version. Given the
17
18
  # ubiquity of ffi these days, I felt a bogus dependency on ffi for Windows
18
- # and Linux was worth the tradeoff of having to create 3 separate gems.
19
- spec.add_dependency('ffi', '>= 1.0.0')
19
+ # and Linux was worth the tradeoff of not having to create 3 separate gems.
20
+ spec.add_dependency('ffi')
20
21
 
21
- spec.add_development_dependency('test-unit', '>= 2.4.0')
22
+ spec.add_development_dependency('test-unit')
23
+ spec.add_development_dependency('rake')
22
24
 
23
25
  spec.description = <<-EOF
24
26
  The sys-cpu library provides an interface for gathering information
@@ -10,6 +10,6 @@ require 'test-unit'
10
10
 
11
11
  class TC_Sys_CPU_VERSION < Test::Unit::TestCase
12
12
  test "version number is set to the expected value" do
13
- assert_equal('0.7.1', Sys::CPU::VERSION)
13
+ assert_equal('0.7.2', Sys::CPU::VERSION)
14
14
  end
15
15
  end
metadata CHANGED
@@ -1,51 +1,83 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sys-cpu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
5
- prerelease:
4
+ version: 0.7.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Daniel J. Berger
9
8
  autorequire:
10
9
  bindir: bin
11
- cert_chain: []
12
- date: 2013-05-07 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDcDCCAligAwIBAgIBATANBgkqhkiG9w0BAQUFADA/MREwDwYDVQQDDAhkamJl
14
+ cmc5NjEVMBMGCgmSJomT8ixkARkWBWdtYWlsMRMwEQYKCZImiZPyLGQBGRYDY29t
15
+ MB4XDTE1MDkwMjIwNDkxOFoXDTE2MDkwMTIwNDkxOFowPzERMA8GA1UEAwwIZGpi
16
+ ZXJnOTYxFTATBgoJkiaJk/IsZAEZFgVnbWFpbDETMBEGCgmSJomT8ixkARkWA2Nv
17
+ bTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMyTkvXqRp6hLs9eoJOS
18
+ Hmi8kRYbq9Vkf15/hMxJpotYMgJVHHWrmDcC5Dye2PbnXjTkKf266Zw0PtT9h+lI
19
+ S3ts9HO+vaCFSMwFFZmnWJSpQ3CNw2RcHxjWkk9yF7imEM8Kz9ojhiDXzBetdV6M
20
+ gr0lV/alUr7TNVBDngbXEfTWscyXh1qd7xZ4EcOdsDktCe5G45N/o3662tPQvJsi
21
+ FOF0CM/KuBsa/HL1/eoEmF4B3EKIRfTHrQ3hu20Kv3RJ88QM4ec2+0dd97uX693O
22
+ zv6981fyEg+aXLkxrkViM/tz2qR2ZE0jPhHTREPYeMEgptRkTmWSKAuLVWrJEfgl
23
+ DtkCAwEAAaN3MHUwCQYDVR0TBAIwADALBgNVHQ8EBAMCBLAwHQYDVR0OBBYEFEwe
24
+ nn6bfJADmuIDiMSOzedOrL+xMB0GA1UdEQQWMBSBEmRqYmVyZzk2QGdtYWlsLmNv
25
+ bTAdBgNVHRIEFjAUgRJkamJlcmc5NkBnbWFpbC5jb20wDQYJKoZIhvcNAQEFBQAD
26
+ ggEBAHmNOCWoDVD75zHFueY0viwGDVP1BNGFC+yXcb7u2GlK+nEMCORqzURbYPf7
27
+ tL+/hzmePIRz7i30UM//64GI1NLv9jl7nIwjhPpXpf7/lu2I9hOTsvwSumb5UiKC
28
+ /sqBxI3sfj9pr79Wpv4MuikX1XPik7Ncb7NPsJPw06Lvyc3Hkg5X2XpPtLtS+Gr2
29
+ wKJnmzb5rIPS1cmsqv0M9LPWflzfwoZ/SpnmhagP+g05p8bRNKjZSA2iImM/GyYZ
30
+ EJYzxdPOrx2n6NYR3Hk+vHP0U7UBSveI6+qx+ndQYaeyCn+GRX2PKS9h66YF/Q1V
31
+ tGSHgAmcLlkdGgan182qsE/4kKM=
32
+ -----END CERTIFICATE-----
33
+ date: 2015-09-05 00:00:00.000000000 Z
13
34
  dependencies:
14
35
  - !ruby/object:Gem::Dependency
15
36
  name: ffi
16
37
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
38
  requirements:
19
- - - ! '>='
39
+ - - ">="
20
40
  - !ruby/object:Gem::Version
21
- version: 1.0.0
41
+ version: '0'
22
42
  type: :runtime
23
43
  prerelease: false
24
44
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
45
  requirements:
27
- - - ! '>='
46
+ - - ">="
28
47
  - !ruby/object:Gem::Version
29
- version: 1.0.0
48
+ version: '0'
30
49
  - !ruby/object:Gem::Dependency
31
50
  name: test-unit
32
51
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
52
  requirements:
35
- - - ! '>='
53
+ - - ">="
36
54
  - !ruby/object:Gem::Version
37
- version: 2.4.0
55
+ version: '0'
38
56
  type: :development
39
57
  prerelease: false
40
58
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
59
  requirements:
43
- - - ! '>='
60
+ - - ">="
44
61
  - !ruby/object:Gem::Version
45
- version: 2.4.0
46
- description: ! " The sys-cpu library provides an interface for gathering information\n
47
- \ about your system's processor(s). Information includes speed, type,\n and
48
- load average.\n"
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ name: rake
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ description: |2
78
+ The sys-cpu library provides an interface for gathering information
79
+ about your system's processor(s). Information includes speed, type,
80
+ and load average.
49
81
  email: djberg96 at nospam at gmail dot com
50
82
  executables: []
51
83
  extensions: []
@@ -54,56 +86,58 @@ extra_rdoc_files:
54
86
  - README
55
87
  - MANIFEST
56
88
  files:
57
- - doc/windows.txt
58
- - doc/sunos.txt
89
+ - CHANGES
90
+ - MANIFEST
91
+ - README
92
+ - Rakefile
93
+ - certs/djberg96_pub.pem
59
94
  - doc/bsd.txt
60
95
  - doc/hpux.txt
61
96
  - doc/linux.txt
62
- - test/test_sys_cpu_version.rb
63
- - test/test_sys_cpu_linux.rb
64
- - test/test_sys_cpu_windows.rb
65
- - test/test_sys_cpu_bsd.rb
66
- - test/test_sys_cpu.rb
67
- - test/test_sys_cpu_sunos.rb
68
- - test/test_sys_cpu_hpux.rb
69
- - Rakefile
70
- - MANIFEST
71
- - CHANGES
72
- - sys-cpu.gemspec
97
+ - doc/sunos.txt
98
+ - doc/windows.txt
99
+ - examples/example_sys_cpu_bsd.rb
100
+ - examples/example_sys_cpu_hpux.rb
101
+ - examples/example_sys_cpu_linux.rb
102
+ - examples/example_sys_cpu_sunos.rb
103
+ - examples/example_sys_cpu_windows.rb
104
+ - install.rb
105
+ - lib/sys-cpu.rb
73
106
  - lib/sys/cpu.rb
74
- - lib/sys/unix/sys/cpu.rb
75
107
  - lib/sys/linux/sys/cpu.rb
108
+ - lib/sys/unix/sys/cpu.rb
76
109
  - lib/sys/windows/sys/cpu.rb
77
- - install.rb
78
- - README
79
- - examples/example_sys_cpu_windows.rb
80
- - examples/example_sys_cpu_hpux.rb
81
- - examples/example_sys_cpu_sunos.rb
82
- - examples/example_sys_cpu_linux.rb
83
- - examples/example_sys_cpu_bsd.rb
110
+ - sys-cpu.gemspec
111
+ - test/test_sys_cpu.rb
112
+ - test/test_sys_cpu_bsd.rb
113
+ - test/test_sys_cpu_hpux.rb
114
+ - test/test_sys_cpu_linux.rb
115
+ - test/test_sys_cpu_sunos.rb
116
+ - test/test_sys_cpu_version.rb
117
+ - test/test_sys_cpu_windows.rb
84
118
  homepage: https://github.com/djberg96/sys-cpu
85
- licenses: []
119
+ licenses:
120
+ - Artistic 2.0
121
+ metadata: {}
86
122
  post_install_message:
87
123
  rdoc_options: []
88
124
  require_paths:
89
125
  - lib
90
126
  required_ruby_version: !ruby/object:Gem::Requirement
91
- none: false
92
127
  requirements:
93
- - - ! '>='
128
+ - - ">="
94
129
  - !ruby/object:Gem::Version
95
130
  version: '0'
96
131
  required_rubygems_version: !ruby/object:Gem::Requirement
97
- none: false
98
132
  requirements:
99
- - - ! '>='
133
+ - - ">="
100
134
  - !ruby/object:Gem::Version
101
135
  version: '0'
102
136
  requirements: []
103
- rubyforge_project: sysutils
104
- rubygems_version: 1.8.23
137
+ rubyforge_project:
138
+ rubygems_version: 2.4.5
105
139
  signing_key:
106
- specification_version: 3
140
+ specification_version: 4
107
141
  summary: A Ruby interface for providing CPU information
108
142
  test_files:
109
143
  - test/test_sys_cpu.rb
@@ -0,0 +1,2 @@
1
+ U��2�����kKl h��k�Qp��`�����V~�1���8m�'9�=:�x���L��!c�
2
+ �ڢ%��c�U5����<�¶6�