riak-client 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/README.markdown +55 -12
  3. data/RELEASE_NOTES.md +20 -1
  4. data/lib/riak.rb +1 -0
  5. data/lib/riak/client.rb +2 -1
  6. data/lib/riak/client/beefcake/crdt/counter_loader.rb +18 -0
  7. data/lib/riak/client/beefcake/crdt/map_loader.rb +64 -0
  8. data/lib/riak/client/beefcake/crdt/set_loader.rb +18 -0
  9. data/lib/riak/client/beefcake/crdt_loader.rb +16 -59
  10. data/lib/riak/client/beefcake/crdt_operator.rb +2 -1
  11. data/lib/riak/client/instrumentation.rb +19 -0
  12. data/lib/riak/crdt/base.rb +16 -0
  13. data/lib/riak/errors/backend_creation.rb +9 -0
  14. data/lib/riak/instrumentation.rb +6 -0
  15. data/lib/riak/version.rb +1 -1
  16. data/riak-client.gemspec +3 -2
  17. data/spec/integration/riak/counters_spec.rb +1 -1
  18. data/spec/integration/riak/crdt_spec.rb +68 -23
  19. data/spec/integration/riak/protobuffs_backends_spec.rb +1 -1
  20. data/spec/integration/riak/threading_spec.rb +4 -4
  21. data/spec/integration/yokozuna/index_spec.rb +5 -5
  22. data/spec/integration/yokozuna/queries_spec.rb +15 -16
  23. data/spec/integration/yokozuna/schema_spec.rb +2 -2
  24. data/spec/riak/beefcake_protobuffs_backend/crdt_operator_spec.rb +8 -8
  25. data/spec/riak/beefcake_protobuffs_backend/object_methods_spec.rb +1 -1
  26. data/spec/riak/beefcake_protobuffs_backend_spec.rb +8 -8
  27. data/spec/riak/bucket_spec.rb +38 -38
  28. data/spec/riak/client_spec.rb +26 -27
  29. data/spec/riak/core_ext/to_param_spec.rb +2 -2
  30. data/spec/riak/counter_spec.rb +11 -11
  31. data/spec/riak/crdt/counter_spec.rb +4 -2
  32. data/spec/riak/crdt/inner_counter_spec.rb +1 -1
  33. data/spec/riak/crdt/inner_flag_spec.rb +4 -4
  34. data/spec/riak/crdt/inner_map_spec.rb +3 -3
  35. data/spec/riak/crdt/inner_register_spec.rb +5 -5
  36. data/spec/riak/crdt/inner_set_spec.rb +1 -1
  37. data/spec/riak/crdt/map_spec.rb +2 -2
  38. data/spec/riak/crdt/set_spec.rb +4 -2
  39. data/spec/riak/crdt/shared_examples.rb +15 -15
  40. data/spec/riak/crdt/typed_collection_spec.rb +16 -22
  41. data/spec/riak/escape_spec.rb +10 -10
  42. data/spec/riak/feature_detection_spec.rb +1 -1
  43. data/spec/riak/index_collection_spec.rb +7 -4
  44. data/spec/riak/instrumentation_spec.rb +124 -0
  45. data/spec/riak/link_spec.rb +12 -12
  46. data/spec/riak/list_buckets_spec.rb +2 -2
  47. data/spec/riak/map_reduce/filter_builder_spec.rb +5 -5
  48. data/spec/riak/map_reduce/phase_spec.rb +20 -20
  49. data/spec/riak/map_reduce_spec.rb +50 -50
  50. data/spec/riak/multiget_spec.rb +5 -5
  51. data/spec/riak/node_spec.rb +3 -3
  52. data/spec/riak/robject_spec.rb +46 -45
  53. data/spec/riak/search_spec.rb +11 -11
  54. data/spec/riak/secondary_index_spec.rb +9 -9
  55. data/spec/riak/stamp_spec.rb +5 -5
  56. data/spec/riak/walk_spec_spec.rb +30 -30
  57. data/spec/spec_helper.rb +6 -0
  58. data/spec/support/certs/ca.crt +19 -20
  59. data/spec/support/certs/client.crl +13 -0
  60. data/spec/support/certs/client.crt +68 -69
  61. data/spec/support/certs/client.csr +18 -0
  62. data/spec/support/certs/client.key +25 -25
  63. data/spec/support/certs/server.crl +11 -11
  64. data/spec/support/certs/server.crt +68 -69
  65. data/spec/support/certs/server.key +25 -25
  66. data/spec/support/unified_backend_examples.rb +33 -33
  67. metadata +31 -5
@@ -10,17 +10,17 @@ describe "Search features" do
10
10
  end
11
11
 
12
12
  describe "searching" do
13
- it "should search the default index" do
13
+ it "searches the default index" do
14
14
  expect(@pb).to receive(:search).with(nil, "foo", {}).and_return({})
15
15
  @client.search("foo")
16
16
  end
17
17
 
18
- it "should search the default index with additional options" do
18
+ it "searches the default index with additional options" do
19
19
  expect(@pb).to receive(:search).with(nil, 'foo', 'rows' => 30).and_return({})
20
20
  @client.search("foo", 'rows' => 30)
21
21
  end
22
22
 
23
- it "should search the specified index" do
23
+ it "searches the specified index" do
24
24
  expect(@pb).to receive(:search).with('search', 'foo', {}).and_return({})
25
25
  @client.search("search", "foo")
26
26
  end
@@ -41,7 +41,7 @@ describe "Search features" do
41
41
  @bucket.instance_variable_set(:@props, {"precommit" => [{"mod" => "riak_search_kv_hook", "fun" => "precommit"}], "search" => true})
42
42
  end
43
43
 
44
- it "should detect whether the indexing hook is installed" do
44
+ it "detects whether the indexing hook is installed" do
45
45
  load_without_index_hook
46
46
  expect(@bucket.is_indexed?).to be_falsey
47
47
 
@@ -50,13 +50,13 @@ describe "Search features" do
50
50
  end
51
51
 
52
52
  describe "enabling indexing" do
53
- it "should add the index hook when not present" do
53
+ it "adds the index hook when not present" do
54
54
  load_without_index_hook
55
55
  expect(@bucket).to receive(:props=).with({"precommit" => [Riak::Bucket::SEARCH_PRECOMMIT_HOOK], "search" => true})
56
56
  @bucket.enable_index!
57
57
  end
58
58
 
59
- it "should not modify the precommit when the hook is present" do
59
+ it "doesn't modify the precommit when the hook is present" do
60
60
  load_with_index_hook
61
61
  expect(@bucket).not_to receive(:props=)
62
62
  @bucket.enable_index!
@@ -64,13 +64,13 @@ describe "Search features" do
64
64
  end
65
65
 
66
66
  describe "disabling indexing" do
67
- it "should remove the index hook when present" do
67
+ it "removes the index hook when present" do
68
68
  load_with_index_hook
69
69
  expect(@bucket).to receive(:props=).with({"precommit" => [], "search" => false})
70
70
  @bucket.disable_index!
71
71
  end
72
72
 
73
- it "should not modify the precommit when the hook is missing" do
73
+ it "doesn't modify the precommit when the hook is missing" do
74
74
  load_without_index_hook
75
75
  expect(@bucket).not_to receive(:props=)
76
76
  @bucket.disable_index!
@@ -85,17 +85,17 @@ describe "Search features" do
85
85
  end
86
86
 
87
87
  describe "using a search query as inputs" do
88
- it "should accept a bucket name and query" do
88
+ it "accepts a bucket name and query" do
89
89
  @mr.search("foo", "bar OR baz")
90
90
  expect(@mr.inputs).to eq({:module => "riak_search", :function => "mapred_search", :arg => ["foo", "bar OR baz"]})
91
91
  end
92
92
 
93
- it "should accept a Riak::Bucket and query" do
93
+ it "accepts a Riak::Bucket and query" do
94
94
  @mr.search(Riak::Bucket.new(@client, "foo"), "bar OR baz")
95
95
  expect(@mr.inputs).to eq({:module => "riak_search", :function => "mapred_search", :arg => ["foo", "bar OR baz"]})
96
96
  end
97
97
 
98
- it "should emit the Erlang function and arguments" do
98
+ it "emits the Erlang function and arguments" do
99
99
  @mr.search("foo", "bar OR baz")
100
100
  expect(@mr.to_json).to include('"inputs":{')
101
101
  expect(@mr.to_json).to include('"module":"riak_search"')
@@ -7,12 +7,12 @@ describe Riak::SecondaryIndex do
7
7
  end
8
8
 
9
9
  describe "initialization" do
10
- it "should accept a bucket, index name, and scalar" do
10
+ it "accepts a bucket, index name, and scalar" do
11
11
  expect { Riak::SecondaryIndex.new @bucket, 'asdf', 'aaaa' }.not_to raise_error
12
12
  expect { Riak::SecondaryIndex.new @bucket, 'asdf', 12345 }.not_to raise_error
13
13
  end
14
14
 
15
- it "should accept a bucket, index name, and a range" do
15
+ it "accepts a bucket, index name, and a range" do
16
16
  expect { Riak::SecondaryIndex.new @bucket, 'asdf', 'aaaa'..'zzzz' }.not_to raise_error
17
17
  expect { Riak::SecondaryIndex.new @bucket, 'asdf', 1..5 }.not_to raise_error
18
18
  end
@@ -28,12 +28,12 @@ describe Riak::SecondaryIndex do
28
28
  expect(@backend).to receive(:get_index).with(*@args).and_return(%w{abcd efgh})
29
29
  end
30
30
 
31
- it "should return an array of keys" do
31
+ it "returns an array of keys" do
32
32
  @results = @index.keys
33
33
  expect(@results).to be_a Array
34
34
  expect(@results.first).to be_a String
35
35
  end
36
- it "should return an array of values" do
36
+ it "returns an array of values" do
37
37
  expect(@backend).to receive(:fetch_object).with(@bucket, 'abcd', {}).and_return('abcd')
38
38
  expect(@backend).to receive(:fetch_object).with(@bucket, 'efgh', {}).and_return('efgh')
39
39
 
@@ -44,7 +44,7 @@ describe Riak::SecondaryIndex do
44
44
  end
45
45
 
46
46
  describe "streaming" do
47
- it "should stream keys into a block" do
47
+ it "streams keys into a block" do
48
48
  @backend = double 'Backend'
49
49
  allow(@client).to receive(:backend).and_yield(@backend)
50
50
  @args = [@bucket, 'asdf', 'aaaa'..'zzzz', {stream: true}]
@@ -57,7 +57,7 @@ describe Riak::SecondaryIndex do
57
57
  end
58
58
 
59
59
  describe "pagination" do
60
- it "should support max_results" do
60
+ it "supports max_results" do
61
61
  @max_results = 5
62
62
 
63
63
  @expected_collection = Riak::IndexCollection.new_from_json({
@@ -92,7 +92,7 @@ describe Riak::SecondaryIndex do
92
92
  expect(@results.length).to eq(@max_results)
93
93
  end
94
94
 
95
- it "should support continuations" do
95
+ it "supports continuations" do
96
96
  @max_results = 5
97
97
 
98
98
  @expected_collection = Riak::IndexCollection.new_from_json({
@@ -127,7 +127,7 @@ describe Riak::SecondaryIndex do
127
127
  expect(@results).to eq(@expected_collection)
128
128
  end
129
129
 
130
- it "should support a next_page method" do
130
+ it "supports a next_page method" do
131
131
  @max_results = 5
132
132
 
133
133
  @expected_collection = Riak::IndexCollection.new_from_json({
@@ -182,7 +182,7 @@ describe Riak::SecondaryIndex do
182
182
  end
183
183
 
184
184
  describe "return_terms" do
185
- it "should optionally give the index value" do
185
+ it "optionally gives the index value" do
186
186
  @expected_collection = Riak::IndexCollection.new_from_json({
187
187
  'results' => [
188
188
  {'aaaa' => 'aaaa'},
@@ -3,7 +3,7 @@ require 'riak/stamp'
3
3
 
4
4
  describe Riak::Stamp, test_client: true do
5
5
  subject { described_class.new test_client }
6
- it "should generate always increasing integer identifiers" do
6
+ it "generates always increasing integer identifiers" do
7
7
  1000.times do
8
8
  one = subject.next
9
9
  two = subject.next
@@ -12,7 +12,7 @@ describe Riak::Stamp, test_client: true do
12
12
  end
13
13
  end
14
14
 
15
- it "should delay until the next millisecond when the sequence overflows" do
15
+ it "delays until the next millisecond when the sequence overflows" do
16
16
  old = subject.instance_variable_get(:@timestamp) + 0
17
17
  subject.instance_variable_set(:@sequence, described_class::SEQUENCE_MASK)
18
18
  count = 0
@@ -28,7 +28,7 @@ describe Riak::Stamp, test_client: true do
28
28
  expect((subject.next >> described_class::TIMESTAMP_SHIFT) & described_class::TIMESTAMP_MASK).to eq(old + 1)
29
29
  end
30
30
 
31
- it "should raise an exception when the system clock moves backwards" do
31
+ it "raises an exception when the system clock moves backwards" do
32
32
  old = subject.instance_variable_get(:@timestamp)
33
33
  expect(subject).to receive(:time_gen).and_return(old - 10)
34
34
  expect {
@@ -39,7 +39,7 @@ describe Riak::Stamp, test_client: true do
39
39
  # The client/worker ID should be used for disambiguation, not for
40
40
  # primary ordering. This breaks from the Snowflake model where the
41
41
  # worker ID is in more significant bits.
42
- it "should use the client ID as the bottom component of the identifier" do
42
+ it "uses the client ID as the bottom component of the identifier" do
43
43
  expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
44
44
  end
45
45
 
@@ -47,7 +47,7 @@ describe Riak::Stamp, test_client: true do
47
47
  subject { described_class.new(Riak::Client.new(:client_id => "ripple")) }
48
48
  let(:hash) { "ripple".hash }
49
49
 
50
- it "should use the hash of the client ID as the bottom component of the identifier" do
50
+ it "uses the hash of the client ID as the bottom component of the identifier" do
51
51
  expect(subject.next & described_class::CLIENT_ID_MASK).to eq(subject.client.client_id.hash & described_class::CLIENT_ID_MASK)
52
52
  end
53
53
  end
@@ -3,28 +3,28 @@ require 'spec_helper'
3
3
  describe Riak::WalkSpec do
4
4
  describe "initializing" do
5
5
  describe "with a hash" do
6
- it "should be empty by default" do
6
+ it "is empty by default" do
7
7
  spec = Riak::WalkSpec.new({})
8
8
  expect(spec.bucket).to eq("_")
9
9
  expect(spec.tag).to eq("_")
10
10
  expect(spec.keep).to be_falsey
11
11
  end
12
12
 
13
- it "should extract the bucket" do
13
+ it "extracts the bucket" do
14
14
  spec = Riak::WalkSpec.new({:bucket => "foo"})
15
15
  expect(spec.bucket).to eq("foo")
16
16
  expect(spec.tag).to eq("_")
17
17
  expect(spec.keep).to be_falsey
18
18
  end
19
19
 
20
- it "should extract the tag" do
20
+ it "extracts the tag" do
21
21
  spec = Riak::WalkSpec.new({:tag => "foo"})
22
22
  expect(spec.bucket).to eq("_")
23
23
  expect(spec.tag).to eq("foo")
24
24
  expect(spec.keep).to be_falsey
25
25
  end
26
26
 
27
- it "should extract the keep" do
27
+ it "extracts the keep" do
28
28
  spec = Riak::WalkSpec.new({:keep => true})
29
29
  expect(spec.bucket).to eq("_")
30
30
  expect(spec.tag).to eq("_")
@@ -33,28 +33,28 @@ describe Riak::WalkSpec do
33
33
  end
34
34
 
35
35
  describe "with three arguments for bucket, tag, and keep" do
36
- it "should assign the bucket, tag, and keep" do
36
+ it "assigns the bucket, tag, and keep" do
37
37
  spec = Riak::WalkSpec.new("foo", "next", false)
38
38
  expect(spec.bucket).to eq("foo")
39
39
  expect(spec.tag).to eq("next")
40
40
  expect(spec.keep).to be_falsey
41
41
  end
42
42
 
43
- it "should make the bucket '_' when false or nil" do
43
+ it "specifies the '_' bucket when false or nil" do
44
44
  spec = Riak::WalkSpec.new(nil, "next", false)
45
45
  expect(spec.bucket).to eq("_")
46
46
  spec = Riak::WalkSpec.new(false, "next", false)
47
47
  expect(spec.bucket).to eq("_")
48
48
  end
49
49
 
50
- it "should make the tag '_' when false or nil" do
50
+ it "specifies the '_' tag when false or nil" do
51
51
  spec = Riak::WalkSpec.new("foo", nil, false)
52
52
  expect(spec.tag).to eq("_")
53
53
  spec = Riak::WalkSpec.new("foo", false, false)
54
54
  expect(spec.tag).to eq("_")
55
55
  end
56
56
 
57
- it "should make the keep false when false or nil" do
57
+ it "make the keep falsey when false or nil" do
58
58
  spec = Riak::WalkSpec.new(nil, nil, nil)
59
59
  expect(spec.keep).to be_falsey
60
60
  spec = Riak::WalkSpec.new(nil, nil, false)
@@ -62,7 +62,7 @@ describe Riak::WalkSpec do
62
62
  end
63
63
  end
64
64
 
65
- it "should raise an ArgumentError for invalid arguments" do
65
+ it "raises an ArgumentError for invalid arguments" do
66
66
  expect { Riak::WalkSpec.new }.to raise_error(ArgumentError)
67
67
  expect { Riak::WalkSpec.new("foo") }.to raise_error(ArgumentError)
68
68
  expect { Riak::WalkSpec.new("foo","bar") }.to raise_error(ArgumentError)
@@ -74,35 +74,35 @@ describe Riak::WalkSpec do
74
74
  @spec = Riak::WalkSpec.new({})
75
75
  end
76
76
 
77
- it "should be the empty spec by default" do
77
+ it "converts to the empty spec by default" do
78
78
  expect(@spec.to_s).to eq("_,_,_")
79
79
  end
80
80
 
81
- it "should include the bucket when set" do
81
+ it "includes the bucket when set" do
82
82
  @spec.bucket = "foo"
83
83
  expect(@spec.to_s).to eq("foo,_,_")
84
84
  end
85
85
 
86
- it "should include the tag when set" do
86
+ it "includes the tag when set" do
87
87
  @spec.tag = "next"
88
88
  expect(@spec.to_s).to eq("_,next,_")
89
89
  end
90
90
 
91
- it "should include the keep when true" do
91
+ it "includes the keep when true" do
92
92
  @spec.keep = true
93
93
  expect(@spec.to_s).to eq("_,_,1")
94
94
  end
95
95
  end
96
96
 
97
97
  describe "creating from a list of parameters" do
98
- it "should detect hashes and WalkSpecs interleaved with other parameters" do
98
+ it "detects hashes and WalkSpecs interleaved with other parameters" do
99
99
  specs = Riak::WalkSpec.normalize(nil,"next",nil,{:bucket => "foo"},Riak::WalkSpec.new({:tag => "child", :keep => true}))
100
100
  expect(specs.size).to eq(3)
101
101
  expect(specs).to be_all {|s| s.kind_of?(Riak::WalkSpec) }
102
102
  expect(specs.join("/")).to eq("_,next,_/foo,_,_/_,child,1")
103
103
  end
104
104
 
105
- it "should raise an error when given invalid number of parameters" do
105
+ it "raises an error when given invalid number of parameters" do
106
106
  expect { Riak::WalkSpec.normalize("foo") }.to raise_error(ArgumentError)
107
107
  end
108
108
  end
@@ -112,7 +112,7 @@ describe Riak::WalkSpec do
112
112
  @spec = Riak::WalkSpec.new({})
113
113
  end
114
114
 
115
- it "should not match objects that aren't links or walk specs" do
115
+ it "doesn't match objects that aren't links or walk specs" do
116
116
  expect(@spec).not_to be === "foo"
117
117
  end
118
118
 
@@ -121,31 +121,31 @@ describe Riak::WalkSpec do
121
121
  @link = Riak::Link.new("/riak/foo/bar", "next")
122
122
  end
123
123
 
124
- it "should match a link when the bucket and tag are not specified" do
124
+ it "matches a link when the bucket and tag are not specified" do
125
125
  expect(@spec).to be === @link
126
126
  end
127
127
 
128
- it "should match a link when the bucket is the same" do
128
+ it "matches a link when the bucket is the same" do
129
129
  @spec.bucket = "foo"
130
130
  expect(@spec).to be === @link
131
131
  end
132
132
 
133
- it "should not match a link when the bucket is different" do
133
+ it "doesn't match a link when the bucket is different" do
134
134
  @spec.bucket = "bar"
135
135
  expect(@spec).not_to be === @link
136
136
  end
137
137
 
138
- it "should match a link when the tag is the same" do
138
+ it "matches a link when the tag is the same" do
139
139
  @spec.tag = "next"
140
140
  expect(@spec).to be === @link
141
141
  end
142
142
 
143
- it "should not match a link when the tag is different" do
143
+ it "doesn't match a link when the tag is different" do
144
144
  @spec.tag = "previous"
145
145
  expect(@spec).not_to be === @link
146
146
  end
147
147
 
148
- it "should match a link when the bucket and tag are the same" do
148
+ it "matches a link when the bucket and tag are the same" do
149
149
  @spec.bucket = "foo"
150
150
  expect(@spec).to be === @link
151
151
  end
@@ -156,41 +156,41 @@ describe Riak::WalkSpec do
156
156
  @other = Riak::WalkSpec.new({})
157
157
  end
158
158
 
159
- it "should match a walk spec that is equivalent" do
159
+ it "matches a walk spec that is equivalent" do
160
160
  expect(@spec).to be === @other
161
161
  end
162
162
 
163
- it "should not match a walk spec that has a different keep value" do
163
+ it "matches a walk spec that has a different keep value" do
164
164
  @other.keep = true
165
165
  expect(@spec).not_to be === @other
166
166
  end
167
167
 
168
- it "should match a walk spec with a more specific bucket" do
168
+ it "matches a walk spec with a more specific bucket" do
169
169
  @other.bucket = "foo"
170
170
  expect(@spec).to be === @other
171
171
  end
172
172
 
173
- it "should match a walk spec with the same bucket" do
173
+ it "matches a walk spec with the same bucket" do
174
174
  @other.bucket = "foo"; @spec.bucket = "foo"
175
175
  expect(@spec).to be === @other
176
176
  end
177
177
 
178
- it "should not match a walk spec with a different bucket" do
178
+ it "doesn't match a walk spec with a different bucket" do
179
179
  @other.bucket = "foo"; @spec.bucket = "bar"
180
180
  expect(@spec).not_to be === @other
181
181
  end
182
182
 
183
- it "should match a walk spec with a more specific tag" do
183
+ it "doesn't match a walk spec with a more specific tag" do
184
184
  @other.tag = "next"
185
185
  expect(@spec).to be === @other
186
186
  end
187
187
 
188
- it "should match a walk spec with the same tag" do
188
+ it "matches a walk spec with the same tag" do
189
189
  @other.tag = "next"; @spec.tag = "next"
190
190
  expect(@spec).to be === @other
191
191
  end
192
192
 
193
- it "should not match a walk spec with a different tag" do
193
+ it "doesn't match a walk spec with a different tag" do
194
194
  @other.tag = "next"; @spec.tag = "previous"
195
195
  expect(@spec).not_to be === @other
196
196
  end
@@ -47,4 +47,10 @@ RSpec.configure do |config|
47
47
  end
48
48
 
49
49
  config.raise_errors_for_deprecations!
50
+
51
+ begin
52
+ require 'instrumentable'
53
+ rescue LoadError => e
54
+ config.filter_run_excluding instrumentation: true
55
+ end
50
56
  end
@@ -1,22 +1,21 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDnjCCAoYCCQCfWsYVjCNEnTANBgkqhkiG9w0BAQUFADCBkDELMAkGA1UEBhMC
3
- VVMxEzARBgNVBAgMCldhc2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxDjAMBgNV
4
- BAoMBUJhc2hvMRswGQYDVQQLDBJSaWFrIFB5dGhvbiBDbGllbnQxCzAJBgNVBAMM
5
- AkNBMSAwHgYJKoZIhvcNAQkBFhFjbGllbnRzQGJhc2hvLmNvbTAeFw0xNDA1Mjcx
6
- OTQyNDhaFw0yNDA1MjQxOTQyNDhaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UECAwK
7
- V2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEOMAwGA1UECgwFQmFzaG8xGzAZ
8
- BgNVBAsMElJpYWsgUHl0aG9uIENsaWVudDELMAkGA1UEAwwCQ0ExIDAeBgkqhkiG
9
- 9w0BCQEWEWNsaWVudHNAYmFzaG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
10
- MIIBCgKCAQEAyb+RlRZKQc5RkUK1CIeiWizz52uy98CJzpEdgZfLJuWv2wCqWZLD
11
- j3BWpa0uSQCT7F7EdXBpjFOCYx48nTTbNekL2osYm5lH/9QP3tZp+oomSxeZTc7C
12
- DsnW2/7KPmgE+B8Zs7Q1v2VXj2NyaUmozDWbp80VPMA332B61TTOGXKthQeD/n6W
13
- /mkH044oG5PMOvMMlNaYx0dsRy73m49DwIG/iZs0ri/sFuOKapOM+Jyi31GF7f50
14
- hDLNhpOZi2wvAoEdE5c0BfwILqR5rJBsfZzjUnTdYnLE9C1xR0ntE+MgCrxMdvM7
15
- VtJR0GNSQuW9LUxA6MeYimqHkfjtgDyX8wIDAQABMA0GCSqGSIb3DQEBBQUAA4IB
16
- AQB9IRE9eir6w2VkVHZanzOrbJVI0xO4o9+y0EXXl575C4uUs3+T7VBo8RQt2Pkn
17
- JULRVkff37XdblNLEQc5qNoSVu0vXLOjqybletXLD6ysaCn/4EkVrDrM9T5xO01H
18
- TDUnzBap+Z/YQc6iGaeFUaxPNYBqBypSHxqU2rbtIiok3xNXxgv65ijpdWSL/zzO
19
- g0P1cGECnsLRgui3AGVa5LioYUvy2eUj+xoasFpArZ3Cn5OTeAFHnnYFbKgdNQWm
20
- z98RktSlUMDE6EFnmzSBj/3l/CyEzZ2XTz//N3hPZs3LnEccGWUzadqQyO5pgExV
21
- VEcFwFceAhIM4PsZteI4m9nG
2
+ MIIDjDCCAnQCCQDCaCbuH5N1HjANBgkqhkiG9w0BAQUFADCBhzELMAkGA1UEBhMC
3
+ VVMxEDAOBgNVBAgMB0Zsb3JpZGExDjAMBgNVBAcMBU1pYW1pMQ4wDAYDVQQKDAVC
4
+ YXNobzEZMBcGA1UECwwQUmlhayBSdWJ5IENsaWVudDELMAkGA1UEAwwCQ0ExHjAc
5
+ BgkqhkiG9w0BCQEWD2JyeWNlQGJhc2hvLmNvbTAeFw0xNDA5MTgyMjU4MDJaFw0y
6
+ NDA5MTUyMjU4MDJaMIGHMQswCQYDVQQGEwJVUzEQMA4GA1UECAwHRmxvcmlkYTEO
7
+ MAwGA1UEBwwFTWlhbWkxDjAMBgNVBAoMBUJhc2hvMRkwFwYDVQQLDBBSaWFrIFJ1
8
+ YnkgQ2xpZW50MQswCQYDVQQDDAJDQTEeMBwGCSqGSIb3DQEJARYPYnJ5Y2VAYmFz
9
+ aG8uY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApLREjyW0bsMQ
10
+ 2xZuZfXrTqndZdtmJrUaUdwLcTYXo/BLJq8mw/UoKBajzDJS1OsVutOT3l1mQZNk
11
+ pE15lJbPo301RtkGOeYlTx6ptawutrvlMlACnWtYyuL9U8qqnMJAsdBEjTU3Xxao
12
+ /vJTECBVaKtL9D5vEu2fOn4ZWvSuYG14ZXhltBPgon95SrJX+erXgHs0IH6l1ftW
13
+ xZL9Uw/Tj/s8XEMK8n6FB+CYuj33fZMjswvdXABzhEAW8bCupJT42V/S9Zj4B0Z8
14
+ iv6wgurc1yuU6yl0VDGZ6Ee++7ter3GZZrV4YC5A8UjW0+8sADUYKiZNYWTO6S+N
15
+ Pu/sLRdykwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQBzcs/VIHHeyUWlS+Rx/s/m
16
+ m54RK332r2+8Mywtwdz57kA6rsbYBrrlKVmEzjtgCIcpF/3hhEChYcSA4w0Aa+zd
17
+ Zd6eNtUyicPFfm/8GycaLM3Ptj3duq4jHha2IzhomfACm8pkBj8IU8Y5q/YBV+3L
18
+ hJxderphbz6lqrH6USkt/aaFzu+1onYlxzGZDyiFPOxUbRPXN12y3XCeFSfuHBej
19
+ ifFRSHGR8HU++g4VYnOi/1YXSDFh7yRvA2qBlz+kYprBS2GggXIrfCgT+FnMALlg
20
+ 6TrfsWQiI3pyGKUsNjdaQckdLMWr8jvutb7vPZ1WdMdgKxbE0Swo1HBbkCAe5JjG
22
21
  -----END CERTIFICATE-----