enju_oai 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +11 -0
- data/app/controllers/oai_controller.rb +1 -0
- data/app/views/oai/list_identifiers.xml.builder +8 -10
- data/app/views/oai/list_records.xml.builder +16 -18
- data/lib/enju_oai/oai_controller.rb +1 -0
- data/lib/enju_oai/version.rb +1 -1
- data/spec/cassette_library/oai/list_records_xml_builder/when_metadataPrefix_is_dcndl/renders_well-formed_XML.yml +25 -24
- data/spec/controllers/oai_controller_spec.rb +25 -0
- data/spec/dummy/app/models/application_record.rb +3 -0
- data/spec/dummy/config/application.rb +1 -1
- data/spec/dummy/config/database.yml +17 -22
- data/spec/dummy/db/migrate/059_create_libraries.rb +3 -5
- data/spec/dummy/db/migrate/069_create_shelves.rb +1 -2
- data/spec/dummy/db/migrate/080_create_library_groups.rb +1 -2
- data/spec/dummy/db/migrate/120_create_baskets.rb +1 -2
- data/spec/dummy/db/migrate/20081006090811_create_subscriptions.rb +2 -5
- data/spec/dummy/db/migrate/20081006093246_create_subscribes.rb +1 -2
- data/spec/dummy/db/migrate/20081027150907_create_picture_files.rb +0 -2
- data/spec/dummy/db/migrate/20091012101112_add_dcndl_schema.rb +2 -2
- data/spec/dummy/db/migrate/20100606065209_create_user_has_roles.rb +2 -4
- data/spec/dummy/db/migrate/20120319173203_create_accepts.rb +3 -6
- data/spec/dummy/db/migrate/20140110122216_create_user_import_files.rb +1 -1
- data/spec/dummy/db/migrate/20140110131010_create_user_import_results.rb +2 -2
- data/spec/dummy/db/migrate/20140122054321_create_profiles.rb +4 -5
- data/spec/dummy/db/migrate/20140524074813_create_user_import_file_transitions.rb +1 -2
- data/spec/dummy/db/migrate/20140709113413_create_user_export_files.rb +1 -1
- data/spec/dummy/db/migrate/20140709113905_create_user_export_file_transitions.rb +1 -1
- data/spec/dummy/db/migrate/20140720170714_add_default_library_id_to_user_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140720170735_add_default_user_group_id_to_user_import_file.rb +1 -1
- data/spec/dummy/db/migrate/20140821151023_create_colors.rb +1 -3
- data/spec/dummy/db/migrate/20150117111136_add_foreign_key_to_items_referencing_manifestations.rb +5 -0
- data/spec/dummy/db/migrate/20150924115059_create_withdraws.rb +3 -5
- data/spec/dummy/db/migrate/20151125004028_add_profile_id_to_agent.rb +6 -0
- data/spec/dummy/db/migrate/20151213070943_add_translation_table_to_library_group.rb +11 -6
- data/spec/dummy/db/migrate/20151213072705_add_footer_banner_to_library_group.rb +15 -2
- data/spec/dummy/db/migrate/20170305064014_add_csv_charset_conversion_to_library_group.rb +5 -0
- data/spec/dummy/db/migrate/20171119051258_set_not_null_to_manifestation_id_on_items.rb +5 -0
- data/spec/dummy/db/migrate/20180102162311_add_header_logo_meta_to_library_group.rb +5 -0
- data/spec/dummy/db/migrate/20180107160726_add_constraints_to_most_recent_for_user_import_file_transitions.rb +13 -0
- data/spec/dummy/db/migrate/20180107160740_add_constraints_to_most_recent_for_user_export_file_transitions.rb +13 -0
- data/spec/dummy/db/migrate/20180107161311_add_constraints_to_most_recent_for_agent_import_file_transitions.rb +13 -0
- data/spec/dummy/db/migrate/20180107161331_add_constraints_to_most_recent_for_resource_import_file_transitions.rb +13 -0
- data/spec/dummy/db/migrate/20180107161347_add_constraints_to_most_recent_for_resource_export_file_transitions.rb +13 -0
- data/spec/dummy/db/migrate/20180107161410_add_constraints_to_most_recent_for_import_request_transitions.rb +13 -0
- data/spec/dummy/db/migrate/20190818075603_add_memo_to_manifestation.rb +5 -0
- data/spec/dummy/db/migrate/20190818075628_add_memo_to_item.rb +5 -0
- data/spec/dummy/db/migrate/20191219122214_create_custom_properties.rb +12 -0
- data/spec/dummy/db/migrate/20200425072340_create_manifestation_custom_properties.rb +12 -0
- data/spec/dummy/db/migrate/20200425072349_create_item_custom_properties.rb +12 -0
- data/spec/dummy/db/migrate/20200425074758_create_manifestation_custom_values.rb +12 -0
- data/spec/dummy/db/migrate/20200425074822_create_item_custom_values.rb +12 -0
- data/spec/dummy/db/schema.rb +86 -16
- data/spec/factories/user.rb +6 -15
- data/spec/views/oai/list_identifiers.xml.builder_spec.rb +11 -4
- data/spec/views/oai/list_records.xml.builder_spec.rb +32 -20
- metadata +360 -295
- data/README.rdoc +0 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 657cc7609b6f1f359d2c84821e58e5db324be49aaf55a98e6824cfd333f3bf58
|
4
|
+
data.tar.gz: 904de4f9a94cababee669cb39df0b30e3e3ad8edb4f08ced264d2f9c6ef72cfd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 931d716daefe83e49001901fdd18cda465fc32ad1887778b4a8c7652a0430fb23aa78866c211906014d222e77b67141aa17957a0f73f0bfc62c236d8bec8a8da
|
7
|
+
data.tar.gz: fd09adc6f23c069163510135780c861a6bb688992f0f25bbe1a356e8e2985c996418758da82158abb3b7b935cbe4da8f4cd6b6ba534fafcf49f3d2abcf18655b
|
data/README.md
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# EnjuEvent
|
2
|
+
[![Travis CI](https://travis-ci.com/next-l/enju_oai.svg?branch=1.3)](https://travis-ci.com/next-l/enju_oai)
|
3
|
+
[![Coverage Status](https://coveralls.io/repos/github/next-l/enju_oai/badge.svg?branch=1.3)](https://coveralls.io/github/next-l/enju_oai?branch=1.3)
|
4
|
+
[![security](https://hakiri.io/github/next-l/enju_oai/1.3.svg)](https://hakiri.io/github/next-l/enju_oai/1.3)
|
5
|
+
|
6
|
+
This project rocks and uses MIT-LICENSE.
|
7
|
+
|
8
|
+
## 製作者・貢献者 (Authors and contributors)
|
9
|
+
* [TANABE, Kosuke](https://github.com/nabeta) ([@nabeta](https://twitter.com/nabeta))
|
10
|
+
* [Project Next-L](https://www.next-l.jp) ([@ProjectNextL](https://twitter.com/ProjectNextL))
|
11
|
+
|
@@ -22,6 +22,7 @@ class OaiController < ApplicationController
|
|
22
22
|
order_by :updated_at, :desc
|
23
23
|
paginate cursor: token, per_page: oai_per_page
|
24
24
|
with(:updated_at).between(from_time..until_time)
|
25
|
+
with(:required_role_id).equal_to Role.default_role.id
|
25
26
|
end
|
26
27
|
@manifestations = search.execute!.results
|
27
28
|
|
@@ -9,20 +9,18 @@ xml.tag! "OAI-PMH", :xmlns => "http://www.openarchives.org/OAI/2.0/",
|
|
9
9
|
end
|
10
10
|
xml.ListIdentifiers do
|
11
11
|
@manifestations.each do |manifestation|
|
12
|
-
|
13
|
-
xml.
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
xml.setSpec series_statement.id
|
18
|
-
end
|
12
|
+
xml.header do
|
13
|
+
xml.identifier manifestation.oai_identifier
|
14
|
+
xml.datestamp manifestation.updated_at.utc.iso8601
|
15
|
+
manifestation.series_statements.each do |series_statement|
|
16
|
+
xml.setSpec series_statement.id
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
22
|
-
if @manifestations.
|
23
|
-
xml.resumptionToken nil, completeListSize: @manifestations.total_count
|
24
|
-
else
|
20
|
+
if @manifestations.next_page_cursor
|
25
21
|
xml.resumptionToken CGI.escape(@manifestations.next_page_cursor), completeListSize: @manifestations.total_count
|
22
|
+
else
|
23
|
+
xml.resumptionToken nil, completeListSize: @manifestations.total_count
|
26
24
|
end
|
27
25
|
end
|
28
26
|
end
|
@@ -9,29 +9,27 @@ xml.tag! "OAI-PMH", :xmlns => "http://www.openarchives.org/OAI/2.0/",
|
|
9
9
|
end
|
10
10
|
xml.ListRecords do
|
11
11
|
@manifestations.each do |manifestation|
|
12
|
-
|
13
|
-
xml.
|
14
|
-
xml.
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
render 'record_dcndl', manifestation: manifestation, xml_builder: xml
|
26
|
-
end
|
12
|
+
xml.record do
|
13
|
+
xml.header do
|
14
|
+
xml.identifier manifestation.oai_identifier
|
15
|
+
xml.datestamp manifestation.updated_at.utc.iso8601
|
16
|
+
end
|
17
|
+
xml.metadata do
|
18
|
+
case @oai[:metadataPrefix]
|
19
|
+
when 'oai_dc', nil
|
20
|
+
render 'record_oai_dc', manifestation: manifestation, xml_builder: xml
|
21
|
+
when 'junii2'
|
22
|
+
render 'record_junii2', manifestation: manifestation, xml_builder: xml
|
23
|
+
when 'dcndl'
|
24
|
+
render 'record_dcndl', manifestation: manifestation, xml_builder: xml
|
27
25
|
end
|
28
26
|
end
|
29
27
|
end
|
30
28
|
end
|
31
|
-
if @manifestations.
|
32
|
-
xml.resumptionToken nil, completeListSize: @manifestations.total_count
|
33
|
-
else
|
29
|
+
if @manifestations.next_page_cursor
|
34
30
|
xml.resumptionToken CGI.escape(@manifestations.next_page_cursor), completeListSize: @manifestations.total_count
|
31
|
+
else
|
32
|
+
xml.resumptionToken nil, completeListSize: @manifestations.total_count
|
35
33
|
end
|
36
34
|
end
|
37
35
|
end
|
data/lib/enju_oai/version.rb
CHANGED
@@ -2,13 +2,13 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri:
|
5
|
+
uri: https://iss.ndl.go.jp/api/sru?maximumRecords=1&onlyBib=true&operation=searchRetrieve&query=(itemno=R100000002-I000008369884-00)&recordSchema=dcndl
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Faraday v0.
|
11
|
+
- Faraday v0.15.4
|
12
12
|
Accept-Encoding:
|
13
13
|
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
14
14
|
Accept:
|
@@ -19,43 +19,44 @@ http_interactions:
|
|
19
19
|
message: OK
|
20
20
|
headers:
|
21
21
|
Date:
|
22
|
-
- Sun,
|
22
|
+
- Sun, 31 Mar 2019 17:41:26 GMT
|
23
|
+
X-Ua-Compatible:
|
24
|
+
- IE=Edge,chrome=1
|
25
|
+
Etag:
|
26
|
+
- '"87a80ab1645d4156152f1fee7074af4e"'
|
23
27
|
Cache-Control:
|
24
28
|
- max-age=0, private, must-revalidate
|
25
29
|
X-Runtime:
|
26
|
-
- '1.
|
27
|
-
|
28
|
-
- '
|
29
|
-
X-Ua-Compatible:
|
30
|
-
- IE=Edge,chrome=1
|
30
|
+
- '1.457844'
|
31
|
+
Content-Length:
|
32
|
+
- '9881'
|
31
33
|
Status:
|
32
34
|
- '200'
|
33
35
|
Content-Type:
|
34
36
|
- application/xml; charset=utf-8
|
35
37
|
Set-Cookie:
|
36
|
-
-
|
37
|
-
|
38
|
-
|
39
|
-
-
|
38
|
+
- HTTP_Z308_KEY_DATA_01=; domain=.ndl.go.jp; path=/; expires=Thu, 01-Jan-1970
|
39
|
+
00:00:00 GMT
|
40
|
+
- ROUTEID=.ps21; path=/
|
41
|
+
- TS0162cc8a=011338590a514376898e160ff4df9a9e5fd61c62535fdd42159fcdad87d3a2eefa401e016b28afd532ae7aec3689bf9f32643f79b1353a13c592d1ec4071b4138959a32e8e3381682c81b0884f3e47ff5300482141;
|
42
|
+
path=/; domain=.ndl.go.jp
|
43
|
+
- TS01f3cfdf=011338590a675a502cad0b6c8ecba8f9e138ac9061710f1ddce5e0a5781b1fe46e8ce2ab9c2b7e3ca585de00cdb6d23ad292c250a0eb2b1bb0aa06afd3164d953319687792a40023a8d61dfe6732213afb71b8526ec000e0463e3e4a0f746760528c3b2402;
|
40
44
|
Path=/
|
41
|
-
- _front_session_id=
|
42
|
-
|
43
|
-
- ndl.go.jp
|
44
|
-
|
45
|
-
|
46
|
-
-
|
45
|
+
- _front_session_id=64a051560c3717ffe3bd480172cd8b5f;Secure; path=/; expires=Sun,
|
46
|
+
31-Mar-2019 18:41:28 GMT; HttpOnly
|
47
|
+
- cookieId=;secure; domain=.ndl.go.jp; path=/; expires=Thu, 01-Jan-1970 00:00:00
|
48
|
+
GMT
|
49
|
+
- ndl.go.jp=rd2o00000000000000000000ffff0a024f76o80; path=/
|
50
|
+
- serverid=1103; path=/
|
51
|
+
- sessionId=; domain=.ndl.go.jp; path=/; expires=Thu, 01-Jan-1970 00:00:00 GMT
|
47
52
|
X-Content-Type-Options:
|
48
53
|
- nosniff
|
49
54
|
X-Frame-Options:
|
50
55
|
- SAMEORIGIN
|
51
|
-
Content-Length:
|
52
|
-
- '2091'
|
53
|
-
Connection:
|
54
|
-
- close
|
55
56
|
body:
|
56
57
|
encoding: ASCII-8BIT
|
57
58
|
string: !binary |-
|
58
|
-
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNlYXJjaFJldHJpZXZlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly93d3cubG9jLmdvdi96aW5nL3Nydy8iPgogIDx2ZXJzaW9uPjEuMjwvdmVyc2lvbj4KICA8bnVtYmVyT2ZSZWNvcmRzPjE8L251bWJlck9mUmVjb3Jkcz4KICA8bmV4dFJlY29yZFBvc2l0aW9uPjA8L25leHRSZWNvcmRQb3NpdGlvbj4KICA8ZXh0cmFSZXNwb25zZURhdGE+CiZsdDtmYWNldHMmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O1JFUE9TSVRPUllfTk8mcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7UjEwMDAwMDAwMSZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7UjEwMDAwMDAwMiZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgJmx0Oy9sc3QmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O05EQyZxdW90OyZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDswJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAmbHQ7L2xzdCZndDsKICAmbHQ7bHN0IG5hbWU9JnF1b3Q7SVNTVUVEX0RBVEUmcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7MjAwNiZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgJmx0Oy9sc3QmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O0xJQlJBUlkmcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75LiJ6YeN55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvkuqzpg73lupznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+S9kOizgOecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75YW15bqr55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvljJfmtbfpgZPnq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WNg+iRieW4guS4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75Y2D6JGJ55yM56uL5p2x6YOo5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlkozmrYzlsbHnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+Wbveeri+WbveS8muWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75Z+8546J55yM56uL54aK6LC35Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlpKfliIbnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+Wkp+mYquW4gueri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75aSn6Ziq5bqc56uL5Lit5aSu5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlpYjoia/nnIznq4vlm7Pmm7jmg4XloLHppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WuruWfjuecjOWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75a6u5bSO55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlr4zlsbHnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WxseWPo+ecjOeri+WxseWPo+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75bGx5qKo55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlspDpmJznnIzlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WyoeWxseecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75bKp5omL55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvls7bmoLnnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+W6g+WztuW4gueri+S4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75b6z5bO255yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvmhJvnn6XnnIzlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+aWsOa9n+ecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75p2x5Lqs6YO956uL5Lit5aSu5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvmoIPmnKjnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+aoqua1nOW4guS4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75rKW57iE55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvmu4vos4DnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+eGiuacrOecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q755yM56uL6ZW36YeO5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnn7Plt53nnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+emj+S6leecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q756aP5bKh5biC57eP5ZCI5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnpo/lsqHnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+emj+WztuecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q756eL55Sw55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnvqTppqznnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+iMqOWfjuecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q76Z2S5qOu55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvpnZnlsqHluILnq4vkuK3lpK7lm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+mdmeWyoeecjOeri+S4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q76aaZ5bed55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvps6Xlj5bnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+m5v+WFkOWztuecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgJmx0Oy9sc3QmZ3Q7CiZsdDsvZmFjZXRzJmd0OwogIDwvZXh0cmFSZXNwb25zZURhdGE+CiAgPHJlY29yZHM+CiAgICA8cmVjb3JkPgogICAgICA8cmVjb3JkU2NoZW1hPmluZm86c3J3L3NjaGVtYS8xL2RjLXYxLjE8L3JlY29yZFNjaGVtYT4KICAgICAgPHJlY29yZFBhY2tpbmc+c3RyaW5nPC9yZWNvcmRQYWNraW5nPgogICAgICA8cmVjb3JkRGF0YT4KJmx0O3JkZjpSREYgeG1sbnM6cmRmPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMmcXVvdDsgeG1sbnM6Zm9hZj0mcXVvdDtodHRwOi8veG1sbnMuY29tL2ZvYWYvMC4xLyZxdW90OyB4bWxuczpvd2w9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMi8wNy9vd2wjJnF1b3Q7IHhtbG5zOmRjdGVybXM9JnF1b3Q7aHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zLyZxdW90OyB4bWxuczpyZGZzPSZxdW90O2h0dHA6Ly93d3cudzMub3JnLzIwMDAvMDEvcmRmLXNjaGVtYSMmcXVvdDsgeG1sbnM6ZGM9JnF1b3Q7aHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8mcXVvdDsgeG1sbnM6ZGNuZGw9JnF1b3Q7aHR0cDovL25kbC5nby5qcC9kY25kbC90ZXJtcy8mcXVvdDsmZ3Q7CiAgJmx0O2RjbmRsOkJpYkFkbWluUmVzb3VyY2UgcmRmOmFib3V0PSZxdW90O2h0dHA6Ly9pc3MubmRsLmdvLmpwL2Jvb2tzL1IxMDAwMDAwMDItSTAwMDAwODM2OTg4NC0wMCZxdW90OyZndDsKICAgICZsdDtkY25kbDpjYXRhbG9naW5nU3RhdHVzJmd0O0M3Jmx0Oy9kY25kbDpjYXRhbG9naW5nU3RhdHVzJmd0OwogICAgJmx0O2RjbmRsOmJpYlJlY29yZENhdGVnb3J5Jmd0O1IxMDAwMDAwMDImbHQ7L2RjbmRsOmJpYlJlY29yZENhdGVnb3J5Jmd0OwogICAgJmx0O2RjbmRsOnJlY29yZCByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0cDovL2lzcy5uZGwuZ28uanAvYm9va3MvUjEwMDAwMDAwMi1JMDAwMDA4MzY5ODg0LTAwI21hdGVyaWFsJnF1b3Q7LyZndDsKICAmbHQ7L2RjbmRsOkJpYkFkbWluUmVzb3VyY2UmZ3Q7CiAgJmx0O2RjbmRsOkJpYlJlc291cmNlIHJkZjphYm91dD0mcXVvdDtodHRwOi8vaXNzLm5kbC5nby5qcC9ib29rcy9SMTAwMDAwMDAyLUkwMDAwMDgzNjk4ODQtMDAjbWF0ZXJpYWwmcXVvdDsmZ3Q7CiAgICAmbHQ7ZGN0ZXJtczppZGVudGlmaWVyIHJkZjpkYXRhdHlwZT0mcXVvdDtodHRwOi8vbmRsLmdvLmpwL2RjbmRsL3Rlcm1zL0pQTk8mcXVvdDsmZ3Q7MjExNDM2ODgmbHQ7L2RjdGVybXM6aWRlbnRpZmllciZndDsKICAgICZsdDtkY3Rlcm1zOmlkZW50aWZpZXIgcmRmOmRhdGF0eXBlPSZxdW90O2h0dHA6Ly9uZGwuZ28uanAvZGNuZGwvdGVybXMvSVNCTiZxdW90OyZndDs0LTg4MzY3LTEzMS0zJmx0Oy9kY3Rlcm1zOmlkZW50aWZpZXImZ3Q7CiAgICAmbHQ7cmRmczpzZWVBbHNvIHJkZjpyZXNvdXJjZT0mcXVvdDtodHRwOi8vaWQubmRsLmdvLmpwL2pwbm8vMjExNDM2ODgmcXVvdDsvJmd0OwogICAgJmx0O3JkZnM6c2VlQWxzbyByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0cDovL2lzcy5uZGwuZ28uanAvaXNibi80ODgzNjcxMzEzJnF1b3Q7LyZndDsKICAgICZsdDtkY3Rlcm1zOnRpdGxlJmd0O+aDheWgseaknOe0oua8lOe/kiZsdDsvZGN0ZXJtczp0aXRsZSZndDsKICAgICZsdDtkYzp0aXRsZSZndDsKICAgICAgJmx0O3JkZjpEZXNjcmlwdGlvbiZndDsKICAgICAgICAmbHQ7cmRmOnZhbHVlJmd0O+aDheWgseaknOe0oua8lOe/kiZsdDsvcmRmOnZhbHVlJmd0OwogICAgICAgICZsdDtkY25kbDp0cmFuc2NyaXB0aW9uJmd0O+OCuOODp+OCpuODm+OCpiDjgrHjg7PjgrXjgq8g44Ko44Oz44K344Ol44KmJmx0Oy9kY25kbDp0cmFuc2NyaXB0aW9uJmd0OwogICAgICAmbHQ7L3JkZjpEZXNjcmlwdGlvbiZndDsKICAgICZsdDsvZGM6dGl0bGUmZ3Q7CiAgICAmbHQ7ZGNuZGw6c2VyaWVzVGl0bGUmZ3Q7CiAgICAgICZsdDtyZGY6RGVzY3JpcHRpb24mZ3Q7CiAgICAgICAgJmx0O3JkZjp2YWx1ZSZndDvmlrDjg7vlm7Pmm7jppKjlrabjgrfjg6rjg7zjgrogOyA2Jmx0Oy9yZGY6dmFsdWUmZ3Q7CiAgICAgICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q744K344OzIOODiOOCt+ODp+OCq+ODs+OCrOOCryDjgrfjg6rjg7zjgrombHQ7L2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q7CiAgICAgICZsdDsvcmRmOkRlc2NyaXB0aW9uJmd0OwogICAgJmx0Oy9kY25kbDpzZXJpZXNUaXRsZSZndDsKICAgICZsdDtkY25kbDplZGl0aW9uJmd0OzPoqIImbHQ7L2RjbmRsOmVkaXRpb24mZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgICAmbHQ7Zm9hZjpBZ2VudCByZGY6YWJvdXQ9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9hdXRoL2VudGl0eS8wMDk4NTk4NiZxdW90OyZndDsKICAgICAgICAmbHQ7Zm9hZjpuYW1lJmd0O+WOn+eUsCwg5pm65a2QLCAxOTQ3LSZsdDsvZm9hZjpuYW1lJmd0OwogICAgICAgICZsdDtkY25kbDp0cmFuc2NyaXB0aW9uJmd0O+ODj+ODqeODgCwg44OI44Oi44KzJmx0Oy9kY25kbDp0cmFuc2NyaXB0aW9uJmd0OwogICAgICAmbHQ7L2ZvYWY6QWdlbnQmZ3Q7CiAgICAmbHQ7L2RjdGVybXM6Y3JlYXRvciZndDsKICAgICZsdDtkY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAgICZsdDtmb2FmOkFnZW50IHJkZjphYm91dD0mcXVvdDtodHRwOi8vaWQubmRsLmdvLmpwL2F1dGgvZW50aXR5LzAxMDY4NTEwJnF1b3Q7Jmd0OwogICAgICAgICZsdDtmb2FmOm5hbWUmZ3Q75rGf6I2JLCDnlLHkvbMmbHQ7L2ZvYWY6bmFtZSZndDsKICAgICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjgqjjgrDjgrUsIOODpuOCqyZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0Oy9mb2FmOkFnZW50Jmd0OwogICAgJmx0Oy9kY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgICAmbHQ7Zm9hZjpBZ2VudCByZGY6YWJvdXQ9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9hdXRoL2VudGl0eS8wMTA1OTQ2MCZxdW90OyZndDsKICAgICAgICAmbHQ7Zm9hZjpuYW1lJmd0O+Wwj+WxsSwg5oay5Y+4LCAxOTcxLSZsdDsvZm9hZjpuYW1lJmd0OwogICAgICAgICZsdDtkY25kbDp0cmFuc2NyaXB0aW9uJmd0O+OCs+ODpOODniwg44Kx44Oz44K4Jmx0Oy9kY25kbDp0cmFuc2NyaXB0aW9uJmd0OwogICAgICAmbHQ7L2ZvYWY6QWdlbnQmZ3Q7CiAgICAmbHQ7L2RjdGVybXM6Y3JlYXRvciZndDsKICAgICZsdDtkY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAgICZsdDtmb2FmOkFnZW50IHJkZjphYm91dD0mcXVvdDtodHRwOi8vaWQubmRsLmdvLmpwL2F1dGgvZW50aXR5LzAwMTQ3OTc4JnF1b3Q7Jmd0OwogICAgICAgICZsdDtmb2FmOm5hbWUmZ3Q76auY5bGxLCDmraPkuZ8sIDE5NDEtJmx0Oy9mb2FmOm5hbWUmZ3Q7CiAgICAgICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q744K/44Kr44Ok44OeLCDjg57jgrXjg6QmbHQ7L2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q7CiAgICAgICZsdDsvZm9hZjpBZ2VudCZndDsKICAgICZsdDsvZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgJmx0O2RjdGVybXM6Y3JlYXRvciZndDsKICAgICAgJmx0O2ZvYWY6QWdlbnQgcmRmOmFib3V0PSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvYXV0aC9lbnRpdHkvMDAxNDYxNjMmcXVvdDsmZ3Q7CiAgICAgICAgJmx0O2ZvYWY6bmFtZSZndDvmpI3mnb4sIOiynuWkqywgMTk0OC0mbHQ7L2ZvYWY6bmFtZSZndDsKICAgICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjgqbjgqjjg57jg4QsIOOCteODgOOCqiZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0Oy9mb2FmOkFnZW50Jmd0OwogICAgJmx0Oy9kY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAmbHQ7ZGM6Y3JlYXRvciZndDvljp/nlLDmmbrlrZAg57eoJmx0Oy9kYzpjcmVhdG9yJmd0OwogICAgJmx0O2RjOmNyZWF0b3ImZ3Q75Y6f55Sw5pm65a2QLCDmsZ/ojYnnlLHkvbMsIOWwj+WxseaGsuWPuCwg5r6k5LqV5riFIOWFseiRlyZsdDsvZGM6Y3JlYXRvciZndDsKICAgICZsdDtkY25kbDpzZXJpZXNDcmVhdG9yJmd0O+mrmOWxseato+S5nywg5qSN5p2+6LKe5aSrIOebo+S/riZsdDsvZGNuZGw6c2VyaWVzQ3JlYXRvciZndDsKICAgICZsdDtkY3Rlcm1zOnB1Ymxpc2hlciZndDsKICAgICAgJmx0O2ZvYWY6QWdlbnQmZ3Q7CiAgICAgICAgJmx0O2ZvYWY6bmFtZSZndDvmqLnmnZHmiL8mbHQ7L2ZvYWY6bmFtZSZndDsKICAgICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjgrjjg6Xjgr3jg7Pjg5zjgqYmbHQ7L2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q7CiAgICAgICAgJmx0O2RjbmRsOmxvY2F0aW9uJmd0O+adseS6rCZsdDsvZGNuZGw6bG9jYXRpb24mZ3Q7CiAgICAgICZsdDsvZm9hZjpBZ2VudCZndDsKICAgICZsdDsvZGN0ZXJtczpwdWJsaXNoZXImZ3Q7CiAgICAmbHQ7ZGNuZGw6cHVibGljYXRpb25QbGFjZSByZGY6ZGF0YXR5cGU9JnF1b3Q7aHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zL0lTTzMxNjYmcXVvdDsmZ3Q7SlAmbHQ7L2RjbmRsOnB1YmxpY2F0aW9uUGxhY2UmZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpkYXRlJmd0OzIwMDYuMTAmbHQ7L2RjdGVybXM6ZGF0ZSZndDsKICAgICZsdDtkY3Rlcm1zOmlzc3VlZCByZGY6ZGF0YXR5cGU9JnF1b3Q7aHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zL1czQ0RURiZxdW90OyZndDsyMDA2Jmx0Oy9kY3Rlcm1zOmlzc3VlZCZndDsKICAgICZsdDtkY3Rlcm1zOnN1YmplY3QmZ3Q7CiAgICAgICZsdDtyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvYXV0aC9uZGxzaC8wMDU3NTAxMCZxdW90OyZndDsKICAgICAgICAmbHQ7cmRmOnZhbHVlJmd0O+aDheWgseaknOe0oiZsdDsvcmRmOnZhbHVlJmd0OwogICAgICAmbHQ7L3JkZjpEZXNjcmlwdGlvbiZndDsKICAgICZsdDsvZGN0ZXJtczpzdWJqZWN0Jmd0OwogICAgJmx0O2RjdGVybXM6c3ViamVjdCByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9jbGFzcy9uZGxjL1VMNDEmcXVvdDsvJmd0OwogICAgJmx0O2RjdGVybXM6c3ViamVjdCByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9jbGFzcy9uZGM5LzAwNy41OCZxdW90Oy8mZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpsYW5ndWFnZSByZGY6ZGF0YXR5cGU9JnF1b3Q7aHR0cDovL3B1cmwub3JnL2RjL3Rlcm1zL0lTTzYzOS0yJnF1b3Q7Jmd0O2pwbiZsdDsvZGN0ZXJtczpsYW5ndWFnZSZndDsKICAgICZsdDtkY3Rlcm1zOmV4dGVudCZndDsyMDNwIDsgMjFjbSZsdDsvZGN0ZXJtczpleHRlbnQmZ3Q7CiAgICAmbHQ7ZGNuZGw6cHJpY2UmZ3Q7MTkwMOWGhiZsdDsvZGNuZGw6cHJpY2UmZ3Q7CiAgICAmbHQ7ZGN0ZXJtczphdWRpZW5jZSZndDvkuIDoiKwmbHQ7L2RjdGVybXM6YXVkaWVuY2UmZ3Q7CiAgICAmbHQ7ZGNuZGw6bWF0ZXJpYWxUeXBlIHJkZnM6bGFiZWw9JnF1b3Q75Zuz5pu4JnF1b3Q7IHJkZjpyZXNvdXJjZT0mcXVvdDtodHRwOi8vbmRsLmdvLmpwL25kbHR5cGUvQm9vayZxdW90Oy8mZ3Q7CiAgICAmbHQ7ZGN0ZXJtczphY2Nlc3NSaWdodHMmZ3Q7UzAxUDk5VTk5Jmx0Oy9kY3Rlcm1zOmFjY2Vzc1JpZ2h0cyZndDsKICAmbHQ7L2RjbmRsOkJpYlJlc291cmNlJmd0OwombHQ7L3JkZjpSREYmZ3Q7CiAgICAgIDwvcmVjb3JkRGF0YT4KICAgICAgPHJlY29yZFBvc2l0aW9uPjE8L3JlY29yZFBvc2l0aW9uPgogICAgPC9yZWNvcmQ+CiAgPC9yZWNvcmRzPgo8L3NlYXJjaFJldHJpZXZlUmVzcG9uc2U+Cg==
|
59
|
+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNlYXJjaFJldHJpZXZlUmVzcG9uc2UgeG1sbnM9Imh0dHA6Ly93d3cubG9jLmdvdi96aW5nL3Nydy8iPgogIDx2ZXJzaW9uPjEuMjwvdmVyc2lvbj4KICA8bnVtYmVyT2ZSZWNvcmRzPjE8L251bWJlck9mUmVjb3Jkcz4KICA8bmV4dFJlY29yZFBvc2l0aW9uPjA8L25leHRSZWNvcmRQb3NpdGlvbj4KICA8ZXh0cmFSZXNwb25zZURhdGE+CiZsdDtmYWNldHMmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O1JFUE9TSVRPUllfTk8mcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7UjEwMDAwMDAwMSZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7UjEwMDAwMDAwMiZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgJmx0Oy9sc3QmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O05EQyZxdW90OyZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDswJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAmbHQ7L2xzdCZndDsKICAmbHQ7bHN0IG5hbWU9JnF1b3Q7SVNTVUVEX0RBVEUmcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7MjAwNiZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgJmx0Oy9sc3QmZ3Q7CiAgJmx0O2xzdCBuYW1lPSZxdW90O0xJQlJBUlkmcXVvdDsmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75LiJ6YeN55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvkuqzpg73lupznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+S9kOizgOecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75YW15bqr55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvljJfmtbfpgZPnq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WNg+iRieW4guS4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75Y2D6JGJ55yM56uL5p2x6YOo5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlkozmrYzlsbHnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+Wbveeri+WbveS8muWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75Z+8546J55yM56uL54aK6LC35Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvloLrluILnq4vkuK3lpK7lm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+Wkp+WIhuecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75aSn6Ziq5biC56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlpKfpmKrlupznq4vkuK3lpK7lm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WliOiJr+ecjOeri+Wbs+abuOaDheWgsemkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75a6u5Z+O55yM5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlrq7ltI7nnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WvjOWxseecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75bGx5Y+j55yM56uL5bGx5Y+j5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlsbHmoqjnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WykOmYnOecjOWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75bKh5bGx55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvlsqnmiYvnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+WztuagueecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75bed5bSO5biC56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvluoPls7bluILnq4vkuK3lpK7lm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+W+s+WztuecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75oSb55+l55yM5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvmlrDmvZ/nnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+adseS6rOmDveeri+S4reWkruWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75qCD5pyo55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvmqKrmtZzluILkuK3lpK7lm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+aylue4hOecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q75ruL6LOA55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnhormnKznnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+ecjOeri+mVt+mHjuWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q755+z5bed55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnpo/kupXnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+emj+WyoeW4gue3j+WQiOWbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q756aP5bKh55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvnpo/ls7bnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+eni+eUsOecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q7576k6aas55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvojKjln47nnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+mdkuajruecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q76Z2Z5bKh5biC56uL5Lit5aSu5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvpnZnlsqHnnIznq4vkuK3lpK7lm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICAgJmx0O2ludCBuYW1lPSZxdW90O+mmmeW3neecjOeri+Wbs+abuOmkqCZxdW90OyZndDsxJmx0Oy9pbnQmZ3Q7CiAgICAmbHQ7aW50IG5hbWU9JnF1b3Q76bOl5Y+W55yM56uL5Zuz5pu46aSoJnF1b3Q7Jmd0OzEmbHQ7L2ludCZndDsKICAgICZsdDtpbnQgbmFtZT0mcXVvdDvpub/lhZDls7bnnIznq4vlm7Pmm7jppKgmcXVvdDsmZ3Q7MSZsdDsvaW50Jmd0OwogICZsdDsvbHN0Jmd0OwombHQ7L2ZhY2V0cyZndDsKICA8L2V4dHJhUmVzcG9uc2VEYXRhPgogIDxyZWNvcmRzPgogICAgPHJlY29yZD4KICAgICAgPHJlY29yZFNjaGVtYT5pbmZvOnNydy9zY2hlbWEvMS9kYy12MS4xPC9yZWNvcmRTY2hlbWE+CiAgICAgIDxyZWNvcmRQYWNraW5nPnN0cmluZzwvcmVjb3JkUGFja2luZz4KICAgICAgPHJlY29yZERhdGE+CiZsdDtyZGY6UkRGIHhtbG5zOmRjPSZxdW90O2h0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvJnF1b3Q7IHhtbG5zOnJkZj0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjJnF1b3Q7IHhtbG5zOnJkZnM9JnF1b3Q7aHR0cDovL3d3dy53My5vcmcvMjAwMC8wMS9yZGYtc2NoZW1hIyZxdW90OyB4bWxuczpmb2FmPSZxdW90O2h0dHA6Ly94bWxucy5jb20vZm9hZi8wLjEvJnF1b3Q7IHhtbG5zOmRjbmRsPSZxdW90O2h0dHA6Ly9uZGwuZ28uanAvZGNuZGwvdGVybXMvJnF1b3Q7IHhtbG5zOm93bD0mcXVvdDtodHRwOi8vd3d3LnczLm9yZy8yMDAyLzA3L293bCMmcXVvdDsgeG1sbnM6ZGN0ZXJtcz0mcXVvdDtodHRwOi8vcHVybC5vcmcvZGMvdGVybXMvJnF1b3Q7Jmd0OwogICZsdDtkY25kbDpCaWJBZG1pblJlc291cmNlIHJkZjphYm91dD0mcXVvdDtodHRwOi8vaXNzLm5kbC5nby5qcC9ib29rcy9SMTAwMDAwMDAyLUkwMDAwMDgzNjk4ODQtMDAmcXVvdDsmZ3Q7CiAgICAmbHQ7ZGNuZGw6Y2F0YWxvZ2luZ1N0YXR1cyZndDtDNyZsdDsvZGNuZGw6Y2F0YWxvZ2luZ1N0YXR1cyZndDsKICAgICZsdDtkY25kbDpiaWJSZWNvcmRDYXRlZ29yeSZndDtSMTAwMDAwMDAyJmx0Oy9kY25kbDpiaWJSZWNvcmRDYXRlZ29yeSZndDsKICAgICZsdDtkY25kbDpyZWNvcmQgcmRmOnJlc291cmNlPSZxdW90O2h0dHA6Ly9pc3MubmRsLmdvLmpwL2Jvb2tzL1IxMDAwMDAwMDItSTAwMDAwODM2OTg4NC0wMCNtYXRlcmlhbCZxdW90Oy8mZ3Q7CiAgJmx0Oy9kY25kbDpCaWJBZG1pblJlc291cmNlJmd0OwogICZsdDtkY25kbDpCaWJSZXNvdXJjZSByZGY6YWJvdXQ9JnF1b3Q7aHR0cDovL2lzcy5uZGwuZ28uanAvYm9va3MvUjEwMDAwMDAwMi1JMDAwMDA4MzY5ODg0LTAwI21hdGVyaWFsJnF1b3Q7Jmd0OwogICAgJmx0O2RjdGVybXM6aWRlbnRpZmllciByZGY6ZGF0YXR5cGU9JnF1b3Q7aHR0cDovL25kbC5nby5qcC9kY25kbC90ZXJtcy9KUE5PJnF1b3Q7Jmd0OzIxMTQzNjg4Jmx0Oy9kY3Rlcm1zOmlkZW50aWZpZXImZ3Q7CiAgICAmbHQ7ZGN0ZXJtczppZGVudGlmaWVyIHJkZjpkYXRhdHlwZT0mcXVvdDtodHRwOi8vbmRsLmdvLmpwL2RjbmRsL3Rlcm1zL0lTQk4mcXVvdDsmZ3Q7NC04ODM2Ny0xMzEtMyZsdDsvZGN0ZXJtczppZGVudGlmaWVyJmd0OwogICAgJmx0O3JkZnM6c2VlQWxzbyByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9qcG5vLzIxMTQzNjg4JnF1b3Q7LyZndDsKICAgICZsdDtyZGZzOnNlZUFsc28gcmRmOnJlc291cmNlPSZxdW90O2h0dHA6Ly9pc3MubmRsLmdvLmpwL2lzYm4vNDg4MzY3MTMxMyZxdW90Oy8mZ3Q7CiAgICAmbHQ7ZGN0ZXJtczp0aXRsZSZndDvmg4XloLHmpJzntKLmvJTnv5ImbHQ7L2RjdGVybXM6dGl0bGUmZ3Q7CiAgICAmbHQ7ZGM6dGl0bGUmZ3Q7CiAgICAgICZsdDtyZGY6RGVzY3JpcHRpb24mZ3Q7CiAgICAgICAgJmx0O3JkZjp2YWx1ZSZndDvmg4XloLHmpJzntKLmvJTnv5ImbHQ7L3JkZjp2YWx1ZSZndDsKICAgICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjgrjjg6fjgqbjg5vjgqYg44Kx44Oz44K144KvIOOCqOODs+OCt+ODpeOCpiZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0Oy9yZGY6RGVzY3JpcHRpb24mZ3Q7CiAgICAmbHQ7L2RjOnRpdGxlJmd0OwogICAgJmx0O2RjbmRsOnNlcmllc1RpdGxlJmd0OwogICAgICAmbHQ7cmRmOkRlc2NyaXB0aW9uJmd0OwogICAgICAgICZsdDtyZGY6dmFsdWUmZ3Q75paw44O75Zuz5pu46aSo5a2m44K344Oq44O844K6IDsgNiZsdDsvcmRmOnZhbHVlJmd0OwogICAgICAgICZsdDtkY25kbDp0cmFuc2NyaXB0aW9uJmd0O+OCt+ODsyDjg4jjgrfjg6fjgqvjg7Pjgqzjgq8g44K344Oq44O844K6Jmx0Oy9kY25kbDp0cmFuc2NyaXB0aW9uJmd0OwogICAgICAmbHQ7L3JkZjpEZXNjcmlwdGlvbiZndDsKICAgICZsdDsvZGNuZGw6c2VyaWVzVGl0bGUmZ3Q7CiAgICAmbHQ7ZGNuZGw6ZWRpdGlvbiZndDsz6KiCJmx0Oy9kY25kbDplZGl0aW9uJmd0OwogICAgJmx0O2RjdGVybXM6Y3JlYXRvciZndDsKICAgICAgJmx0O2ZvYWY6QWdlbnQgcmRmOmFib3V0PSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvYXV0aC9lbnRpdHkvMDA5ODU5ODYmcXVvdDsmZ3Q7CiAgICAgICAgJmx0O2ZvYWY6bmFtZSZndDvljp/nlLAsIOaZuuWtkCwgMTk0Ny0mbHQ7L2ZvYWY6bmFtZSZndDsKICAgICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjg4/jg6njg4AsIOODiOODouOCsyZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0Oy9mb2FmOkFnZW50Jmd0OwogICAgJmx0Oy9kY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgICAmbHQ7Zm9hZjpBZ2VudCByZGY6YWJvdXQ9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9hdXRoL2VudGl0eS8wMTA2ODUxMCZxdW90OyZndDsKICAgICAgICAmbHQ7Zm9hZjpuYW1lJmd0O+axn+iNiSwg55Sx5L2zJmx0Oy9mb2FmOm5hbWUmZ3Q7CiAgICAgICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q744Ko44Kw44K1LCDjg6bjgqsmbHQ7L2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q7CiAgICAgICZsdDsvZm9hZjpBZ2VudCZndDsKICAgICZsdDsvZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgJmx0O2RjdGVybXM6Y3JlYXRvciZndDsKICAgICAgJmx0O2ZvYWY6QWdlbnQgcmRmOmFib3V0PSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvYXV0aC9lbnRpdHkvMDEwNTk0NjAmcXVvdDsmZ3Q7CiAgICAgICAgJmx0O2ZvYWY6bmFtZSZndDvlsI/lsbEsIOaGsuWPuCwgMTk3MS0mbHQ7L2ZvYWY6bmFtZSZndDsKICAgICAgICAmbHQ7ZGNuZGw6dHJhbnNjcmlwdGlvbiZndDvjgrPjg6Tjg54sIOOCseODs+OCuCZsdDsvZGNuZGw6dHJhbnNjcmlwdGlvbiZndDsKICAgICAgJmx0Oy9mb2FmOkFnZW50Jmd0OwogICAgJmx0Oy9kY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgICAmbHQ7Zm9hZjpBZ2VudCByZGY6YWJvdXQ9JnF1b3Q7aHR0cDovL2lkLm5kbC5nby5qcC9hdXRoL2VudGl0eS8wMDE0Nzk3OCZxdW90OyZndDsKICAgICAgICAmbHQ7Zm9hZjpuYW1lJmd0O+mrmOWxsSwg5q2j5LmfLCAxOTQxLSZsdDsvZm9hZjpuYW1lJmd0OwogICAgICAgICZsdDtkY25kbDp0cmFuc2NyaXB0aW9uJmd0O+OCv+OCq+ODpOODniwg44Oe44K144OkJmx0Oy9kY25kbDp0cmFuc2NyaXB0aW9uJmd0OwogICAgICAmbHQ7L2ZvYWY6QWdlbnQmZ3Q7CiAgICAmbHQ7L2RjdGVybXM6Y3JlYXRvciZndDsKICAgICZsdDtkY3Rlcm1zOmNyZWF0b3ImZ3Q7CiAgICAgICZsdDtmb2FmOkFnZW50IHJkZjphYm91dD0mcXVvdDtodHRwOi8vaWQubmRsLmdvLmpwL2F1dGgvZW50aXR5LzAwMTQ2MTYzJnF1b3Q7Jmd0OwogICAgICAgICZsdDtmb2FmOm5hbWUmZ3Q75qSN5p2+LCDosp7lpKssIDE5NDgtJmx0Oy9mb2FmOm5hbWUmZ3Q7CiAgICAgICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q744Km44Ko44Oe44OELCDjgrXjg4DjgqombHQ7L2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q7CiAgICAgICZsdDsvZm9hZjpBZ2VudCZndDsKICAgICZsdDsvZGN0ZXJtczpjcmVhdG9yJmd0OwogICAgJmx0O2RjOmNyZWF0b3ImZ3Q75Y6f55Sw5pm65a2QIOe3qCZsdDsvZGM6Y3JlYXRvciZndDsKICAgICZsdDtkYzpjcmVhdG9yJmd0O+WOn+eUsOaZuuWtkCwg5rGf6I2J55Sx5L2zLCDlsI/lsbHmhrLlj7gsIOa+pOS6lea4hSDlhbHokZcmbHQ7L2RjOmNyZWF0b3ImZ3Q7CiAgICAmbHQ7ZGNuZGw6c2VyaWVzQ3JlYXRvciZndDvpq5jlsbHmraPkuZ8sIOakjeadvuiynuWkqyDnm6Pkv64mbHQ7L2RjbmRsOnNlcmllc0NyZWF0b3ImZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpwdWJsaXNoZXImZ3Q7CiAgICAgICZsdDtmb2FmOkFnZW50Jmd0OwogICAgICAgICZsdDtmb2FmOm5hbWUmZ3Q75qi55p2R5oi/Jmx0Oy9mb2FmOm5hbWUmZ3Q7CiAgICAgICAgJmx0O2RjbmRsOnRyYW5zY3JpcHRpb24mZ3Q744K444Ol44K944Oz44Oc44KmJmx0Oy9kY25kbDp0cmFuc2NyaXB0aW9uJmd0OwogICAgICAgICZsdDtkY25kbDpsb2NhdGlvbiZndDvmnbHkuqwmbHQ7L2RjbmRsOmxvY2F0aW9uJmd0OwogICAgICAmbHQ7L2ZvYWY6QWdlbnQmZ3Q7CiAgICAmbHQ7L2RjdGVybXM6cHVibGlzaGVyJmd0OwogICAgJmx0O2RjbmRsOnB1YmxpY2F0aW9uUGxhY2UgcmRmOmRhdGF0eXBlPSZxdW90O2h0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9JU08zMTY2JnF1b3Q7Jmd0O0pQJmx0Oy9kY25kbDpwdWJsaWNhdGlvblBsYWNlJmd0OwogICAgJmx0O2RjdGVybXM6ZGF0ZSZndDsyMDA2LjEwJmx0Oy9kY3Rlcm1zOmRhdGUmZ3Q7CiAgICAmbHQ7ZGN0ZXJtczppc3N1ZWQgcmRmOmRhdGF0eXBlPSZxdW90O2h0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9XM0NEVEYmcXVvdDsmZ3Q7MjAwNiZsdDsvZGN0ZXJtczppc3N1ZWQmZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpzdWJqZWN0Jmd0OwogICAgICAmbHQ7cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0mcXVvdDtodHRwOi8vaWQubmRsLmdvLmpwL2F1dGgvbmRsc2gvMDA1NzUwMTAmcXVvdDsmZ3Q7CiAgICAgICAgJmx0O3JkZjp2YWx1ZSZndDvmg4XloLHmpJzntKImbHQ7L3JkZjp2YWx1ZSZndDsKICAgICAgJmx0Oy9yZGY6RGVzY3JpcHRpb24mZ3Q7CiAgICAmbHQ7L2RjdGVybXM6c3ViamVjdCZndDsKICAgICZsdDtkY3Rlcm1zOnN1YmplY3QgcmRmOnJlc291cmNlPSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvY2xhc3MvbmRsYy9VTDQxJnF1b3Q7LyZndDsKICAgICZsdDtkY3Rlcm1zOnN1YmplY3QgcmRmOnJlc291cmNlPSZxdW90O2h0dHA6Ly9pZC5uZGwuZ28uanAvY2xhc3MvbmRjOS8wMDcuNTgmcXVvdDsvJmd0OwogICAgJmx0O2RjdGVybXM6bGFuZ3VhZ2UgcmRmOmRhdGF0eXBlPSZxdW90O2h0dHA6Ly9wdXJsLm9yZy9kYy90ZXJtcy9JU082MzktMiZxdW90OyZndDtqcG4mbHQ7L2RjdGVybXM6bGFuZ3VhZ2UmZ3Q7CiAgICAmbHQ7ZGN0ZXJtczpleHRlbnQmZ3Q7MjAzcCA7IDIxY20mbHQ7L2RjdGVybXM6ZXh0ZW50Jmd0OwogICAgJmx0O2RjbmRsOnByaWNlJmd0OzE5MDDlhoYmbHQ7L2RjbmRsOnByaWNlJmd0OwogICAgJmx0O2RjdGVybXM6YXVkaWVuY2UmZ3Q75LiA6IisJmx0Oy9kY3Rlcm1zOmF1ZGllbmNlJmd0OwogICAgJmx0O2RjbmRsOm1hdGVyaWFsVHlwZSByZGY6cmVzb3VyY2U9JnF1b3Q7aHR0cDovL25kbC5nby5qcC9uZGx0eXBlL0Jvb2smcXVvdDsgcmRmczpsYWJlbD0mcXVvdDvlm7Pmm7gmcXVvdDsvJmd0OwogICAgJmx0O2RjdGVybXM6YWNjZXNzUmlnaHRzJmd0O1MwMVA5OVU5OSZsdDsvZGN0ZXJtczphY2Nlc3NSaWdodHMmZ3Q7CiAgJmx0Oy9kY25kbDpCaWJSZXNvdXJjZSZndDsKJmx0Oy9yZGY6UkRGJmd0OwogICAgICA8L3JlY29yZERhdGE+CiAgICAgIDxyZWNvcmRQb3NpdGlvbj4xPC9yZWNvcmRQb3NpdGlvbj4KICAgIDwvcmVjb3JkPgogIDwvcmVjb3Jkcz4KPC9zZWFyY2hSZXRyaWV2ZVJlc3BvbnNlPgo=
|
59
60
|
http_version:
|
60
|
-
recorded_at: Sun,
|
61
|
+
recorded_at: Sun, 31 Mar 2019 17:41:27 GMT
|
61
62
|
recorded_with: VCR 4.0.0
|
@@ -63,12 +63,37 @@ RSpec.describe OaiController, type: :controller do
|
|
63
63
|
assigns(:manifestation).should_not be_nil
|
64
64
|
response.should render_template('oai/provider')
|
65
65
|
end
|
66
|
+
|
66
67
|
it "assigns all manifestations as @manifestations in oai format with GetRecord with identifier for junii2 metadata" do
|
67
68
|
get :provider, params: { format: 'xml', verb: 'GetRecord', identifier: 'oai:localhost:manifestations-1', metadataPrefix: 'junii2' }
|
68
69
|
assigns(:manifestations).should be_nil
|
69
70
|
assigns(:manifestation).should_not be_nil
|
70
71
|
response.should render_template('oai/get_record')
|
71
72
|
end
|
73
|
+
|
74
|
+
it "should return only public identifiers for oai_dc metadata" do
|
75
|
+
get :provider, params: { format: 'xml', verb: 'ListIdentifiers', metadataPrefix: 'oai_dc' }
|
76
|
+
expect(assigns(:manifestations).map(&:id).include?(11)).to be_falsy
|
77
|
+
expect(assigns(:manifestations).map(&:id).include?(24)).to be_falsy
|
78
|
+
end
|
79
|
+
|
80
|
+
it "should return only public identifiers for junii2 metadata" do
|
81
|
+
get :provider, params: { format: 'xml', verb: 'ListIdentifiers', metadataPrefix: 'junii2' }
|
82
|
+
expect(assigns(:manifestations).map(&:id).include?(11)).to be_falsy
|
83
|
+
expect(assigns(:manifestations).map(&:id).include?(24)).to be_falsy
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should return only public records for oai_dc metadata" do
|
87
|
+
get :provider, params: { format: 'xml', verb: 'ListRecords', metadataPrefix: 'oai_dc' }
|
88
|
+
expect(assigns(:manifestations).map(&:id).include?(11)).to be_falsy
|
89
|
+
expect(assigns(:manifestations).map(&:id).include?(24)).to be_falsy
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should return only public records for junii2 metadata" do
|
93
|
+
get :provider, params: { format: 'xml', verb: 'ListRecords', metadataPrefix: 'junii2' }
|
94
|
+
expect(assigns(:manifestations).map(&:id).include?(11)).to be_falsy
|
95
|
+
expect(assigns(:manifestations).map(&:id).include?(24)).to be_falsy
|
96
|
+
end
|
72
97
|
end
|
73
98
|
end
|
74
99
|
end
|
@@ -10,7 +10,7 @@ require "enju_nii"
|
|
10
10
|
module Dummy
|
11
11
|
class Application < Rails::Application
|
12
12
|
# Initialize configuration defaults for originally generated Rails version.
|
13
|
-
config.load_defaults 5.
|
13
|
+
config.load_defaults 5.2
|
14
14
|
|
15
15
|
# Settings in config/environments/* take precedence over those specified here.
|
16
16
|
# Application configuration should go into files in config/initializers
|
@@ -1,30 +1,25 @@
|
|
1
|
-
|
1
|
+
# SQLite version 3.x
|
2
|
+
# gem install sqlite3
|
3
|
+
#
|
4
|
+
# Ensure the SQLite 3 gem is defined in your Gemfile
|
5
|
+
# gem 'sqlite3'
|
6
|
+
#
|
7
|
+
default: &default
|
2
8
|
adapter: sqlite3
|
3
|
-
|
4
|
-
|
5
|
-
mysql: &mysql
|
6
|
-
adapter: mysql2
|
7
|
-
username: root
|
8
|
-
password:
|
9
|
-
database: enju_<%= Rails.env %>
|
10
|
-
|
11
|
-
postgresql: &postgresql
|
12
|
-
adapter: postgresql
|
13
|
-
username: postgres
|
14
|
-
password:
|
15
|
-
database: enju_<%= Rails.env %>
|
16
|
-
|
17
|
-
defaults: &defaults
|
18
|
-
pool: 5
|
9
|
+
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
|
19
10
|
timeout: 5000
|
20
|
-
host: localhost
|
21
|
-
<<: *<%= ENV['DB'] || "sqlite" %>
|
22
11
|
|
23
12
|
development:
|
24
|
-
<<: *
|
13
|
+
<<: *default
|
14
|
+
database: db/development.sqlite3
|
25
15
|
|
16
|
+
# Warning: The database defined as "test" will be erased and
|
17
|
+
# re-generated from your development database when you run "rake".
|
18
|
+
# Do not set this db to the same as development or production.
|
26
19
|
test:
|
27
|
-
<<: *
|
20
|
+
<<: *default
|
21
|
+
database: db/test.sqlite3
|
28
22
|
|
29
23
|
production:
|
30
|
-
<<: *
|
24
|
+
<<: *default
|
25
|
+
database: db/production.sqlite3
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class CreateLibraries < ActiveRecord::Migration[4.2]
|
2
2
|
def change
|
3
3
|
create_table :libraries do |t|
|
4
|
-
t.string :name, null: false
|
4
|
+
t.string :name, index: true, null: false
|
5
5
|
t.text :display_name
|
6
6
|
t.string :short_display_name, null: false
|
7
7
|
t.string :zip_code
|
@@ -14,15 +14,13 @@ class CreateLibraries < ActiveRecord::Migration[4.2]
|
|
14
14
|
t.text :note
|
15
15
|
t.integer :call_number_rows, default: 1, null: false
|
16
16
|
t.string :call_number_delimiter, default: "|", null: false
|
17
|
-
t.
|
17
|
+
t.references :library_group, index: true, null: false
|
18
18
|
t.integer :users_count, default: 0, null: false
|
19
19
|
t.integer :position
|
20
|
-
t.
|
20
|
+
t.references :country
|
21
21
|
|
22
22
|
t.timestamps
|
23
23
|
t.datetime :deleted_at
|
24
24
|
end
|
25
|
-
add_index :libraries, :library_group_id
|
26
|
-
add_index :libraries, :name, unique: true
|
27
25
|
end
|
28
26
|
end
|
@@ -4,12 +4,11 @@ class CreateShelves < ActiveRecord::Migration[4.2]
|
|
4
4
|
t.string :name, null: false
|
5
5
|
t.text :display_name
|
6
6
|
t.text :note
|
7
|
-
t.
|
7
|
+
t.references :library, index: true, null: false
|
8
8
|
t.integer :items_count, default: 0, null: false
|
9
9
|
t.integer :position
|
10
10
|
t.timestamps
|
11
11
|
t.datetime :deleted_at
|
12
12
|
end
|
13
|
-
add_index :shelves, :library_id
|
14
13
|
end
|
15
14
|
end
|
@@ -3,7 +3,7 @@ class CreateLibraryGroups < ActiveRecord::Migration[4.2]
|
|
3
3
|
create_table :library_groups do |t|
|
4
4
|
t.string :name, null: false
|
5
5
|
t.text :display_name
|
6
|
-
t.string :short_name, null: false
|
6
|
+
t.string :short_name, index: true, null: false
|
7
7
|
t.text :my_networks
|
8
8
|
t.text :login_banner
|
9
9
|
t.text :note
|
@@ -12,6 +12,5 @@ class CreateLibraryGroups < ActiveRecord::Migration[4.2]
|
|
12
12
|
|
13
13
|
t.timestamps
|
14
14
|
end
|
15
|
-
add_index :library_groups, :short_name
|
16
15
|
end
|
17
16
|
end
|
@@ -1,12 +1,11 @@
|
|
1
1
|
class CreateBaskets < ActiveRecord::Migration[4.2]
|
2
2
|
def change
|
3
3
|
create_table :baskets do |t|
|
4
|
-
t.
|
4
|
+
t.references :user, index: true
|
5
5
|
t.text :note
|
6
6
|
t.integer :lock_version, default: 0, null: false
|
7
7
|
|
8
8
|
t.timestamps
|
9
9
|
end
|
10
|
-
add_index :baskets, :user_id
|
11
10
|
end
|
12
11
|
end
|
@@ -3,15 +3,12 @@ class CreateSubscriptions < ActiveRecord::Migration[4.2]
|
|
3
3
|
create_table :subscriptions do |t|
|
4
4
|
t.text :title, null: false
|
5
5
|
t.text :note
|
6
|
-
|
7
|
-
t.
|
8
|
-
t.integer :order_list_id
|
6
|
+
t.references :user, index: true
|
7
|
+
t.references :order_list, index: true
|
9
8
|
t.datetime :deleted_at
|
10
9
|
t.integer :subscribes_count, default: 0, null: false
|
11
10
|
|
12
11
|
t.timestamps
|
13
12
|
end
|
14
|
-
add_index :subscriptions, :user_id
|
15
|
-
add_index :subscriptions, :order_list_id
|
16
13
|
end
|
17
14
|
end
|
@@ -1,14 +1,13 @@
|
|
1
1
|
class CreateSubscribes < ActiveRecord::Migration[4.2]
|
2
2
|
def change
|
3
3
|
create_table :subscribes do |t|
|
4
|
-
t.
|
4
|
+
t.references :subscription, index: true, null: false
|
5
5
|
t.integer :work_id, null: false
|
6
6
|
t.datetime :start_at, null: false
|
7
7
|
t.datetime :end_at, null: false
|
8
8
|
|
9
9
|
t.timestamps
|
10
10
|
end
|
11
|
-
add_index :subscribes, :subscription_id
|
12
11
|
add_index :subscribes, :work_id
|
13
12
|
end
|
14
13
|
end
|
@@ -3,9 +3,7 @@ class CreatePictureFiles < ActiveRecord::Migration[4.2]
|
|
3
3
|
create_table :picture_files do |t|
|
4
4
|
t.integer :picture_attachable_id
|
5
5
|
t.string :picture_attachable_type
|
6
|
-
t.string :content_type
|
7
6
|
t.text :title
|
8
|
-
t.string :thumbnail
|
9
7
|
t.integer :position
|
10
8
|
|
11
9
|
t.timestamps
|
@@ -8,7 +8,7 @@ class AddDcndlSchema < ActiveRecord::Migration[4.2]
|
|
8
8
|
add_column :manifestations, :valid_until, :timestamp
|
9
9
|
add_column :manifestations, :date_submitted, :timestamp
|
10
10
|
add_column :manifestations, :date_accepted, :timestamp
|
11
|
-
add_column :manifestations, :
|
11
|
+
add_column :manifestations, :date_captured, :timestamp
|
12
12
|
rename_column :manifestations, :copyright_date, :date_copyrighted
|
13
13
|
end
|
14
14
|
|
@@ -21,7 +21,7 @@ class AddDcndlSchema < ActiveRecord::Migration[4.2]
|
|
21
21
|
remove_column :manifestations, :valid_until
|
22
22
|
remove_column :manifestations, :date_submitted
|
23
23
|
remove_column :manifestations, :date_accepted
|
24
|
-
remove_column :manifestations, :
|
24
|
+
remove_column :manifestations, :date_captured
|
25
25
|
rename_column :manifestations, :date_copyrighted, :copyright_date
|
26
26
|
end
|
27
27
|
end
|