bolognese 0.9.21 → 0.9.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +11 -9
  3. data/lib/bolognese/datacite_utils.rb +1 -1
  4. data/lib/bolognese/metadata.rb +1 -1
  5. data/lib/bolognese/readers/citeproc_reader.rb +1 -1
  6. data/lib/bolognese/readers/codemeta_reader.rb +1 -1
  7. data/lib/bolognese/readers/datacite_json_reader.rb +1 -1
  8. data/lib/bolognese/readers/datacite_reader.rb +8 -6
  9. data/lib/bolognese/readers/schema_org_reader.rb +1 -1
  10. data/lib/bolognese/utils.rb +1 -1
  11. data/lib/bolognese/version.rb +1 -1
  12. data/lib/bolognese/writers/bibtex_writer.rb +1 -1
  13. data/lib/bolognese/writers/ris_writer.rb +2 -2
  14. data/lib/bolognese/writers/schema_org_writer.rb +2 -2
  15. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/Funding.yml +99 -0
  16. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/parse_attributes/array_of_strings.yml +144 -0
  17. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_citeproc/container_title.yml +40 -0
  18. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_ris/alternate_name.yml +40 -0
  19. data/spec/readers/codemeta_reader_spec.rb +3 -3
  20. data/spec/readers/datacite_reader_spec.rb +21 -1
  21. data/spec/readers/schema_org_reader_spec.rb +2 -2
  22. data/spec/utils_spec.rb +6 -0
  23. data/spec/writers/citeproc_writer_spec.rb +14 -0
  24. data/spec/writers/rdf_xml_writer_spec.rb +45 -44
  25. data/spec/writers/ris_writer_spec.rb +20 -1
  26. metadata +6 -8
  27. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/BlogPosting.yml +0 -4685
  28. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/BlogPosting_Citeproc_JSON.yml +0 -4589
  29. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/Crossref_DOI.yml +0 -4589
  30. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/journal_article.yml +0 -5317
  31. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/maremma.yml +0 -4686
  32. data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/write_metadata_as_rdf_xml/with_pages.yml +0 -4963
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d4e20d0be37dc7ce7dbc5e59d058fb053d999735
4
- data.tar.gz: 78acdb951bbbbd0be57b2c3dcce7028869930f24
3
+ metadata.gz: 5ba49af039894a0a58bbe004892ff7d88c4f5f23
4
+ data.tar.gz: dcab422988aad91c0dcaf0deb246c8371dd34f2c
5
5
  SHA512:
6
- metadata.gz: 8320cb29b7405378cf834296bf8d5f880faa68ec0133db61cb380a91965625bb5102a25f80cafd16cdfaa4338bba079b14ea76d464d77f161bbcf17e4003d20d
7
- data.tar.gz: a119e2c6c2e573fac81f62c96b40a4c7f30d5dcec10ba67dbd67abcd0fb22071a31c914d7efd0f62fd6f04ccc82c39a0c598f0ba15b2c50154e48aa9e6613e3c
6
+ metadata.gz: 539cd575670c222bfbc08c3964e3d9c323f5f52349db3ce57c1f628325d93357831e785a392018a4ec69cd25a6a08353de5d0c51506d34eddae2398519791d04
7
+ data.tar.gz: cdf2422dc843a1f7f26a55892b84f430de318af9a9d92fbb7a8f3dcc8209c3444495fd4842d43f7dfabb8f7d283cae023645066f98985c7bced9e33b41f75922
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bolognese (0.9.21)
4
+ bolognese (0.9.22)
5
5
  activesupport (>= 4.2.5, < 6)
6
6
  benchmark_methods (~> 0.7)
7
7
  bibtex-ruby (~> 4.1)
@@ -22,7 +22,7 @@ PATH
22
22
  GEM
23
23
  remote: https://rubygems.org/
24
24
  specs:
25
- activesupport (5.1.0)
25
+ activesupport (5.1.1)
26
26
  concurrent-ruby (~> 1.0, >= 1.0.2)
27
27
  i18n (~> 0.7)
28
28
  minitest (~> 5.1)
@@ -53,15 +53,16 @@ GEM
53
53
  faraday (>= 0.7.4, < 1.0)
54
54
  gender_detector (0.1.2)
55
55
  unicode_utils (>= 1.3.0)
56
- haml (4.0.7)
56
+ haml (5.0.1)
57
+ temple (>= 0.8.0)
57
58
  tilt
58
59
  hamster (3.0.0)
59
60
  concurrent-ruby (~> 1.0)
60
61
  hashdiff (0.3.4)
61
62
  htmlentities (4.3.4)
62
- i18n (0.8.1)
63
+ i18n (0.8.4)
63
64
  json (2.1.0)
64
- json-ld (2.1.3)
65
+ json-ld (2.1.4)
65
66
  multi_json (~> 1.12)
66
67
  rdf (~> 2.2)
67
68
  jsonlint (0.2.0)
@@ -96,7 +97,7 @@ GEM
96
97
  nokogiri (>= 1.6.1, < 1.8)
97
98
  public_suffix (>= 2.0.0, < 2.1)
98
99
  public_suffix (2.0.5)
99
- rack (2.0.2)
100
+ rack (2.0.3)
100
101
  rack-test (0.6.3)
101
102
  rack (>= 1.0)
102
103
  rake (12.0.0)
@@ -105,8 +106,8 @@ GEM
105
106
  link_header (~> 0.0, >= 0.0.8)
106
107
  rdf-aggregate-repo (2.2.0)
107
108
  rdf (~> 2.0)
108
- rdf-rdfa (2.2.1)
109
- haml (~> 4.0)
109
+ rdf-rdfa (2.2.2)
110
+ haml (~> 5.0)
110
111
  htmlentities (~> 4.3)
111
112
  rdf (~> 2.2)
112
113
  rdf-aggregate-repo (~> 2.2)
@@ -142,9 +143,10 @@ GEM
142
143
  docile (~> 1.1.0)
143
144
  json (>= 1.8, < 3)
144
145
  simplecov-html (~> 0.10.0)
145
- simplecov-html (0.10.0)
146
+ simplecov-html (0.10.1)
146
147
  sxp (1.0.0)
147
148
  rdf (~> 2.0)
149
+ temple (0.8.0)
148
150
  thor (0.19.4)
149
151
  thread_safe (0.3.6)
150
152
  tilt (2.0.7)
@@ -150,7 +150,7 @@ module Bolognese
150
150
  return xml unless keywords.present?
151
151
 
152
152
  xml.subjects do
153
- keywords.split(", ").each do |subject|
153
+ keywords.each do |subject|
154
154
  xml.subject(subject)
155
155
  end
156
156
  end
@@ -323,7 +323,7 @@ module Bolognese
323
323
  end
324
324
 
325
325
  def container_title
326
- is_part_of.to_h.fetch("title", nil)
326
+ Array.wrap(is_part_of).length == 1 ? is_part_of.to_h.fetch("title", nil) : nil
327
327
  end
328
328
 
329
329
  def descriptions
@@ -64,7 +64,7 @@ module Bolognese
64
64
  "description" => meta.fetch("abstract", nil).present? ? { "text" => sanitize(meta.fetch("abstract")) } : nil,
65
65
  #{ }"license" => { "id" => meta.field?(:copyright) && meta.copyright.to_s.presence },
66
66
  "version" => meta.fetch("version", nil),
67
- "keywords" => meta.fetch("categories", nil)
67
+ "keywords" => Array.wrap(meta.fetch("categories", nil)).split(", ")
68
68
  }
69
69
  end
70
70
  end
@@ -43,7 +43,7 @@ module Bolognese
43
43
  "description" => meta.fetch("description", nil).present? ? { "text" => sanitize(meta.fetch("description")) } : nil,
44
44
  "license" => { "id" => meta.fetch("license", nil) },
45
45
  "version" => meta.fetch("version", nil),
46
- "keywords" => Array.wrap(meta.fetch("tags", nil)).join(", ").presence
46
+ "keywords" => meta.fetch("tags", nil)
47
47
  }
48
48
  end
49
49
 
@@ -41,7 +41,7 @@ module Bolognese
41
41
  "description" => meta.fetch("description", nil),
42
42
  "license" => meta.fetch("license", nil),
43
43
  "version" => meta.fetch("version", nil),
44
- "keywords" => Array.wrap(meta.fetch("subject", nil)).join(", ").presence,
44
+ "keywords" => meta.fetch("subject", nil),
45
45
  "language" => meta.fetch("language", nil),
46
46
  "content_size" => meta.fetch("size", nil),
47
47
  "schema_version" => meta.fetch("schema-version", nil)
@@ -42,12 +42,14 @@ module Bolognese
42
42
  { "id" => normalize_url(r["rightsURI"]), "name" => r["__content__"] }.compact
43
43
  end.unwrap
44
44
  keywords = Array.wrap(meta.dig("subjects", "subject")).map do |k|
45
- if k.is_a?(String)
45
+ if k.nil?
46
+ nil
47
+ elsif k.is_a?(String)
46
48
  sanitize(k)
47
49
  else
48
- k.to_h.fetch("__content__", nil)
50
+ { "subject_scheme" => k["subjectScheme"], "scheme_uri" => k["schemeURI"], "text" => sanitize(k["__content__"]) }.compact
49
51
  end
50
- end.compact.join(", ").presence
52
+ end.compact
51
53
  dates = Array.wrap(meta.dig("dates", "date"))
52
54
  funding = begin
53
55
  f = datacite_funder_contributor(meta) + datacite_funding_reference(meta)
@@ -111,9 +113,9 @@ module Bolognese
111
113
  if f["awardNumber"].present? || f["awardTitle"].present?
112
114
  { "type" => "Award",
113
115
  "name" => f.fetch("awardTitle", nil),
114
- "identifier" => f.dig("awardNumber", "__content__"),
115
- "url" => f.dig("awardNumber", "awardURI"),
116
- "funder" => funder }
116
+ "identifier" => f["awardNumber"].is_a?(Hash) ? f.dig("awardNumber", "__content__") : f["awardNumber"],
117
+ "url" => f["awardNumber"].is_a?(Hash) ? f.dig("awardNumber", "awardURI") : nil,
118
+ "funder" => funder }.compact
117
119
  else
118
120
  funder
119
121
  end
@@ -55,7 +55,7 @@ module Bolognese
55
55
  "description" => meta.fetch("description", nil).present? ? { "text" => sanitize(meta.fetch("description")) } : nil,
56
56
  "license" => { "id" => meta.fetch("license", nil) },
57
57
  "version" => meta.fetch("version", nil),
58
- "keywords" => meta.fetch("keywords", nil)
58
+ "keywords" => meta.fetch("keywords", nil).to_s.split(", ")
59
59
  }
60
60
  end
61
61
 
@@ -293,7 +293,7 @@ module Bolognese
293
293
  elsif element.is_a?(Hash)
294
294
  element.fetch(content, nil)
295
295
  elsif element.is_a?(Array)
296
- a = element.map { |e| e.fetch(content, nil) }.uniq
296
+ a = element.map { |e| e.is_a?(Hash) ? e.fetch(content, nil) : e }.uniq
297
297
  a = options[:first] ? a.first : a.unwrap
298
298
  else
299
299
  nil
@@ -1,3 +1,3 @@
1
1
  module Bolognese
2
- VERSION = "0.9.21"
2
+ VERSION = "0.9.22"
3
3
  end
@@ -10,7 +10,7 @@ module Bolognese
10
10
  doi: doi,
11
11
  url: url,
12
12
  author: authors_as_string(author),
13
- keywords: keywords,
13
+ keywords: Array.wrap(parse_attributes(keywords, content: "text")).join(", "),
14
14
  language: language,
15
15
  title: parse_attributes(title, content: "text", first: true),
16
16
  journal: container_title,
@@ -12,10 +12,10 @@ module Bolognese
12
12
  "DO" => doi,
13
13
  "UR" => url,
14
14
  "AB" => parse_attributes(description, content: "text", first: true),
15
- "KW" => keywords.to_s.split(", ").presence,
15
+ "KW" => parse_attributes(keywords, content: "text").presence,
16
16
  "PY" => publication_year,
17
17
  "PB" => publisher,
18
- "AN" => alternate_name.present? ? alternate_name["name"] : nil,
18
+ "AN" => parse_attributes(alternate_name, content: "name").presence,
19
19
  "LA" => language,
20
20
  "VL" => volume,
21
21
  "IS" => issue,
@@ -10,13 +10,13 @@ module Bolognese
10
10
  "url" => url,
11
11
  "additionalType" => additional_type,
12
12
  "name" => parse_attributes(title, content: "text", first: true),
13
- "alternateName" => alternate_name,
13
+ "alternateName" => parse_attributes(alternate_name, content: "name", first: true),
14
14
  "author" => to_schema_org(author),
15
15
  "editor" => to_schema_org(editor),
16
16
  "description" => parse_attributes(description, content: "text", first: true),
17
17
  "license" => Array.wrap(license).map { |l| l["id"] }.compact.unwrap,
18
18
  "version" => version,
19
- "keywords" => keywords,
19
+ "keywords" => Array.wrap(keywords).join(", ").presence,
20
20
  "inLanguage" => language,
21
21
  "contentSize" => content_size,
22
22
  "dateCreated" => date_created,
@@ -0,0 +1,99 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://api.datacite.org/prefixes/10.15125
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Maremma - https://github.com/datacite/maremma
12
+ Accept:
13
+ - text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: ''
18
+ headers:
19
+ Access-Control-Allow-Headers:
20
+ - Content-Type,Accept,Accept-Encoding,Origin,User-Agent,Cache-Control,Keep-Alive
21
+ Access-Control-Allow-Methods:
22
+ - GET, POST, OPTIONS
23
+ Access-Control-Allow-Origin:
24
+ - "*"
25
+ Access-Control-Max-Age:
26
+ - '1728000'
27
+ Cache-Control:
28
+ - max-age=0, private, must-revalidate
29
+ Content-Type:
30
+ - application/vnd.api+json; charset=utf-8
31
+ Date:
32
+ - Mon, 05 Jun 2017 13:36:39 GMT
33
+ Etag:
34
+ - W/"51c8b6832184f5635e2c8c2da0224b7e"
35
+ Server:
36
+ - openresty/1.11.2.2
37
+ Status:
38
+ - 200 OK
39
+ Vary:
40
+ - Accept-Encoding
41
+ X-Content-Type-Options:
42
+ - nosniff
43
+ X-Frame-Options:
44
+ - SAMEORIGIN
45
+ X-Powered-By:
46
+ - Phusion Passenger 5.1.4
47
+ X-Request-Id:
48
+ - 403df8af-9b51-4522-84ae-28da4046bad6
49
+ X-Runtime:
50
+ - '0.313661'
51
+ X-Xss-Protection:
52
+ - 1; mode=block
53
+ Content-Length:
54
+ - '125'
55
+ Connection:
56
+ - keep-alive
57
+ body:
58
+ encoding: UTF-8
59
+ string: '{"data":{"id":"10.15125","type":"prefixes","attributes":{"registration-agency":"DataCite","updated":"2016-09-21T20:24:28Z"}}}'
60
+ http_version:
61
+ recorded_at: Mon, 05 Jun 2017 13:36:39 GMT
62
+ - request:
63
+ method: get
64
+ uri: https://search.datacite.org/api?fl=doi,xml,media,minted,updated&q=doi:10.15125/bath-00114&wt=json
65
+ body:
66
+ encoding: US-ASCII
67
+ string: ''
68
+ headers:
69
+ User-Agent:
70
+ - Maremma - https://github.com/datacite/maremma
71
+ Accept:
72
+ - text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
73
+ response:
74
+ status:
75
+ code: 200
76
+ message: ''
77
+ headers:
78
+ Access-Control-Allow-Methods:
79
+ - GET, POST, OPTIONS
80
+ Access-Control-Allow-Origin:
81
+ - "*"
82
+ Content-Type:
83
+ - application/json;charset=UTF-8
84
+ Date:
85
+ - Mon, 05 Jun 2017 13:36:39 GMT
86
+ Server:
87
+ - openresty/1.11.2.2
88
+ Content-Length:
89
+ - '14115'
90
+ Connection:
91
+ - keep-alive
92
+ body:
93
+ encoding: UTF-8
94
+ string: '{"responseHeader":{"status":0,"QTime":0},"response":{"numFound":1,"start":0,"docs":[{"xml":"PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHJlc291cmNlIHhtbG5zPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCIgeG1sbnM6eHNpPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxL1hNTFNjaGVtYS1pbnN0YW5jZSIgeHNpOnNjaGVtYUxvY2F0aW9uPSJodHRwOi8vZGF0YWNpdGUub3JnL3NjaGVtYS9rZXJuZWwtNCBodHRwOi8vc2NoZW1hLmRhdGFjaXRlLm9yZy9tZXRhL2tlcm5lbC00L21ldGFkYXRhLnhzZCI+PGlkZW50aWZpZXIgaWRlbnRpZmllclR5cGU9IkRPSSI+MTAuMTUxMjUvQkFUSC0wMDExNDwvaWRlbnRpZmllcj48Y3JlYXRvcnM+PGNyZWF0b3I+PGNyZWF0b3JOYW1lPkJpbWJvLCBOdW5vPC9jcmVhdG9yTmFtZT48Z2l2ZW5OYW1lPk51bm88L2dpdmVuTmFtZT48ZmFtaWx5TmFtZT5CaW1ibzwvZmFtaWx5TmFtZT48bmFtZUlkZW50aWZpZXIgbmFtZUlkZW50aWZpZXJTY2hlbWU9Ik9SQ0lEIiBzY2hlbWVVUkk9Imh0dHA6Ly9vcmNpZC5vcmcvIj4wMDAwLTAwMDEtODc0MC04Mjg0PC9uYW1lSWRlbnRpZmllcj48L2NyZWF0b3I+PGNyZWF0b3I+PGNyZWF0b3JOYW1lPlRpbmcsIFZhbGVza2E8L2NyZWF0b3JOYW1lPjxnaXZlbk5hbWU+VmFsZXNrYTwvZ2l2ZW5OYW1lPjxmYW1pbHlOYW1lPlRpbmc8L2ZhbWlseU5hbWU+PGFmZmlsaWF0aW9uPlVuaXZlcnNpdHkgb2YgQmF0aDwvYWZmaWxpYXRpb24+PC9jcmVhdG9yPjwvY3JlYXRvcnM+PHRpdGxlcz48dGl0bGU+RGF0YXNldCBmb3IgIkRpcmVjdCBFdmlkZW5jZSBmb3IgU29saWQtTGlrZSBIeWRyb2dlbiBpbiBhIE5hbm9wb3JvdXMgQ2FyYm9uIEh5ZHJvZ2VuIFN0b3JhZ2UgTWF0ZXJpYWwgYXQgU3VwZXJjcml0aWNhbCBUZW1wZXJhdHVyZXMiPC90aXRsZT48L3RpdGxlcz48cHVibGlzaGVyPlVuaXZlcnNpdHkgb2YgQmF0aDwvcHVibGlzaGVyPjxwdWJsaWNhdGlvblllYXI+MjAxNTwvcHVibGljYXRpb25ZZWFyPjxzdWJqZWN0cz48c3ViamVjdCBzdWJqZWN0U2NoZW1lPSJSQ1VLIFJlc2VhcmNoIENsYXNzaWZpY2F0aW9ucyIgc2NoZW1lVVJJPSJodHRwOi8vd3d3LnJjdWsuYWMudWsvcmVzZWFyY2gvZWZmaWNpZW5jeS9yZXNlYXJjaGFkbWluL2hhcm1vbmlzYXRpb24vIj5FbmVyZ3kgU3RvcmFnZTwvc3ViamVjdD48c3ViamVjdCBzdWJqZWN0U2NoZW1lPSJSQ1VLIFJlc2VhcmNoIENsYXNzaWZpY2F0aW9ucyIgc2NoZW1lVVJJPSJodHRwOi8vd3d3LnJjdWsuYWMudWsvcmVzZWFyY2gvZWZmaWNpZW5jeS9yZXNlYXJjaGFkbWluL2hhcm1vbmlzYXRpb24vIj5NYXRlcmlhbHMgQ2hhcmFjdGVyaXNhdGlvbjwvc3ViamVjdD48L3N1YmplY3RzPjxyZXNvdXJjZVR5cGUgcmVzb3VyY2VUeXBlR2VuZXJhbD0iRGF0YXNldCI+RGF0YXNldDwvcmVzb3VyY2VUeXBlPjxmdW5kaW5nUmVmZXJlbmNlcz48ZnVuZGluZ1JlZmVyZW5jZT48ZnVuZGVyTmFtZT5FbmdpbmVlcmluZyBhbmQgUGh5c2ljYWwgU2NpZW5jZXMgUmVzZWFyY2ggQ291bmNpbCAoRVBTUkMpPC9mdW5kZXJOYW1lPjxmdW5kZXJJZGVudGlmaWVyIGZ1bmRlcklkZW50aWZpZXJUeXBlPSJDcm9zc3JlZiBGdW5kZXIgSUQiPmh0dHBzOi8vZG9pLm9yZy8xMC4xMzAzOS81MDExMDAwMDAyNjY8L2Z1bmRlcklkZW50aWZpZXI+PGF3YXJkTnVtYmVyPkVQL0owMTY0NTQvMTwvYXdhcmROdW1iZXI+PGF3YXJkVGl0bGU+U1VQRVJHRU4gSHViIEZ1bmRpbmc8L2F3YXJkVGl0bGU+PC9mdW5kaW5nUmVmZXJlbmNlPjxmdW5kaW5nUmVmZXJlbmNlPjxmdW5kZXJOYW1lPkVuZ2luZWVyaW5nIGFuZCBQaHlzaWNhbCBTY2llbmNlcyBSZXNlYXJjaCBDb3VuY2lsIChFUFNSQyk8L2Z1bmRlck5hbWU+PGZ1bmRlcklkZW50aWZpZXIgZnVuZGVySWRlbnRpZmllclR5cGU9IkNyb3NzcmVmIEZ1bmRlciBJRCI+aHR0cHM6Ly9kb2kub3JnLzEwLjEzMDM5LzUwMTEwMDAwMDI2NjwvZnVuZGVySWRlbnRpZmllcj48YXdhcmROdW1iZXI+RVAvSzAyMTEwOS8xPC9hd2FyZE51bWJlcj48YXdhcmRUaXRsZT5JbnRlZ3JhdGVkIHNhZmV0eSBzdHJhdGVnaWVzIGZvciBvbmJvYXJkIGh5ZHJvZ2VuIHN0b3JhZ2Ugc3lzdGVtczwvYXdhcmRUaXRsZT48L2Z1bmRpbmdSZWZlcmVuY2U+PGZ1bmRpbmdSZWZlcmVuY2U+PGZ1bmRlck5hbWU+RW5naW5lZXJpbmcgYW5kIFBoeXNpY2FsIFNjaWVuY2VzIFJlc2VhcmNoIENvdW5jaWwgKEVQU1JDKTwvZnVuZGVyTmFtZT48ZnVuZGVySWRlbnRpZmllciBmdW5kZXJJZGVudGlmaWVyVHlwZT0iQ3Jvc3NyZWYgRnVuZGVyIElEIj5odHRwczovL2RvaS5vcmcvMTAuMTMwMzkvNTAxMTAwMDAwMjY2PC9mdW5kZXJJZGVudGlmaWVyPjxhd2FyZE51bWJlcj5FUC9FMDQwMDcxLzE8L2F3YXJkTnVtYmVyPjxhd2FyZFRpdGxlPlVLIFNVU1RBSU5BQkxFIEhZRFJPR0VOIEVORVJHWSBDT05TT1JUSVVNIENPUkUgUFJPR1JBTU1FPC9hd2FyZFRpdGxlPjwvZnVuZGluZ1JlZmVyZW5jZT48ZnVuZGluZ1JlZmVyZW5jZT48ZnVuZGVyTmFtZT5TY2llbmNlIGFuZCBUZWNobm9sb2d5IEZhY2lsaXRpZXMgQ291bmNpbCAoU1RGQyk8L2Z1bmRlck5hbWU+PGZ1bmRlcklkZW50aWZpZXIgZnVuZGVySWRlbnRpZmllclR5cGU9IkNyb3NzcmVmIEZ1bmRlciBJRCI+aHR0cHM6Ly9kb2kub3JnLzEwLjEzMDM5LzUwMTEwMDAwMDI3MTwvZnVuZGVySWRlbnRpZmllcj48YXdhcmROdW1iZXI+UkIxMjEwMDQxPC9hd2FyZE51bWJlcj48L2Z1bmRpbmdSZWZlcmVuY2U+PGZ1bmRpbmdSZWZlcmVuY2U+PGZ1bmRlck5hbWU+U2NpZW5jZSBhbmQgVGVjaG5vbG9neSBGYWNpbGl0aWVzIENvdW5jaWwgKFNURkMpPC9mdW5kZXJOYW1lPjxmdW5kZXJJZGVudGlmaWVyIGZ1bmRlcklkZW50aWZpZXJUeXBlPSJDcm9zc3JlZiBGdW5kZXIgSUQiPmh0dHBzOi8vZG9pLm9yZy8xMC4xMzAzOS81MDExMDAwMDAyNzE8L2Z1bmRlcklkZW50aWZpZXI+PGF3YXJkTnVtYmVyPlJCMTQxMDYwMjwvYXdhcmROdW1iZXI+PC9mdW5kaW5nUmVmZXJlbmNlPjwvZnVuZGluZ1JlZmVyZW5jZXM+PGNvbnRyaWJ1dG9ycz48Y29udHJpYnV0b3IgY29udHJpYnV0b3JUeXBlPSJSaWdodHNIb2xkZXIiPjxjb250cmlidXRvck5hbWU+VW5pdmVyc2l0eSBvZiBCYXRoPC9jb250cmlidXRvck5hbWU+PC9jb250cmlidXRvcj48L2NvbnRyaWJ1dG9ycz48bGFuZ3VhZ2U+ZW48L2xhbmd1YWdlPjxhbHRlcm5hdGVJZGVudGlmaWVycz48YWx0ZXJuYXRlSWRlbnRpZmllciBhbHRlcm5hdGVJZGVudGlmaWVyVHlwZT0iVVJMIj5odHRwOi8vcmVzZWFyY2hkYXRhLmJhdGguYWMudWsvMTE0LzwvYWx0ZXJuYXRlSWRlbnRpZmllcj48L2FsdGVybmF0ZUlkZW50aWZpZXJzPjxyZWxhdGVkSWRlbnRpZmllcnM+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvMS9ESUZGLTEzMDU1LTEzMDQ5LVRFN19DYXJib25fMTYwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvMi9ESUZGLTEzMDYwLTEzMDQ5LVRFN19DYXJib25fNzAwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvMy9ESUZGLTEzMDYyLTEzMDQ5LVRFN19DYXJib25fMTYwMG1iYXJfSDJfNzdLLVJlYi5kYXQ8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IlVSTCIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0Ij5odHRwOi8vcmVzZWFyY2hkYXRhLmJhdGguYWMudWsvMTE0LzQvRElGRi0xMzA2NS0xMzA0OS1URTdfQ2FyYm9uXzMwMTBtYmFyX0gyXzc3Sy1SZWIuZGF0PC9yZWxhdGVkSWRlbnRpZmllcj48cmVsYXRlZElkZW50aWZpZXIgcmVsYXRlZElkZW50aWZpZXJUeXBlPSJVUkwiIHJlbGF0aW9uVHlwZT0iSGFzUGFydCI+aHR0cDovL3Jlc2VhcmNoZGF0YS5iYXRoLmFjLnVrLzExNC81L0RJRkYtMTMwNjgtMTMwNDktVEU3X0NhcmJvbl82MzAwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvNi9ESUZGLTEzMDczLTEzMDQ5LVRFN19DYXJib25fOTk4MG1iYXJfSDJfNzdLLVJlYi5kYXQ8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IlVSTCIgcmVsYXRpb25UeXBlPSJIYXNQYXJ0Ij5odHRwOi8vcmVzZWFyY2hkYXRhLmJhdGguYWMudWsvMTE0LzcvRElGRi0xMzA3Ny0xMzA0OS1URTdfQ2FyYm9uXzIwNzAwbWJhcl9IMl83N0stUmViLmRhdDwvcmVsYXRlZElkZW50aWZpZXI+PHJlbGF0ZWRJZGVudGlmaWVyIHJlbGF0ZWRJZGVudGlmaWVyVHlwZT0iVVJMIiByZWxhdGlvblR5cGU9Ikhhc1BhcnQiPmh0dHA6Ly9yZXNlYXJjaGRhdGEuYmF0aC5hYy51ay8xMTQvOC9ESUZGLTEzMDYyLTEzMDQ5LVRFN19DYXJib25fMTYwMG1iYXJfSDJfNzdLLVJlYi5kYXQ8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IlVSTCIgcmVsYXRpb25UeXBlPSJJc0RvY3VtZW50ZWRCeSI+aHR0cDovL3Jlc2VhcmNoZGF0YS5iYXRoLmFjLnVrLzExNC85L0FDU19OYW5vX1ZfVGluZ19TdXBwbGVtZW50YXJ5X0luZm9fc3VibWl0dGVkLmRvY3g8L3JlbGF0ZWRJZGVudGlmaWVyPjxyZWxhdGVkSWRlbnRpZmllciByZWxhdGVkSWRlbnRpZmllclR5cGU9IkRPSSIgcmVsYXRpb25UeXBlPSJJc1JlZmVyZW5jZWRCeSI+MTAuMTAyMS9hY3NuYW5vLjViMDI2MjM8L3JlbGF0ZWRJZGVudGlmaWVyPjwvcmVsYXRlZElkZW50aWZpZXJzPjxzaXplcz48c2l6ZT5ESUZGLTEzMDU1LTEzMDQ5LVRFN19DYXJib25fMTYwbWJhcl9IMl83N0stUmViLmRhdCAtIDMza0I8L3NpemU+PHNpemU+RElGRi0xMzA2MC0xMzA0OS1URTdfQ2FyYm9uXzcwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSAzMmtCPC9zaXplPjxzaXplPkRJRkYtMTMwNjItMTMwNDktVEU3X0NhcmJvbl8xNjAwbWJhcl9IMl83N0stUmViLmRhdCAtIDMya0I8L3NpemU+PHNpemU+RElGRi0xMzA2NS0xMzA0OS1URTdfQ2FyYm9uXzMwMTBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gMzJrQjwvc2l6ZT48c2l6ZT5ESUZGLTEzMDY4LTEzMDQ5LVRFN19DYXJib25fNjMwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSAzMmtCPC9zaXplPjxzaXplPkRJRkYtMTMwNzMtMTMwNDktVEU3X0NhcmJvbl85OTgwbWJhcl9IMl83N0stUmViLmRhdCAtIDMxa0I8L3NpemU+PHNpemU+RElGRi0xMzA3Ny0xMzA0OS1URTdfQ2FyYm9uXzIwNzAwbWJhcl9IMl83N0stUmViLmRhdCAtIDMxa0I8L3NpemU+PHNpemU+RElGRi0xMzA2Mi0xMzA0OS1URTdfQ2FyYm9uXzE2MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gMzJrQjwvc2l6ZT48c2l6ZT5BQ1NfTmFub19WX1RpbmdfU3VwcGxlbWVudGFyeV9JbmZvX3N1Ym1pdHRlZC5kb2N4IC0gOTQ1a0I8L3NpemU+PC9zaXplcz48Zm9ybWF0cz48Zm9ybWF0PkRJRkYtMTMwNTUtMTMwNDktVEU3X0NhcmJvbl8xNjBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gdGV4dC9wbGFpbjwvZm9ybWF0Pjxmb3JtYXQ+RElGRi0xMzA2MC0xMzA0OS1URTdfQ2FyYm9uXzcwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDYyLTEzMDQ5LVRFN19DYXJib25fMTYwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDY1LTEzMDQ5LVRFN19DYXJib25fMzAxMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDY4LTEzMDQ5LVRFN19DYXJib25fNjMwMG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDczLTEzMDQ5LVRFN19DYXJib25fOTk4MG1iYXJfSDJfNzdLLVJlYi5kYXQgLSB0ZXh0L3BsYWluPC9mb3JtYXQ+PGZvcm1hdD5ESUZGLTEzMDc3LTEzMDQ5LVRFN19DYXJib25fMjA3MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gdGV4dC9wbGFpbjwvZm9ybWF0Pjxmb3JtYXQ+RElGRi0xMzA2Mi0xMzA0OS1URTdfQ2FyYm9uXzE2MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IC0gdGV4dC9wbGFpbjwvZm9ybWF0Pjxmb3JtYXQ+QUNTX05hbm9fVl9UaW5nX1N1cHBsZW1lbnRhcnlfSW5mb19zdWJtaXR0ZWQuZG9jeCAtIGFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50PC9mb3JtYXQ+PC9mb3JtYXRzPjx2ZXJzaW9uPjE8L3ZlcnNpb24+PHJpZ2h0c0xpc3Q+PHJpZ2h0cz5ESUZGLTEzMDU1LTEzMDQ5LVRFN19DYXJib25fMTYwbWJhcl9IMl83N0stUmViLmRhdCBoYXMgbm8gYXNzb2NpYXRlZCBsaWNlbmNlLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFyY2hpdmUgZm9yIGFkdmljZS48L3JpZ2h0cz48cmlnaHRzPkRJRkYtMTMwNjAtMTMwNDktVEU3X0NhcmJvbl83MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA2Mi0xMzA0OS1URTdfQ2FyYm9uXzE2MDBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA2NS0xMzA0OS1URTdfQ2FyYm9uXzMwMTBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA2OC0xMzA0OS1URTdfQ2FyYm9uXzYzMDBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA3My0xMzA0OS1URTdfQ2FyYm9uXzk5ODBtYmFyX0gyXzc3Sy1SZWIuZGF0IGhhcyBubyBhc3NvY2lhdGVkIGxpY2VuY2UuICBQbGVhc2UgY29udGFjdCB0aGUgYXJjaGl2ZSBmb3IgYWR2aWNlLjwvcmlnaHRzPjxyaWdodHM+RElGRi0xMzA3Ny0xMzA0OS1URTdfQ2FyYm9uXzIwNzAwbWJhcl9IMl83N0stUmViLmRhdCBoYXMgbm8gYXNzb2NpYXRlZCBsaWNlbmNlLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFyY2hpdmUgZm9yIGFkdmljZS48L3JpZ2h0cz48cmlnaHRzPkRJRkYtMTMwNjItMTMwNDktVEU3X0NhcmJvbl8xNjAwbWJhcl9IMl83N0stUmViLmRhdCBoYXMgbm8gYXNzb2NpYXRlZCBsaWNlbmNlLiAgUGxlYXNlIGNvbnRhY3QgdGhlIGFyY2hpdmUgZm9yIGFkdmljZS48L3JpZ2h0cz48cmlnaHRzPkFDU19OYW5vX1ZfVGluZ19TdXBwbGVtZW50YXJ5X0luZm9fc3VibWl0dGVkLmRvY3ggaGFzIG5vIGFzc29jaWF0ZWQgbGljZW5jZS4gIFBsZWFzZSBjb250YWN0IHRoZSBhcmNoaXZlIGZvciBhZHZpY2UuPC9yaWdodHM+PC9yaWdodHNMaXN0PjxkZXNjcmlwdGlvbnM+PGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uVHlwZT0iQWJzdHJhY3QiPkRhdGFzZXQgZm9yIERpcmVjdCBFdmlkZW5jZSBmb3IgU29saWQtTGlrZSBIeWRyb2dlbiBpbiBhIE5hbm9wb3JvdXMgQ2FyYm9uIEh5ZHJvZ2VuIFN0b3JhZ2UgTWF0ZXJpYWwgYXQgU3VwZXJjcml0aWNhbCBUZW1wZXJhdHVyZXMgam91cm5hbCBwYXBlci4mIzEzOwpUaGUgIGRhdGEgc2V0IGluY2x1ZGVzIGluZWxhc3RpYyBuZXV0cm9uIHNjYXR0ZXJpbmcgZGF0YSByYXcgZGF0YSBmaWxlcyAoLmRhdCkgY29sbGVjdGVkIG9uIHRoZSBUT1NDQSBpbnN0cnVtZW50IGF0IHRoZSBJU0lTIG5ldXRyb24gZmFjaWxpdHksIGF0IHRoZSBSdXRoZXJmb3JkIEFwcGxldG9uIExhYm9yYXRvcmllcywgVUsgYXQgdGhlIGZvbGxvd2luZyBoeWRyb2dlbiBwcmVzc3VyZXMgKGF0IDc3IEspIGZvciBhY3RpdmF0ZWQgY2FyYm9uIFRFNzomIzEzOwowLjAxNiBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjA3NCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjE2OCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjMwMCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjYzMCBNUGEgSDIgYXQgNzcgSyAmIzEzOwowLjk5OCBNUGEgSDIgYXQgNzcgSyAmIzEzOwoyLjA3MSBNUGEgSDIgYXQgNzcgSyAmIzEzOwozLjUwMCBNUGEgSDIgYXQgNzcgSyYjMTM7ClRoaXMgZGF0YSBwZXJ0YWlucyB0byBGaWdzIDEsIDIgYW5kIDMgaW4gdGhlIHBhcGVyICZhbXA7cXVvdDsgRGlyZWN0IEV2aWRlbmNlIGZvciBTb2xpZC1MaWtlIEh5ZHJvZ2VuIGluIGEgTmFub3Bvcm91cyBDYXJib24gSHlkcm9nZW4gU3RvcmFnZSBNYXRlcmlhbCBhdCBTdXBlcmNyaXRpY2FsIFRlbXBlcmF0dXJlcyZhbXA7cXVvdDsgKEFDUyBOYW5vLCAyMDE1KS4mIzEzOwomIzEzOwpUaGUgaW50ZWdyYXRlZCBpbnRlbnNpdGllcyB1bmRlciB0aGUgcGVha3Mgd2VyZSBjYWxjdWxhdGVkIGZyb20gdGhlIHJhdyBkYXRhIG92ZXIgdGhlIGZvbGxvd2luZyByYW5nZXM6JiMxMzsKLSBUaGUgdG90YWwgaW5lbGFzdGljIHNpZ25hbCAoaW50ZWdyYXRlZCBpbnRlbnNpdHkgZnJvbSAyIHRvIDUwMCBtZVYpLiAmIzEzOwotIEludGVncmF0ZWQgaW50ZW5zaXR5IHVuZGVyIHRoZSBlbGFzdGljIHBlYWsgZnJvbSAtMiBtZVYgdG8gMiBtZVYuJiMxMzsKLSBJbnRlZ3JhdGVkIGludGVuc2l0eSB1bmRlciB0aGUgMTQuNyBtZVYgcm90b3IgbGluZSBmaXQgdXNpbmcgYSBHYXVzc2lhbiBwZWFrIHNoYXBlJiMxMzsKJiMxMzsKVGhlIGRhdGEgcHJvY2Vzc2luZyBhbmQgcGVhayBpbnRlZ3JhdGlvbiB3YXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBNYW50aWQgc29mdHdhcmUgKGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly93d3cubWFudGlkcHJvamVjdC5vcmcpLjwvZGVzY3JpcHRpb24+PGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uVHlwZT0iTWV0aG9kcyI+VGhlIElOUyBzcGVjdHJhIHdlcmUgY29sbGVjdGVkIG9uIGEg4oi8MTAgZyBzYW1wbGUgb2YgY2FyYm9uIHdhcyBkZWdhc3NlZCA2MjMgSyBmb3IgOCBoIHVuZGVyIGhpZ2ggdmFjdXVtICgwLjEgbVBhKSwgdGhlbiBsb2FkZWQgaW4gYW4gQXIgZ2xvdmVib3ggaW50byBhIGhpZ2ggcHJlc3N1cmUgKDcgTVBhKSBzdGFpbmxlc3Mgc3RlZWwgc2FtcGxlIGNhbiBvbiB0aGUgVE9TQ0EgaW5lbGFzdGljJiMxMzsKbmV1dHJvbiBzY2F0dGVyaW5nIGJlYW1saW5lIGF0IHRoZSBSdXRoZXJmb3JkIEFwcGxldG9uIGxhYm9yYXRvcmllcyYjMTM7CmluIHRoZSBVSy4gSHlkcm9nZW4gd2FzIGRvc2VkIGludG8gdGhlIHNhbXBsZSBhbmQgZXF1aWxpYnJhdGVkIGF0IDc3IEsgYmVmb3JlIHRoZSBwcmVzc3VyZSB3YXMgcmVjb3JkZWQuIERhdGEgd2VyZSBhY2N1bXVsYXRlZCBmb3IgNzAwIM68QSBoLCB3aXRoIHVwIHRvIHRocmVlIHNwZWN0cmEgYmVpbmcgY29sbGVjdGVkIGF0IGVhY2ggcHJlc3N1cmUgb3ZlciBjb2xsZWN0aW9uIHBlcmlvZHMgb2YgOC0gMTIgaCAocHJlc3N1cmVzID0gMC4wMTYsIDAuMDcwLCAwLjE2MCwgMC4zMDEsIDAuNjMwLCAwLjk5OCwgMi4wNzAsIGFuZCAzLjUwMCBNUGEpLjwvZGVzY3JpcHRpb24+PGRlc2NyaXB0aW9uIGRlc2NyaXB0aW9uVHlwZT0iTWV0aG9kcyI+VGhlIGRhdGEgd2VyZSBjb3JyZWN0ZWQgZm9yIHRoZSBwcmVzZW5jZSBvZiB0ZXJtaW5hbCBIIGF0b21zIGluIHRoZSBjYXJib24gYnkgc3VidHJhY3Rpb24gb2YgMTIgaCBiYWNrZ3JvdW5kIHNjYW5zIG9mIHRoZSBkZWdhc3NlZCBzYW1wbGUgYXQgNzcgSy4gJiMxMzsKVGhlIGRhdGEgcHJvY2Vzc2luZyBhbmQgcGVhayBpbnRlZ3JhdGlvbiB3YXMgcGVyZm9ybWVkIHVzaW5nIHRoZSYjMTM7Ck1hbnRpZCBzb2Z0d2FyZSAoYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5tYW50aWRwcm9qZWN0Lm9yZykuPC9kZXNjcmlwdGlvbj48ZGVzY3JpcHRpb24gZGVzY3JpcHRpb25UeXBlPSJNZXRob2RzIj5Ob3JtYWwgaHlkcm9nZW4gZ2FzICB3YXMgdXNlZCAoQWlyIExpcXVpZGUsIDk5Ljk5OSUgcHVyaXR5KTwvZGVzY3JpcHRpb24+PC9kZXNjcmlwdGlvbnM+PGdlb0xvY2F0aW9ucz48Z2VvTG9jYXRpb24+PGdlb0xvY2F0aW9uUGxhY2U+VUs8L2dlb0xvY2F0aW9uUGxhY2U+PC9nZW9Mb2NhdGlvbj48L2dlb0xvY2F0aW9ucz48L3Jlc291cmNlPg==","minted":"2015-12-16T11:50:06Z","updated":"2017-02-16T12:21:39Z","doi":"10.15125/BATH-00114"}]}}
95
+
96
+ '
97
+ http_version:
98
+ recorded_at: Mon, 05 Jun 2017 13:36:39 GMT
99
+ recorded_with: VCR 3.0.3
@@ -0,0 +1,144 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: http://www.crossref.org/openurl/?format=unixref&id=doi:10.1101/097196&noredirect=true&pid=tech@datacite.org
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ User-Agent:
11
+ - Maremma - https://github.com/datacite/maremma
12
+ Accept:
13
+ - text/xml
14
+ response:
15
+ status:
16
+ code: 200
17
+ message: ''
18
+ headers:
19
+ Server:
20
+ - Apache-Coyote/1.1
21
+ Crossref-Deployment-Name:
22
+ - qs2-2
23
+ Content-Type:
24
+ - text/xml;charset=UTF-8
25
+ Content-Language:
26
+ - en-US
27
+ Date:
28
+ - Mon, 05 Jun 2017 12:18:52 GMT
29
+ Connection:
30
+ - close
31
+ body:
32
+ encoding: ASCII-8BIT
33
+ string: !binary |-
34
+ PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRvaV9y
35
+ ZWNvcmRzPg0KICA8ZG9pX3JlY29yZCBvd25lcj0iMTAuMTEwMSIgdGltZXN0
36
+ YW1wPSIyMDE2LTEyLTI5IDAxOjEwOjIwIj4NCiAgICA8Y3Jvc3NyZWY+DQog
37
+ ICAgICA8cG9zdGVkX2NvbnRlbnQgdHlwZT0icHJlcHJpbnQiIGxhbmd1YWdl
38
+ PSJlbiIgbWV0YWRhdGFfZGlzdHJpYnV0aW9uX29wdHM9ImFueSI+DQogICAg
39
+ ICAgIDxncm91cF90aXRsZT5TY2llbnRpZmljIENvbW11bmljYXRpb24gYW5k
40
+ IEVkdWNhdGlvbjwvZ3JvdXBfdGl0bGU+DQogICAgICAgIDxjb250cmlidXRv
41
+ cnM+DQogICAgICAgICAgPHBlcnNvbl9uYW1lIGNvbnRyaWJ1dG9yX3JvbGU9
42
+ ImF1dGhvciIgc2VxdWVuY2U9ImZpcnN0Ij4NCiAgICAgICAgICAgIDxnaXZl
43
+ bl9uYW1lPk1hcnRpbjwvZ2l2ZW5fbmFtZT4NCiAgICAgICAgICAgIDxzdXJu
44
+ YW1lPkZlbm5lcjwvc3VybmFtZT4NCiAgICAgICAgICAgIDxPUkNJRD5odHRw
45
+ Oi8vb3JjaWQub3JnLzAwMDAtMDAwMy0xNDE5LTI0MDU8L09SQ0lEPg0KICAg
46
+ ICAgICAgIDwvcGVyc29uX25hbWU+DQogICAgICAgICAgPHBlcnNvbl9uYW1l
47
+ IGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciIgc2VxdWVuY2U9ImFkZGl0aW9u
48
+ YWwiPg0KICAgICAgICAgICAgPGdpdmVuX25hbWU+TWVyY8OoPC9naXZlbl9u
49
+ YW1lPg0KICAgICAgICAgICAgPHN1cm5hbWU+Q3Jvc2FzPC9zdXJuYW1lPg0K
50
+ ICAgICAgICAgICAgPE9SQ0lEPmh0dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAz
51
+ LTEzMDQtMTkzOTwvT1JDSUQ+DQogICAgICAgICAgPC9wZXJzb25fbmFtZT4N
52
+ CiAgICAgICAgICA8cGVyc29uX25hbWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0
53
+ aG9yIiBzZXF1ZW5jZT0iYWRkaXRpb25hbCI+DQogICAgICAgICAgICA8Z2l2
54
+ ZW5fbmFtZT5KZWZmcmV5PC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgPHN1
55
+ cm5hbWU+R3JldGhlPC9zdXJuYW1lPg0KICAgICAgICAgICAgPE9SQ0lEPmh0
56
+ dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAxLTUyMTItNzA1MjwvT1JDSUQ+DQog
57
+ ICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICA8cGVyc29uX25h
58
+ bWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1ZW5jZT0iYWRkaXRp
59
+ b25hbCI+DQogICAgICAgICAgICA8Z2l2ZW5fbmFtZT5EYXZpZDwvZ2l2ZW5f
60
+ bmFtZT4NCiAgICAgICAgICAgIDxzdXJuYW1lPktlbm5lZHk8L3N1cm5hbWU+
61
+ DQogICAgICAgICAgICA8T1JDSUQ+aHR0cDovL29yY2lkLm9yZy8wMDAwLTAw
62
+ MDItOTM3Ny0wNzk3PC9PUkNJRD4NCiAgICAgICAgICA8L3BlcnNvbl9uYW1l
63
+ Pg0KICAgICAgICAgIDxwZXJzb25fbmFtZSBjb250cmlidXRvcl9yb2xlPSJh
64
+ dXRob3IiIHNlcXVlbmNlPSJhZGRpdGlvbmFsIj4NCiAgICAgICAgICAgIDxn
65
+ aXZlbl9uYW1lPkhlbm5pbmc8L2dpdmVuX25hbWU+DQogICAgICAgICAgICA8
66
+ c3VybmFtZT5IZXJtamFrb2I8L3N1cm5hbWU+DQogICAgICAgICAgICA8T1JD
67
+ SUQ+aHR0cDovL29yY2lkLm9yZy8wMDAwLTAwMDEtODQ3OS0wMjYyPC9PUkNJ
68
+ RD4NCiAgICAgICAgICA8L3BlcnNvbl9uYW1lPg0KICAgICAgICAgIDxwZXJz
69
+ b25fbmFtZSBjb250cmlidXRvcl9yb2xlPSJhdXRob3IiIHNlcXVlbmNlPSJh
70
+ ZGRpdGlvbmFsIj4NCiAgICAgICAgICAgIDxnaXZlbl9uYW1lPlBoaWxpcHBl
71
+ PC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgPHN1cm5hbWU+Um9jY2EtU2Vy
72
+ cmE8L3N1cm5hbWU+DQogICAgICAgICAgICA8T1JDSUQ+aHR0cDovL29yY2lk
73
+ Lm9yZy8wMDAwLTAwMDEtOTg1My01NjY4PC9PUkNJRD4NCiAgICAgICAgICA8
74
+ L3BlcnNvbl9uYW1lPg0KICAgICAgICAgIDxwZXJzb25fbmFtZSBjb250cmli
75
+ dXRvcl9yb2xlPSJhdXRob3IiIHNlcXVlbmNlPSJhZGRpdGlvbmFsIj4NCiAg
76
+ ICAgICAgICAgIDxnaXZlbl9uYW1lPlJvYmluPC9naXZlbl9uYW1lPg0KICAg
77
+ ICAgICAgICAgPHN1cm5hbWU+QmVyam9uPC9zdXJuYW1lPg0KICAgICAgICAg
78
+ ICAgPE9SQ0lEPmh0dHA6Ly9vcmNpZC5vcmcvMDAwMC0wMDAyLTE3MzEtNTM0
79
+ NjwvT1JDSUQ+DQogICAgICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAg
80
+ ICA8cGVyc29uX25hbWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1
81
+ ZW5jZT0iYWRkaXRpb25hbCI+DQogICAgICAgICAgICA8Z2l2ZW5fbmFtZT5T
82
+ ZWJhc3RpYW48L2dpdmVuX25hbWU+DQogICAgICAgICAgICA8c3VybmFtZT5L
83
+ YXJjaGVyPC9zdXJuYW1lPg0KICAgICAgICAgICAgPE9SQ0lEPmh0dHA6Ly9v
84
+ cmNpZC5vcmcvMDAwMC0wMDAxLTgyNDktNzM4ODwvT1JDSUQ+DQogICAgICAg
85
+ ICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgICA8cGVyc29uX25hbWUgY29u
86
+ dHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1ZW5jZT0iYWRkaXRpb25hbCI+
87
+ DQogICAgICAgICAgICA8Z2l2ZW5fbmFtZT5NYXJ5YW5uPC9naXZlbl9uYW1l
88
+ Pg0KICAgICAgICAgICAgPHN1cm5hbWU+TWFydG9uZTwvc3VybmFtZT4NCiAg
89
+ ICAgICAgICAgIDxPUkNJRD5odHRwOi8vb3JjaWQub3JnLzAwMDAtMDAwMi04
90
+ NDA2LTM4NzE8L09SQ0lEPg0KICAgICAgICAgIDwvcGVyc29uX25hbWU+DQog
91
+ ICAgICAgICAgPHBlcnNvbl9uYW1lIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhv
92
+ ciIgc2VxdWVuY2U9ImFkZGl0aW9uYWwiPg0KICAgICAgICAgICAgPGdpdmVu
93
+ X25hbWU+VGltb3RoeTwvZ2l2ZW5fbmFtZT4NCiAgICAgICAgICAgIDxzdXJu
94
+ YW1lPkNsYXJrPC9zdXJuYW1lPg0KICAgICAgICAgICAgPE9SQ0lEPmh0dHA6
95
+ Ly9vcmNpZC5vcmcvMDAwMC0wMDAzLTQwNjAtNzM2MDwvT1JDSUQ+DQogICAg
96
+ ICAgICAgPC9wZXJzb25fbmFtZT4NCiAgICAgICAgPC9jb250cmlidXRvcnM+
97
+ DQogICAgICAgIDx0aXRsZXM+DQogICAgICAgICAgPHRpdGxlPkEgRGF0YSBD
98
+ aXRhdGlvbiBSb2FkbWFwIGZvciBTY2hvbGFybHkgRGF0YSBSZXBvc2l0b3Jp
99
+ ZXM8L3RpdGxlPg0KICAgICAgICA8L3RpdGxlcz4NCiAgICAgICAgPHBvc3Rl
100
+ ZF9kYXRlPg0KICAgICAgICAgIDxtb250aD4xMjwvbW9udGg+DQogICAgICAg
101
+ ICAgPGRheT4yODwvZGF5Pg0KICAgICAgICAgIDx5ZWFyPjIwMTY8L3llYXI+
102
+ DQogICAgICAgIDwvcG9zdGVkX2RhdGU+DQogICAgICAgIDxhY2NlcHRhbmNl
103
+ X2RhdGU+DQogICAgICAgICAgPG1vbnRoPjEyPC9tb250aD4NCiAgICAgICAg
104
+ ICA8ZGF5PjI4PC9kYXk+DQogICAgICAgICAgPHllYXI+MjAxNjwveWVhcj4N
105
+ CiAgICAgICAgPC9hY2NlcHRhbmNlX2RhdGU+DQogICAgICAgIDxpbnN0aXR1
106
+ dGlvbj4NCiAgICAgICAgICA8aW5zdGl0dXRpb25fbmFtZT5iaW9SeGl2PC9p
107
+ bnN0aXR1dGlvbl9uYW1lPg0KICAgICAgICA8L2luc3RpdHV0aW9uPg0KICAg
108
+ ICAgICA8aXRlbV9udW1iZXIgaXRlbV9udW1iZXJfdHlwZT0icGlzYSI+Ymlv
109
+ cnhpdjswOTcxOTZ2MTwvaXRlbV9udW1iZXI+DQogICAgICAgIDxhYnN0cmFj
110
+ dD4NCiAgICAgICAgICA8cD5UaGlzIGFydGljbGUgcHJlc2VudHMgYSBwcmFj
111
+ dGljYWwgcm9hZG1hcCBmb3Igc2Nob2xhcmx5IGRhdGEgcmVwb3NpdG9yaWVz
112
+ IHRvIGltcGxlbWVudCBkYXRhIGNpdGF0aW9uIGluIGFjY29yZGFuY2Ugd2l0
113
+ aCB0aGUgSm9pbnQgRGVjbGFyYXRpb24gb2YgRGF0YSBDaXRhdGlvbiBQcmlu
114
+ Y2lwbGVzIChEYXRhIENpdGF0aW9uIFN5bnRoZXNpcyBHcm91cCwgMjAxNCks
115
+ IGEgc3lub3BzaXMgYW5kIGhhcm1vbml6YXRpb24gb2YgdGhlIHJlY29tbWVu
116
+ ZGF0aW9ucyBvZiBtYWpvciBzY2llbmNlIHBvbGljeSBib2RpZXMuIFRoZSBy
117
+ b2FkbWFwIHdhcyBkZXZlbG9wZWQgYnkgdGhlIFJlcG9zaXRvcmllcyBFYXJs
118
+ eSBBZG9wdGVycyBFeHBlcnQgR3JvdXAsICBwYXJ0IG9mIHRoZSBEYXRhIENp
119
+ dGF0aW9uIEltcGxlbWVudGF0aW9uIFBpbG90IChEQ0lQKSBwcm9qZWN0IChG
120
+ T1JDRTExLCAyMDE1KSwgYW4gaW5pdGlhdGl2ZSBvZiBGT1JDRTExLm9yZyBh
121
+ bmQgdGhlIE5JSCBCaW9DQURESUUgKDIwMTYpIHByb2dyYW0uIFRoZSByb2Fk
122
+ bWFwIG1ha2VzIDExIHNwZWNpZmljIHJlY29tbWVuZGF0aW9ucywgZ3JvdXBl
123
+ ZCBpbnRvIHRocmVlIHBoYXNlcyBvZiBpbXBsZW1lbnRhdGlvbjogYSkgcmVx
124
+ dWlyZWQgc3RlcHMgbmVlZGVkIHRvIHN1cHBvcnQgdGhlIEpvaW50IERlY2xh
125
+ cmF0aW9uIG9mIERhdGEgQ2l0YXRpb24gUHJpbmNpcGxlcywgYikgcmVjb21t
126
+ ZW5kZWQgc3RlcHMgdGhhdCBmYWNpbGl0YXRlIGFydGljbGUvZGF0YSBwdWJs
127
+ aWNhdGlvbiB3b3JrZmxvd3MsIGFuZCBjKSBvcHRpb25hbCBzdGVwcyB0aGF0
128
+ IGZ1cnRoZXIgaW1wcm92ZSBkYXRhIGNpdGF0aW9uIHN1cHBvcnQgcHJvdmlk
129
+ ZWQgYnkgZGF0YSByZXBvc2l0b3JpZXMuPC9wPg0KICAgICAgICA8L2Fic3Ry
130
+ YWN0Pg0KICAgICAgICA8ZG9pX2RhdGE+DQogICAgICAgICAgPGRvaT4xMC4x
131
+ MTAxLzA5NzE5NjwvZG9pPg0KICAgICAgICAgIDx0aW1lc3RhbXA+MjAxNjEy
132
+ MjgyMjEwMDY0OTAwMDwvdGltZXN0YW1wPg0KICAgICAgICAgIDxyZXNvdXJj
133
+ ZT5odHRwOi8vYmlvcnhpdi5vcmcvbG9va3VwL2RvaS8xMC4xMTAxLzA5NzE5
134
+ NjwvcmVzb3VyY2U+DQogICAgICAgICAgPGNvbGxlY3Rpb24gcHJvcGVydHk9
135
+ ImNyYXdsZXItYmFzZWQiPg0KICAgICAgICAgICAgPGl0ZW0gY3Jhd2xlcj0i
136
+ aVBhcmFkaWdtcyI+DQogICAgICAgICAgICAgIDxyZXNvdXJjZT5odHRwczov
137
+ L3N5bmRpY2F0aW9uLmhpZ2h3aXJlLm9yZy9jb250ZW50L2RvaS8xMC4xMTAx
138
+ LzA5NzE5NjwvcmVzb3VyY2U+DQogICAgICAgICAgICA8L2l0ZW0+DQogICAg
139
+ ICAgICAgPC9jb2xsZWN0aW9uPg0KICAgICAgICA8L2RvaV9kYXRhPg0KICAg
140
+ ICAgPC9wb3N0ZWRfY29udGVudD4NCiAgICA8L2Nyb3NzcmVmPg0KICA8L2Rv
141
+ aV9yZWNvcmQ+DQo8L2RvaV9yZWNvcmRzPg==
142
+ http_version:
143
+ recorded_at: Mon, 05 Jun 2017 12:18:52 GMT
144
+ recorded_with: VCR 3.0.3