wavefront-cli 8.5.0 → 8.5.1

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: 363b1be94331165aacf1538c797d07bdbefda71e801335bb4e35df97cb0bd950
4
- data.tar.gz: 5563b27f93c679dde5947c220d80c37816ba6faf8844d08111cbf7dcc65a76c1
3
+ metadata.gz: 5f464387b5dfcc05cdec2af09eaf006ff9544d880185a21fc787ba25b2d1686c
4
+ data.tar.gz: c90b1bd9e45e9aadcf4374dea2a3c8794c8560e371e5d597aad88f95ffcd813f
5
5
  SHA512:
6
- metadata.gz: ce61f68ba09a6ba395143fa92abeadcdb0de127f8991fe61b979ae49379d026973c5d47a09d6d4f0b306006a15f95a717cac02160af0b727f2858ba66a9fddae
7
- data.tar.gz: 111d9d52a0e0c3955164e1872198531b9e2bd61184dc430050029efdf8d19f9cd845885a7f1d5d5685d03dbf7de0845453d95f888e13eb0195b83fd25437116d
6
+ metadata.gz: 24fb5ca35864e6624905e311430c73c16c5581d909f12af1e6183fac5e9717245c770a3bfcc552d60c78f63a43c077e38e43c7ce78317a71af9de535de5952b9
7
+ data.tar.gz: 55ab4e7a41e3139141d018be4c71505e66d42a9ead87a006c5a39eb7c50a342257ef706cef24680523a08b7a8a865f59ef391958d5556bad2c7d9a18e186e053
@@ -0,0 +1,37 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - '[0-9]+.[0-9]+.[0-9]+'
7
+
8
+ jobs:
9
+ build:
10
+ name: Build + Publish
11
+ runs-on: ubuntu-latest
12
+
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: Set env
16
+ run: echo "RELEASE_VERSION=$(echo ${GITHUB_REF:10})" >> $GITHUB_ENV
17
+
18
+ - name: Set up Ruby 2.7
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: 2.7
22
+ - run: bundle install
23
+
24
+ - name: Run tests
25
+ run: bundle exec rake
26
+
27
+ - name: Build Gem
28
+ run: bundle exec rake build
29
+
30
+ - name: Publish to RubyGems
31
+ run: |
32
+ mkdir -p ${HOME}/.gem
33
+ echo -e "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}" >${HOME}/.gem/credentials
34
+ chmod 0600 ${HOME}/.gem/credentials
35
+ gem push pkg/*.gem
36
+ env:
37
+ GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
@@ -0,0 +1,23 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches-ignore: release
6
+
7
+ jobs:
8
+ test:
9
+ runs-on: ubuntu-latest
10
+ strategy:
11
+ matrix:
12
+ ruby-version: [2.5.8, 2.6.6, 2.7.2]
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - name: Set up Ruby
16
+ uses: ruby/setup-ruby@v1
17
+ with:
18
+ ruby-version: ${{ matrix.ruby-version }}
19
+ bundler-cache: true
20
+ - name: Install dependencies
21
+ run: bundle install
22
+ - name: Run tests
23
+ run: bundle exec rake
@@ -1,19 +1,23 @@
1
1
  ---
2
-
3
2
  AllCops:
4
3
  TargetRubyVersion: 2.5
5
4
  NewCops: enable
6
5
 
6
+ require:
7
+ - rubocop-rake
8
+ - rubocop-minitest
9
+ - rubocop-performance
10
+ - rubocop-performance
11
+
12
+ Layout/LineLength:
13
+ Max: 80 # Is nothing sacred?
7
14
  Metrics/ClassLength:
8
15
  Max: 400
9
-
16
+ Naming/VariableNumber:
17
+ Enabled: false
10
18
  Style/IfUnlessModifier:
11
19
  Enabled: false # because it wants to make lines >80 chars
12
20
  Style/StringConcatenation:
13
21
  Enabled: false
14
22
  Style/OptionalBooleanParameter:
15
23
  Enabled: false
16
-
17
- # Is nothing sacred?
18
- Layout/LineLength:
19
- Max: 80
data/HISTORY.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Changelog
2
2
 
3
+ ## 8.5.1 (2021-01-28)
4
+ * Fix stack trace when specifying an invalid time such as `Sunday`.
5
+
3
6
  ## 8.5.0 (2021-01-12)
4
7
  * Allow attachment of roles and ingestion policies when creating service
5
8
  accounts.
@@ -1,19 +1,8 @@
1
1
  ---
2
- AllCops:
3
- NewCops: enable
2
+ inherit_from:
3
+ - ../../../.rubocop.yml
4
4
 
5
5
  # There are long things in here, but they're fine
6
6
  #
7
7
  Metrics/MethodLength:
8
8
  Max: 25
9
-
10
- # Is nothing sacred?
11
- Layout/LineLength:
12
- Max: 80
13
-
14
- Style/IfUnlessModifier:
15
- Enabled: false # because it wants to make lines >80 chars
16
- Style/StringConcatenation:
17
- Enabled: false
18
- Style/OptionalBooleanParameter:
19
- Enabled: false
@@ -399,9 +399,10 @@ module WavefrontDisplay
399
399
  # @return [String, String] DateTime formatter, strptime formatter
400
400
  #
401
401
  def time_formats(str)
402
- if str =~ /^\d{13}$/
402
+ case str
403
+ when /^\d{13}$/
403
404
  ['%Q', HUMAN_TIME_FORMAT_MS]
404
- elsif str =~ /^\d{10}$/
405
+ when /^\d{10}$/
405
406
  ['%s', HUMAN_TIME_FORMAT]
406
407
  else
407
408
  raise ArgumentError
@@ -39,7 +39,7 @@ class WavefrontSparkline
39
39
  return vals if vals.size < SPARK_WIDTH
40
40
 
41
41
  vals.<< vals.last if vals.size.odd?
42
- ret = vals.each_slice(2).with_object([]) { |s, a| a.<< s.inject(:+) / 2 }
42
+ ret = vals.each_slice(2).with_object([]) { |s, a| a.<< s.sum / 2 }
43
43
  make_fit(ret)
44
44
  end
45
45
 
@@ -41,7 +41,7 @@ module WavefrontCli
41
41
  end
42
42
 
43
43
  def event_file(id)
44
- id =~ /^\d{13}:.+/ ? dir + id : nil
44
+ /^\d{13}:.+/.match?(id) ? dir + id : nil
45
45
  end
46
46
 
47
47
  # We can override the temp directory with the WF_EVENT_STATE_DIR env var.
@@ -70,7 +70,7 @@ module WavefrontCli
70
70
  def event(id)
71
71
  if !id
72
72
  pop_event!
73
- elsif id =~ /^\d{13}:.+:\d+/
73
+ elsif /^\d{13}:.+:\d+/.match?(id)
74
74
  id
75
75
  else
76
76
  pop_event!(id)
@@ -7,26 +7,47 @@ module WavefrontCli
7
7
  #
8
8
  class Exception
9
9
  class CredentialError < RuntimeError; end
10
+
10
11
  class MandatoryValue < RuntimeError; end
12
+
11
13
  class ConfigFileNotFound < IOError; end
14
+
12
15
  class FileNotFound < IOError; end
16
+
13
17
  class ImpossibleSearch < RuntimeError; end
18
+
14
19
  class InsufficientData < RuntimeError; end
20
+
15
21
  class InvalidInput < RuntimeError; end
22
+
16
23
  class InvalidQuery < RuntimeError; end
24
+
17
25
  class InvalidValue < RuntimeError; end
26
+
18
27
  class ProfileExists < RuntimeError; end
28
+
19
29
  class ProfileNotFound < RuntimeError; end
30
+
20
31
  class SystemError < RuntimeError; end
32
+
21
33
  class UnhandledCommand < RuntimeError; end
34
+
22
35
  class UnparseableInput < RuntimeError; end
36
+
23
37
  class UnparseableResponse < RuntimeError; end
38
+
24
39
  class UnparseableSearchPattern < RuntimeError; end
40
+
25
41
  class UnsupportedFileFormat < RuntimeError; end
42
+
26
43
  class UnsupportedNoop < RuntimeError; end
44
+
27
45
  class UnsupportedOperation < RuntimeError; end
46
+
28
47
  class UnsupportedOutput < RuntimeError; end
48
+
29
49
  class UserGroupNotFound < RuntimeError; end
50
+
30
51
  class UserError < RuntimeError; end
31
52
  end
32
53
  end
@@ -8,6 +8,7 @@ module WavefrontCli
8
8
  # rubocop:disable Metrics/MethodLength
9
9
  # rubocop:disable Metrics/AbcSize
10
10
  # rubocop:disable Metrics/CyclomaticComplexity
11
+ # rubocop:disable Metrics/PerceivedComplexity
11
12
  def exception_handler(exception)
12
13
  case exception
13
14
  when WavefrontCli::Exception::UnhandledCommand
@@ -26,6 +27,8 @@ module WavefrontCli
26
27
  abort 'Connection timed out.'
27
28
  when Wavefront::Exception::InvalidPermission
28
29
  abort "'#{exception}' is not a valid Wavefront permission."
30
+ when Wavefront::Exception::InvalidTimestamp
31
+ abort "'#{exception}' is not a parseable time."
29
32
  when Wavefront::Exception::InvalidUserGroupId
30
33
  abort "'#{exception}' is not a valid user group ID."
31
34
  when Wavefront::Exception::InvalidAccountId
@@ -80,6 +83,7 @@ module WavefrontCli
80
83
  abort
81
84
  end
82
85
  end
86
+ # rubocop:enable Metrics/PerceivedComplexity
83
87
  # rubocop:enable Metrics/MethodLength
84
88
  # rubocop:enable Metrics/AbcSize
85
89
  # rubocop:enable Metrics/CyclomaticComplexity
@@ -29,7 +29,7 @@ module WavefrontCli
29
29
 
30
30
  def initialize(cli_opts = {})
31
31
  cred_opts = setup_cred_opts(cli_opts)
32
- cli_opts.reject! { |_k, v| v.nil? }
32
+ cli_opts.compact!
33
33
  @opts = DEFAULT_OPTS.merge(load_profile(cred_opts)).merge(cli_opts)
34
34
  rescue WavefrontCli::Exception::ConfigFileNotFound => e
35
35
  abort "Configuration file '#{e}' not found."
@@ -126,7 +126,7 @@ module WavefrontCli
126
126
  end
127
127
  end
128
128
 
129
- def handle_errcode_404(_status)
129
+ def handle_errcode404(_status)
130
130
  'Perhaps metric does not exist for given host.'
131
131
  end
132
132
  end
@@ -7,6 +7,8 @@ module WavefrontCli
7
7
  # CLI coverage for the v2 'settings' API.
8
8
  #
9
9
  class Settings < WavefrontCli::Base
10
+ JOBS = %w[invitePermissions defaultUserGroups].freeze
11
+
10
12
  def do_list_permissions
11
13
  wf.permissions
12
14
  end
@@ -24,10 +26,7 @@ module WavefrontCli
24
26
  k, v = o.split('=', 2)
25
27
  next unless v && !v.empty?
26
28
 
27
- if %w[invitePermissions defaultUserGroups].include?(k)
28
- v = v.include?(',') ? v.split(',') : [v]
29
- end
30
-
29
+ v = v.include?(',') ? v.split(',') : [v] if JOBS.include?(k)
31
30
  a[k] = v
32
31
  end
33
32
 
@@ -50,7 +50,7 @@ class String
50
50
  # undesirable line breaking. This puts it back
51
51
  #
52
52
  def restored
53
- tr('^', ' ').chomp("\n")
53
+ tr('^', ' ').chomp
54
54
  end
55
55
 
56
56
  # Fold long value lines in two-column output. The returned string
@@ -1,3 +1,3 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- WF_CLI_VERSION = '8.5.0'
3
+ WF_CLI_VERSION = '8.5.1'
@@ -375,7 +375,7 @@ module WavefrontCli
375
375
  end
376
376
 
377
377
  def format_string_is_all_valid_chars?(fmt)
378
- return true if fmt =~ /^[dmstTv]+$/
378
+ return true if /^[dmstTv]+$/.match?(fmt)
379
379
 
380
380
  raise(WavefrontCli::Exception::UnparseableInput,
381
381
  'unsupported field in format string')
@@ -1,23 +1,8 @@
1
1
  ---
2
- AllCops:
3
- NewCops: enable
2
+ inherit_from:
3
+ - ../.rubocop.yml
4
4
 
5
5
  Metrics/MethodLength:
6
6
  Max: 30
7
-
8
7
  Metrics/AbcSize:
9
8
  Max: 45
10
-
11
- Metrics/ClassLength:
12
- Max: 300
13
-
14
- # Is nothing sacred?
15
- Layout/LineLength:
16
- Max: 80
17
-
18
- Style/IfUnlessModifier:
19
- Enabled: false # because it wants to make lines >80 chars
20
- Style/StringConcatenation:
21
- Enabled: false
22
- Style/OptionalBooleanParameter:
23
- Enabled: false
@@ -214,9 +214,9 @@ module Minitest
214
214
  private
215
215
 
216
216
  def mk_headers(token = nil)
217
- { 'Accept': /.*/,
217
+ { Accept: /.*/,
218
218
  'Accept-Encoding': /.*/,
219
- 'Authorization': 'Bearer ' + (token || '0123456789-ABCDEF'),
219
+ Authorization: 'Bearer ' + (token || '0123456789-ABCDEF'),
220
220
  'User-Agent': "wavefront-cli-#{WF_CLI_VERSION}" }
221
221
  end
222
222
 
@@ -72,7 +72,7 @@ class WavefrontCommmandBaseTest < MiniTest::Test
72
72
  next if skip_cmd && c.match(skip_cmd)
73
73
 
74
74
  assert_match(/^ \w+/, c)
75
- assert_includes(c, CMN) unless c =~ /--help$/
75
+ assert_includes(c, CMN) unless /--help$/.match?(c)
76
76
  end
77
77
  end
78
78
 
@@ -88,7 +88,7 @@ class WavefrontCommmandBaseTest < MiniTest::Test
88
88
  refute o.end_with?('.')
89
89
  end
90
90
 
91
- assert_equal(1, wf.options.split("\n").select(&:empty?).size)
91
+ assert_equal(1, wf.options.split("\n").count(&:empty?))
92
92
  end
93
93
 
94
94
  def test_opt_row
@@ -28,7 +28,7 @@ class WavefrontCommmandConfigTest < WavefrontCommmandBaseTest
28
28
  refute o.end_with?('.')
29
29
  end
30
30
 
31
- assert_equal(wf.options.split("\n").select(&:empty?).size, 0)
31
+ assert_equal(wf.options.split("\n").count(&:empty?), 0)
32
32
  end
33
33
 
34
34
  def test_commands
@@ -52,6 +52,7 @@ class WavefrontCliHelpTest < MiniTest::Test
52
52
  end
53
53
  end
54
54
 
55
+ # rubocop:disable Style/RedundantBegin
55
56
  def test_command_help
56
57
  SupportedCommands.new.all.each do |cmd|
57
58
  begin
@@ -66,6 +67,7 @@ class WavefrontCliHelpTest < MiniTest::Test
66
67
  end
67
68
  end
68
69
  end
70
+ # rubocop:enable Style/RedundantBegin
69
71
 
70
72
  def test_malformed_config
71
73
  capture_io do
@@ -19,7 +19,7 @@ class OptHandlerTest < MiniTest::Test
19
19
  x = WavefrontCli::OptHandler.new
20
20
  assert x.is_a?(WavefrontCli::OptHandler)
21
21
  assert x.opts.is_a?(Hash)
22
- assert x.opts.keys.include?(:endpoint)
22
+ assert x.opts.key?(:endpoint)
23
23
  end
24
24
 
25
25
  def test_missing_config
@@ -36,7 +36,7 @@ class OptHandlerTest < MiniTest::Test
36
36
  o = x.opts
37
37
  assert x.is_a?(WavefrontCli::OptHandler)
38
38
  assert o.is_a?(Hash)
39
- refute o.keys.include?(:token)
39
+ refute o.key?(:token)
40
40
  assert_equal(o[:endpoint], 'metrics.wavefront.com')
41
41
  end
42
42
 
@@ -52,7 +52,7 @@ class OptHandlerTest < MiniTest::Test
52
52
  assert_equal(o[:token], 'abcd1234')
53
53
  assert_nil o[:config]
54
54
  assert_equal(o[:endpoint], 'myendpoint.wavefront.com')
55
- refute o.keys.include?(:proxy)
55
+ refute o.key?(:proxy)
56
56
  ENV['WAVEFRONT_TOKEN'] = nil
57
57
  ENV['WAVEFRONT_ENDPOINT'] = nil
58
58
  end
@@ -6,7 +6,6 @@ require_relative '../../lib/wavefront-cli/serviceaccount'
6
6
 
7
7
  # Ensure 'serviceaccount' commands produce the correct API calls.
8
8
  #
9
- # rubocop:disable Metrics/ClassLength
10
9
  class ServiceAccountEndToEndTest < EndToEndTest
11
10
  include WavefrontCliTest::Describe
12
11
  # include WavefrontCliTest::Import
@@ -430,4 +429,3 @@ class ServiceAccountEndToEndTest < EndToEndTest
430
429
  identifier: 'sa::test' }
431
430
  end
432
431
  end
433
- # rubocop:enable Metrics/ClassLength
@@ -30,7 +30,10 @@ Gem::Specification.new do |gem|
30
30
 
31
31
  gem.add_development_dependency 'minitest', '~> 5.14'
32
32
  gem.add_development_dependency 'rake', '~> 13.0'
33
- gem.add_development_dependency 'rubocop', '0.91.0'
33
+ gem.add_development_dependency 'rubocop', '~> 1.9'
34
+ gem.add_development_dependency 'rubocop-minitest', '~> 0.10'
35
+ gem.add_development_dependency 'rubocop-performance', '~> 1.3'
36
+ gem.add_development_dependency 'rubocop-rake', '~> 0.5'
34
37
  gem.add_development_dependency 'spy', '~> 1.0.0'
35
38
  gem.add_development_dependency 'webmock', '~> 3.8'
36
39
  gem.add_development_dependency 'yard', '~> 0.9.5'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wavefront-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.5.0
4
+ version: 8.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Fisher
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-01-12 00:00:00.000000000 Z
11
+ date: 2021-01-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docopt
@@ -90,16 +90,58 @@ dependencies:
90
90
  name: rubocop
91
91
  requirement: !ruby/object:Gem::Requirement
92
92
  requirements:
93
- - - '='
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '1.9'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '1.9'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rubocop-minitest
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
94
108
  - !ruby/object:Gem::Version
95
- version: 0.91.0
109
+ version: '0.10'
96
110
  type: :development
97
111
  prerelease: false
98
112
  version_requirements: !ruby/object:Gem::Requirement
99
113
  requirements:
100
- - - '='
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '0.10'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rubocop-performance
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '1.3'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '1.3'
131
+ - !ruby/object:Gem::Dependency
132
+ name: rubocop-rake
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '0.5'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
101
143
  - !ruby/object:Gem::Version
102
- version: 0.91.0
144
+ version: '0.5'
103
145
  - !ruby/object:Gem::Dependency
104
146
  name: spy
105
147
  requirement: !ruby/object:Gem::Requirement
@@ -150,9 +192,10 @@ extensions: []
150
192
  extra_rdoc_files: []
151
193
  files:
152
194
  - ".codeclimate.yml"
195
+ - ".github/workflows/release.yml"
196
+ - ".github/workflows/test.yml"
153
197
  - ".gitignore"
154
198
  - ".rubocop.yml"
155
- - ".travis.yml"
156
199
  - Gemfile
157
200
  - HISTORY.md
158
201
  - LICENSE.txt
@@ -411,7 +454,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
411
454
  - !ruby/object:Gem::Version
412
455
  version: '0'
413
456
  requirements: []
414
- rubygems_version: 3.0.8
457
+ rubygems_version: 3.1.4
415
458
  signing_key:
416
459
  specification_version: 4
417
460
  summary: CLI for Wavefront API v2
@@ -1,20 +0,0 @@
1
- language: ruby
2
- cache: bundler
3
- rvm:
4
- - 2.5.8
5
- - 2.6.6
6
- - 2.7.1
7
- before_install: gem install bundler --no-document
8
- deploy:
9
- provider: rubygems
10
- api_key:
11
- secure: dpVC480pAmGQrkEeugPowxhYzM8Er9UDhY02u2P5ytrCXC9J05uGKvN8uZ6H8SJr1ZKUb7OGxCq+EVKrA/q1s6Cv07Xl9u1HiOR0cB4ZUW3wBl6TGdl7c/rcor5AQxjELTcWnhCJvTzB+i46a1s4AcWjGBIVEY7/b1iloj/Sm0U43UZPcWPaIl5xfnANBk6v9F5eEfQy5IXlQUQKtRLXzgyqwyJi7DQcNcnEXA0O33KKwka7QDQsycYE7axEiJGOBt0PbYiRUXRZBxKWnsrtq9Sk9QukYsZSQqZgkykV6ImvMYzWI/vUwDRl+dJWmyAG6K2mz4kqMjhiMkB4ctbj5sxDG1BzsBlNTTEb0P8PGBEYgcf4VBd7XDlEt0Sythp6ztn9EVtw35M22n5Q7sdgalf6TFrzQpp9sec3o4AqO3IXUIqRN4VD4vPRQVBJHcwFOuZ3EUO0VekUzCUO3R/mG4oHUIQ9VgRzrUuyYpCwuwWyoVKVA/AukHHW6Y7El2g+JlpP+ijf0ABpqusHENELVWnuCRcv36sxbyM6Rbt2JrT9FrG1oSAELz4yMS86Qhq104II89d6apGJT3thUH8n9m2KA16DmxQYXkNamfygCn3D5ogC2gcIgVicQnJma+405Pv43/a+PaKy/oKr3/H7IJJmoqHfiMyG9DtkFTWQrfA=
12
- gem: wavefront-cli
13
- on:
14
- tags: true
15
- repo: snltd/wavefront-cli
16
- ruby: 2.6.6
17
- notifications:
18
- email: false
19
- slack:
20
- secure: YrwfBiBscjUCHZIyPHH/FEm5VbHZN3AczHnlOJfETsAdsVpM+JOvHnoCaY0AGjvCvmFMPE9yg11yhwMfXZJVwjAC6b75VrXoCFIvC1tjLqFizuI4VBZXUZk3CQZK0pIh1ZRYVINa0LuYLDyxF0EG2N9KTYqQcMEsBwsVohsca+zjbjyIW5H0FeVWJC4QlFqVHBwFHvylfHnPjh0pQAn3sE9j7Of3W2HQVM753/lsOkMf3sHYOv8AOrzjTNqyrageTxUGnO91S41DirNdesrjF8Qg+/s1RSiNeYSZLkqI2pk+3sdkMkpA+2z2zQ/ZbgudS/38AVlh2Wb2KkmFw0+XhdpUGqQZgLlgWMDKoiS7j2dNQ3zA4guCZIQSW6gqR76wTUqeCZQ3UNalChAhACFnG0FmZj+AIE72r28dOH747zKEmTaoJt5FR7GlSoG6cH1EV9qTeIjZ/33ehL703E6qrWITjQ6VrNrPsTCt8rvoW2MV8TP9qb32JVJqWxabqUMBicIWLEeDjPyAmOZs32cWwfk9zcJ6hIJcFffkxgVJN0vU6Qi4tGWUmYK12EIclVgrKgvN1yHUrUN/r7+sUPX9WRj82RNFU6RSPircekV9oWj9Hr8A2imnFqiMTnPpSb56y02cG9FbwFPqxLSaNNV4lALzoBmluKv0RSeEWhRvrGI=