bolognese 1.1.16 → 1.1.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +9 -8
- data/bolognese.gemspec +1 -0
- data/lib/bolognese/readers/crossref_reader.rb +1 -1
- data/lib/bolognese/version.rb +1 -1
- data/spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/vor_with_url.yml +81 -0
- data/spec/readers/crossref_reader_spec.rb +18 -0
- metadata +24 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22c768dbeab4e5aa663b407e7e61cdff91294828de453edf4338fed31eed438b
|
4
|
+
data.tar.gz: 752a2d696388d767eb3c11219a789198168c8904010c71a9d0f474fc3cbf32d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee1fcf2e10e781c5a40a639870eb03be59fdf54de6708bafd463cc48a7ed24679429c5d54a4f30ffca772b240c01b06c1bbcc7fce78af95ae7edf4022319d7f6
|
7
|
+
data.tar.gz: a4fdb03f3a48bb946959cf6194cd2e749cea3a84580de0b5b0f10b9e0173970e68c20fdf5facae6fbc344283764b44ddf8990cce88e0293454f8bc4b8a5ade46
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bolognese (1.1.
|
4
|
+
bolognese (1.1.17)
|
5
5
|
activesupport (>= 4.2.5, < 6)
|
6
6
|
benchmark_methods (~> 0.7)
|
7
7
|
bibtex-ruby (~> 4.1)
|
@@ -76,7 +76,7 @@ GEM
|
|
76
76
|
tilt
|
77
77
|
hamster (3.0.0)
|
78
78
|
concurrent-ruby (~> 1.0)
|
79
|
-
hashdiff (0.
|
79
|
+
hashdiff (1.0.0.beta1)
|
80
80
|
htmlentities (4.3.4)
|
81
81
|
i18n (1.6.0)
|
82
82
|
concurrent-ruby (~> 1.0)
|
@@ -150,15 +150,15 @@ GEM
|
|
150
150
|
rspec-core (~> 3.8.0)
|
151
151
|
rspec-expectations (~> 3.8.0)
|
152
152
|
rspec-mocks (~> 3.8.0)
|
153
|
-
rspec-core (3.8.
|
153
|
+
rspec-core (3.8.1)
|
154
154
|
rspec-support (~> 3.8.0)
|
155
|
-
rspec-expectations (3.8.
|
155
|
+
rspec-expectations (3.8.4)
|
156
156
|
diff-lcs (>= 1.2.0, < 2.0)
|
157
157
|
rspec-support (~> 3.8.0)
|
158
|
-
rspec-mocks (3.8.
|
158
|
+
rspec-mocks (3.8.1)
|
159
159
|
diff-lcs (>= 1.2.0, < 2.0)
|
160
160
|
rspec-support (~> 3.8.0)
|
161
|
-
rspec-support (3.8.
|
161
|
+
rspec-support (3.8.2)
|
162
162
|
rspec-xsd (0.1.0)
|
163
163
|
nokogiri (~> 1.6)
|
164
164
|
rspec (~> 3)
|
@@ -179,10 +179,10 @@ GEM
|
|
179
179
|
thread_safe (~> 0.1)
|
180
180
|
unicode_utils (1.4.0)
|
181
181
|
vcr (3.0.3)
|
182
|
-
webmock (3.
|
182
|
+
webmock (3.6.0)
|
183
183
|
addressable (>= 2.3.6)
|
184
184
|
crack (>= 0.3.2)
|
185
|
-
hashdiff
|
185
|
+
hashdiff (>= 0.4.0, < 2.0.0)
|
186
186
|
|
187
187
|
PLATFORMS
|
188
188
|
ruby
|
@@ -191,6 +191,7 @@ DEPENDENCIES
|
|
191
191
|
bolognese!
|
192
192
|
bundler (~> 1.0)
|
193
193
|
codeclimate-test-reporter (~> 1.0, >= 1.0.8)
|
194
|
+
hashdiff (>= 1.0.0.beta1, < 2.0.0)
|
194
195
|
rack-test (~> 0)
|
195
196
|
rake (~> 12.0)
|
196
197
|
rspec (~> 3.4)
|
data/bolognese.gemspec
CHANGED
@@ -47,6 +47,7 @@ Gem::Specification.new do |s|
|
|
47
47
|
s.add_development_dependency 'webmock', '~> 3.0', '>= 3.0.1'
|
48
48
|
s.add_development_dependency 'codeclimate-test-reporter', '~> 1.0', '>= 1.0.8'
|
49
49
|
s.add_development_dependency 'simplecov', '~> 0.1'
|
50
|
+
s.add_development_dependency 'hashdiff', ['>= 1.0.0.beta1', '< 2.0.0']
|
50
51
|
|
51
52
|
s.require_paths = ["lib"]
|
52
53
|
s.files = `git ls-files`.split($/)
|
@@ -118,7 +118,7 @@ module Bolognese
|
|
118
118
|
{ "id" => id,
|
119
119
|
"types" => types,
|
120
120
|
"doi" => doi_from_url(doi),
|
121
|
-
"url" => bibliographic_metadata.dig("doi_data", "resource"),
|
121
|
+
"url" => parse_attributes(bibliographic_metadata.dig("doi_data", "resource"), first: true),
|
122
122
|
"titles" => [{ "title" => parse_attributes(bibliographic_metadata.dig("titles", "title")) }],
|
123
123
|
"identifiers" => identifiers,
|
124
124
|
"creators" => crossref_people(bibliographic_metadata, "author"),
|
data/lib/bolognese/version.rb
CHANGED
@@ -0,0 +1,81 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://doi.org/ra/10.1038
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
User-Agent:
|
11
|
+
- Mozilla/5.0 (compatible; Maremma/4.2.1; +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
|
+
Date:
|
20
|
+
- Mon, 24 Jun 2019 06:30:54 GMT
|
21
|
+
Content-Type:
|
22
|
+
- application/json;charset=UTF-8
|
23
|
+
Content-Length:
|
24
|
+
- '54'
|
25
|
+
Connection:
|
26
|
+
- keep-alive
|
27
|
+
Set-Cookie:
|
28
|
+
- __cfduid=dfe4365de50bcf876a61ea63dd7d76a7a1561357854; expires=Tue, 23-Jun-20
|
29
|
+
06:30:54 GMT; path=/; domain=.doi.org; HttpOnly
|
30
|
+
Expect-Ct:
|
31
|
+
- max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
|
32
|
+
Server:
|
33
|
+
- cloudflare
|
34
|
+
Cf-Ray:
|
35
|
+
- 4ebca7df2e46c2c2-FRA
|
36
|
+
body:
|
37
|
+
encoding: ASCII-8BIT
|
38
|
+
string: |-
|
39
|
+
[
|
40
|
+
{
|
41
|
+
"DOI": "10.1038",
|
42
|
+
"RA": "Crossref"
|
43
|
+
}
|
44
|
+
]
|
45
|
+
http_version:
|
46
|
+
recorded_at: Mon, 24 Jun 2019 06:30:54 GMT
|
47
|
+
- request:
|
48
|
+
method: get
|
49
|
+
uri: http://www.crossref.org/openurl/?format=unixref&id=doi:10.1038/hdy.2013.26&noredirect=true&pid=tech@datacite.org
|
50
|
+
body:
|
51
|
+
encoding: US-ASCII
|
52
|
+
string: ''
|
53
|
+
headers:
|
54
|
+
User-Agent:
|
55
|
+
- Mozilla/5.0 (compatible; Maremma/4.2.1; +https://github.com/datacite/maremma)
|
56
|
+
Accept:
|
57
|
+
- text/xml
|
58
|
+
response:
|
59
|
+
status:
|
60
|
+
code: 200
|
61
|
+
message: OK
|
62
|
+
headers:
|
63
|
+
Server:
|
64
|
+
- Apache-Coyote/1.1
|
65
|
+
Crossref-Deployment-Name:
|
66
|
+
- qs5-1
|
67
|
+
Content-Type:
|
68
|
+
- text/xml;charset=UTF-8
|
69
|
+
Content-Language:
|
70
|
+
- en-US
|
71
|
+
Date:
|
72
|
+
- Mon, 24 Jun 2019 06:30:54 GMT
|
73
|
+
Connection:
|
74
|
+
- close
|
75
|
+
body:
|
76
|
+
encoding: ASCII-8BIT
|
77
|
+
string: !binary |-
|
78
|
+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGRvaV9yZWNvcmRzPg0KICA8ZG9pX3JlY29yZCBvd25lcj0iMTAuMTAzOCIgdGltZXN0YW1wPSIyMDE5LTA0LTE2IDEyOjI1OjM2Ij4NCiAgICA8Y3Jvc3NyZWY+DQogICAgICA8am91cm5hbD4NCiAgICAgICAgPGpvdXJuYWxfbWV0YWRhdGEgbGFuZ3VhZ2U9ImVuIj4NCiAgICAgICAgICA8ZnVsbF90aXRsZT5IZXJlZGl0eTwvZnVsbF90aXRsZT4NCiAgICAgICAgICA8YWJicmV2X3RpdGxlPkhlcmVkaXR5PC9hYmJyZXZfdGl0bGU+DQogICAgICAgICAgPGlzc24gbWVkaWFfdHlwZT0icHJpbnQiPjAwMTgtMDY3WDwvaXNzbj4NCiAgICAgICAgICA8aXNzbiBtZWRpYV90eXBlPSJlbGVjdHJvbmljIj4xMzY1LTI1NDA8L2lzc24+DQogICAgICAgIDwvam91cm5hbF9tZXRhZGF0YT4NCiAgICAgICAgPGpvdXJuYWxfaXNzdWU+DQogICAgICAgICAgPHB1YmxpY2F0aW9uX2RhdGUgbWVkaWFfdHlwZT0icHJpbnQiPg0KICAgICAgICAgICAgPG1vbnRoPjg8L21vbnRoPg0KICAgICAgICAgICAgPHllYXI+MjAxMzwveWVhcj4NCiAgICAgICAgICA8L3B1YmxpY2F0aW9uX2RhdGU+DQogICAgICAgICAgPGpvdXJuYWxfdm9sdW1lPg0KICAgICAgICAgICAgPHZvbHVtZT4xMTE8L3ZvbHVtZT4NCiAgICAgICAgICA8L2pvdXJuYWxfdm9sdW1lPg0KICAgICAgICAgIDxpc3N1ZT4yPC9pc3N1ZT4NCiAgICAgICAgPC9qb3VybmFsX2lzc3VlPg0KICAgICAgICA8am91cm5hbF9hcnRpY2xlIHB1YmxpY2F0aW9uX3R5cGU9ImZ1bGxfdGV4dCI+DQogICAgICAgICAgPHRpdGxlcz4NCiAgICAgICAgICAgIDx0aXRsZT5BbGJpbmlzbSBpbiBwaHlsb2dlbmV0aWNhbGx5IGFuZCBnZW9ncmFwaGljYWxseSBkaXN0aW5jdCBwb3B1bGF0aW9ucyBvZiBBc3R5YW5heCBjYXZlZmlzaCBhcmlzZXMgdGhyb3VnaCB0aGUgc2FtZSBsb3NzLW9mLWZ1bmN0aW9uIE9jYTIgYWxsZWxlPC90aXRsZT4NCiAgICAgICAgICA8L3RpdGxlcz4NCiAgICAgICAgICA8Y29udHJpYnV0b3JzPg0KICAgICAgICAgICAgPHBlcnNvbl9uYW1lIGNvbnRyaWJ1dG9yX3JvbGU9ImF1dGhvciIgc2VxdWVuY2U9ImZpcnN0Ij4NCiAgICAgICAgICAgICAgPGdpdmVuX25hbWU+SiBCPC9naXZlbl9uYW1lPg0KICAgICAgICAgICAgICA8c3VybmFtZT5Hcm9zczwvc3VybmFtZT4NCiAgICAgICAgICAgIDwvcGVyc29uX25hbWU+DQogICAgICAgICAgICA8cGVyc29uX25hbWUgY29udHJpYnV0b3Jfcm9sZT0iYXV0aG9yIiBzZXF1ZW5jZT0iYWRkaXRpb25hbCI+DQogICAgICAgICAgICAgIDxnaXZlbl9uYW1lPkg8L2dpdmVuX25hbWU+DQogICAgICAgICAgICAgIDxzdXJuYW1lPldpbGtlbnM8L3N1cm5hbWU+DQogICAgICAgICAgICA8L3BlcnNvbl9uYW1lPg0KICAgICAgICAgIDwvY29udHJpYnV0b3JzPg0KICAgICAgICAgIDxwdWJsaWNhdGlvbl9kYXRlIG1lZGlhX3R5cGU9Im9ubGluZSI+DQogICAgICAgICAgICA8bW9udGg+NDwvbW9udGg+DQogICAgICAgICAgICA8ZGF5PjEwPC9kYXk+DQogICAgICAgICAgICA8eWVhcj4yMDEzPC95ZWFyPg0KICAgICAgICAgIDwvcHVibGljYXRpb25fZGF0ZT4NCiAgICAgICAgICA8cHVibGljYXRpb25fZGF0ZSBtZWRpYV90eXBlPSJwcmludCI+DQogICAgICAgICAgICA8bW9udGg+ODwvbW9udGg+DQogICAgICAgICAgICA8eWVhcj4yMDEzPC95ZWFyPg0KICAgICAgICAgIDwvcHVibGljYXRpb25fZGF0ZT4NCiAgICAgICAgICA8cGFnZXM+DQogICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMjI8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICA8bGFzdF9wYWdlPjEzMDwvbGFzdF9wYWdlPg0KICAgICAgICAgIDwvcGFnZXM+DQogICAgICAgICAgPHB1Ymxpc2hlcl9pdGVtPg0KICAgICAgICAgICAgPGlkZW50aWZpZXIgaWRfdHlwZT0icGlpIj5CRmhkeTIwMTMyNjwvaWRlbnRpZmllcj4NCiAgICAgICAgICA8L3B1Ymxpc2hlcl9pdGVtPg0KICAgICAgICAgIDxwcm9ncmFtIG5hbWU9IkFjY2Vzc0luZGljYXRvcnMiPg0KICAgICAgICAgICAgPGxpY2Vuc2VfcmVmIGFwcGxpZXNfdG89InRkbSI+aHR0cDovL3d3dy5zcHJpbmdlci5jb20vdGRtPC9saWNlbnNlX3JlZj4NCiAgICAgICAgICA8L3Byb2dyYW0+DQogICAgICAgICAgPGRvaV9kYXRhPg0KICAgICAgICAgICAgPGRvaT4xMC4xMDM4L2hkeS4yMDEzLjI2PC9kb2k+DQogICAgICAgICAgICA8dGltZXN0YW1wPjIwMTkwNDE2MTgwMzIxNDkwPC90aW1lc3RhbXA+DQogICAgICAgICAgICA8cmVzb3VyY2UgY29udGVudF92ZXJzaW9uPSJ2b3IiPmh0dHA6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9oZHkyMDEzMjY8L3Jlc291cmNlPg0KICAgICAgICAgICAgPGNvbGxlY3Rpb24gcHJvcGVydHk9ImNyYXdsZXItYmFzZWQiPg0KICAgICAgICAgICAgICA8aXRlbSBjcmF3bGVyPSJpUGFyYWRpZ21zIj4NCiAgICAgICAgICAgICAgICA8cmVzb3VyY2UgbWltZV90eXBlPSJhcHBsaWNhdGlvbi9wZGYiPmh0dHA6Ly93d3cubmF0dXJlLmNvbS9hcnRpY2xlcy9oZHkyMDEzMjYucGRmPC9yZXNvdXJjZT4NCiAgICAgICAgICAgICAgPC9pdGVtPg0KICAgICAgICAgICAgPC9jb2xsZWN0aW9uPg0KICAgICAgICAgICAgPGNvbGxlY3Rpb24gcHJvcGVydHk9InRleHQtbWluaW5nIj4NCiAgICAgICAgICAgICAgPGl0ZW0+DQogICAgICAgICAgICAgICAgPHJlc291cmNlIG1pbWVfdHlwZT0iYXBwbGljYXRpb24vcGRmIj5odHRwOi8vd3d3Lm5hdHVyZS5jb20vYXJ0aWNsZXMvaGR5MjAxMzI2LnBkZjwvcmVzb3VyY2U+DQogICAgICAgICAgICAgIDwvaXRlbT4NCiAgICAgICAgICAgICAgPGl0ZW0+DQogICAgICAgICAgICAgICAgPHJlc291cmNlIG1pbWVfdHlwZT0idGV4dC9odG1sIj5odHRwOi8vd3d3Lm5hdHVyZS5jb20vYXJ0aWNsZXMvaGR5MjAxMzI2PC9yZXNvdXJjZT4NCiAgICAgICAgICAgICAgPC9pdGVtPg0KICAgICAgICAgICAgPC9jb2xsZWN0aW9uPg0KICAgICAgICAgIDwvZG9pX2RhdGE+DQogICAgICAgICAgPGNpdGF0aW9uX2xpc3Q+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjEiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5BbiBFc2MgTmFjIENpZW4gQmlvbCBNw6l4aWNvPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkogQWx2YXJlejwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjQ8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjYzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk0NjwvY1llYXI+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+QWx2YXJleiBKIC4gKDE5NDYpLiBSZXZpc2nDs24gZGVsIGfDqW5lcm8gQW5vcHRpY2h0aHlzIGNvbiBkZXNjaXBjacOzbiBkZSB1bmEgZXNwZWNpZSBudWV2YSAoUGlzY2VzLCBDaGFyYWNpZGFlKS4gQW4gRXNjIE5hYyBDaWVuIEJpb2wgTcOpeGljbyA0OiAyNjPigJMyODIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IyIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+Q3VyciBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlIgQm9yb3dza3k8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xODwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT5SMjM8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDA4PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDE2L2ouY3ViLjIwMDcuMTEuMDIzPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+Qm9yb3dza3kgUiAuICgyMDA4KS4gUmVzdG9yaW5nIHNpZ2h0IGluIGJsaW5kIGNhdmVmaXNoLiBDdXJyIEJpb2wgMTg6IFIyM+KAk1IyNC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjMiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5KIEhlcmVkPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlIgQm9yb3dza3k8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT45Mzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xOTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDI8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwOTMvamhlcmVkLzkzLjEuMTk8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Cb3Jvd3NreSBSLCBXaWxrZW5zIEggLiAoMjAwMikuIE1hcHBpbmcgYSBjYXZlIGZpc2ggZ2Vub21lOiBQb2x5Z2VuaWMgc3lzdGVtcyBhbmQgcmVncmVzc2l2ZSBldm9sdXRpb24uIEogSGVyZWQgOTM6IDE54oCTMjEuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1I0Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+Qk1DIEV2b2wgQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5NIEJyYWRpYzwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEyPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjk8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDEyPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMTg2LzE0NzEtMjE0OC0xMi05PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+QnJhZGljIE0sIEJlZXJsaSBQLCBHYXJjw61hLWRlIExlw7NuIEZKLCBFc3F1aXZlbC1Cb2JhZGlsbGEgUywgQm9yb3dza3kgUiAuICgyMDEyKS4gR2VuZSBmbG93IGFuZCBwb3B1bGF0aW9uIHN0cnVjdHVyZSBpbiB0aGUgTWV4aWNhbiBibGluZCBjYXZlZmlzaCBjb21wbGV4IChBc3R5YW5heCBtZXhpY2FudXMpLiBCTUMgRXZvbCBCaW9sIDEyOiA5LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogTWFtbWFsPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkRIIEJyb3duPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mzc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzExPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk1NjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMjMwNy8xMzc2NzMwPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+QnJvd24gREgsIE5vcnJpcyBLUyAuICgxOTU2KS4gT2JzZXJ2YXRpb25zIG9mIGNhcHRpdmUgYW5kIHdpbGQgY2V0YWNlYW5zLiBKIE1hbW1hbCAzNzogMzEx4oCTMzI2LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNiI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlpvbyBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlMgQ2xhcms8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4yMTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT41MTk8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDAyPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDAyL3pvby4xMDA2ODwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkNsYXJrIFMgLiAoMjAwMikuIEZpcnN0IHJlcG9ydCBvZiBhbGJpbmlzbSBpbiB0aGUgd2hpdGUtc3BvdHRlZCBiYW1ib28gc2hhcmssIENoaWxvc2N5bGxpdW0gcGxhZ2lvc3VtIChPcmVjdG9sb2JpZm9ybWVzOiBIZW1pc2N5bGxpZGFlKSwgd2l0aCBhIHJldmlldyBvZiByZXBvcnRlZCBjb2xvciBhYmVycmF0aW9ucyBpbiBlbGFzbW9icmFuY2hzLiBab28gQmlvbCAyMTogNTE54oCTNTI0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNyI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPlNjaWVuY2U8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+UEYgQ29sb3NpbW88L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4zMDc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTkyODwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjExMjYvc2NpZW5jZS4xMTA3MjM5PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+Q29sb3NpbW8gUEYsIEhvc2VtYW5uIEtFLCBCYWxhYmhhZHJhIFMsIFZpbGxhcnJlYWwgRyBKciwgRGlja3NvbiBNLCBHcmltd29vZCBKIGV0IGFsLiAoMjAwNSkuIFdpZGVzcHJlYWQgcGFyYWxsZWwgZXZvbHV0aW9uIGluIHN0aWNrbGViYWNrcyBieSByZXBlYXRlZCBmaXhhdGlvbiBvZiBFY3RvZHlzcGxhc2luIGFsbGVsZXMuIFNjaWVuY2UgMzA3OiAxOTI44oCTMTkzMy48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjgiPg0KICAgICAgICAgICAgICA8YXV0aG9yPkRDIEN1bHZlcjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5NTwvY1llYXI+DQogICAgICAgICAgICAgIDx2b2x1bWVfdGl0bGU+QWRhcHRhdGlvbiBhbmQgTmF0dXJhbCBTZWxlY3Rpb24gaW4gQ2F2ZXM6IFRoZSBFdm9sdXRpb24gb2YgR2FtbWFydXMgbWludXM8L3ZvbHVtZV90aXRsZT4NCiAgICAgICAgICAgICAgPGRvaT4xMC40MTU5L2hhcnZhcmQuOTc4MDY3NDQxOTA3MDwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkN1bHZlciBEQywgS2FuZSBUQywgRm9uZyBEVyAuICgxOTk1KSBBZGFwdGF0aW9uIGFuZCBOYXR1cmFsIFNlbGVjdGlvbiBpbiBDYXZlczogVGhlIEV2b2x1dGlvbiBvZiBHYW1tYXJ1cyBtaW51cy4gSGFydmFyZCBVbml2ZXJzaXR5IFByZXNzOiBDYW1icmlkZ2UsIE1BLCBVU0EuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1I5Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5EQyBDdWx2ZXI8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzgxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMDwvY1llYXI+DQogICAgICAgICAgICAgIDx2b2x1bWVfdGl0bGU+U3VidGVycmFuZWFuIEVjb3N5c3RlbXM8L3ZvbHVtZV90aXRsZT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5DdWx2ZXIgREMsIFdpbGtlbnMgSCAuICgyMDAwKS4gQ3JpdGljYWwgcmV2aWV3IG9mIHRoZSByZWxldmFudCB0aGVvcmllcyBvZiB0aGUgZXZvbHV0aW9uIG9mIHN1YnRlcnJhbmVhbiBhbmltYWxzLiBJbjogV2lsa2VucyBILCBDdWx2ZXIgREMsIEh1bXBocmV5cyBXRiwgKGVkcykuIFN1YnRlcnJhbmVhbiBFY29zeXN0ZW1zLiBFbHNldmllcjogQW1zdGVyZGFtLCB0aGUgTmV0aGVybGFuZHMuIHBwIDM4MeKAkzM5OC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjEwIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+TW9sIEJpb2wgRXZvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5URSBEb3dsaW5nPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTk8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NDQ2PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTA5My9veGZvcmRqb3VybmFscy5tb2xiZXYuYTAwNDEwMDwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkRvd2xpbmcgVEUsIE1hcnRhc2lhbiBEUCwgSmVmZmVyeSBXUiAuICgyMDAyKS4gRXZpZGVuY2UgZm9yIG11bHRpcGxlIGdlbmV0aWMgZm9ybXMgd2l0aCBzaW1pbGFyIGV5ZWxlc3MgcGhlbm90eXBlcyBpbiB0aGUgYmxpbmQgY2F2ZWZpc2gsIEFzdHlhbmF4IG1leGljYW51cy4gTW9sIEJpb2wgRXZvbCAxOTogNDQ24oCTNDU1LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTEiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Bbm4gUmV2IEVjb2wgU3lzdDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5EVyBGb25nPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjY8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjQ5PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5NTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTE0Ni9hbm51cmV2LmVzLjI2LjExMDE5NS4wMDEzNDE8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Gb25nIERXLCBLYW5lIFRDLCBDdWx2ZXIgREMgLiAoMTk5NSkuIFZlc3RpZ2lhbGl6YXRpb24gYW5kIGxvc3Mgb2Ygbm9uZnVuY3Rpb25hbCBjaGFyYWN0ZXJzLiBBbm4gUmV2IEVjb2wgU3lzdCAyNjogMjQ54oCTMjY4LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTIiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5ab28gQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5SIEZyYW5raGFtPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+NTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMjc8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTg2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDAyL3pvby4xNDMwMDUwMjA3PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+RnJhbmtoYW0gUiwgSGVtbWVyIEgsIFJ5ZGVyIE9BLCBDb3RocmFuIEVHLCBTb3Vsw6kgTUUsIE11cnJheSBORCBldCBhbC4gKDE5ODYpLiBTZWxlY3Rpb24gaW4gY2FwdGl2ZSBwb3B1bGF0aW9ucy4gWm9vIEJpb2wgNTogMTI34oCTMTM4LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTMiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CTUMgRXZvbCBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkpCIEdyb3NzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTI8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTA1PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTE4Ni8xNDcxLTIxNDgtMTItMTA1PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+R3Jvc3MgSkIgLiAoMjAxMikuIFRoZSBjb21wbGV4IG9yaWdpbiBvZiBBc3R5YW5heCBjYXZlZmlzaC4gQk1DIEV2b2wgQmlvbCAxMjogMTA1LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTQiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5QTG9TIEdlbmV0PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkpCIEdyb3NzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+NTwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT5lMTAwMDMyNjwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDk8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEzNzEvam91cm5hbC5wZ2VuLjEwMDAzMjY8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Hcm9zcyBKQiwgQm9yb3dza3kgUiwgVGFiaW4gQ0ogLiAoMjAwOSkuIEEgbm92ZWwgcm9sZSBmb3IgTWMxciBpbiB0aGUgcGFyYWxsZWwgZXZvbHV0aW9uIG9mIGRlcGlnbWVudGF0aW9uIGluIGluZGVwZW5kZW50IHBvcHVsYXRpb25zIG9mIHRoZSBjYXZlZmlzaCBBc3R5YW5heCBtZXhpY2FudXMuIFBMb1MgR2VuZXQgNTogZTEwMDAzMjYuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IxNSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbCBQaHlsb2dlbmV0IEV2b2w8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+QiBIYXVzZG9yZjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjYwPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjg5PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi9qLnltcGV2LjIwMTEuMDMuMDA5PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+SGF1c2RvcmYgQiwgV2lsa2VucyBILCBTdHJlY2tlciBVIC4gKDIwMTEpLiBQb3B1bGF0aW9uIGdlbmV0aWMgcGF0dGVybnMgcmV2ZWFsZWQgYnkgbWljcm9zYXRlbGxpdGUgZGF0YSBjaGFsbGVuZ2UgdGhlIG1pdG9jaG9uZHJpYWwgRE5BIGJhc2VkIHRheG9ub215IG9mIEFzdHlhbmF4IGluIE1leGljbyAoQ2hhcmFjaWRhZSwgVGVsZW9zdGVpKS4gTW9sIFBoeWxvZ2VuZXQgRXZvbCA2MDogODnigJM5Ny48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjE2Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+T2NjYXMgUGFwZXJzIE11cyBab29sLCBVbml2IE1pY2hpZ2FuPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkNMIEh1YmJzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MzQyPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTM2PC9jWWVhcj4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5IdWJicyBDTCwgSW5uZXMgV1QgLiAoMTkzNikuIFRoZSBmaXJzdCBrbm93biBibGluZCBmaXNoIG9mIHRoZSBmYW1pbHkgQ2hhcmFjaWRhZTogQSBuZXcgZ2VudXMgZnJvbSBNZXhpY28uIE9jY2FzIFBhcGVycyBNdXMgWm9vbCwgVW5pdiBNaWNoaWdhbiAzNDI6IDHigJM3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMTciPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5EZXYgQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5XUiBKZWZmZXJ5PC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjMxPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDAxPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDA2L2RiaW8uMjAwMC4wMTIxPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+SmVmZmVyeSBXUiAuICgyMDAxKS4gQ2F2ZWZpc2ggYXMgYSBtb2RlbCBzeXN0ZW0gaW4gZXZvbHV0aW9uYXJ5IGRldmVsb3BtZW50YWwgYmlvbG9neS4gRGV2IEJpb2wgMjMxOiAx4oCTMTIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IxOCI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogSGVyZWQ8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+V1IgSmVmZmVyeTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjk2PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE4NTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwOTMvamhlcmVkL2VzaTAyODwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkplZmZlcnkgV1IgLiAoMjAwNSkuIEFkYXB0aXZlIGV2b2x1dGlvbiBvZiBleWUgZGVnZW5lcmF0aW9uIGluIHRoZSBNZXhpY2FuIGJsaW5kIGNhdmVmaXNoLiBKIEhlcmVkIDk2OiAxODXigJMxOTYuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IxOSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkFubnUgUmV2IEdlbmV0PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPldSIEplZmZlcnk8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT40Mzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4yNTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDk8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjExNDYvYW5udXJldi1nZW5ldC0xMDIxMDgtMTM0MjE2PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+SmVmZmVyeSBXUiAuICgyMDA5KS4gUmVncmVzc2l2ZSBldm9sdXRpb24gaW4gQXN0eWFuYXggY2F2ZWZpc2guIEFubnUgUmV2IEdlbmV0IDQzOiAyNeKAkzQ3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjAiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5ab28gQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5MIExhaWtyZTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE4PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjgxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5OTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAwMi8oU0lDSSkxMDk4LTIzNjEoMTk5OSkxODoyJmx0OzgxOjpBSUQtWk9PMSZndDszLjAuQ087Mi0yPC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+TGFpa3JlIEwgLiAoMTk5OSkuIEhlcmVkaXRhcnkgZGVmZWN0cyBhbmQgY29uc2VydmF0aW9uIGdlbmV0aWMgbWFuYWdlbWVudCBvZiBjYXB0aXZlIHBvcHVsYXRpb25zLiBab28gQmlvbCAxODogODHigJM5OS48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjIxIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+R2Vub21pY3M8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+U1QgTGVlPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjY8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzU0PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk5NTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi8wODg4LTc1NDMoOTUpODAyMjAtRzwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPkxlZSBTVCwgTmljaG9sbHMgUkQsIEpvbmcgTVQsIEZ1a2FpIEssIFNwcml0eiBSQSAuICgxOTk1KS4gT3JnYW5pemF0aW9uIGFuZCBzZXF1ZW5jZSBvZiB0aGUgaHVtYW4gUCBnZW5lIGFuZCBpZGVudGlmaWNhdGlvbiBvZiBhIG5ldyBmYW1pbHkgb2YgdHJhbnNwb3J0IHByb3RlaW5zLiBHZW5vbWljcyAyNjogMzU04oCTMzYzLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjIiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CaW9sIENvbnNlcnY8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+TUUgTWNQaGVlPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTE1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjcxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwNDwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi9TMDAwNi0zMjA3KDAzKTAwMDk1LTg8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5NY1BoZWUgTUUgLiAoMjAwNCkuIEdlbmVyYXRpb25zIGluIGNhcHRpdml0eSBpbmNyZWFzZXMgYmVoYXZpb3JhbCB2YXJpYW5jZTogQ29uc2lkZXJhdGlvbnMgZm9yIGNhcHRpdmUgYnJlZWRpbmcgYW5kIHJlaW50cm9kdWN0aW9uIHByb2dyYW1zLiBCaW9sIENvbnNlcnYgMTE1OiA3MeKAkzc3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjMiPg0KICAgICAgICAgICAgICA8YXV0aG9yPlJXIE1pdGNoZWxsPC9hdXRob3I+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTc3PC9jWWVhcj4NCiAgICAgICAgICAgICAgPHZvbHVtZV90aXRsZT5NZXhpY2FuIEV5ZWxlc3MgQ2hhcmFjaW4gRmlzaGVzLCBHZW51cyBBc3R5YW5heDogRW52aXJvbm1lbnQsIERpc3RyaWJ1dGlvbiwgYW5kIEV2b2x1dGlvbjwvdm9sdW1lX3RpdGxlPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPk1pdGNoZWxsIFJXLCBSdXNzZWxsIFdILCBFbGxpb3R0IFdSIC4gKDE5NzcpIE1leGljYW4gRXllbGVzcyBDaGFyYWNpbiBGaXNoZXMsIEdlbnVzIEFzdHlhbmF4OiBFbnZpcm9ubWVudCwgRGlzdHJpYnV0aW9uLCBhbmQgRXZvbHV0aW9uLiBUZXhhcyBUZWNoIFByZXNzOiBMdWJib2NrLCBUWCwgVVNBLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjQiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CTUMgRXZvbCBCaW9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkNQIE9ybmVsYXMtR2FyY8OtYTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjg8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MzQwPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwODwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTE4Ni8xNDcxLTIxNDgtOC0zNDA8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Pcm5lbGFzLUdhcmPDrWEgQ1AsIERvbcOtbmd1ZXotRG9tw61uZ3VleiBPLCBEb2FkcmlvIEkgLiAoMjAwOCkuIEV2b2x1dGlvbmFyeSBoaXN0b3J5IG9mIHRoZSBmaXNoIGdlbnVzIEFzdHlhbmF4IEJhaXJkICZhbXA7IEdpcmFyZCAoMTg1NCkgKEFjdGlub3B0ZXJ5Z2lpLCBDaGFyYWNpZGFlKSBpbiBNZXNvYW1lcmljYSByZXZlYWxzIG11bHRpcGxlIG1vcnBob2xvZ2ljYWwgaG9tb3BsYXNpZXMuIEJNQyBFdm9sIEJpb2wgODogMzQwLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjUiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5UcmVuZHMgRWNvbCBFdm9sPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkYgUGVsbGV0aWVyPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MjQ8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjYzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwOTwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAxNi9qLnRyZWUuMjAwOC4xMS4wMTM8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5QZWxsZXRpZXIgRiwgUsOpYWxlIEQsIFdhdHRlcnMgSiwgQm9ha2VzIEVILCBHYXJhbnQgRCAuICgyMDA5KS4gVmFsdWUgb2YgY2FwdGl2ZSBwb3B1bGF0aW9ucyBmb3IgcXVhbnRpdGF0aXZlIGdlbmV0aWNzIHJlc2VhcmNoLiBUcmVuZHMgRWNvbCBFdm9sIDI0OiAyNjPigJMyNzAuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IyNiI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogWm9vbCBTeXN0IEV2b2wgUmVzPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlZOIFBldGVyczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEzPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjExMDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NzU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjExMTEvai4xNDM5LTA0NjkuMTk3NS50YjAwNTA0Lng8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5QZXRlcnMgVk4sIFNjaG9sbCBBLCBXaWxrZW5zIEggLiAoMTk3NSkuIERlciBNaWNvcy1GaXNjaCwgSMO2aGxlbmZpc2NoIGluIHN0YXR1IG5hc2NlbmRpIG9kZXIgQmFzdGFyZD8gRWluIEJlaXRyYWcgenVyIEV2b2x1dGlvbiBkZXIgSMO2aGxlbnRpZXJlLiBKIFpvb2wgU3lzdCBFdm9sIFJlcyAxMzogMTEw4oCTMTI0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjciPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5BY3RhIENhcnNvbG9naWNhPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPk1MIFBvcnRlcjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjM2PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjE3MzwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDc8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjM5ODYvYWMudjM2aTEuMjE5PC9kb2k+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+UG9ydGVyIE1MLCBEaXR0bWFyIEssIFDDqXJlei1Mb3NhZGEgTSAuICgyMDA3KS4gSG93IGxvbmcgZG9lcyBldm9sdXRpb24gb2YgdGhlIHRyb2dsb21vcnBoaWMgZm9ybSB0YWtlPyBFc3RpbWF0aW5nIGRpdmVyZ2VuY2UgdGltZXMgaW4gQXN0eWFuYXggbWV4aWNhbnVzLiBBY3RhIENhcnNvbG9naWNhIDM2OiAxNzPigJMxODIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IyOCI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkN1cnIgQmlvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5NIFByb3RhczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjE3PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQ1MjwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDc8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwMTYvai5jdWIuMjAwNy4wMS4wNTE8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Qcm90YXMgTSwgQ29ucmFkIE0sIEdyb3NzIEpCLCBUYWJpbiBDLCBCb3Jvd3NreSBSIC4gKDIwMDcpLiBSZWdyZXNzaXZlIGV2b2x1dGlvbiBpbiB0aGUgTWV4aWNhbiBjYXZlIHRldHJhLCBBc3R5YW5heCBtZXhpY2FudXMuIEN1cnIgQmlvbCAxNzogNDUy4oCTNDU0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMjkiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5OYXQgR2VuZXQ8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+TUUgUHJvdGFzPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mzg8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MTA3PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwNjwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAzOC9uZzE3MDA8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5Qcm90YXMgTUUsIEhlcnNleSBDLCBLb2NoYW5layBELCBaaG91IFksIFdpbGtlbnMgSCwgSmVmZmVyeSBXUiBldCBhbC4gKDIwMDYpLiBHZW5ldGljIGFuYWx5c2lzIG9mIGNhdmVmaXNoIHJldmVhbHMgbW9sZWN1bGFyIGNvbnZlcmdlbmNlIGluIHRoZSBldm9sdXRpb24gb2YgYWxiaW5pc20uIE5hdCBHZW5ldCAzODogMTA34oCTMTExLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzAiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5FeHBlcmllbnRpYTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5QIMWeYWRvxJ9sdTwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjEzPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjM5NDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NTU8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwMDcvQkYwMjE2MTExMTwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPsWeYWRvxJ9sdSBQIC4gKDE5NTUpLiBBIE1lbmRlbGlhbiBnZW5lIGZvciBhbGJpbmlzbSBpbiBuYXR1cmFsIGNhdmUgZmlzaC4gRXhwZXJpZW50aWEgMTM6IDM5NOKAkzM5NS48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjMxIj4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+VmVyaCBEdHNjaCBab29sIEdlcyBHcmF6PC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPlAgxZ5hZG/En2x1PC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTk1Nzwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT40MzI8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4xOTU3PC9jWWVhcj4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj7FnmFkb8SfbHUgUCAuICgxOTU3KS4gTWVuZGVsaWFuIGluaGVyaXRhbmNlIGluIHRoZSBoeWJyaWRzIGJldHdlZW4gdGhlIE1leGljYW4gYmxpbmQgY2F2ZSBmaXNoZXMgYW5kIHRoZWlyIG92ZXJncm91bmQgYW5jZXN0b3IuIFZlcmggRHRzY2ggWm9vbCBHZXMgR3JheiAxOTU3OiA0MzLigJM0MzkuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IzMiI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkogSGVyZWQ8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+UCDFnmFkb8SfbHU8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT42MDwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xMDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5Njk8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwOTMvb3hmb3Jkam91cm5hbHMuamhlcmVkLmExMDc5MTc8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj7FnmFkb8SfbHUgUCwgTWNLZWUgQSAuICgxOTY5KS4gQSBzZWNvbmQgZ2VuZSB0aGF0IGFmZmVjdHMgZXllIGFuZCBib2R5IGNvbG9yIGluIE1leGljYW4gYmxpbmQgY2F2ZSBmaXNoLiBKIEhlcmVkIDYwOiAxMOKAkzE0LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzMiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5ab29sb2dpY2E8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+U1IgU2NobGFnZWw8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4zMjwvdm9sdW1lPg0KICAgICAgICAgICAgICA8Zmlyc3RfcGFnZT4xNzwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NDc8L2NZZWFyPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPlNjaGxhZ2VsIFNSLCBCcmVkZXIgQ00gLiAoMTk0NykuIEEgc3R1ZHkgb2Ygb3h5Z2VuIGNvbnN1bXB0aW9uIG9mIGJsaW5kIGFuZCBleWVkIGNhdmUgY2hhcmFjaW5zIGluIGxpZ2h0IGFuZCBpbiBkYXJrbmVzcy4gWm9vbG9naWNhIDMyOiAxN+KAkzI4LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzQiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5Nb2wgRWNvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5VIFN0cmVja2VyPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+MTI8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+Njk5PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTA0Ni9qLjEzNjUtMjk0WC4yMDAzLjAxNzUzLng8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5TdHJlY2tlciBVLCBCZXJuYXRjaGV6IEwsIFdpbGtlbnMgSCAuICgyMDAzKS4gR2VuZXRpYyBkaXZlcmdlbmNlIGJldHdlZW4gY2F2ZSBhbmQgc3VyZmFjZSBwb3B1bGF0aW9ucyBvZiBBc3R5YW5heCBpbiBNZXhpY28gKENoYXJhY2lkYWUsIFRlbGVvc3RlaSkuIE1vbCBFY29sIDEyOiA2OTnigJM3MTAuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1IzNSI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPk1vbCBQaHlsb2dlbmV0IEV2b2w8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+VSBTdHJlY2tlcjwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjMzPC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjQ2OTwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjIwMDQ8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjEwMTYvai55bXBldi4yMDA0LjA3LjAwMTwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPlN0cmVja2VyIFUsIEZhdW5kZXogVkgsIFdpbGtlbnMgSCAuICgyMDA0KS4gUGh5bG9nZW9ncmFwaHkgb2Ygc3VyZmFjZSBhbmQgY2F2ZSBBc3R5YW5heCAoVGVsZW9zdGVpKSBmcm9tIENlbnRyYWwgYW5kIE5vcnRoIEFtZXJpY2EgYmFzZWQgb24gY3l0b2Nocm9tZSBiIHNlcXVlbmNlIGRhdGEuIE1vbCBQaHlsb2dlbmV0IEV2b2wgMzM6IDQ2OeKAkzQ4MS48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjM2Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+TW9sIFBoeWxvZ2VuZXQgRXZvbDwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5VIFN0cmVja2VyPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+NjI8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NjI8L2ZpcnN0X3BhZ2U+DQogICAgICAgICAgICAgIDxjWWVhcj4yMDEyPC9jWWVhcj4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDE2L2oueW1wZXYuMjAxMS4wOS4wMDU8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5TdHJlY2tlciBVLCBIYXVzZG9yZiBCLCBXaWxrZW5zIEggLiAoMjAxMikuIFBhcmFsbGVsIHNwZWNpYXRpb24gaW4gQXN0eWFuYXggY2F2ZSBmaXNoIChUZWxlb3N0ZWkpIGluIE5vcnRoZXJuIE1leGljby4gTW9sIFBoeWxvZ2VuZXQgRXZvbCA2MjogNjLigJM3MC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjM3Ij4NCiAgICAgICAgICAgICAgPGpvdXJuYWxfdGl0bGU+RXZvbHV0aW9uPC9qb3VybmFsX3RpdGxlPg0KICAgICAgICAgICAgICA8YXV0aG9yPkggV2lsa2VuczwvYXV0aG9yPg0KICAgICAgICAgICAgICA8dm9sdW1lPjI1PC92b2x1bWU+DQogICAgICAgICAgICAgIDxmaXJzdF9wYWdlPjUzMDwvZmlyc3RfcGFnZT4NCiAgICAgICAgICAgICAgPGNZZWFyPjE5NzE8L2NZZWFyPg0KICAgICAgICAgICAgICA8ZG9pPjEwLjIzMDcvMjQwNzM1MjwvZG9pPg0KICAgICAgICAgICAgICA8dW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPldpbGtlbnMgSCAuICgxOTcxKS4gR2VuZXRpYyBpbnRlcnByZXRhdGlvbiBvZiByZWdyZXNzaXZlIGV2b2x1dGlvbmFyeSBwcm9jZXNzZXM6IFN0dWRpZXMgb24gaHlicmlkIGV5ZXMgb2YgdHdvIEFzdHlhbmF4IHBvcHVsYXRpb25zIChDaGFyYWNpZGFlLCBQaXNjZXMpLiBFdm9sdXRpb24gMjU6IDUzMOKAkzU0NC48L3Vuc3RydWN0dXJlZF9jaXRhdGlvbj4NCiAgICAgICAgICAgIDwvY2l0YXRpb24+DQogICAgICAgICAgICA8Y2l0YXRpb24ga2V5PSJCRmhkeTIwMTMyNl9DUjM4Ij4NCiAgICAgICAgICAgICAgPGF1dGhvcj5IIFdpbGtlbnM8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjcxPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk4ODwvY1llYXI+DQogICAgICAgICAgICAgIDx2b2x1bWVfdGl0bGU+RXZvbHV0aW9uYXJ5IEJpb2xvZ3k8L3ZvbHVtZV90aXRsZT4NCiAgICAgICAgICAgICAgPGRvaT4xMC4xMDA3Lzk3OC0xLTQ2MTMtMTA0My0zXzg8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5XaWxrZW5zIEggLiAoMTk4OCkuIEV2b2x1dGlvbiBhbmQgZ2VuZXRpY3Mgb2YgZXBpZ2VhbiBhbmQgY2F2ZSBBc3R5YW5heCBmYXNjaWF0dXMgKENoYXJhY2lkYWUsIFBpc2NlcykuIFN1cHBvcnQgZm9yIHRoZSBuZXV0cmFsIG11dGF0aW9uIHRoZW9yeS4gSW46IEhlY2h0IE1LLCBXYWxsYWNlIEIsIChlZHMpLiBFdm9sdXRpb25hcnkgQmlvbG9neSBWb2wgMjMsIFBsZW51bSBQdWJsaXNoaW5nIENvcnBvcmF0aW9uOiBOZXcgWW9yaywgTlksIFVTQS4gcHAgMjcx4oCTMzY3LjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSMzkiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5IZXJlZGl0eTwvam91cm5hbF90aXRsZT4NCiAgICAgICAgICAgICAgPGF1dGhvcj5IIFdpbGtlbnM8L2F1dGhvcj4NCiAgICAgICAgICAgICAgPHZvbHVtZT4xMDU8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NDEzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAxMDwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTAzOC9oZHkuMjAwOS4xODQ8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5XaWxrZW5zIEggLiAoMjAxMCkuIEdlbmVzLCBtb2R1bGVzIGFuZCB0aGUgZXZvbHV0aW9uIG9mIGNhdmUgZmlzaC4gSGVyZWRpdHkgMTA1OiA0MTPigJM0MjIuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgICAgPGNpdGF0aW9uIGtleT0iQkZoZHkyMDEzMjZfQ1I0MCI+DQogICAgICAgICAgICAgIDxqb3VybmFsX3RpdGxlPkFubiBTcMOpbMOpb2w8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+SCBXaWxrZW5zPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+Mjc8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+MjYzPC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MTk3MjwvY1llYXI+DQogICAgICAgICAgICAgIDx1bnN0cnVjdHVyZWRfY2l0YXRpb24+V2lsa2VucyBILCBCdXJucyBSSiAuICgxOTcyKS4gQSBuZXcgQW5vcHRpY2h0aHlzIGNhdmUgcG9wdWxhdGlvbi4gQW5uIFNww6lsw6lvbCAyNzogMjYz4oCTMjcwLjwvdW5zdHJ1Y3R1cmVkX2NpdGF0aW9uPg0KICAgICAgICAgICAgPC9jaXRhdGlvbj4NCiAgICAgICAgICAgIDxjaXRhdGlvbiBrZXk9IkJGaGR5MjAxMzI2X0NSNDEiPg0KICAgICAgICAgICAgICA8am91cm5hbF90aXRsZT5CaW9sIEogTGlubiBTb2M8L2pvdXJuYWxfdGl0bGU+DQogICAgICAgICAgICAgIDxhdXRob3I+SCBXaWxrZW5zPC9hdXRob3I+DQogICAgICAgICAgICAgIDx2b2x1bWU+ODA8L3ZvbHVtZT4NCiAgICAgICAgICAgICAgPGZpcnN0X3BhZ2U+NTQ1PC9maXJzdF9wYWdlPg0KICAgICAgICAgICAgICA8Y1llYXI+MjAwMzwvY1llYXI+DQogICAgICAgICAgICAgIDxkb2k+MTAuMTExMS9qLjEwOTUtODMxMi4yMDAzLjAwMjMwLng8L2RvaT4NCiAgICAgICAgICAgICAgPHVuc3RydWN0dXJlZF9jaXRhdGlvbj5XaWxrZW5zIEgsIFN0cmVja2VyIFUgLiAoMjAwMykuIENvbnZlcmdlbnQgZXZvbHV0aW9uIG9mIHRoZSBjYXZlZmlzaCBBc3R5YW5heCAoQ2hhcmFjaWRhZTogVGVsZW9zdGVpKTogR2VuZXRpYyBldmlkZW5jZSBmcm9tIHJlZHVjZWQgZXllLXNpemUgYW5kIHBpZ21lbnRhdGlvbi4gQmlvbCBKIExpbm4gU29jIDgwOiA1NDXigJM1NTQuPC91bnN0cnVjdHVyZWRfY2l0YXRpb24+DQogICAgICAgICAgICA8L2NpdGF0aW9uPg0KICAgICAgICAgIDwvY2l0YXRpb25fbGlzdD4NCiAgICAgICAgPC9qb3VybmFsX2FydGljbGU+DQogICAgICA8L2pvdXJuYWw+DQogICAgPC9jcm9zc3JlZj4NCiAgPC9kb2lfcmVjb3JkPg0KPC9kb2lfcmVjb3Jkcz4=
|
79
|
+
http_version:
|
80
|
+
recorded_at: Mon, 24 Jun 2019 06:30:54 GMT
|
81
|
+
recorded_with: VCR 3.0.3
|
@@ -138,6 +138,24 @@ describe Bolognese::Metadata, vcr: true do
|
|
138
138
|
expect(subject.agency).to eq("Crossref")
|
139
139
|
end
|
140
140
|
|
141
|
+
it "vor with url" do
|
142
|
+
input = "https://doi.org/10.1038/hdy.2013.26"
|
143
|
+
subject = Bolognese::Metadata.new(input: input)
|
144
|
+
expect(subject.valid?).to be true
|
145
|
+
expect(subject.identifiers).to eq([{"identifier"=>"https://doi.org/10.1038/hdy.2013.26", "identifierType"=>"DOI"}])
|
146
|
+
expect(subject.url).to eq("http://www.nature.com/articles/hdy201326")
|
147
|
+
expect(subject.types).to eq("bibtex"=>"article", "citeproc"=>"article-journal", "resourceType"=>"JournalArticle", "resourceTypeGeneral"=>"Text", "ris"=>"JOUR", "schemaOrg"=>"ScholarlyArticle")
|
148
|
+
expect(subject.creators.length).to eq(2)
|
149
|
+
expect(subject.creators.first).to eq("familyName"=>"Gross", "givenName"=>"J B", "name"=>"Gross, J B", "nameType"=>"Personal")
|
150
|
+
expect(subject.titles).to eq([{"title"=>"Albinism in phylogenetically and geographically distinct populations of Astyanax cavefish arises through the same loss-of-function Oca2 allele"}])
|
151
|
+
expect(subject.dates).to eq([{"date"=>"2013-04-10", "dateType"=>"Issued"}, {"date"=>"2019-04-16T16:25:36Z", "dateType"=>"Updated"}])
|
152
|
+
expect(subject.publication_year).to eq("2013")
|
153
|
+
expect(subject.related_identifiers.size).to eq(35)
|
154
|
+
expect(subject.related_identifiers.first).to eq("relatedIdentifier"=>"0018-067X", "relatedIdentifierType"=>"ISSN", "relationType"=>"IsPartOf", "resourceTypeGeneral"=>"Collection")
|
155
|
+
expect(subject.container).to eq("firstPage"=>"122", "identifier"=>"0018-067X", "identifierType"=>"ISSN", "issue"=>"2", "lastPage"=>"130", "title"=>"Heredity", "type"=>"Journal", "volume"=>"111")
|
156
|
+
expect(subject.agency).to eq("Crossref")
|
157
|
+
end
|
158
|
+
|
141
159
|
it "dataset" do
|
142
160
|
input = "10.2210/pdb4hhb/pdb"
|
143
161
|
subject = Bolognese::Metadata.new(input: input)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bolognese
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-06-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: maremma
|
@@ -516,6 +516,26 @@ dependencies:
|
|
516
516
|
- - "~>"
|
517
517
|
- !ruby/object:Gem::Version
|
518
518
|
version: '0.1'
|
519
|
+
- !ruby/object:Gem::Dependency
|
520
|
+
name: hashdiff
|
521
|
+
requirement: !ruby/object:Gem::Requirement
|
522
|
+
requirements:
|
523
|
+
- - ">="
|
524
|
+
- !ruby/object:Gem::Version
|
525
|
+
version: 1.0.0.beta1
|
526
|
+
- - "<"
|
527
|
+
- !ruby/object:Gem::Version
|
528
|
+
version: 2.0.0
|
529
|
+
type: :development
|
530
|
+
prerelease: false
|
531
|
+
version_requirements: !ruby/object:Gem::Requirement
|
532
|
+
requirements:
|
533
|
+
- - ">="
|
534
|
+
- !ruby/object:Gem::Version
|
535
|
+
version: 1.0.0.beta1
|
536
|
+
- - "<"
|
537
|
+
- !ruby/object:Gem::Version
|
538
|
+
version: 2.0.0
|
519
539
|
description: Ruby gem and command-line utility for conversion of DOI metadata from
|
520
540
|
and to different metadata formats, including schema.org.
|
521
541
|
email: mfenner@datacite.org
|
@@ -806,6 +826,7 @@ files:
|
|
806
826
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/journal_article_with.yml
|
807
827
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/not_found_error.yml
|
808
828
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/posted_content.yml
|
829
|
+
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_crossref_metadata/vor_with_url.yml
|
809
830
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/BlogPosting.yml
|
810
831
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_test_system.yml
|
811
832
|
- spec/fixtures/vcr_cassettes/Bolognese_Metadata/get_datacite_metadata/DOI_in_test_system_schema_3.yml
|
@@ -1077,7 +1098,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1077
1098
|
- !ruby/object:Gem::Version
|
1078
1099
|
version: '0'
|
1079
1100
|
requirements: []
|
1080
|
-
rubygems_version: 3.0.
|
1101
|
+
rubygems_version: 3.0.4
|
1081
1102
|
signing_key:
|
1082
1103
|
specification_version: 4
|
1083
1104
|
summary: Ruby client library for conversion of DOI Metadata
|