ruby-saml 0.9.4 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of ruby-saml might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/LICENSE +1 -1
- data/README.md +71 -15
- data/changelog.md +15 -6
- data/lib/onelogin/ruby-saml.rb +1 -0
- data/lib/onelogin/ruby-saml/attribute_service.rb +25 -2
- data/lib/onelogin/ruby-saml/attributes.rb +42 -23
- data/lib/onelogin/ruby-saml/authrequest.rb +33 -8
- data/lib/onelogin/ruby-saml/http_error.rb +7 -0
- data/lib/onelogin/ruby-saml/idp_metadata_parser.rb +65 -10
- data/lib/onelogin/ruby-saml/logging.rb +14 -10
- data/lib/onelogin/ruby-saml/logoutrequest.rb +39 -14
- data/lib/onelogin/ruby-saml/logoutresponse.rb +166 -39
- data/lib/onelogin/ruby-saml/metadata.rb +40 -23
- data/lib/onelogin/ruby-saml/response.rb +562 -88
- data/lib/onelogin/ruby-saml/saml_message.rb +80 -14
- data/lib/onelogin/ruby-saml/settings.rb +62 -23
- data/lib/onelogin/ruby-saml/slo_logoutrequest.rb +210 -20
- data/lib/onelogin/ruby-saml/slo_logoutresponse.rb +44 -13
- data/lib/onelogin/ruby-saml/utils.rb +163 -40
- data/lib/onelogin/ruby-saml/version.rb +1 -1
- data/lib/schemas/saml-schema-metadata-2.0.xsd +0 -2
- data/lib/xml_security.rb +87 -29
- data/ruby-saml.gemspec +1 -0
- data/test/certificates/{r1_certificate2_base64 → certificate_without_head_foot} +0 -0
- data/test/certificates/formatted_certificate +14 -0
- data/test/certificates/formatted_private_key +12 -0
- data/test/certificates/formatted_rsa_private_key +12 -0
- data/test/certificates/invalid_certificate1 +1 -0
- data/test/certificates/invalid_certificate2 +1 -0
- data/test/certificates/invalid_certificate3 +12 -0
- data/test/certificates/invalid_private_key1 +1 -0
- data/test/certificates/invalid_private_key2 +1 -0
- data/test/certificates/invalid_private_key3 +10 -0
- data/test/certificates/invalid_rsa_private_key1 +1 -0
- data/test/certificates/invalid_rsa_private_key2 +1 -0
- data/test/certificates/invalid_rsa_private_key3 +10 -0
- data/test/idp_metadata_parser_test.rb +41 -4
- data/test/logging_test.rb +62 -0
- data/test/logout_requests/invalid_slo_request.xml +6 -0
- data/test/{responses → logout_requests}/slo_request.xml +0 -0
- data/test/logout_requests/slo_request.xml.base64 +1 -0
- data/test/logout_requests/slo_request_deflated.xml.base64 +1 -0
- data/test/logout_requests/slo_request_with_session_index.xml +5 -0
- data/test/{responses → logout_responses}/logoutresponse_fixtures.rb +6 -6
- data/test/logoutrequest_test.rb +79 -52
- data/test/logoutresponse_test.rb +206 -59
- data/test/metadata_test.rb +77 -7
- data/test/request_test.rb +80 -65
- data/test/response_test.rb +862 -189
- data/test/responses/attackxee.xml +13 -0
- data/test/responses/invalids/invalid_audience.xml.base64 +1 -0
- data/test/responses/invalids/invalid_issuer_assertion.xml.base64 +1 -0
- data/test/responses/invalids/invalid_issuer_message.xml.base64 +1 -0
- data/test/responses/invalids/invalid_signature_position.xml.base64 +1 -0
- data/test/responses/invalids/invalid_subjectconfirmation_inresponse.xml.base64 +1 -0
- data/test/responses/invalids/invalid_subjectconfirmation_nb.xml.base64 +1 -0
- data/test/responses/invalids/invalid_subjectconfirmation_noa.xml.base64 +1 -0
- data/test/responses/invalids/invalid_subjectconfirmation_recipient.xml.base64 +1 -0
- data/test/responses/invalids/multiple_assertions.xml.base64 +2 -0
- data/test/responses/invalids/multiple_signed.xml.base64 +1 -0
- data/test/responses/invalids/no_id.xml.base64 +1 -0
- data/test/responses/invalids/no_saml2.xml.base64 +1 -0
- data/test/responses/invalids/no_signature.xml.base64 +1 -0
- data/test/responses/invalids/no_status.xml.base64 +1 -0
- data/test/responses/invalids/no_status_code.xml.base64 +1 -0
- data/test/responses/invalids/no_subjectconfirmation_data.xml.base64 +1 -0
- data/test/responses/invalids/no_subjectconfirmation_method.xml.base64 +1 -0
- data/test/responses/invalids/response_encrypted_attrs.xml.base64 +1 -0
- data/test/responses/invalids/response_invalid_signed_element.xml.base64 +1 -0
- data/test/responses/invalids/status_code_responder.xml.base64 +1 -0
- data/test/responses/invalids/status_code_responer_and_msg.xml.base64 +1 -0
- data/test/responses/{response4.xml.base64 → response_assertion_wrapped.xml.base64} +0 -0
- data/test/responses/response_encrypted_nameid.xml.base64 +1 -0
- data/test/responses/response_unsigned_xml_base64 +1 -0
- data/test/responses/{response5.xml.base64 → response_with_saml2_namespace.xml.base64} +0 -0
- data/test/responses/{response3.xml.base64 → response_with_signed_assertion.xml.base64} +0 -0
- data/test/responses/{r1_response6.xml.base64 → response_with_signed_assertion_2.xml.base64} +0 -0
- data/test/responses/{response1.xml.base64 → response_with_undefined_recipient.xml.base64} +0 -0
- data/test/responses/{response2.xml.base64 → response_without_attributes.xml.base64} +0 -0
- data/test/responses/{wrapped_response_2.xml.base64 → response_wrapped.xml.base64} +0 -0
- data/test/responses/signed_message_encrypted_signed_assertion.xml.base64 +1 -0
- data/test/responses/signed_message_encrypted_unsigned_assertion.xml.base64 +1 -0
- data/test/responses/unsigned_message_aes128_encrypted_signed_assertion.xml.base64 +1 -0
- data/test/responses/unsigned_message_aes192_encrypted_signed_assertion.xml.base64 +1 -0
- data/test/responses/unsigned_message_aes256_encrypted_signed_assertion.xml.base64 +1 -0
- data/test/responses/unsigned_message_des192_encrypted_signed_assertion.xml.base64 +1 -0
- data/test/responses/unsigned_message_encrypted_assertion_without_saml_namespace.xml.base64 +1 -0
- data/test/responses/unsigned_message_encrypted_signed_assertion.xml.base64 +1 -0
- data/test/responses/unsigned_message_encrypted_unsigned_assertion.xml.base64 +1 -0
- data/test/responses/valid_response.xml.base64 +1 -0
- data/test/saml_message_test.rb +56 -0
- data/test/settings_test.rb +138 -1
- data/test/slo_logoutrequest_test.rb +239 -28
- data/test/slo_logoutresponse_test.rb +93 -71
- data/test/test_helper.rb +138 -31
- data/test/utils_test.rb +129 -25
- data/test/xml_security_test.rb +140 -71
- metadata +142 -25
- data/test/responses/response_node_text_attack.xml.base64 +0 -1
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-saml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OneLogin LLC
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-07-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uuid
|
@@ -94,6 +94,20 @@ dependencies:
|
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '2.11'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.9.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.9.0
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: systemu
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,6 +171,7 @@ files:
|
|
157
171
|
- lib/onelogin/ruby-saml/attribute_service.rb
|
158
172
|
- lib/onelogin/ruby-saml/attributes.rb
|
159
173
|
- lib/onelogin/ruby-saml/authrequest.rb
|
174
|
+
- lib/onelogin/ruby-saml/http_error.rb
|
160
175
|
- lib/onelogin/ruby-saml/idp_metadata_parser.rb
|
161
176
|
- lib/onelogin/ruby-saml/logging.rb
|
162
177
|
- lib/onelogin/ruby-saml/logoutrequest.rb
|
@@ -186,10 +201,29 @@ files:
|
|
186
201
|
- lib/xml_security.rb
|
187
202
|
- ruby-saml.gemspec
|
188
203
|
- test/certificates/certificate1
|
189
|
-
- test/certificates/
|
204
|
+
- test/certificates/certificate_without_head_foot
|
205
|
+
- test/certificates/formatted_certificate
|
206
|
+
- test/certificates/formatted_private_key
|
207
|
+
- test/certificates/formatted_rsa_private_key
|
208
|
+
- test/certificates/invalid_certificate1
|
209
|
+
- test/certificates/invalid_certificate2
|
210
|
+
- test/certificates/invalid_certificate3
|
211
|
+
- test/certificates/invalid_private_key1
|
212
|
+
- test/certificates/invalid_private_key2
|
213
|
+
- test/certificates/invalid_private_key3
|
214
|
+
- test/certificates/invalid_rsa_private_key1
|
215
|
+
- test/certificates/invalid_rsa_private_key2
|
216
|
+
- test/certificates/invalid_rsa_private_key3
|
190
217
|
- test/certificates/ruby-saml.crt
|
191
218
|
- test/certificates/ruby-saml.key
|
192
219
|
- test/idp_metadata_parser_test.rb
|
220
|
+
- test/logging_test.rb
|
221
|
+
- test/logout_requests/invalid_slo_request.xml
|
222
|
+
- test/logout_requests/slo_request.xml
|
223
|
+
- test/logout_requests/slo_request.xml.base64
|
224
|
+
- test/logout_requests/slo_request_deflated.xml.base64
|
225
|
+
- test/logout_requests/slo_request_with_session_index.xml
|
226
|
+
- test/logout_responses/logoutresponse_fixtures.rb
|
193
227
|
- test/logoutrequest_test.rb
|
194
228
|
- test/logoutresponse_test.rb
|
195
229
|
- test/metadata_test.rb
|
@@ -200,27 +234,59 @@ files:
|
|
200
234
|
- test/responses/adfs_response_sha384.xml
|
201
235
|
- test/responses/adfs_response_sha512.xml
|
202
236
|
- test/responses/adfs_response_xmlns.xml
|
237
|
+
- test/responses/attackxee.xml
|
203
238
|
- test/responses/idp_descriptor.xml
|
204
|
-
- test/responses/
|
239
|
+
- test/responses/invalids/invalid_audience.xml.base64
|
240
|
+
- test/responses/invalids/invalid_issuer_assertion.xml.base64
|
241
|
+
- test/responses/invalids/invalid_issuer_message.xml.base64
|
242
|
+
- test/responses/invalids/invalid_signature_position.xml.base64
|
243
|
+
- test/responses/invalids/invalid_subjectconfirmation_inresponse.xml.base64
|
244
|
+
- test/responses/invalids/invalid_subjectconfirmation_nb.xml.base64
|
245
|
+
- test/responses/invalids/invalid_subjectconfirmation_noa.xml.base64
|
246
|
+
- test/responses/invalids/invalid_subjectconfirmation_recipient.xml.base64
|
247
|
+
- test/responses/invalids/multiple_assertions.xml.base64
|
248
|
+
- test/responses/invalids/multiple_signed.xml.base64
|
249
|
+
- test/responses/invalids/no_id.xml.base64
|
250
|
+
- test/responses/invalids/no_saml2.xml.base64
|
251
|
+
- test/responses/invalids/no_signature.xml.base64
|
252
|
+
- test/responses/invalids/no_status.xml.base64
|
253
|
+
- test/responses/invalids/no_status_code.xml.base64
|
254
|
+
- test/responses/invalids/no_subjectconfirmation_data.xml.base64
|
255
|
+
- test/responses/invalids/no_subjectconfirmation_method.xml.base64
|
256
|
+
- test/responses/invalids/response_encrypted_attrs.xml.base64
|
257
|
+
- test/responses/invalids/response_invalid_signed_element.xml.base64
|
258
|
+
- test/responses/invalids/status_code_responder.xml.base64
|
259
|
+
- test/responses/invalids/status_code_responer_and_msg.xml.base64
|
205
260
|
- test/responses/no_signature_ns.xml
|
206
261
|
- test/responses/open_saml_response.xml
|
207
|
-
- test/responses/
|
208
|
-
- test/responses/
|
209
|
-
- test/responses/response2.xml.base64
|
210
|
-
- test/responses/response3.xml.base64
|
211
|
-
- test/responses/response4.xml.base64
|
212
|
-
- test/responses/response5.xml.base64
|
262
|
+
- test/responses/response_assertion_wrapped.xml.base64
|
263
|
+
- test/responses/response_encrypted_nameid.xml.base64
|
213
264
|
- test/responses/response_eval.xml
|
214
265
|
- test/responses/response_no_cert_and_encrypted_attrs.xml
|
215
|
-
- test/responses/
|
266
|
+
- test/responses/response_unsigned_xml_base64
|
216
267
|
- test/responses/response_with_ampersands.xml
|
217
268
|
- test/responses/response_with_ampersands.xml.base64
|
218
269
|
- test/responses/response_with_multiple_attribute_values.xml
|
270
|
+
- test/responses/response_with_saml2_namespace.xml.base64
|
271
|
+
- test/responses/response_with_signed_assertion.xml.base64
|
272
|
+
- test/responses/response_with_signed_assertion_2.xml.base64
|
273
|
+
- test/responses/response_with_undefined_recipient.xml.base64
|
274
|
+
- test/responses/response_without_attributes.xml.base64
|
275
|
+
- test/responses/response_wrapped.xml.base64
|
276
|
+
- test/responses/signed_message_encrypted_signed_assertion.xml.base64
|
277
|
+
- test/responses/signed_message_encrypted_unsigned_assertion.xml.base64
|
219
278
|
- test/responses/simple_saml_php.xml
|
220
|
-
- test/responses/slo_request.xml
|
221
279
|
- test/responses/starfield_response.xml.base64
|
222
280
|
- test/responses/test_sign.xml
|
223
|
-
- test/responses/
|
281
|
+
- test/responses/unsigned_message_aes128_encrypted_signed_assertion.xml.base64
|
282
|
+
- test/responses/unsigned_message_aes192_encrypted_signed_assertion.xml.base64
|
283
|
+
- test/responses/unsigned_message_aes256_encrypted_signed_assertion.xml.base64
|
284
|
+
- test/responses/unsigned_message_des192_encrypted_signed_assertion.xml.base64
|
285
|
+
- test/responses/unsigned_message_encrypted_assertion_without_saml_namespace.xml.base64
|
286
|
+
- test/responses/unsigned_message_encrypted_signed_assertion.xml.base64
|
287
|
+
- test/responses/unsigned_message_encrypted_unsigned_assertion.xml.base64
|
288
|
+
- test/responses/valid_response.xml.base64
|
289
|
+
- test/saml_message_test.rb
|
224
290
|
- test/settings_test.rb
|
225
291
|
- test/slo_logoutrequest_test.rb
|
226
292
|
- test/slo_logoutresponse_test.rb
|
@@ -248,16 +314,35 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
248
314
|
version: '0'
|
249
315
|
requirements: []
|
250
316
|
rubyforge_project: http://www.rubygems.org/gems/ruby-saml
|
251
|
-
rubygems_version: 2.5
|
317
|
+
rubygems_version: 2.4.5
|
252
318
|
signing_key:
|
253
319
|
specification_version: 4
|
254
320
|
summary: SAML Ruby Tookit
|
255
321
|
test_files:
|
256
322
|
- test/certificates/certificate1
|
257
|
-
- test/certificates/
|
323
|
+
- test/certificates/certificate_without_head_foot
|
324
|
+
- test/certificates/formatted_certificate
|
325
|
+
- test/certificates/formatted_private_key
|
326
|
+
- test/certificates/formatted_rsa_private_key
|
327
|
+
- test/certificates/invalid_certificate1
|
328
|
+
- test/certificates/invalid_certificate2
|
329
|
+
- test/certificates/invalid_certificate3
|
330
|
+
- test/certificates/invalid_private_key1
|
331
|
+
- test/certificates/invalid_private_key2
|
332
|
+
- test/certificates/invalid_private_key3
|
333
|
+
- test/certificates/invalid_rsa_private_key1
|
334
|
+
- test/certificates/invalid_rsa_private_key2
|
335
|
+
- test/certificates/invalid_rsa_private_key3
|
258
336
|
- test/certificates/ruby-saml.crt
|
259
337
|
- test/certificates/ruby-saml.key
|
260
338
|
- test/idp_metadata_parser_test.rb
|
339
|
+
- test/logging_test.rb
|
340
|
+
- test/logout_requests/invalid_slo_request.xml
|
341
|
+
- test/logout_requests/slo_request.xml
|
342
|
+
- test/logout_requests/slo_request.xml.base64
|
343
|
+
- test/logout_requests/slo_request_deflated.xml.base64
|
344
|
+
- test/logout_requests/slo_request_with_session_index.xml
|
345
|
+
- test/logout_responses/logoutresponse_fixtures.rb
|
261
346
|
- test/logoutrequest_test.rb
|
262
347
|
- test/logoutresponse_test.rb
|
263
348
|
- test/metadata_test.rb
|
@@ -268,27 +353,59 @@ test_files:
|
|
268
353
|
- test/responses/adfs_response_sha384.xml
|
269
354
|
- test/responses/adfs_response_sha512.xml
|
270
355
|
- test/responses/adfs_response_xmlns.xml
|
356
|
+
- test/responses/attackxee.xml
|
271
357
|
- test/responses/idp_descriptor.xml
|
272
|
-
- test/responses/
|
358
|
+
- test/responses/invalids/invalid_audience.xml.base64
|
359
|
+
- test/responses/invalids/invalid_issuer_assertion.xml.base64
|
360
|
+
- test/responses/invalids/invalid_issuer_message.xml.base64
|
361
|
+
- test/responses/invalids/invalid_signature_position.xml.base64
|
362
|
+
- test/responses/invalids/invalid_subjectconfirmation_inresponse.xml.base64
|
363
|
+
- test/responses/invalids/invalid_subjectconfirmation_nb.xml.base64
|
364
|
+
- test/responses/invalids/invalid_subjectconfirmation_noa.xml.base64
|
365
|
+
- test/responses/invalids/invalid_subjectconfirmation_recipient.xml.base64
|
366
|
+
- test/responses/invalids/multiple_assertions.xml.base64
|
367
|
+
- test/responses/invalids/multiple_signed.xml.base64
|
368
|
+
- test/responses/invalids/no_id.xml.base64
|
369
|
+
- test/responses/invalids/no_saml2.xml.base64
|
370
|
+
- test/responses/invalids/no_signature.xml.base64
|
371
|
+
- test/responses/invalids/no_status.xml.base64
|
372
|
+
- test/responses/invalids/no_status_code.xml.base64
|
373
|
+
- test/responses/invalids/no_subjectconfirmation_data.xml.base64
|
374
|
+
- test/responses/invalids/no_subjectconfirmation_method.xml.base64
|
375
|
+
- test/responses/invalids/response_encrypted_attrs.xml.base64
|
376
|
+
- test/responses/invalids/response_invalid_signed_element.xml.base64
|
377
|
+
- test/responses/invalids/status_code_responder.xml.base64
|
378
|
+
- test/responses/invalids/status_code_responer_and_msg.xml.base64
|
273
379
|
- test/responses/no_signature_ns.xml
|
274
380
|
- test/responses/open_saml_response.xml
|
275
|
-
- test/responses/
|
276
|
-
- test/responses/
|
277
|
-
- test/responses/response2.xml.base64
|
278
|
-
- test/responses/response3.xml.base64
|
279
|
-
- test/responses/response4.xml.base64
|
280
|
-
- test/responses/response5.xml.base64
|
381
|
+
- test/responses/response_assertion_wrapped.xml.base64
|
382
|
+
- test/responses/response_encrypted_nameid.xml.base64
|
281
383
|
- test/responses/response_eval.xml
|
282
384
|
- test/responses/response_no_cert_and_encrypted_attrs.xml
|
283
|
-
- test/responses/
|
385
|
+
- test/responses/response_unsigned_xml_base64
|
284
386
|
- test/responses/response_with_ampersands.xml
|
285
387
|
- test/responses/response_with_ampersands.xml.base64
|
286
388
|
- test/responses/response_with_multiple_attribute_values.xml
|
389
|
+
- test/responses/response_with_saml2_namespace.xml.base64
|
390
|
+
- test/responses/response_with_signed_assertion.xml.base64
|
391
|
+
- test/responses/response_with_signed_assertion_2.xml.base64
|
392
|
+
- test/responses/response_with_undefined_recipient.xml.base64
|
393
|
+
- test/responses/response_without_attributes.xml.base64
|
394
|
+
- test/responses/response_wrapped.xml.base64
|
395
|
+
- test/responses/signed_message_encrypted_signed_assertion.xml.base64
|
396
|
+
- test/responses/signed_message_encrypted_unsigned_assertion.xml.base64
|
287
397
|
- test/responses/simple_saml_php.xml
|
288
|
-
- test/responses/slo_request.xml
|
289
398
|
- test/responses/starfield_response.xml.base64
|
290
399
|
- test/responses/test_sign.xml
|
291
|
-
- test/responses/
|
400
|
+
- test/responses/unsigned_message_aes128_encrypted_signed_assertion.xml.base64
|
401
|
+
- test/responses/unsigned_message_aes192_encrypted_signed_assertion.xml.base64
|
402
|
+
- test/responses/unsigned_message_aes256_encrypted_signed_assertion.xml.base64
|
403
|
+
- test/responses/unsigned_message_des192_encrypted_signed_assertion.xml.base64
|
404
|
+
- test/responses/unsigned_message_encrypted_assertion_without_saml_namespace.xml.base64
|
405
|
+
- test/responses/unsigned_message_encrypted_signed_assertion.xml.base64
|
406
|
+
- test/responses/unsigned_message_encrypted_unsigned_assertion.xml.base64
|
407
|
+
- test/responses/valid_response.xml.base64
|
408
|
+
- test/saml_message_test.rb
|
292
409
|
- test/settings_test.rb
|
293
410
|
- test/slo_logoutrequest_test.rb
|
294
411
|
- test/slo_logoutresponse_test.rb
|
@@ -1 +0,0 @@
|
|
1
|
-
PHNhbWxwOlJlc3BvbnNlIHhtbG5zOnNhbWw9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphc3NlcnRpb24iIHhtbG5zOnNhbWxwPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6cHJvdG9jb2wiIElEPSJHT1NBTUxSMTI5MDExNzQ1NzE3OTQiIFZlcnNpb249IjIuMCIgSXNzdWVJbnN0YW50PSIyMDEwLTExLTE4VDIxOjU3OjM3WiIgRGVzdGluYXRpb249IntyZWNpcGllbnR9Ij4NCiAgPHNhbWxwOlN0YXR1cz4NCiAgICA8c2FtbHA6U3RhdHVzQ29kZSBWYWx1ZT0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnN0YXR1czpTdWNjZXNzIi8+PC9zYW1scDpTdGF0dXM+DQogIDxzYW1sOkFzc2VydGlvbiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIFZlcnNpb249IjIuMCIgSUQ9InBmeGE0NjU3NGRmLWIzYjAtYTA2YS0yM2M4LTYzNjQxMzE5ODc3MiIgSXNzdWVJbnN0YW50PSIyMDEwLTExLTE4VDIxOjU3OjM3WiI+DQogICAgPHNhbWw6SXNzdWVyPmh0dHBzOi8vYXBwLm9uZWxvZ2luLmNvbS9zYW1sL21ldGFkYXRhLzEzNTkwPC9zYW1sOklzc3Vlcj4NCiAgICA8ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4NCiAgICAgIDxkczpTaWduZWRJbmZvPg0KICAgICAgICA8ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPg0KICAgICAgICA8ZHM6U2lnbmF0dXJlTWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3JzYS1zaGExIi8+DQogICAgICAgIDxkczpSZWZlcmVuY2UgVVJJPSIjcGZ4YTQ2NTc0ZGYtYjNiMC1hMDZhLTIzYzgtNjM2NDEzMTk4NzcyIj4NCiAgICAgICAgICA8ZHM6VHJhbnNmb3Jtcz4NCiAgICAgICAgICAgIDxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPg0KICAgICAgICAgICAgPGRzOlRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPg0KICAgICAgICAgIDwvZHM6VHJhbnNmb3Jtcz4NCiAgICAgICAgICA8ZHM6RGlnZXN0TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMC8wOS94bWxkc2lnI3NoYTEiLz4NCiAgICAgICAgICA8ZHM6RGlnZXN0VmFsdWU+cEpRN01TL2VrNEtSUldHbXYvSDQzUmVIWU1zPTwvZHM6RGlnZXN0VmFsdWU+DQogICAgICAgIDwvZHM6UmVmZXJlbmNlPg0KICAgICAgPC9kczpTaWduZWRJbmZvPg0KICAgICAgPGRzOlNpZ25hdHVyZVZhbHVlPnlpdmVLY1BkRHB1RE5qNnNoclEzQUJ3ci9jQTNDcnlEMnBoRy94TFpzektXeFU1L21sYUt0OGV3YlpPZEtLdnRPczJwSEJ5NUR1YTNrOTRBRnp4R3llbDVnT293bW95WEpyQU9ya1BPMHZsaTFWOG8zaFBQVVp3UmdTWDZROXBTMUNxUWdoS2lFYXNSeXlscXFKVWFQWXptT3pPRTgvWGxNa3dpV21PMD08L2RzOlNpZ25hdHVyZVZhbHVlPg0KICAgICAgPGRzOktleUluZm8+DQogICAgICAgIDxkczpYNTA5RGF0YT4NCiAgICAgICAgICA8ZHM6WDUwOUNlcnRpZmljYXRlPk1JSUJyVENDQWFHZ0F3SUJBZ0lCQVRBREJnRUFNR2N4Q3pBSkJnTlZCQVlUQWxWVE1STXdFUVlEVlFRSURBcERZV3hwWm05eWJtbGhNUlV3RXdZRFZRUUhEQXhUWVc1MFlTQk5iMjVwWTJFeEVUQVBCZ05WQkFvTUNFOXVaVXh2WjJsdU1Sa3dGd1lEVlFRRERCQmhjSEF1YjI1bGJHOW5hVzR1WTI5dE1CNFhEVEV3TURNd09UQTVOVGcwTlZvWERURTFNRE13T1RBNU5UZzBOVm93WnpFTE1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ01Da05oYkdsbWIzSnVhV0V4RlRBVEJnTlZCQWNNREZOaGJuUmhJRTF2Ym1sallURVJNQThHQTFVRUNnd0lUMjVsVEc5bmFXNHhHVEFYQmdOVkJBTU1FR0Z3Y0M1dmJtVnNiMmRwYmk1amIyMHdnWjh3RFFZSktvWklodmNOQVFFQkJRQURnWTBBTUlHSkFvR0JBT2pTdTFmalB5OGQ1dzRReUwxemQ0aEl3MU1ra2ZmNFdZL1RMRzhPWmtVNVlUU1dtbUhQRDVrdllINXVvWFMvNnFRODFxWHBSMndWOENUb3daSlVMZzA5ZGRSZFJuOFFzcWoxRnlPQzVzbEUzeTJiWjJvRnVhNzJvZi80OWZwdWpuRlQ2S25RNjFDQk1xbERvVFFxT1Q2MnZHSjhuUDZNWld2QTZzeHF1ZDVBZ01CQUFFd0F3WUJBQU1CQUE9PTwvZHM6WDUwOUNlcnRpZmljYXRlPg0KICAgICAgICA8L2RzOlg1MDlEYXRhPg0KICAgICAgPC9kczpLZXlJbmZvPg0KICAgIDwvZHM6U2lnbmF0dXJlPg0KICAgIDxzYW1sOlN1YmplY3Q+DQogICAgICA8c2FtbDpOYW1lSUQgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoxLjE6bmFtZWlkLWZvcm1hdDplbWFpbEFkZHJlc3MiPnN1cHBvcnQ8IS0tIGF0dGFjayEgLS0+QG9uZWxvZ2luLmNvbTwvc2FtbDpOYW1lSUQ+DQogICAgICA8c2FtbDpTdWJqZWN0Q29uZmlybWF0aW9uIE1ldGhvZD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmNtOmJlYXJlciI+DQogICAgICAgIDxzYW1sOlN1YmplY3RDb25maXJtYXRpb25EYXRhIE5vdE9uT3JBZnRlcj0iMjAxMC0xMS0xOFQyMjowMjozN1oiIFJlY2lwaWVudD0ie3JlY2lwaWVudH0iLz48L3NhbWw6U3ViamVjdENvbmZpcm1hdGlvbj4NCiAgICA8L3NhbWw6U3ViamVjdD4NCiAgICA8c2FtbDpDb25kaXRpb25zIE5vdEJlZm9yZT0iMjAxMC0xMS0xOFQyMTo1MjozN1oiIE5vdE9uT3JBZnRlcj0iMjAxMC0xMS0xOFQyMjowMjozN1oiPg0KICAgICAgPHNhbWw6QXVkaWVuY2VSZXN0cmljdGlvbj4NCiAgICAgICAgPHNhbWw6QXVkaWVuY2U+e2F1ZGllbmNlfTwvc2FtbDpBdWRpZW5jZT4NCiAgICAgIDwvc2FtbDpBdWRpZW5jZVJlc3RyaWN0aW9uPg0KICAgIDwvc2FtbDpDb25kaXRpb25zPg0KICAgIDxzYW1sOkF1dGhuU3RhdGVtZW50IEF1dGhuSW5zdGFudD0iMjAxMC0xMS0xOFQyMTo1NzozN1oiIFNlc3Npb25Ob3RPbk9yQWZ0ZXI9IjIwMTAtMTEtMTlUMjE6NTc6MzdaIiBTZXNzaW9uSW5kZXg9Il81MzFjMzJkMjgzYmRmZjdlMDRlNDg3YmNkYmM0ZGQ4ZCI+DQogICAgICA8c2FtbDpBdXRobkNvbnRleHQ+DQogICAgICAgIDxzYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmPnVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDphYzpjbGFzc2VzOlBhc3N3b3JkPC9zYW1sOkF1dGhuQ29udGV4dENsYXNzUmVmPg0KICAgICAgPC9zYW1sOkF1dGhuQ29udGV4dD4NCiAgICA8L3NhbWw6QXV0aG5TdGF0ZW1lbnQ+DQogICAgPHNhbWw6QXR0cmlidXRlU3RhdGVtZW50Pg0KICAgICAgPHNhbWw6QXR0cmlidXRlIE5hbWU9InN1cm5hbWUiPg0KICAgICAgICA8c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPnM8IS0tIGF0dGFjayEgLS0+bWl0aDwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT4NCiAgICAgIDwvc2FtbDpBdHRyaWJ1dGU+DQogICAgICA8c2FtbDpBdHRyaWJ1dGUgTmFtZT0iYW5vdGhlcl92YWx1ZSI+DQogICAgICAgIDxzYW1sOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+dmFsdWUxPC9zYW1sOkF0dHJpYnV0ZVZhbHVlPg0KICAgICAgICA8c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTp0eXBlPSJ4czpzdHJpbmciPnZhbHVlMjwvc2FtbDpBdHRyaWJ1dGVWYWx1ZT4NCiAgICAgIDwvc2FtbDpBdHRyaWJ1dGU+DQogICAgICA8c2FtbDpBdHRyaWJ1dGUgTmFtZT0icm9sZSI+DQogICAgICAgIDxzYW1sOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+cm9sZTE8L3NhbWw6QXR0cmlidXRlVmFsdWU+DQogICAgICA8L3NhbWw6QXR0cmlidXRlPg0KICAgIDwvc2FtbDpBdHRyaWJ1dGVTdGF0ZW1lbnQ+DQogICAgPHNhbWw6QXR0cmlidXRlU3RhdGVtZW50Pg0KICAgICAgPHNhbWw6QXR0cmlidXRlIE5hbWU9ImZpcnN0bmFtZSI+DQogICAgICAgIDxzYW1sOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnR5cGU9InhzOnN0cmluZyI+Ym9iPC9zYW1sOkF0dHJpYnV0ZVZhbHVlPg0KICAgICAgPC9zYW1sOkF0dHJpYnV0ZT4gIA0KICAgICAgPHNhbWw6QXR0cmlidXRlIE5hbWU9ImF0dHJpYnV0ZV93aXRoX25pbF92YWx1ZSI+DQogICAgICAgIDxzYW1sOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOm5pbD0idHJ1ZSIvPg0KICAgICAgPC9zYW1sOkF0dHJpYnV0ZT4NCiAgICAgIDxzYW1sOkF0dHJpYnV0ZSBOYW1lPSJhdHRyaWJ1dGVfd2l0aF9uaWxzX2FuZF9lbXB0eV9zdHJpbmdzIj4NCiAgICAgICAgPHNhbWw6QXR0cmlidXRlVmFsdWUvPg0KICAgICAgICA8c2FtbDpBdHRyaWJ1dGVWYWx1ZT52YWx1ZVByZXNlbnQ8L3NhbWw6QXR0cmlidXRlVmFsdWU+DQogICAgICAgIDxzYW1sOkF0dHJpYnV0ZVZhbHVlIHhtbG5zOnhzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYSIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOm5pbD0idHJ1ZSIvPg0KICAgICAgICA8c2FtbDpBdHRyaWJ1dGVWYWx1ZSB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEiIHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzaTpuaWw9IjEiLz4NCiAgICAgIDwvc2FtbDpBdHRyaWJ1dGU+DQogICAgPC9zYW1sOkF0dHJpYnV0ZVN0YXRlbWVudD4NCiAgPC9zYW1sOkFzc2VydGlvbj4NCjwvc2FtbHA6UmVzcG9uc2U+
|