cirneco 0.9.20 → 0.9.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +42 -42
- data/cirneco.gemspec +1 -1
- data/lib/cirneco/api.rb +9 -0
- data/lib/cirneco/media.rb +0 -2
- data/lib/cirneco/metadata.rb +24 -0
- data/lib/cirneco/version.rb +1 -1
- data/resources/kernel-4.0/samples/datacite-example-complicated-v4.1.xml +1 -1
- data/spec/api_spec.rb +5 -5
- data/spec/doi_spec.rb +4 -4
- data/spec/fixtures/vcr_cassettes/Cirneco_DataCenter/get/should_get_all_dois_by_prefix.yml +488 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_all_dois.yml +488 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_doi.yml +50 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/put/should_put_doi.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_all_dois.yml +488 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi.yml +50 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi_not_found.yml +48 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/put/should_put_doi.yml +54 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/get/should_get_media.yml +50 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/post/should_post_media.yml +52 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/delete/should_delete_metadata.yml +50 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/get/should_get_metadata.yml +51 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/post/should_post_metadata.yml +112 -0
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/media/includes_media.yml +20 -18
- data/spec/fixtures/vcr_cassettes/Cirneco_Work/schema/BlogPosting.yml +21 -19
- data/spec/spec_helper.rb +2 -2
- data/spec/utils_spec.rb +7 -7
- data/spec/work_spec.rb +2 -3
- metadata +24 -11
@@ -8,7 +8,7 @@ http_interactions:
|
|
8
8
|
string: ''
|
9
9
|
headers:
|
10
10
|
User-Agent:
|
11
|
-
- Maremma
|
11
|
+
- Mozilla/5.0 (compatible; Maremma/4.1.1; +https://github.com/datacite/maremma)
|
12
12
|
Accept:
|
13
13
|
- text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
|
14
14
|
response:
|
@@ -29,17 +29,19 @@ http_interactions:
|
|
29
29
|
Location:
|
30
30
|
- "/eating-your-own-dog-food/"
|
31
31
|
Date:
|
32
|
-
- Thu,
|
32
|
+
- Thu, 30 Aug 2018 22:48:22 GMT
|
33
33
|
Server:
|
34
34
|
- AmazonS3
|
35
|
+
Age:
|
36
|
+
- '1718'
|
35
37
|
X-Cache:
|
36
|
-
-
|
38
|
+
- Hit from cloudfront
|
37
39
|
Via:
|
38
|
-
- 1.1
|
40
|
+
- 1.1 68f89d0537cd3c4fe98801aa39bb2b39.cloudfront.net (CloudFront)
|
39
41
|
X-Amz-Cf-Id:
|
40
|
-
-
|
42
|
+
- "-WJxs6Ym3NRggULrmJdv0z9qzC6NRrWM49eANsBF28BrUWtX68_twQ=="
|
41
43
|
body:
|
42
|
-
encoding:
|
44
|
+
encoding: ASCII-8BIT
|
43
45
|
string: |
|
44
46
|
<html>
|
45
47
|
<head><title>302 Moved Temporarily</title></head>
|
@@ -48,14 +50,14 @@ http_interactions:
|
|
48
50
|
<ul>
|
49
51
|
<li>Code: Found</li>
|
50
52
|
<li>Message: Resource Found</li>
|
51
|
-
<li>RequestId:
|
52
|
-
<li>HostId:
|
53
|
+
<li>RequestId: 8CF25FBB4AB396B6</li>
|
54
|
+
<li>HostId: H5yKf809x72dCh+9/HUJdPxhMPpMSamqcxZpxNwQD8XS7N5jAeTbeoybpE3NN9qrEbyF7ddWKlE=</li>
|
53
55
|
</ul>
|
54
56
|
<hr/>
|
55
57
|
</body>
|
56
58
|
</html>
|
57
59
|
http_version:
|
58
|
-
recorded_at: Thu,
|
60
|
+
recorded_at: Thu, 30 Aug 2018 23:17:01 GMT
|
59
61
|
- request:
|
60
62
|
method: get
|
61
63
|
uri: https://blog.datacite.org/eating-your-own-dog-food/
|
@@ -64,7 +66,7 @@ http_interactions:
|
|
64
66
|
string: ''
|
65
67
|
headers:
|
66
68
|
User-Agent:
|
67
|
-
- Maremma
|
69
|
+
- Mozilla/5.0 (compatible; Maremma/4.1.1; +https://github.com/datacite/maremma)
|
68
70
|
Accept:
|
69
71
|
- text/html,application/json,application/xml;q=0.9, text/plain;q=0.8,image/png,*/*;q=0.5
|
70
72
|
response:
|
@@ -75,31 +77,31 @@ http_interactions:
|
|
75
77
|
Content-Type:
|
76
78
|
- text/html
|
77
79
|
Content-Length:
|
78
|
-
- '
|
80
|
+
- '23819'
|
79
81
|
Connection:
|
80
82
|
- keep-alive
|
81
83
|
Date:
|
82
|
-
- Thu,
|
84
|
+
- Thu, 30 Aug 2018 22:48:24 GMT
|
83
85
|
Cache-Control:
|
84
86
|
- max-age=31536000
|
85
87
|
Last-Modified:
|
86
|
-
- Thu,
|
88
|
+
- Thu, 30 Aug 2018 18:28:57 GMT
|
87
89
|
Etag:
|
88
|
-
- '"
|
90
|
+
- '"321133250372acae3f89220311b3eb2c"'
|
89
91
|
Server:
|
90
92
|
- AmazonS3
|
91
93
|
Age:
|
92
|
-
- '
|
94
|
+
- '1718'
|
93
95
|
X-Cache:
|
94
96
|
- Hit from cloudfront
|
95
97
|
Via:
|
96
|
-
- 1.1
|
98
|
+
- 1.1 a028e8f26199b998c4486f8336490167.cloudfront.net (CloudFront)
|
97
99
|
X-Amz-Cf-Id:
|
98
|
-
-
|
100
|
+
- msJ1MnKUzhy-P3aVGOosVJ0l6uZV_Z3Mhi7981rKvOrZdSEWb4yuAQ==
|
99
101
|
body:
|
100
102
|
encoding: ASCII-8BIT
|
101
103
|
string: !binary |-
|
102
|
-
PCFET0NUWVBFIGh0bWw+CiAgPGh0bWw+CiAgICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICAgIDwhLS0gKDEpIE9wdGltaXplIGZvciBtb2JpbGUgdmVyc2lvbnM6IGh0dHA6Ly9nb28uZ2wvRU9wRmwgLS0+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8IS0tICgxKSBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZTogYml0Lmx5LzFjOEVpQzkgLS0+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgoKCiAgICA8dGl0bGU+RWF0aW5nIHlvdXIgb3duIERvZyBGb29kPC90aXRsZT4KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJFYXRpbmcgeW91ciBvd24gZG9nIGZvb2QgaXMgYSBzbGFuZyB0ZXJtIHRvIGRlc2NyaWJlIHRoYXQgYW4gb3JnYW5pemF0aW9uIHNob3VsZCBpdHNlbGYgdXNlIHRoZSBwcm9kdWN0cyBhbmQgc2VydmljZXMgaXQgcHJvdmlkZXMuIEZvciBEYXRhQ2l0ZSB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHVzZSBET0lzIHdpdGggYXBwcm9wcmlhdGUgbWV0YWRhdGEgYW5kIHN0cmF0ZWdpZXMgZm9yIGxvbmctdGVybSBwcmVzZXJ2YXRpb24gZm9yLi4uIiAvPgoKICAgIDxtZXRhIG5hbWU9IkhhbmRoZWxkRnJpZW5kbHkiIGNvbnRlbnQ9IlRydWUiIC8+CiAgICA8bWV0YSBuYW1lPSJNb2JpbGVPcHRpbWl6ZWQiIGNvbnRlbnQ9IjMyMCIgLz4KICAgIDxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLWNhcGFibGUiIGNvbnRlbnQ9InllcyI+CiAgICA8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1zdGF0dXMtYmFyLXN0eWxlIiBjb250ZW50PSJibGFjay10cmFuc2x1Y2VudCI+CgogICAgPCEtLSBEdWJsaW5Db3JlIE1ldGFkYXRhIC0tPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnRpdGxlIiBjb250ZW50PSJFYXRpbmcgeW91ciBvd24gRG9nIEZvb2QiIC8+CiAgICA8bWV0YSBwcm9wZXJ0eT0iZGM6Zm9ybWF0IiBjb250ZW50PSJ0ZXh0L2h0bWwiIC8+CiAgICA8bWV0YSBwcm9wZXJ0eT0iZGM6bGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnJpZ2h0cyIgY29udGVudD0iQ0MtQlkiIC8+CiAgICA8bWV0YSBwcm9wZXJ0eT0iZGM6c291cmNlIiBjb250ZW50PSJEYXRhQ2l0ZSBCbG9nIiAvPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnN1YmplY3QiIGNvbnRlbnQ9IlNjaG9sYXJseSBDb21tdW5pY2F0aW9uIiAvPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiIC8+CgoKICAgIDxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IkVhdGluZyB5b3VyIG93biBEb2cgRm9vZCIgLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iRWF0aW5nIHlvdXIgb3duIGRvZyBmb29kIGlzIGEgc2xhbmcgdGVybSB0byBkZXNjcmliZSB0aGF0IGFuIG9yZ2FuaXphdGlvbiBzaG91bGQgaXRzZWxmIHVzZSB0aGUgcHJvZHVjdHMgYW5kIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiBGb3IgRGF0YUNpdGUgdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCB1c2UgRE9JcyB3aXRoIGFwcHJvcHJpYXRlIG1ldGFkYXRhIGFuZCBzdHJhdGVnaWVzIGZvciBsb25nLXRlcm0gcHJlc2VydmF0aW9uIGZvci4uLiIgLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9ibG9nLmRhdGFjaXRlLm9yZy9pbWFnZXMvMjAxNi8xMi8yMzA3ODUuanBnIiAvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9ImJsb2ciIC8+CgogICAgPGxpbmsgaHJlZj0iLy9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUxpYnJlK0Jhc2tlcnZpbGxlOjQwMCw0MDBpLDcwMCIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgIDxsaW5rIGhyZWY9Jy8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1SYWxld2F5OjQwMCw2MDAsNDAwaXRhbGljLDYwMGl0YWxpYycgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+CiAgICA8bGluayBocmVmPSIvL21heGNkbi5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjYuMS9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0ndGV4dC9jc3MnPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9hc3NldHMuZGF0YWNpdGUub3JnL3N0eWxlc2hlZXRzL2RhdGFjaXRlLmNzcyIgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+CiAgICA8bGluayBocmVmPSJodHRwczovL2Fzc2V0cy5kYXRhY2l0ZS5vcmcvaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9Imljb24iIHR5cGU9ImltYWdlL2ljbyIgLz4KCiAgICA8c2NyaXB0IHNyYz0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZml0dmlkcy8xLjEuMC9qcXVlcnkuZml0dmlkcy5taW4uanMiPjwvc2NyaXB0PgoKICAgICAgPHNjcmlwdAogICAgICAgIHNyYz0iLy9kMnd5OGY3YTl1cnNubS5jbG91ZGZyb250Lm5ldC9idWdzbmFnLTIubWluLmpzIgogICAgICAgIGRhdGEtYXBpa2V5PSJjMzdhNTg2MTk2NzA5MWE5YjQyYTFhNzdlMjM1MTE0YSI+CiAgICAgIDwvc2NyaXB0PgoKICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CiAgICAgIHsiQGNvbnRleHQiOiJodHRwOi8vc2NoZW1hLm9yZyIsIkB0eXBlIjoiQmxvZ1Bvc3RpbmciLCJAaWQiOiJodHRwczovL2RvaS5vcmcvMTAuNTQzOC80azNtLW55dmciLCJuYW1lIjoiRWF0aW5nIHlvdXIgb3duIERvZyBGb29kIiwiYWx0ZXJuYXRlTmFtZSI6Ik1TLTQ5LTM2MzItNTA4MyIsInVybCI6Imh0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmcvZWF0aW5nLXlvdXItb3duLWRvZy1mb29kLyIsImF1dGhvciI6W3siQHR5cGUiOiJQZXJzb24iLCJAaWQiOiJodHRwczovL29yY2lkLm9yZy8wMDAwLTAwMDMtMTQxOS0yNDA1IiwiZ2l2ZW5OYW1lIjoiTWFydGluIiwiZmFtaWx5TmFtZSI6IkZlbm5lciIsIm5hbWUiOiJNYXJ0aW4gRmVubmVyIn1dLCJwdWJsaXNoZXIiOnsiQHR5cGUiOiJPcmdhbml6YXRpb24iLCJuYW1lIjoiRGF0YUNpdGUifSwiZGF0ZUNyZWF0ZWQiOiIyMDE2LTEyLTIwIiwiZGF0ZVB1Ymxpc2hlZCI6IjIwMTYtMTItMjAiLCJkYXRlTW9kaWZpZWQiOiIyMDE2LTEyLTIwIiwia2V5d29yZHMiOiJkYXRhY2l0ZSwgZG9pLCBtZXRhZGF0YSwgZmVhdHVyZWQiLCJ2ZXJzaW9uIjoiMS4wIiwiZGVzY3JpcHRpb24iOiJFYXRpbmcgeW91ciBvd24gZG9nIGZvb2QgaXMgYSBzbGFuZyB0ZXJtIHRvIGRlc2NyaWJlIHRoYXQgYW4gb3JnYW5pemF0aW9uIHNob3VsZCBpdHNlbGYgdXNlIHRoZSBwcm9kdWN0cyBhbmQgc2VydmljZXMgaXQgcHJvdmlkZXMuIEZvciBEYXRhQ2l0ZSB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHVzZSBET0lzIHdpdGggYXBwcm9wcmlhdGUgbWV0YWRhdGEgYW5kIHN0cmF0ZWdpZXMgZm9yIGxvbmctdGVybSBwcmVzZXJ2YXRpb24gZm9yLi4uIiwibGljZW5zZSI6Imh0dHBzOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS80LjAvIiwiaW1hZ2UiOiJodHRwczovL2Jsb2cuZGF0YWNpdGUub3JnL2ltYWdlcy8yMDE2LzEyLzIzMDc4NS5qcGciLCJpc1BhcnRPZiI6eyJAdHlwZSI6IkJsb2ciLCJAaWQiOiJodHRwczovL2RvaS5vcmcvMTAuNTQzOC8wMDAwLTAwU1MiLCJuYW1lIjoiRGF0YUNpdGUgQmxvZyJ9LCJjaXRhdGlvbiI6W3siQHR5cGUiOiJDcmVhdGl2ZVdvcmsiLCJAaWQiOiJodHRwczovL2RvaS5vcmcvMTAuNTQzOC8wMDEyIn0seyJAdHlwZSI6IkNyZWF0aXZlV29yayIsIkBpZCI6Imh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzU1RTUtVDVDMCJ9XX0KICAgIDwvc2NyaXB0PgogIDwvaGVhZD4KICA8Ym9keT4KICAgIDxoZWFkZXIgY2xhc3M9ImhlYWRlciIgaWQ9Im5hdnRvcCI+CiAgICAgIDxkaXYgY2xhc3M9Im5hdmJhciBuYXZiYXItd2hpdGUiIHJvbGU9Im5hdmlnYXRpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItaGVhZGVyIgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9Im5hdmJhci10b2dnbGUiIGRhdGEtdG9nZ2xlPSJjb2xsYXBzZSIgZGF0YS10YXJnZXQ9Ii5uYXZiYXItY29sbGFwc2UiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzci1vbmx5Ij5Ub2dnbGUgbmF2aWdhdGlvbjwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1iYXIiPjwvc3Bhbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxhIGNsYXNzPSJuYXZiYXItYnJhbmQiIGhyZWY9Ii8iPkRhdGFDaXRlIEJsb2c8L2E+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJuYXZiYXItY29sbGFwc2UgY29sbGFwc2UiPgogICAgICAgICAgICA8dWwgY2xhc3M9Im5hdiBuYXZiYXItbmF2IG5hdmJhci1yaWdodCI+CiAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc3VwcG9ydC5kYXRhY2l0ZS5vcmciPlN1cHBvcnQ8L2E+PC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRyb3Bkb3duIj4KICAgICAgICAgICAgICAgIDxhIGhyZWY9IiMiIGNsYXNzPSJkcm9wZG93bi10b2dnbGUiIGRhdGEtdG9nZ2xlPSJkcm9wZG93biIgaWQ9InNpdGVzIj48aSBjbGFzcz0nZmEgZmEtdGgnPjwvaT4gPHNwYW4gY2xhc3M9ImNhcmV0Ij48L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJkcm9wZG93bi1tZW51IiByb2xlPSJtZW51Ij4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZyI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLWdsb2JlIGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgSG9tZXBhZ2U8L2E+CiAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL2Jsb2cuZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtcnNzIGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgQmxvZzwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyIj48L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9tZHMuZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtZGF0YWJhc2UgZmEtZncnPjwvaT4KICAgICAgICAgICAgICAgICAgICBNRFM8L2E+CiAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3NjaGVtYS5kYXRhY2l0ZS5vcmciPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1maWxlLWNvZGUtbyBmYS1mdyc+PC9pPgogICAgICAgICAgICAgICAgICAgIFNjaGVtYTwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9jaXRhdGlvbi5jcm9zc2NpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtZmlsZS10ZXh0LW8gZmEtZncnPjwvaT4KICAgICAgICAgICAgICAgICAgICBDaXRhdGlvbiBGb3JtYXR0ZXI8L2E+CiAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciI+PC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc2VhcmNoLmRhdGFjaXRlLm9yZyI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLXNlYXJjaCBmYS1mdyc+PC9pPgogICAgICAgICAgICAgICAgICAgIFNlYXJjaDwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vb2FpLmRhdGFjaXRlLm9yZyI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLXRhYmxlIGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgT0FJLVBNSDwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc3RhdHMuZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtYmFyLWNoYXJ0IGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgU3RhdGlzdGljczwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vYXBpLmRhdGFjaXRlLm9yZyI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLWNvZ3MgZmEtZncnPjwvaT4KICAgICAgICAgICAgICAgICAgICBSRVNUIEFQSTwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cucmUzZGF0YS5vcmciPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1jdWJlcyBmYS1mdyc+PC9pPgogICAgICAgICAgICAgICAgICAgIHJlM2RhdGE8L2E+CiAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0iZGl2aWRlciI+PC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zdGF0dXMuZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtY2FsZW5kYXItY2hlY2stbyBmYS1mdyc+PC9pPgogICAgICAgICAgICAgICAgICAgIFN0YXR1czwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgPC91bD4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvaGVhZGVyPgogICAgICA8ZGl2IGNsYXNzPSJ3cmFwcGVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24gc2VjdGlvbi13aGl0ZSI+CiAgICAgIDxkaXYgY2xhc3M9ImNvbnRhaW5lci1mbHVpZCI+CiAgICAgICAgPGRpdiBjbGFzcz0icm93IHJvdy1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC04IGNvbC1tZC1vZmZzZXQtMiBwb3N0LWNvbnRlbnQiPgogICAgICAgICAgICA8YSBuYW1lPSJ0b3BvZnBhZ2UiPjwvYT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icG9zdC1tZXRhIj4KICAgICAgICAgICAgICA8aDE+RWF0aW5nIHlvdXIgb3duIERvZyBGb29kPC9oMT4KICAgICAgICAgICAgICBEZWNlbWJlciAyMCwgMjAxNiBieSBNYXJ0aW4gRmVubmVyCiAgICAgICAgICAgICAg4oCiIDxzcGFuIGNsYXNzPSJwb3N0LXJlYWRpbmctdGltZSI+PC9zcGFuPiByZWFkCiAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZG9pIj48YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuNTQzOC80azNtLW55dmciPmh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzRrM20tbnl2ZzwvYT48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPHA+PGEgaHJlZj0iaHR0cHM6Ly9uZXdyZXB1YmxpYy5jb20vYXJ0aWNsZS8xMTUzNDkvZG9nZm9vZGluZy10ZWNoLXNsYW5nLXdvcmtpbmctb3V0LWdsaXRjaGVzIj5FYXRpbmcgeW91ciBvd24gZG9nIGZvb2Q8L2E+IGlzIGEgc2xhbmcgdGVybSB0byBkZXNjcmliZSB0aGF0IGFuIG9yZ2FuaXphdGlvbiBzaG91bGQgaXRzZWxmIHVzZSB0aGUgcHJvZHVjdHMgYW5kIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiBGb3IgRGF0YUNpdGUgdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCB1c2UgRE9JcyB3aXRoIGFwcHJvcHJpYXRlIG1ldGFkYXRhIGFuZCBzdHJhdGVnaWVzIGZvciBsb25nLXRlcm0gcHJlc2VydmF0aW9uIGZvciB0aGUgc2Nob2xhcmx5IG91dHB1dHMgd2UgcHJvZHVjZS4gRm9yIHRoZSBtb3N0IHBhcnQgdGhpcyBpcyBub3QgcmVzZWFyY2ggZGF0YSwgYnV0IHJhdGhlciB0ZWNobmljYWwgZG9jdW1lbnRzIHN1Y2ggYXMgdGhlIERhdGFDaXRlIFNjaGVtYSBhbmQgaXRzIGRvY3VtZW50YXRpb24gPHNwYW4gY2xhc3M9ImNpdGF0aW9uIj4oPGEgaHJlZj0iI3JlZi1odHRwczovL2RvaS5vcmcvMTAuNTQzOC8wMDEyIj4yMDE2PC9hPik8L3NwYW4+LjwvcD4KPHA+VGhlc2Ugb3V0cHV0cyBhbHNvIGluY2x1ZGUgdGhlIHBvc3RzIG9uIHRoaXMgYmxvZywgd2hlcmUgd2UgZGlzY3VzcyB0b3BpY3MgcmVsZXZhbnQgZm9yIHRoZSBEYXRhQ2l0ZSBjb21tdW5pdHksIGJ1dCBhbHNvIG9mIGJyb2FkZXIgaW50ZXJlc3QgdG8gYW55b25lIHdobyBjYXJlcyBhYm91dCByZXNlYXJjaCBkYXRhLCBwZXJzaXN0ZW50IGlkZW50aWZpZXJzLCBhbmQgc2Nob2xhcmx5IGluZnJhc3RydWN0dXJlLiBBbmQgc3RhcnRpbmcgdG9kYXkgYWxsIGJsb2cgcG9zdHMgb24gdGhpcyBibG9nIHdpbGwgaGF2ZSBhIERPSSwgbWV0YWRhdGEgYW5kIHVzZSBhIHBlcnNpc3RlbnQgc3RvcmFnZSBtZWNoYW5pc20uPC9wPgo8ZGl2IGNsYXNzPSJmaWd1cmUiPgo8aW1nIHNyYz0iL2ltYWdlcy8yMDE2LzEyLzIzMDc4NS5qcGciIGFsdD0iUGhvdG8gYnkgQmlsbCBFbXJpY2guIENDIFplcm8uIiAvPgo8cCBjbGFzcz0iY2FwdGlvbiI+UGhvdG8gYnkgPGEgaHJlZj0iaHR0cHM6Ly93d3cucGV4ZWxzLmNvbS9waG90by9ibGFjay1hbmQtdGFuLXlvcmtzaGlyZS10ZXJyaWVyLXB1cHB5LTIzMDc4NS8iPkJpbGwgRW1yaWNoPC9hPi4gPGEgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC8iPkNDIFplcm88L2E+LjwvcD4KPC9kaXY+CjxoMyBpZD0idGVjaG5pY2FsLWltcGxlbWVudGF0aW9uIj5UZWNobmljYWwgSW1wbGVtZW50YXRpb248L2gzPgo8cD5UaGlzIGJsb2cgaXMgcG93ZXJlZCBieSB0aGUgc3RhdGljIHNpdGUgZ2VuZXJhdG9yIDxhIGhyZWY9Imh0dHBzOi8vbWlkZGxlbWFuYXBwLmNvbS8iPk1pZGRsZW1hbjwvYT4sIHdpdGggYmxvZyBwb3N0cyB3cml0dGVuIGluIDxhIGhyZWY9Imh0dHA6Ly9jb21tb25tYXJrLm9yZy8iPk1hcmtkb3duPC9hPiBhbmQgY29udmVydGVkIHRvIEhUTUwgdXNpbmcgPGEgaHJlZj0iaHR0cDovL3BhbmRvYy5vcmcvIj5QYW5kb2M8L2E+IGFuZCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly90cmF2aXMtY2kub3JnIj5UcmF2aXMgQ0k8L2E+IGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gc2VydmljZS4gU3RhdGljIHNpdGUgZ2VuZXJhdG9yIG1lYW5zIHRoYXQgdGhlcmUgaXMgbm8gZGF0YWJhc2Ugb3IgYXBwbGljYXRpb24gc2VydmVyIHBvd2VyaW5nIHRoZSBzaXRlLCBtYWtpbmcgd2Vic2l0ZSBhZG1pbnN0cmF0aW9uIHNpbXBsZXIsIGNoZWFwZXIgYW5kIHNhZmVyLiBJbiBhZGRpdGlvbiB0byB0aGUgYmxvZywgdGhlIDxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZyI+RGF0YUNpdGUgaG9tZXBhZ2U8L2E+IGFuZCA8YSBocmVmPSJodHRwczovL3NjaGVtYS5kYXRhY2l0ZS5vcmciPk1ldGFkYXRhIFNjaGVtYSBzdWJzaXRlPC9hPiBhcmUgYWxzbyBnZW5lcmF0ZWQgdXNpbmcgTWlkZGxlbWFuLjwvcD4KPHA+VGhlIHNpbXBsaWNpdHkgaXMgcGFydGljdWxhcmx5IGltcG9ydGFudCBoZXJlLCBhcyByZWdpc3RlcmluZyB0aGUgRE9JcyBhbmQgbWV0YWRhdGEgY2FuIGJlIGFjY29tcGxpc2hlZCB1c2luZyBhIGNvbW1hbmQgbGluZSB1dGlsaXR5IHdyaXR0ZW4gYnkgRGF0YUNpdGUgc3RhZmYgdGhhdCBkb2VzbuKAmXQgbmVlZCB0byBrbm93IG11Y2ggYWJvdXQgdGhlIGludGVybmFscyBvZiBNaWRkbGVtYW4sIGFuZCB0aHVzIGNhbiBiZSBlYXNpbHkgYWRhcHRlZCB0byBvdGhlciBzdGF0aWMgc2l0ZSBnZW5lcmF0b3JzIHN1Y2ggYXMgPGEgaHJlZj0iaHR0cDovL2pla3lsbHJiLmNvbS8iPkpla3lsbDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly9nb2h1Z28uaW8vIj5IdWdvPC9hPiBvciA8YSBocmVmPSJodHRwczovL2hleG8uaW8vIj5IZXhvPC9hPi4gVGhlIGNvbW1hbmQgbGluZSB1dGlsaXR5IGlzIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhY2l0ZS9jaXJuZWNvIj5DaXJuZWNvPC9hPiwgZ2VuZXJhdGluZyB0aGUgbWV0YWRhdGEgWE1MIGFjY29yZGluZyB0byB0aGUgRGF0YUNpdGUgTWV0YWRhdGEgU2NoZW1hLCBhbmQgcmVnaXN0ZXJpbmcgRE9JIGFuZCBtZXRhZGF0YSB3aXRoIHRoZSBEYXRhQ2l0ZSBNRFMuIExpa2UgYWxsIHRvb2xzIG1lbnRpb25lZCBpbiB0aGlzIHBvc3QgQ2lybmVjbyBpcyBvcGVuIHNvdXJjZSBzb2Z0d2FyZSwgcGxlYXNlIHJlYWNoIG91dCB0byB1cyBpZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gaW1wbGVtZW50aW5nIHNpbWlsYXIgZnVuY3Rpb25hbGl0eSBmb3IgeW91ciBibG9nLjwvcD4KPGgzIGlkPSJnZW5lcmF0aW5nLWRvaXMiPkdlbmVyYXRpbmcgRE9JczwvaDM+CjxwPlRoZSBET0lzIGZvciB0aGlzIGJsb2cgYXJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LCB1c2luZyBhIG1vZGlmaWVkIGJhc2UzMiBlbmNvZGluZyBhbGdvcml0aG0gdGhhdCBpcyBwcm92aWRlZCBieSBDaXJuZWNvLCBhcyBkaXNjdXNzZWQgbGFzdCB3ZWVrIDxzcGFuIGNsYXNzPSJjaXRhdGlvbiI+KEZlbm5lciwgPGEgaHJlZj0iI3JlZi1odHRwczovL2RvaS5vcmcvMTAuNTQzOC81NUU1LVQ1QzAiPjIwMTY8L2E+KTwvc3Bhbj4uIFRoZSBET0kgaXMgZ2VuZXJhdGVkIGFuZCBtaW50ZWQgd2hlbiBhIG5ldyBwb3N0IGlzIHB1c2hlZCB0byA8YSBocmVmPSJodHRwczovL2Jsb2cuZGF0YWNpdGUub3JnIiBjbGFzcz0idXJpIj5odHRwczovL2Jsb2cuZGF0YWNpdGUub3JnPC9hPi4gVGhpcyBhdm9pZHMgdHdvIHByb2JsZW1zOiBhKSBET0ktbGlrZSBzdHJpbmdzIGluIHRoZSB3aWxkIGJlZm9yZSBwdWJsaWNhdGlvbiBhbmQgYikgdGhlIHJhbmRvbWx5IGdlbmVyYXRlZCBET0kgZXhpc3RzIGFscmVhZHkgKHdlIGNhbiBzaW1wbHkgZ2VuZXJhdGUgYSBuZXcgb25lKS4gQWxsIERPSXMgYXJlIHNob3J0LCB3aXRob3V0IHNlbWFudGljIGluZm9tYXRpb24gdGhhdCBtaWdodCBjaGFuZ2Ugb3ZlciB0aW1lLCBhbmQgd2l0aCBhIGNoZWNrc3VtIHRvIG1pbmltaXplIHRyYW5zY3JpcHRpb24gZXJyb3JzLCBmb3IgZXhhbXBsZSA8c3Ryb25nPmh0dHBzOi8vZG9pLm9yZy8xMC41NDM4L1hDQkotRzdaWTwvc3Ryb25nPi4gR29pbmcgZm9yd2FyZCB3ZSBlbmNvdXJhZ2UgdXNlcnMgdG8gbGluayB0byB0aGUgRGF0YUNpdGUgQmxvZyB1c2luZyB0aGUgRE9JLCBhcyB0aGVzZSBsaW5rcyB3aWxsIGNvbnRpbnVlIHRvIHdvcmsgZXZlbiBpZiB3ZSBldmVyIG1vdmUgdGhlIGJsb2cgdG8gYSBkaWZmZXJlbnQgbG9jYXRpb24uPC9wPgo8aDMgaWQ9ImdlbmVyYXRpbmctbWV0YWRhdGEiPkdlbmVyYXRpbmcgTWV0YWRhdGE8L2gzPgo8cD5Gb3IgdGhlIGdlbmVyYXRpb24gb2YgbWV0YWRhdGEsIHdlIG5lZWQgdG8gc3RyaWtlIGEgYmFsYW5jZSBiZXR3ZWVuIHNpbXBsZSBhdXRob3IgcHJvdmlkZWQgbWV0YWRhdGEsIGJ1dCByaWNoIGVub3VnaCB0byBhaWQgZGlzY292ZXJ5LiBXZSBhcmUgZG9pbmcgdGhpcyB2aWEgdGhyZWUgbWVjaGFuaXNtczo8L3A+Cjx1bD4KPGxpPm1ldGFkYXRhIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3I8L2xpPgo8bGk+ZGVmYXVsdCBtZXRhZGF0YSBmb3IgdGhlIGJsb2c8L2xpPgo8bGk+bWV0YWRhdGEgYXV0b21hdGljYWxseSBleHRyYWN0ZWQgZnJvbSBjb250ZW50PC9saT4KPC91bD4KPHA+VGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IHRoZSBhdXRob3IgYXJlIHRoZSB0eXBpY2FsIG1ldGFkYXRhIGZvciBibG9nIHBvc3RzLCBwcm92aWRlZCB2aWEgPGEgaHJlZj0iaHR0cHM6Ly9nb2h1Z28uaW8vY29udGVudC9mcm9udC1tYXR0ZXIvIj5ZQU1MIGZyb250IG1hdHRlcjwvYT4gYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHBvc3Q6PC9wPgo8ZGl2IGNsYXNzPSJzb3VyY2VDb2RlIj48cHJlIGNsYXNzPSJzb3VyY2VDb2RlIHlhbWwiPjxjb2RlIGNsYXNzPSJzb3VyY2VDb2RlIHlhbWwiPjxzcGFuIGNsYXNzPSJvdCI+LS0tPC9zcGFuPgo8c3BhbiBjbGFzcz0iZnUiPmxheW91dDo8L3NwYW4+IHBvc3QKPHNwYW4gY2xhc3M9ImZ1Ij50aXRsZTo8L3NwYW4+IEVhdGluZyB5b3VyIG93biBEb2cgRm9vZAo8c3BhbiBjbGFzcz0iZnUiPmF1dGhvcjo8L3NwYW4+IG1mZW5uZXIKPHNwYW4gY2xhc3M9ImZ1Ij5kYXRlOjwvc3Bhbj4gMjAxNi0xMi0xOQo8c3BhbiBjbGFzcz0iZnUiPnRhZ3M6PC9zcGFuPgo8c3BhbiBjbGFzcz0ia3ciPi08L3NwYW4+IGRhdGFjaXRlCjxzcGFuIGNsYXNzPSJrdyI+LTwvc3Bhbj4gZG9pCjxzcGFuIGNsYXNzPSJrdyI+LTwvc3Bhbj4gbWV0YWRhdGEKPHNwYW4gY2xhc3M9Im90Ij4tLS08L3NwYW4+PC9jb2RlPjwvcHJlPjwvZGl2Pgo8cD5XZSBjYW4gcmV1c2UgYWxsIHRoZXNlIG1ldGFkYXRhIHdoZW4gZ2VuZXJhdGluZyBEYXRhQ2l0ZSBtZXRhZGF0YSwgdXNpbmcgdGhlIHRhZ3MgYXMgPGNvZGU+c3ViamVjdHM8L2NvZGU+LjwvcD4KPHA+VGhlIGRlZmF1bHQgbWV0YWRhdGEgYXJlIG1ldGFkYXRhIHRoYXQgYWx3YXlzIHN0YXkgdGhlIHNhbWUgZm9yIHRoZSBibG9nLCBzdWNoIGFzIDxjb2RlPnB1Ymxpc2hlcjwvY29kZT4sIDxjb2RlPkhvc3RpbmdJbnN0aXR1dGlvbjwvY29kZT4gYW5kIDxjb2RlPnJpZ2h0czwvY29kZT4uIFdlIGNhbiBzdG9yZSB0aGVtIGluIGEgc2l0ZS13aWRlIGNvbmZpZ3VyYXRpb24gZmlsZS4gV2UgY2FuIGFsc28gYXNzdW1lIHJlYXNvbmFibGUgZGVmYXVsdHMgdGhhdCBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgWUFNTCBmcm9udCBtYXR0ZXIsIGUuZy4gPGNvZGU+cmVzb3VyY2VUeXBlPC9jb2RlPiAod2UgdXNlIDxhIGhyZWY9Imh0dHBzOi8vc2NoZW1hLm9yZy9CbG9nUG9zdGluZyI+QmxvZ1Bvc3Rpbmc8L2E+IHdpdGggPGNvZGU+cmVzb3VyY2VUeXBlR2VuZXJhbDwvY29kZT4gVGV4dCkgYW5kIDxjb2RlPnZlcnNpb248L2NvZGU+LiBXZSBzdG9yZSBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGF1dGhvcnMgb3V0c2lkZSB0aGUgYmxvZyBwb3N0LCBpbmNsdWRpbmcgPGNvZGU+Z2l2ZW5OYW1lPC9jb2RlPiwgPGNvZGU+ZmFtaWx5TmFtZTwvY29kZT4gYW5kIDxjb2RlPm5hbWVJZGVudGlmaWVyPC9jb2RlPiAod2Ugbm93IHNob3cgdGhlIE9SQ0lEIElEIG9mIGV2ZXJ5IGJsb2cgYXV0aG9yIGF0IHRoZSBib3R0b20gb2YgdGhlIHBvc3QpLjwvcD4KPHA+RmluYWxseSwgdGhlcmUgYXJlIG1ldGFkYXRhIHRoYXQgd2UgY2FuIGF1dG9tYXRpY2FsbHkgZXh0cmFjdCBmcm9tIHRoZSBibG9nIHBvc3QsIGFuZCB3ZSBhcmUgY3VycmVudGx5IGRvaW5nIHRoaXMgZm9yIHRoZSA8Y29kZT5kZXNjcmlwdGlvbjwvY29kZT4gYW5kIDxjb2RlPnJlbGF0ZWRJZGVudGlmaWVyPC9jb2RlPi4gVGhpcyBibG9nIHVzZXMgUGFuZG9jIGFuZCBCaWJUZXggdG8gZ2VuZXJhdGUgdGhlIHJlZmVyZW5jZXMgc2VjdGlvbiBhdCB0aGUgZW5kLCBhbmQgd2UgY2FuIGZldGNoIHRoaXMgaW5mb3JtYXRpb24gYW5kIGNvbnZlcnQgaXQgaW50byB0aGUgZm9ybWF0IG5lZWRlZCBmb3IgPGNvZGU+cmVsYXRlZElkZW50aWZpZXI8L2NvZGU+LjwvcD4KPHA+VGFrZW4gdG9nZXRoZXIgd2UgY2FuIHByb3ZpZGUgYWxsIG1ldGFkYXRhIHRoYXQgYXJlIDxlbT5yZXF1aXJlZDwvZW0+IG9yIDxlbT5yZWNvbW1lbmRlZDwvZW0+IGluIHRoZSBNZXRhZGF0YSBTY2hlbWEgZG9jdW1lbnRhdGlvbiA8c3BhbiBjbGFzcz0iY2l0YXRpb24iPig8YSBocmVmPSIjcmVmLWh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzAwMTIiPjIwMTY8L2E+KTwvc3Bhbj4sIGFuZCB3ZSBjYW4gZG8gdGhpcyB3aXRob3V0IGFueSBleHRyYSBlZmZvcnQgZm9yIHRoZSBhdXRob3IuIFRoZSBmdWxsIFhNTCBpcyBhdmFsYWlsYWJsZSA8YSBocmVmPSJodHRwczovL2RhdGEuZGF0YWNpdGUub3JnL2FwcGxpY2F0aW9uL3gtZGF0YWNpdGUreG1sLzEwLjU0MzgvNEszTS1OWVZHIj5oZXJlPC9hPi48L3A+CjxwPk5vdCBhbGwgYmxvZyBwb3N0cyBuZWVkIHRvIGJlIGNpdGVkIGZvcm1hbGx5IHdpdGggbWV0YWRhdGEgaW4gYSA8ZW0+cmVmZXJlbmNlczwvZW0+IGxpc3QgZm9ybWF0dGVkIGFjY29yZGluZyB0byBhIHNwZWNpZmljIGNpdGF0aW9uIHN0eWxlLiBCdXQgdGhlc2UgbWV0YWRhdGEgZ3JlYXRseSBoZWxwIHdpdGggZGlzY292ZXJ5LCBhIHNlYXJjaCBpbiBEYXRhQ2l0ZSBTZWFyY2ggZm9yIDxhIGhyZWY9Imh0dHA6Ly9zZWFyY2guZGF0YWNpdGUub3JnL3dvcmtzP3F1ZXJ5PWVhdGluZytkb2crZm9vZCI+ZWF0aW5nIGRvZyBmb29kPC9hPiB3aWxsIGZvciBleGFtcGxlIGJyaW5nIHVwIHRoaXMgYmxvZyBwb3N0IGFzIHRoZSBmaXJzdCBoaXQuPC9wPgo8aDMgaWQ9InBlcnNpc3RlbnQtc3RvcmFnZSI+UGVyc2lzdGVudCBzdG9yYWdlPC9oMz4KPHA+VXNpbmcgRE9JcyBtZWFucyB0aGF0IHJlYWRlcnMgbm90IG9ubHkgZXhwZWN0IHJpY2ggbWV0YWRhdGEgdGhhdCBoZWxwIHdpdGggY2l0YXRpb24gYW5kIGRpc2NvdmVyeSwgYnV0IGFsc28gdGhhdCBEYXRhQ2l0ZSB0YWtlcyBleHRyYSBjYXJlIHRvIHByZXNlcnZlIHRoZSBibG9nIHBvc3RzLCB0aGlua2luZyBiZXlvbmQgdGhlIHBhcnRpY3VsYXIgdGVjaG5pY2FsIGltcGxlbWVudGF0aW9uIG9yIGV2ZW4gdGhlIGNvbnRpdWluZyBleGlzdGVuY2Ugb2YgdGhpcyBibG9nLiBUaGlzIGlzIGFuIGFyZWEgd2hlcmUgd2UgZG8gbmVlZCB0byBkbyBtb3JlIHdvcmssIHN0YXJ0aW5nIHdpdGggYSBkZWNpc2lvbiBhYm91dCB0aGUgYmVzdCBhcmNoaXZhbCBmb3JtYXQgZm9yIGEgYmxvZyBwb3N0IChIVE1MLCBQREYsIDxhIGhyZWY9Imh0dHBzOi8vamF0cy5ubG0ubmloLmdvdi8iPkpBVFM8L2E+PykuIEZvciBub3cgYmxvZyBwb3N0cyBhcmUgaG9zdGVkIGluIG11bHRpcGxlIEdpdCByZXBvc2l0b3JpZXMgKDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhY2l0ZS9ibG9nIj5vbmUgb2YgdGhlbSBvbiBHaXRodWI8L2E+KSwgYW5kIGluIHR3byBpbmRlcGVuZGVudCBBbWF6b24gUzMgYnVja2V0cyB0aGF0IGVhY2ggdXNlIDxhIGhyZWY9Imh0dHA6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvVmVyc2lvbmluZy5odG1sIj52ZXJzaW9uaW5nPC9hPi4gTXVsdGlwbGUgbG9jYXRpb25zIHdpdGggdmVyc2lvbmluZyBhcmUgYSBnb29kIHN0YXJ0LCBidXQgbW9yZSB3b3JrIGlzIGNsZWFybHkgbmVlZGVkLjwvcD4KPGgzIGlkPSJyZWZlcmVuY2VzIiBjbGFzcz0idW5udW1iZXJlZCI+UmVmZXJlbmNlczwvaDM+CjxkaXYgaWQ9InJlZnMiIGNsYXNzPSJyZWZlcmVuY2VzIj4KPGRpdiBpZD0icmVmLWh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzAwMTIiPgo8cD5EYXRhQ2l0ZSBNZXRhZGF0YSBXb3JraW5nIEdyb3VwLiAoMjAxNikuIERhdGFDaXRlIE1ldGFkYXRhIFNjaGVtYSBmb3IgdGhlIFB1YmxpY2F0aW9uIGFuZCBDaXRhdGlvbiBvZiBSZXNlYXJjaCBEYXRhIHY0LjAuIDxlbT5EYXRhQ2l0ZTwvZW0+LiA8YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuNTQzOC8wMDEyIiBjbGFzcz0idXJpIj5odHRwczovL2RvaS5vcmcvMTAuNTQzOC8wMDEyPC9hPjwvcD4KPC9kaXY+CjxkaXYgaWQ9InJlZi1odHRwczovL2RvaS5vcmcvMTAuNTQzOC81NUU1LVQ1QzAiPgo8cD5GZW5uZXIsIE0uICgyMDE2KS4gQ29vbCBET0nigJlzLiA8ZW0+RGF0YUNpdGU8L2VtPi4gPGEgaHJlZj0iaHR0cHM6Ly9kb2kub3JnLzEwLjU0MzgvNTVFNS1UNUMwIiBjbGFzcz0idXJpIj5odHRwczovL2RvaS5vcmcvMTAuNTQzOC81NUU1LVQ1QzA8L2E+PC9wPgo8L2Rpdj4KPC9kaXY+CgogICAgICAgICAgICA8aHIgd2lkdGg9IjgwJSI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3ciPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTUgY29sLW1kLW9mZnNldC0yIHBvc3QtY29udGVudCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbS10ZWFzZXIgY2YiPgogIDxkaXYgY2xhc3M9ImlzTGVmdCI+CiAgICA8c2VjdGlvbiBjbGFzcz0iYXV0aG9yIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImF1dGhvci1pbWFnZSIgc3R5bGU9ImJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL3d3dy5ncmF2YXRhci5jb20vYXZhdGFyLzQzNDU5MmEwOTdlOTEyNjE3OTJlYmQ2YjQ5MjA0MmJjP3M9MjUwJmQ9bW0mcj14KSI+QmxvZyBMb2dvPC9kaXY+CiAgICAgICAgPGg0Pk1hcnRpbiBGZW5uZXI8L2g0PgogICAgICAgIDxwIGNsYXNzPSJiaW8iPkRhdGFDaXRlIFRlY2huaWNhbCBEaXJlY3RvcjwvcD4KICAgICAgICA8cCBjbGFzcz0ib3JjaWQiPjxhIGhyZWY9Imh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMy0xNDE5LTI0MDUiPmh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMy0xNDE5LTI0MDU8L2E+PC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImNsZWFyZml4Ij48L2Rpdj4KICAgICAgPGg0PkVhdGluZyB5b3VyIG93biBEb2cgRm9vZDwvaDQ+CiAgICAgICAgPHAgY2xhc3M9InB1Ymxpc2hlZCI+PGEgaHJlZj0iaHR0cHM6Ly9kb2kub3JnLzEwLjU0MzgvNGszbS1ueXZnIj5odHRwczovL2RvaS5vcmcvMTAuNTQzOC80azNtLW55dmc8L2E+CiAgICAgIDxwIGNsYXNzPSJwdWJsaXNoZWQiPjxpIGNsYXNzPSJmYSBmYS1jYWxlbmRhciI+PC9pPiA8dGltZSBkYXRldGltZT0iMjAxNi0xMi0yMCAwMDowMCI+RGVjZW1iZXIgMjAsIDIwMTY8L3RpbWU+PC9wPgogICAgICA8cCBjbGFzcz0icHVibGlzaGVkIj48aSBjbGFzcz0iZmEgZmEtaGlzdG9yeSI+PC9pPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZGF0YWNpdGUvYmxvZy9jb21taXRzL21hc3Rlci9zb3VyY2UvcG9zdHMvZWF0aW5nLXlvdXItb3duLWRvZy1mb29kLmh0bWwubWQiPkhpc3Rvcnk8L2E+PC9wPgogICAgICA8cCBjbGFzcz0icHVibGlzaGVkIj7CqSAyMDE2IE1hcnRpbiBGZW5uZXIuIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC8iPkNyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gbGljZW5zZTwvYT4uPC9wPgogICAgICA8cCBjbGFzcz0icHVibGlzaGVkIj4KICAgICAgICA8aSBjbGFzcz0iZmEgZmEtdGFncyI+PC9pPgogICAgICAgIDxhIGhyZWY9Ii9pbmRleC5odG1sP3RhZz1kYXRhY2l0ZSI+ZGF0YWNpdGU8L2E+LCA8YSBocmVmPSIvaW5kZXguaHRtbD90YWc9ZG9pIj5kb2k8L2E+LCA8YSBocmVmPSIvaW5kZXguaHRtbD90YWc9bWV0YWRhdGEiPm1ldGFkYXRhPC9hPiwgPGEgaHJlZj0iL2luZGV4Lmh0bWw/dGFnPWZlYXR1cmVkIj5mZWF0dXJlZDwvYT4KICAgICAgPC9wPgogICAgPC9zZWN0aW9uPgogIDwvZGl2Pgo8L2Rpdj4KCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC0yIGNvbC1tZC1vZmZzZXQtMSI+CiAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b20tdGVhc2VyIGNmIj4KICA8ZGl2IGNsYXNzPSJpc0xlZnQiPgogICAgPGg1IGNsYXNzPSJpbmRleC1oZWFkbGluZSBmZWF0dXJlZCI+PHNwYW4+U2hhcmUgb248L3NwYW4+PC9oNT4KICAgICAgPGEgY2xhc3M9Imljb24tdHdpdHRlciIgaHJlZj0iaHR0cDovL3R3aXR0ZXIuY29tL3NoYXJlP3RleHQ9T24gdGhlIEBkYXRhY2l0ZSBibG9nOiBFYXRpbmcgeW91ciBvd24gRG9nIEZvb2QmYW1wO3VybD1odHRwczovL2Jsb2cuZGF0YWNpdGUub3JnL2VhdGluZy15b3VyLW93bi1kb2ctZm9vZC8iCiAgICAgICAgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCAndHdpdHRlci1zaGFyZScsICd3aWR0aD01NTAsaGVpZ2h0PTI1NScpO3JldHVybiBmYWxzZTsiPgogICAgICAgIDxpIGNsYXNzPSJmYSBmYS10d2l0dGVyIGZhLTJ4Ij48L2k+PHNwYW4gY2xhc3M9ImhpZGRlbiI+dHdpdHRlcjwvc3Bhbj4KICAgICAgPC9hPgogICAgICA8YSBjbGFzcz0iaWNvbi1mYWNlYm9vayIgaHJlZj0iaHR0cHM6Ly93d3cuZmFjZWJvb2suY29tL3NoYXJlci5waHA/dD1PbiB0aGUgQGRhdGFjaXRlIGJsb2c6IEVhdGluZyB5b3VyIG93biBEb2cgRm9vZCZhbXA7dT1odHRwczovL2Jsb2cuZGF0YWNpdGUub3JnL2VhdGluZy15b3VyLW93bi1kb2ctZm9vZC8iCiAgICAgICAgb25jbGljaz0id2luZG93Lm9wZW4odGhpcy5ocmVmLCAnZmFjZWJvb2stc2hhcmUnLCAnd2lkdGg9NTUwLGhlaWdodD0yNTUnKTtyZXR1cm4gZmFsc2U7Ij4KICAgICAgICA8aSBjbGFzcz0iZmEgZmEtZmFjZWJvb2sgZmEtMngiPjwvaT48c3BhbiBjbGFzcz0iaGlkZGVuIj5mYWNlYm9vazwvc3Bhbj4KICAgICAgPC9hPgogIDwvZGl2Pgo8L2Rpdj4KCiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbC1tZC04IGNvbC1tZC1vZmZzZXQtMiBwb3N0LWNvbnRlbnQiPgogICAgICAgICAgICAgIDxkaXYgaWQ9ImRpc3F1c190aHJlYWQiPjwvZGl2Pgo8c2NyaXB0PgogICAgdmFyIGRpc3F1c19jb25maWcgPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgdGhpcy5wYWdlLnVybCA9ICdodHRwczovL2Jsb2cuZGF0YWNpdGUub3JnL2VhdGluZy15b3VyLW93bi1kb2ctZm9vZC8nOwogICAgICAgIHRoaXMucGFnZS5pZGVudGlmaWVyID0gJ2h0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmcvZWF0aW5nLXlvdXItb3duLWRvZy1mb29kLyc7CiAgICB9OwogICAgKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBkID0gZG9jdW1lbnQsIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwoKICAgICAgICBzLnNyYyA9ICcvL2RhdGFjaXRlLmRpc3F1cy5jb20vZW1iZWQuanMnOyAgLy8KCiAgICAgICAgcy5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGltZXN0YW1wJywgK25ldyBEYXRlKCkpOwogICAgICAgIChkLmhlYWQgfHwgZC5ib2R5KS5hcHBlbmRDaGlsZChzKTsKICAgIH0pKCk7Cjwvc2NyaXB0Pgo8bm9zY3JpcHQ+UGxlYXNlIGVuYWJsZSBKYXZhU2NyaXB0IHRvIHZpZXcgdGhlIDxhIGhyZWY9Imh0dHBzOi8vZGlzcXVzLmNvbS8/cmVmX25vc2NyaXB0IiByZWw9Im5vZm9sbG93Ij5jb21tZW50cyBwb3dlcmVkIGJ5IERpc3F1cy48L2E+PC9ub3NjcmlwdD4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CiAgICA8Zm9vdGVyIGNsYXNzPSdyb3cgZm9vdGVyJz4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICA8ZGl2IGNsYXNzPSdjb2wtbWQtMyBjb2wtc20tNCc+CiAgICAgICAgICA8aDQ+QWJvdXQgRGF0YUNpdGU8L2g0PgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL21pc3Npb24uaHRtbCI+V2hhdCB3ZSBkbzwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL2JvYXJkLmh0bWwiPkJvYXJkPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvc3RlZXJpbmcuaHRtbCI+U3RlZXJpbmcgZ3JvdXBzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvc3RhZmYuaHRtbCI+U3RhZmY8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9qb2JvcHBvcnR1bml0aWVzLmh0bWwiPkpvYiBvcHBvcnR1bml0aWVzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC0zIGNvbC1zbS00Jz4KICAgICAgICAgIDxoND5TZXJ2aWNlczwvaDQ+CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvZG9pcy5odG1sIj5Bc3NpZ24gRE9JczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3NlYXJjaC5odG1sIj5NZXRhZGF0YSBzZWFyY2g8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9ldmVudGRhdGEuaHRtbCI+RXZlbnQgZGF0YTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3Byb2ZpbGVzLmh0bWwiPlByb2ZpbGVzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvcmUzZGF0YS5odG1sIj5yZTNkYXRhPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvY2l0YXRpb24uaHRtbCI+Q2l0YXRpb24gZm9ybWF0dGVyPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvc3RhdHMuaHRtbCI+U3RhdGlzdGljczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL2NvbnRlbnQuaHRtbCI+Q29udGVudCBuZWdvdGlhdGlvbjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL29haXBtaC5odG1sIj5PQUktUE1IPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC0zIGNvbC1zbS00Jz4KICAgICAgICAgIDxoND5SZXNvdXJjZXM8L2g0PgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zY2hlbWEuZGF0YWNpdGUub3JnIj5NZXRhZGF0YSBzY2hlbWE8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc3VwcG9ydC5kYXRhY2l0ZS5vcmciPlN1cHBvcnQ8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgICA8aDQ+Q29tbXVuaXR5PC9oND4KICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9tZW1iZXJzLmh0bWwiPk1lbWJlcnM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9wYXJ0bmVycy5odG1sIj5QYXJ0bmVyczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3N0ZWVyaW5nLmh0bWwiPlN0ZWVyaW5nIGdyb3VwczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL2V2ZW50cy5odG1sIj5FdmVudHM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9yb2FkbWFwLmh0bWwiPlJvYWRtYXA8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy91c2VyLXN0b3JpZXMuaHRtbCI+VXNlciBTdG9yaWVzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC0zJz4KICAgICAgICAgIDxoNCBjbGFzcz0ic2hhcmUiPkNvbnRhY3QgdXM8L2g0PgogICAgICAgICAgPGEgaHJlZj0nbWFpbHRvOnN1cHBvcnRAZGF0YWNpdGUub3JnJyBjbGFzcz0ic2hhcmUiPgogICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtYXQnPjwvaT4KICAgICAgICAgIDwvYT4KICAgICAgICAgIDxhIGhyZWY9J2h0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmcvZmVlZC54bWwnIGNsYXNzPSJzaGFyZSI+CiAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1yc3MnPjwvaT4KICAgICAgICAgIDwvYT4KICAgICAgICAgIDxhIGhyZWY9J2h0dHBzOi8vdHdpdHRlci5jb20vZGF0YWNpdGUnIGNsYXNzPSJzaGFyZSI+CiAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS10d2l0dGVyJz48L2k+CiAgICAgICAgICA8L2E+CiAgICAgICAgICA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vZGF0YWNpdGUvZGF0YWNpdGUnIGNsYXNzPSJzaGFyZSI+CiAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1naXRodWInPjwvaT4KICAgICAgICAgIDwvYT4KICAgICAgICAgIDxhIGhyZWY9J2h0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9jb21wYW55L2RhdGFjaXRlJyBjbGFzcz0ic2hhcmUiPgogICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtbGlua2VkaW4nPjwvaT4KICAgICAgICAgIDwvYT4KICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy90ZXJtcy5odG1sIj5UZXJtcyBhbmQgY29uZGl0aW9uczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3ByaXZhY3kuaHRtbCI+UHJpdmFjeSBwb2xpY3k8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9hY2tub3dsZWRnbWVudHMuaHRtbCI+QWNrbm93bGVkZ2VtZW50czwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxhIGhyZWY9Imh0dHA6Ly9zdGF0dXMuZGF0YWNpdGUub3JnIiB0YXJnZXQ9Il9ibGFuayI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xvci1kb3QiPjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWRlc2NyaXB0aW9uIj48L3NwYW4+CiAgICAgICAgICA8L2E+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9mb290ZXI+CiAgICA8c2NyaXB0IHNyYz0iLy9jb2RlLmpxdWVyeS5jb20vanF1ZXJ5LTIuMS40Lm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLy9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9ib290c3RyYXAvMy4zLjYvanMvYm9vdHN0cmFwLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iLy9jZG4uc3RhdHVzcGFnZS5pby9zZS12Mi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iaHR0cHM6Ly9hc3NldHMuZGF0YWNpdGUub3JnL2phdmFzY3JpcHRzL2RlZmF1bHQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii9qYXZhc2NyaXB0cy9yZWFkaW5nVGltZS5taW4uanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Ii9qYXZhc2NyaXB0cy9pbmRleC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iL2phdmFzY3JpcHRzL3NlYXJjaC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IGlkPSJkc3EtY291bnQtc2NyIiBzcmM9Ii8vZGF0YWNpdGUuZGlzcXVzLmNvbS9jb3VudC5qcyIgYXN5bmM+PC9zY3JpcHQ+CiAgICA8c2NyaXB0PgogICAgICAoZnVuY3Rpb24oaSxzLG8sZyxyLGEsbSl7aVsnR29vZ2xlQW5hbHl0aWNzT2JqZWN0J109cjtpW3JdPWlbcl18fGZ1bmN0aW9uKCl7CiAgICAgIChpW3JdLnE9aVtyXS5xfHxbXSkucHVzaChhcmd1bWVudHMpfSxpW3JdLmw9MSpuZXcgRGF0ZSgpO2E9cy5jcmVhdGVFbGVtZW50KG8pLAogICAgICBtPXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUobylbMF07YS5hc3luYz0xO2Euc3JjPWc7bS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLG0pCiAgICAgIH0pKHdpbmRvdyxkb2N1bWVudCwnc2NyaXB0JywnLy93d3cuZ29vZ2xlLWFuYWx5dGljcy5jb20vYW5hbHl0aWNzLmpzJywnZ2EnKTsKCiAgICAgIGdhKCdjcmVhdGUnLCAnVUEtMjI4MDYxOTYtNicsICdhdXRvJyk7CiAgICAgIGdhKCdzZW5kJywgJ3BhZ2V2aWV3Jyk7CiAgICA8L3NjcmlwdD4KICA8L2JvZHk+CjwvaHRtbD4K
|
104
|
+
PCFET0NUWVBFIGh0bWw+CiAgPGh0bWw+CiAgICA8aGVhZD4KICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KICAgIDwhLS0gKDEpIE9wdGltaXplIGZvciBtb2JpbGUgdmVyc2lvbnM6IGh0dHA6Ly9nb28uZ2wvRU9wRmwgLS0+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8IS0tICgxKSBmb3JjZSBsYXRlc3QgSUUgcmVuZGVyaW5nIGVuZ2luZTogYml0Lmx5LzFjOEVpQzkgLS0+CiAgICA8bWV0YSBodHRwLWVxdWl2PSJYLVVBLUNvbXBhdGlibGUiIGNvbnRlbnQ9IklFPWVkZ2UiPgoKCiAgICA8dGl0bGU+RWF0aW5nIHlvdXIgb3duIERvZyBGb29kPC90aXRsZT4KICAgIDxtZXRhIG5hbWU9ImRlc2NyaXB0aW9uIiBjb250ZW50PSJFYXRpbmcgeW91ciBvd24gZG9nIGZvb2QgaXMgYSBzbGFuZyB0ZXJtIHRvIGRlc2NyaWJlIHRoYXQgYW4gb3JnYW5pemF0aW9uIHNob3VsZCBpdHNlbGYgdXNlIHRoZSBwcm9kdWN0cyBhbmQgc2VydmljZXMgaXQgcHJvdmlkZXMuIEZvciBEYXRhQ2l0ZSB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHVzZSBET0lzIHdpdGggYXBwcm9wcmlhdGUgbWV0YWRhdGEgYW5kIHN0cmF0ZWdpZXMgZm9yIGxvbmctdGVybSBwcmVzZXJ2YXRpb24gZm9yLi4uIiAvPgoKICAgIDxtZXRhIG5hbWU9IkhhbmRoZWxkRnJpZW5kbHkiIGNvbnRlbnQ9IlRydWUiIC8+CiAgICA8bWV0YSBuYW1lPSJNb2JpbGVPcHRpbWl6ZWQiIGNvbnRlbnQ9IjMyMCIgLz4KICAgIDxtZXRhIG5hbWU9ImFwcGxlLW1vYmlsZS13ZWItYXBwLWNhcGFibGUiIGNvbnRlbnQ9InllcyI+CiAgICA8bWV0YSBuYW1lPSJhcHBsZS1tb2JpbGUtd2ViLWFwcC1zdGF0dXMtYmFyLXN0eWxlIiBjb250ZW50PSJibGFjay10cmFuc2x1Y2VudCI+CgogICAgPCEtLSBEdWJsaW5Db3JlIE1ldGFkYXRhIC0tPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnRpdGxlIiBjb250ZW50PSJFYXRpbmcgeW91ciBvd24gRG9nIEZvb2QiIC8+CiAgICA8bWV0YSBwcm9wZXJ0eT0iZGM6Zm9ybWF0IiBjb250ZW50PSJ0ZXh0L2h0bWwiIC8+CiAgICA8bWV0YSBwcm9wZXJ0eT0iZGM6bGFuZ3VhZ2UiIGNvbnRlbnQ9ImVuIiAvPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnJpZ2h0cyIgY29udGVudD0iQ0MtQlkiIC8+CiAgICA8bWV0YSBwcm9wZXJ0eT0iZGM6c291cmNlIiBjb250ZW50PSJEYXRhQ2l0ZSBCbG9nIiAvPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnN1YmplY3QiIGNvbnRlbnQ9IlNjaG9sYXJseSBDb21tdW5pY2F0aW9uIiAvPgogICAgPG1ldGEgcHJvcGVydHk9ImRjOnR5cGUiIGNvbnRlbnQ9IndlYnNpdGUiIC8+CgoKICAgIDxtZXRhIHByb3BlcnR5PSJvZzpzaXRlX25hbWUiIGNvbnRlbnQ9IkVhdGluZyB5b3VyIG93biBEb2cgRm9vZCIgLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzpkZXNjcmlwdGlvbiIgY29udGVudD0iRWF0aW5nIHlvdXIgb3duIGRvZyBmb29kIGlzIGEgc2xhbmcgdGVybSB0byBkZXNjcmliZSB0aGF0IGFuIG9yZ2FuaXphdGlvbiBzaG91bGQgaXRzZWxmIHVzZSB0aGUgcHJvZHVjdHMgYW5kIHNlcnZpY2VzIGl0IHByb3ZpZGVzLiBGb3IgRGF0YUNpdGUgdGhpcyBtZWFucyB0aGF0IHdlIHNob3VsZCB1c2UgRE9JcyB3aXRoIGFwcHJvcHJpYXRlIG1ldGFkYXRhIGFuZCBzdHJhdGVnaWVzIGZvciBsb25nLXRlcm0gcHJlc2VydmF0aW9uIGZvci4uLiIgLz4KICAgIDxtZXRhIHByb3BlcnR5PSJvZzppbWFnZSIgY29udGVudD0iaHR0cHM6Ly9ibG9nLmRhdGFjaXRlLm9yZy9pbWFnZXMvMjAxNi8xMi8yMzA3ODUuanBnIiAvPgogICAgPG1ldGEgcHJvcGVydHk9Im9nOnR5cGUiIGNvbnRlbnQ9ImJsb2ciIC8+CgogICAgPGxpbmsgaHJlZj0iLy9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PUxpYnJlK0Jhc2tlcnZpbGxlOjQwMCw0MDBpLDcwMCIgcmVsPSJzdHlsZXNoZWV0Ij4KICAgIDxsaW5rIGhyZWY9Jy8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1SYWxld2F5OjQwMCw2MDAsNDAwaXRhbGljLDYwMGl0YWxpYycgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+CiAgICA8bGluayBocmVmPSIvL21heGNkbi5ib290c3RyYXBjZG4uY29tL2ZvbnQtYXdlc29tZS80LjYuMS9jc3MvZm9udC1hd2Vzb21lLm1pbi5jc3MiIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0ndGV4dC9jc3MnPgogICAgPGxpbmsgaHJlZj0iaHR0cHM6Ly9hc3NldHMuZGF0YWNpdGUub3JnL3N0eWxlc2hlZXRzL2RhdGFjaXRlLmNzcyIgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2Nzcyc+CiAgICA8bGluayBocmVmPSJodHRwczovL2Fzc2V0cy5kYXRhY2l0ZS5vcmcvaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9Imljb24iIHR5cGU9ImltYWdlL2ljbyIgLz4KCiAgICA8c2NyaXB0IHNyYz0iLy9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvZml0dmlkcy8xLjEuMC9qcXVlcnkuZml0dmlkcy5taW4uanMiPjwvc2NyaXB0PgoKICAgICAgPHNjcmlwdAogICAgICAgIHNyYz0iLy9kMnd5OGY3YTl1cnNubS5jbG91ZGZyb250Lm5ldC9idWdzbmFnLTIubWluLmpzIgogICAgICAgIGRhdGEtYXBpa2V5PSJjMzdhNTg2MTk2NzA5MWE5YjQyYTFhNzdlMjM1MTE0YSI+CiAgICAgIDwvc2NyaXB0PgoKICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24vbGQranNvbiI+CiAgICAgIHsiQGNvbnRleHQiOiJodHRwOi8vc2NoZW1hLm9yZyIsIkB0eXBlIjoiQmxvZ1Bvc3RpbmciLCJAaWQiOiJodHRwczovL2RvaS5vcmcvMTAuNTQzOC80azNtLW55dmciLCJuYW1lIjoiRWF0aW5nIHlvdXIgb3duIERvZyBGb29kIiwidXJsIjoiaHR0cHM6Ly9ibG9nLmRhdGFjaXRlLm9yZy9lYXRpbmcteW91ci1vd24tZG9nLWZvb2QvIiwiYXV0aG9yIjpbeyJAdHlwZSI6IlBlcnNvbiIsIkBpZCI6Imh0dHBzOi8vb3JjaWQub3JnLzAwMDAtMDAwMy0xNDE5LTI0MDUiLCJnaXZlbk5hbWUiOiJNYXJ0aW4iLCJmYW1pbHlOYW1lIjoiRmVubmVyIiwibmFtZSI6Ik1hcnRpbiBGZW5uZXIifV0sInB1Ymxpc2hlciI6eyJAdHlwZSI6Ik9yZ2FuaXphdGlvbiIsIm5hbWUiOiJEYXRhQ2l0ZSJ9LCJkYXRlQ3JlYXRlZCI6IjIwMTYtMTItMjAiLCJkYXRlUHVibGlzaGVkIjoiMjAxNi0xMi0yMCIsImRhdGVNb2RpZmllZCI6IjIwMTYtMTItMjAiLCJrZXl3b3JkcyI6ImRhdGFjaXRlLCBkb2ksIG1ldGFkYXRhLCBmZWF0dXJlZCIsInZlcnNpb24iOiIxLjAiLCJkZXNjcmlwdGlvbiI6IkVhdGluZyB5b3VyIG93biBkb2cgZm9vZCBpcyBhIHNsYW5nIHRlcm0gdG8gZGVzY3JpYmUgdGhhdCBhbiBvcmdhbml6YXRpb24gc2hvdWxkIGl0c2VsZiB1c2UgdGhlIHByb2R1Y3RzIGFuZCBzZXJ2aWNlcyBpdCBwcm92aWRlcy4gRm9yIERhdGFDaXRlIHRoaXMgbWVhbnMgdGhhdCB3ZSBzaG91bGQgdXNlIERPSXMgd2l0aCBhcHByb3ByaWF0ZSBtZXRhZGF0YSBhbmQgc3RyYXRlZ2llcyBmb3IgbG9uZy10ZXJtIHByZXNlcnZhdGlvbiBmb3IuLi4iLCJsaWNlbnNlIjoiaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LzQuMC8iLCJpbWFnZSI6Imh0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmcvaW1hZ2VzLzIwMTYvMTIvMjMwNzg1LmpwZyIsImlzUGFydE9mIjp7IkB0eXBlIjoiQmxvZyIsIkBpZCI6Imh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzAwMDAtMDBTUyIsIm5hbWUiOiJEYXRhQ2l0ZSBCbG9nIn0sImNpdGF0aW9uIjpbeyJAdHlwZSI6IkNyZWF0aXZlV29yayIsIkBpZCI6Imh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzAwMTIifSx7IkB0eXBlIjoiQ3JlYXRpdmVXb3JrIiwiQGlkIjoiaHR0cHM6Ly9kb2kub3JnLzEwLjU0MzgvNTVFNS1UNUMwIn1dfQogICAgPC9zY3JpcHQ+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGhlYWRlciBjbGFzcz0iaGVhZGVyIiBpZD0ibmF2dG9wIj4KICAgICAgPGRpdiBjbGFzcz0ibmF2YmFyIG5hdmJhci13aGl0ZSIgcm9sZT0ibmF2aWdhdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1oZWFkZXIiCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ibmF2YmFyLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImNvbGxhcHNlIiBkYXRhLXRhcmdldD0iLm5hdmJhci1jb2xsYXBzZSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNyLW9ubHkiPlRvZ2dsZSBuYXZpZ2F0aW9uPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpY29uLWJhciI+PC9zcGFuPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGEgY2xhc3M9Im5hdmJhci1icmFuZCIgaHJlZj0iLyI+RGF0YUNpdGUgQmxvZzwvYT4KICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdmJhci1jb2xsYXBzZSBjb2xsYXBzZSI+CiAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2IG5hdmJhci1uYXYgbmF2YmFyLXJpZ2h0Ij4KICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zdXBwb3J0LmRhdGFjaXRlLm9yZyI+U3VwcG9ydDwvYT48L2xpPgogICAgICAgICAgICAgIDxsaSBjbGFzcz0iZHJvcGRvd24iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgY2xhc3M9ImRyb3Bkb3duLXRvZ2dsZSIgZGF0YS10b2dnbGU9ImRyb3Bkb3duIiBpZD0ic2l0ZXMiPjxpIGNsYXNzPSdmYSBmYS10aCc+PC9pPiA8c3BhbiBjbGFzcz0iY2FyZXQiPjwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9ImRyb3Bkb3duLW1lbnUiIHJvbGU9Im1lbnUiPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtZ2xvYmUgZmEtZncnPjwvaT4KICAgICAgICAgICAgICAgICAgICBIb21lcGFnZTwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmciPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1yc3MgZmEtZncnPjwvaT4KICAgICAgICAgICAgICAgICAgICBCbG9nPC9hPgogICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9ImRpdmlkZXIiPjwvbGk+CiAgICAgICAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL21kcy5kYXRhY2l0ZS5vcmciPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1kYXRhYmFzZSBmYS1mdyc+PC9pPgogICAgICAgICAgICAgICAgICAgIE1EUzwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vc2NoZW1hLmRhdGFjaXRlLm9yZyI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLWZpbGUtY29kZS1vIGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgU2NoZW1hPC9hPgogICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL2NpdGF0aW9uLmNyb3NzY2l0ZS5vcmciPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1maWxlLXRleHQtbyBmYS1mdyc+PC9pPgogICAgICAgICAgICAgICAgICAgIENpdGF0aW9uIEZvcm1hdHRlcjwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyIj48L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zZWFyY2guZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtc2VhcmNoIGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgU2VhcmNoPC9hPgogICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9vYWkuZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtdGFibGUgZmEtZncnPjwvaT4KICAgICAgICAgICAgICAgICAgICBPQUktUE1IPC9hPgogICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zdGF0cy5kYXRhY2l0ZS5vcmciPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1iYXItY2hhcnQgZmEtZncnPjwvaT4KICAgICAgICAgICAgICAgICAgICBTdGF0aXN0aWNzPC9hPgogICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9hcGkuZGF0YWNpdGUub3JnIj4KICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz0nZmEgZmEtY29ncyBmYS1mdyc+PC9pPgogICAgICAgICAgICAgICAgICAgIFJFU1QgQVBJPC9hPgogICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5yZTNkYXRhLm9yZyI+CiAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLWN1YmVzIGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgcmUzZGF0YTwvYT4KICAgICAgICAgICAgICAgICAgPC9saT4KICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJkaXZpZGVyIj48L2xpPgogICAgICAgICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3N0YXR1cy5kYXRhY2l0ZS5vcmciPgogICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1jYWxlbmRhci1jaGVjay1vIGZhLWZ3Jz48L2k+CiAgICAgICAgICAgICAgICAgICAgU3RhdHVzPC9hPgogICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9oZWFkZXI+CiAgICAgIDxkaXYgY2xhc3M9IndyYXBwZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiBzZWN0aW9uLXdoaXRlIj4KICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyLWZsdWlkIj4KICAgICAgICA8ZGl2IGNsYXNzPSJyb3cgcm93LXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTggY29sLW1kLW9mZnNldC0yIHBvc3QtY29udGVudCI+CiAgICAgICAgICAgIDxhIG5hbWU9InRvcG9mcGFnZSI+PC9hPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwb3N0LW1ldGEiPgogICAgICAgICAgICAgIDxoMT5FYXRpbmcgeW91ciBvd24gRG9nIEZvb2Q8L2gxPgogICAgICAgICAgICAgIERlY2VtYmVyIDIwLCAyMDE2IGJ5IE1hcnRpbiBGZW5uZXIKICAgICAgICAgICAgICDigKIgPHNwYW4gY2xhc3M9InBvc3QtcmVhZGluZy10aW1lIj48L3NwYW4+IHJlYWQKICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJkb2kiPjxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzRrM20tbnl2ZyI+aHR0cHM6Ly9kb2kub3JnLzEwLjU0MzgvNGszbS1ueXZnPC9hPjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8cD48YSBocmVmPSJodHRwczovL25ld3JlcHVibGljLmNvbS9hcnRpY2xlLzExNTM0OS9kb2dmb29kaW5nLXRlY2gtc2xhbmctd29ya2luZy1vdXQtZ2xpdGNoZXMiPkVhdGluZyB5b3VyIG93biBkb2cgZm9vZDwvYT4gaXMgYSBzbGFuZyB0ZXJtIHRvIGRlc2NyaWJlIHRoYXQgYW4gb3JnYW5pemF0aW9uIHNob3VsZCBpdHNlbGYgdXNlIHRoZSBwcm9kdWN0cyBhbmQgc2VydmljZXMgaXQgcHJvdmlkZXMuIEZvciBEYXRhQ2l0ZSB0aGlzIG1lYW5zIHRoYXQgd2Ugc2hvdWxkIHVzZSBET0lzIHdpdGggYXBwcm9wcmlhdGUgbWV0YWRhdGEgYW5kIHN0cmF0ZWdpZXMgZm9yIGxvbmctdGVybSBwcmVzZXJ2YXRpb24gZm9yIHRoZSBzY2hvbGFybHkgb3V0cHV0cyB3ZSBwcm9kdWNlLiBGb3IgdGhlIG1vc3QgcGFydCB0aGlzIGlzIG5vdCByZXNlYXJjaCBkYXRhLCBidXQgcmF0aGVyIHRlY2huaWNhbCBkb2N1bWVudHMgc3VjaCBhcyB0aGUgRGF0YUNpdGUgU2NoZW1hIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiA8c3BhbiBjbGFzcz0iY2l0YXRpb24iPig8YSBocmVmPSIjcmVmLWh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzAwMTIiPjIwMTY8L2E+KTwvc3Bhbj4uPC9wPgo8cD5UaGVzZSBvdXRwdXRzIGFsc28gaW5jbHVkZSB0aGUgcG9zdHMgb24gdGhpcyBibG9nLCB3aGVyZSB3ZSBkaXNjdXNzIHRvcGljcyByZWxldmFudCBmb3IgdGhlIERhdGFDaXRlIGNvbW11bml0eSwgYnV0IGFsc28gb2YgYnJvYWRlciBpbnRlcmVzdCB0byBhbnlvbmUgd2hvIGNhcmVzIGFib3V0IHJlc2VhcmNoIGRhdGEsIHBlcnNpc3RlbnQgaWRlbnRpZmllcnMsIGFuZCBzY2hvbGFybHkgaW5mcmFzdHJ1Y3R1cmUuIEFuZCBzdGFydGluZyB0b2RheSBhbGwgYmxvZyBwb3N0cyBvbiB0aGlzIGJsb2cgd2lsbCBoYXZlIGEgRE9JLCBtZXRhZGF0YSBhbmQgdXNlIGEgcGVyc2lzdGVudCBzdG9yYWdlIG1lY2hhbmlzbS48L3A+CjxkaXYgY2xhc3M9ImZpZ3VyZSI+CjxpbWcgc3JjPSIvaW1hZ2VzLzIwMTYvMTIvMjMwNzg1LmpwZyIgYWx0PSJQaG90byBieSBCaWxsIEVtcmljaC4gQ0MgWmVyby4iIC8+CjxwIGNsYXNzPSJjYXB0aW9uIj5QaG90byBieSA8YSBocmVmPSJodHRwczovL3d3dy5wZXhlbHMuY29tL3Bob3RvL2JsYWNrLWFuZC10YW4teW9ya3NoaXJlLXRlcnJpZXItcHVwcHktMjMwNzg1LyI+QmlsbCBFbXJpY2g8L2E+LiA8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wLyI+Q0MgWmVybzwvYT4uPC9wPgo8L2Rpdj4KPGgzIGlkPSJ0ZWNobmljYWwtaW1wbGVtZW50YXRpb24iPlRlY2huaWNhbCBJbXBsZW1lbnRhdGlvbjwvaDM+CjxwPlRoaXMgYmxvZyBpcyBwb3dlcmVkIGJ5IHRoZSBzdGF0aWMgc2l0ZSBnZW5lcmF0b3IgPGEgaHJlZj0iaHR0cHM6Ly9taWRkbGVtYW5hcHAuY29tLyI+TWlkZGxlbWFuPC9hPiwgd2l0aCBibG9nIHBvc3RzIHdyaXR0ZW4gaW4gPGEgaHJlZj0iaHR0cDovL2NvbW1vbm1hcmsub3JnLyI+TWFya2Rvd248L2E+IGFuZCBjb252ZXJ0ZWQgdG8gSFRNTCB1c2luZyA8YSBocmVmPSJodHRwOi8vcGFuZG9jLm9yZy8iPlBhbmRvYzwvYT4gYW5kIHRoZSA8YSBocmVmPSJodHRwczovL3RyYXZpcy1jaS5vcmciPlRyYXZpcyBDSTwvYT4gY29udGludW91cyBpbnRlZ3JhdGlvbiBzZXJ2aWNlLiBTdGF0aWMgc2l0ZSBnZW5lcmF0b3IgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBkYXRhYmFzZSBvciBhcHBsaWNhdGlvbiBzZXJ2ZXIgcG93ZXJpbmcgdGhlIHNpdGUsIG1ha2luZyB3ZWJzaXRlIGFkbWluc3RyYXRpb24gc2ltcGxlciwgY2hlYXBlciBhbmQgc2FmZXIuIEluIGFkZGl0aW9uIHRvIHRoZSBibG9nLCB0aGUgPGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnIj5EYXRhQ2l0ZSBob21lcGFnZTwvYT4gYW5kIDxhIGhyZWY9Imh0dHBzOi8vc2NoZW1hLmRhdGFjaXRlLm9yZyI+TWV0YWRhdGEgU2NoZW1hIHN1YnNpdGU8L2E+IGFyZSBhbHNvIGdlbmVyYXRlZCB1c2luZyBNaWRkbGVtYW4uPC9wPgo8cD5UaGUgc2ltcGxpY2l0eSBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGhlcmUsIGFzIHJlZ2lzdGVyaW5nIHRoZSBET0lzIGFuZCBtZXRhZGF0YSBjYW4gYmUgYWNjb21wbGlzaGVkIHVzaW5nIGEgY29tbWFuZCBsaW5lIHV0aWxpdHkgd3JpdHRlbiBieSBEYXRhQ2l0ZSBzdGFmZiB0aGF0IGRvZXNu4oCZdCBuZWVkIHRvIGtub3cgbXVjaCBhYm91dCB0aGUgaW50ZXJuYWxzIG9mIE1pZGRsZW1hbiwgYW5kIHRodXMgY2FuIGJlIGVhc2lseSBhZGFwdGVkIHRvIG90aGVyIHN0YXRpYyBzaXRlIGdlbmVyYXRvcnMgc3VjaCBhcyA8YSBocmVmPSJodHRwOi8vamVreWxscmIuY29tLyI+SmVreWxsPC9hPiwgPGEgaHJlZj0iaHR0cDovL2dvaHVnby5pby8iPkh1Z288L2E+IG9yIDxhIGhyZWY9Imh0dHBzOi8vaGV4by5pby8iPkhleG88L2E+LiBUaGUgY29tbWFuZCBsaW5lIHV0aWxpdHkgaXMgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhdGFjaXRlL2Npcm5lY28iPkNpcm5lY288L2E+LCBnZW5lcmF0aW5nIHRoZSBtZXRhZGF0YSBYTUwgYWNjb3JkaW5nIHRvIHRoZSBEYXRhQ2l0ZSBNZXRhZGF0YSBTY2hlbWEsIGFuZCByZWdpc3RlcmluZyBET0kgYW5kIG1ldGFkYXRhIHdpdGggdGhlIERhdGFDaXRlIE1EUy4gTGlrZSBhbGwgdG9vbHMgbWVudGlvbmVkIGluIHRoaXMgcG9zdCBDaXJuZWNvIGlzIG9wZW4gc291cmNlIHNvZnR3YXJlLCBwbGVhc2UgcmVhY2ggb3V0IHRvIHVzIGlmIHlvdSBhcmUgaW50ZXJlc3RlZCBpbiBpbXBsZW1lbnRpbmcgc2ltaWxhciBmdW5jdGlvbmFsaXR5IGZvciB5b3VyIGJsb2cuPC9wPgo8aDMgaWQ9ImdlbmVyYXRpbmctZG9pcyI+R2VuZXJhdGluZyBET0lzPC9oMz4KPHA+VGhlIERPSXMgZm9yIHRoaXMgYmxvZyBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksIHVzaW5nIGEgbW9kaWZpZWQgYmFzZTMyIGVuY29kaW5nIGFsZ29yaXRobSB0aGF0IGlzIHByb3ZpZGVkIGJ5IENpcm5lY28sIGFzIGRpc2N1c3NlZCBsYXN0IHdlZWsgPHNwYW4gY2xhc3M9ImNpdGF0aW9uIj4oRmVubmVyLCA8YSBocmVmPSIjcmVmLWh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzU1RTUtVDVDMCI+MjAxNjwvYT4pPC9zcGFuPi4gVGhlIERPSSBpcyBnZW5lcmF0ZWQgYW5kIG1pbnRlZCB3aGVuIGEgbmV3IHBvc3QgaXMgcHVzaGVkIHRvIDxhIGhyZWY9Imh0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmciIGNsYXNzPSJ1cmkiPmh0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmc8L2E+LiBUaGlzIGF2b2lkcyB0d28gcHJvYmxlbXM6IGEpIERPSS1saWtlIHN0cmluZ3MgaW4gdGhlIHdpbGQgYmVmb3JlIHB1YmxpY2F0aW9uIGFuZCBiKSB0aGUgcmFuZG9tbHkgZ2VuZXJhdGVkIERPSSBleGlzdHMgYWxyZWFkeSAod2UgY2FuIHNpbXBseSBnZW5lcmF0ZSBhIG5ldyBvbmUpLiBBbGwgRE9JcyBhcmUgc2hvcnQsIHdpdGhvdXQgc2VtYW50aWMgaW5mb21hdGlvbiB0aGF0IG1pZ2h0IGNoYW5nZSBvdmVyIHRpbWUsIGFuZCB3aXRoIGEgY2hlY2tzdW0gdG8gbWluaW1pemUgdHJhbnNjcmlwdGlvbiBlcnJvcnMsIGZvciBleGFtcGxlIDxzdHJvbmc+aHR0cHM6Ly9kb2kub3JnLzEwLjU0MzgvWENCSi1HN1pZPC9zdHJvbmc+LiBHb2luZyBmb3J3YXJkIHdlIGVuY291cmFnZSB1c2VycyB0byBsaW5rIHRvIHRoZSBEYXRhQ2l0ZSBCbG9nIHVzaW5nIHRoZSBET0ksIGFzIHRoZXNlIGxpbmtzIHdpbGwgY29udGludWUgdG8gd29yayBldmVuIGlmIHdlIGV2ZXIgbW92ZSB0aGUgYmxvZyB0byBhIGRpZmZlcmVudCBsb2NhdGlvbi48L3A+CjxoMyBpZD0iZ2VuZXJhdGluZy1tZXRhZGF0YSI+R2VuZXJhdGluZyBNZXRhZGF0YTwvaDM+CjxwPkZvciB0aGUgZ2VuZXJhdGlvbiBvZiBtZXRhZGF0YSwgd2UgbmVlZCB0byBzdHJpa2UgYSBiYWxhbmNlIGJldHdlZW4gc2ltcGxlIGF1dGhvciBwcm92aWRlZCBtZXRhZGF0YSwgYnV0IHJpY2ggZW5vdWdoIHRvIGFpZCBkaXNjb3ZlcnkuIFdlIGFyZSBkb2luZyB0aGlzIHZpYSB0aHJlZSBtZWNoYW5pc21zOjwvcD4KPHVsPgo8bGk+bWV0YWRhdGEgcHJvdmlkZWQgYnkgdGhlIGF1dGhvcjwvbGk+CjxsaT5kZWZhdWx0IG1ldGFkYXRhIGZvciB0aGUgYmxvZzwvbGk+CjxsaT5tZXRhZGF0YSBhdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBmcm9tIGNvbnRlbnQ8L2xpPgo8L3VsPgo8cD5UaGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgdGhlIGF1dGhvciBhcmUgdGhlIHR5cGljYWwgbWV0YWRhdGEgZm9yIGJsb2cgcG9zdHMsIHByb3ZpZGVkIHZpYSA8YSBocmVmPSJodHRwczovL2dvaHVnby5pby9jb250ZW50L2Zyb250LW1hdHRlci8iPllBTUwgZnJvbnQgbWF0dGVyPC9hPiBhdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggcG9zdDo8L3A+CjxkaXYgY2xhc3M9InNvdXJjZUNvZGUiPjxwcmUgY2xhc3M9InNvdXJjZUNvZGUgeWFtbCI+PGNvZGUgY2xhc3M9InNvdXJjZUNvZGUgeWFtbCI+PHNwYW4gY2xhc3M9Im90Ij4tLS08L3NwYW4+CjxzcGFuIGNsYXNzPSJmdSI+bGF5b3V0Ojwvc3Bhbj4gcG9zdAo8c3BhbiBjbGFzcz0iZnUiPnRpdGxlOjwvc3Bhbj4gRWF0aW5nIHlvdXIgb3duIERvZyBGb29kCjxzcGFuIGNsYXNzPSJmdSI+YXV0aG9yOjwvc3Bhbj4gbWZlbm5lcgo8c3BhbiBjbGFzcz0iZnUiPmRhdGU6PC9zcGFuPiAyMDE2LTEyLTE5CjxzcGFuIGNsYXNzPSJmdSI+dGFnczo8L3NwYW4+CjxzcGFuIGNsYXNzPSJrdyI+LTwvc3Bhbj4gZGF0YWNpdGUKPHNwYW4gY2xhc3M9Imt3Ij4tPC9zcGFuPiBkb2kKPHNwYW4gY2xhc3M9Imt3Ij4tPC9zcGFuPiBtZXRhZGF0YQo8c3BhbiBjbGFzcz0ib3QiPi0tLTwvc3Bhbj48L2NvZGU+PC9wcmU+PC9kaXY+CjxwPldlIGNhbiByZXVzZSBhbGwgdGhlc2UgbWV0YWRhdGEgd2hlbiBnZW5lcmF0aW5nIERhdGFDaXRlIG1ldGFkYXRhLCB1c2luZyB0aGUgdGFncyBhcyA8Y29kZT5zdWJqZWN0czwvY29kZT4uPC9wPgo8cD5UaGUgZGVmYXVsdCBtZXRhZGF0YSBhcmUgbWV0YWRhdGEgdGhhdCBhbHdheXMgc3RheSB0aGUgc2FtZSBmb3IgdGhlIGJsb2csIHN1Y2ggYXMgPGNvZGU+cHVibGlzaGVyPC9jb2RlPiwgPGNvZGU+SG9zdGluZ0luc3RpdHV0aW9uPC9jb2RlPiBhbmQgPGNvZGU+cmlnaHRzPC9jb2RlPi4gV2UgY2FuIHN0b3JlIHRoZW0gaW4gYSBzaXRlLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlLiBXZSBjYW4gYWxzbyBhc3N1bWUgcmVhc29uYWJsZSBkZWZhdWx0cyB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBZQU1MIGZyb250IG1hdHRlciwgZS5nLiA8Y29kZT5yZXNvdXJjZVR5cGU8L2NvZGU+ICh3ZSB1c2UgPGEgaHJlZj0iaHR0cHM6Ly9zY2hlbWEub3JnL0Jsb2dQb3N0aW5nIj5CbG9nUG9zdGluZzwvYT4gd2l0aCA8Y29kZT5yZXNvdXJjZVR5cGVHZW5lcmFsPC9jb2RlPiBUZXh0KSBhbmQgPGNvZGU+dmVyc2lvbjwvY29kZT4uIFdlIHN0b3JlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXV0aG9ycyBvdXRzaWRlIHRoZSBibG9nIHBvc3QsIGluY2x1ZGluZyA8Y29kZT5naXZlbk5hbWU8L2NvZGU+LCA8Y29kZT5mYW1pbHlOYW1lPC9jb2RlPiBhbmQgPGNvZGU+bmFtZUlkZW50aWZpZXI8L2NvZGU+ICh3ZSBub3cgc2hvdyB0aGUgT1JDSUQgSUQgb2YgZXZlcnkgYmxvZyBhdXRob3IgYXQgdGhlIGJvdHRvbSBvZiB0aGUgcG9zdCkuPC9wPgo8cD5GaW5hbGx5LCB0aGVyZSBhcmUgbWV0YWRhdGEgdGhhdCB3ZSBjYW4gYXV0b21hdGljYWxseSBleHRyYWN0IGZyb20gdGhlIGJsb2cgcG9zdCwgYW5kIHdlIGFyZSBjdXJyZW50bHkgZG9pbmcgdGhpcyBmb3IgdGhlIDxjb2RlPmRlc2NyaXB0aW9uPC9jb2RlPiBhbmQgPGNvZGU+cmVsYXRlZElkZW50aWZpZXI8L2NvZGU+LiBUaGlzIGJsb2cgdXNlcyBQYW5kb2MgYW5kIEJpYlRleCB0byBnZW5lcmF0ZSB0aGUgcmVmZXJlbmNlcyBzZWN0aW9uIGF0IHRoZSBlbmQsIGFuZCB3ZSBjYW4gZmV0Y2ggdGhpcyBpbmZvcm1hdGlvbiBhbmQgY29udmVydCBpdCBpbnRvIHRoZSBmb3JtYXQgbmVlZGVkIGZvciA8Y29kZT5yZWxhdGVkSWRlbnRpZmllcjwvY29kZT4uPC9wPgo8cD5UYWtlbiB0b2dldGhlciB3ZSBjYW4gcHJvdmlkZSBhbGwgbWV0YWRhdGEgdGhhdCBhcmUgPGVtPnJlcXVpcmVkPC9lbT4gb3IgPGVtPnJlY29tbWVuZGVkPC9lbT4gaW4gdGhlIE1ldGFkYXRhIFNjaGVtYSBkb2N1bWVudGF0aW9uIDxzcGFuIGNsYXNzPSJjaXRhdGlvbiI+KDxhIGhyZWY9IiNyZWYtaHR0cHM6Ly9kb2kub3JnLzEwLjU0MzgvMDAxMiI+MjAxNjwvYT4pPC9zcGFuPiwgYW5kIHdlIGNhbiBkbyB0aGlzIHdpdGhvdXQgYW55IGV4dHJhIGVmZm9ydCBmb3IgdGhlIGF1dGhvci4gVGhlIGZ1bGwgWE1MIGlzIGF2YWxhaWxhYmxlIDxhIGhyZWY9Imh0dHBzOi8vZGF0YS5kYXRhY2l0ZS5vcmcvYXBwbGljYXRpb24veC1kYXRhY2l0ZSt4bWwvMTAuNTQzOC80SzNNLU5ZVkciPmhlcmU8L2E+LjwvcD4KPHA+Tm90IGFsbCBibG9nIHBvc3RzIG5lZWQgdG8gYmUgY2l0ZWQgZm9ybWFsbHkgd2l0aCBtZXRhZGF0YSBpbiBhIDxlbT5yZWZlcmVuY2VzPC9lbT4gbGlzdCBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIGEgc3BlY2lmaWMgY2l0YXRpb24gc3R5bGUuIEJ1dCB0aGVzZSBtZXRhZGF0YSBncmVhdGx5IGhlbHAgd2l0aCBkaXNjb3ZlcnksIGEgc2VhcmNoIGluIERhdGFDaXRlIFNlYXJjaCBmb3IgPGEgaHJlZj0iaHR0cDovL3NlYXJjaC5kYXRhY2l0ZS5vcmcvd29ya3M/cXVlcnk9ZWF0aW5nK2RvZytmb29kIj5lYXRpbmcgZG9nIGZvb2Q8L2E+IHdpbGwgZm9yIGV4YW1wbGUgYnJpbmcgdXAgdGhpcyBibG9nIHBvc3QgYXMgdGhlIGZpcnN0IGhpdC48L3A+CjxoMyBpZD0icGVyc2lzdGVudC1zdG9yYWdlIj5QZXJzaXN0ZW50IHN0b3JhZ2U8L2gzPgo8cD5Vc2luZyBET0lzIG1lYW5zIHRoYXQgcmVhZGVycyBub3Qgb25seSBleHBlY3QgcmljaCBtZXRhZGF0YSB0aGF0IGhlbHAgd2l0aCBjaXRhdGlvbiBhbmQgZGlzY292ZXJ5LCBidXQgYWxzbyB0aGF0IERhdGFDaXRlIHRha2VzIGV4dHJhIGNhcmUgdG8gcHJlc2VydmUgdGhlIGJsb2cgcG9zdHMsIHRoaW5raW5nIGJleW9uZCB0aGUgcGFydGljdWxhciB0ZWNobmljYWwgaW1wbGVtZW50YXRpb24gb3IgZXZlbiB0aGUgY29udGl1aW5nIGV4aXN0ZW5jZSBvZiB0aGlzIGJsb2cuIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSB3ZSBkbyBuZWVkIHRvIGRvIG1vcmUgd29yaywgc3RhcnRpbmcgd2l0aCBhIGRlY2lzaW9uIGFib3V0IHRoZSBiZXN0IGFyY2hpdmFsIGZvcm1hdCBmb3IgYSBibG9nIHBvc3QgKEhUTUwsIFBERiwgPGEgaHJlZj0iaHR0cHM6Ly9qYXRzLm5sbS5uaWguZ292LyI+SkFUUzwvYT4/KS4gRm9yIG5vdyBibG9nIHBvc3RzIGFyZSBob3N0ZWQgaW4gbXVsdGlwbGUgR2l0IHJlcG9zaXRvcmllcyAoPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhdGFjaXRlL2Jsb2ciPm9uZSBvZiB0aGVtIG9uIEdpdGh1YjwvYT4pLCBhbmQgaW4gdHdvIGluZGVwZW5kZW50IEFtYXpvbiBTMyBidWNrZXRzIHRoYXQgZWFjaCB1c2UgPGEgaHJlZj0iaHR0cDovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uUzMvbGF0ZXN0L2Rldi9WZXJzaW9uaW5nLmh0bWwiPnZlcnNpb25pbmc8L2E+LiBNdWx0aXBsZSBsb2NhdGlvbnMgd2l0aCB2ZXJzaW9uaW5nIGFyZSBhIGdvb2Qgc3RhcnQsIGJ1dCBtb3JlIHdvcmsgaXMgY2xlYXJseSBuZWVkZWQuPC9wPgo8aDMgaWQ9InJlZmVyZW5jZXMiIGNsYXNzPSJ1bm51bWJlcmVkIj5SZWZlcmVuY2VzPC9oMz4KPGRpdiBpZD0icmVmcyIgY2xhc3M9InJlZmVyZW5jZXMiPgo8ZGl2IGlkPSJyZWYtaHR0cHM6Ly9kb2kub3JnLzEwLjU0MzgvMDAxMiI+CjxwPkRhdGFDaXRlIE1ldGFkYXRhIFdvcmtpbmcgR3JvdXAuICgyMDE2KS4gRGF0YUNpdGUgTWV0YWRhdGEgU2NoZW1hIGZvciB0aGUgUHVibGljYXRpb24gYW5kIENpdGF0aW9uIG9mIFJlc2VhcmNoIERhdGEgdjQuMC4gPGVtPkRhdGFDaXRlPC9lbT4uIDxhIGhyZWY9Imh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzAwMTIiIGNsYXNzPSJ1cmkiPmh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzAwMTI8L2E+PC9wPgo8L2Rpdj4KPGRpdiBpZD0icmVmLWh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzU1RTUtVDVDMCI+CjxwPkZlbm5lciwgTS4gKDIwMTYpLiBDb29sIERPSeKAmXMuIDxlbT5EYXRhQ2l0ZTwvZW0+LiA8YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuNTQzOC81NUU1LVQ1QzAiIGNsYXNzPSJ1cmkiPmh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzU1RTUtVDVDMDwvYT48L3A+CjwvZGl2Pgo8L2Rpdj4KCiAgICAgICAgICAgIDxociB3aWR0aD0iODAlIj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbWQtNSBjb2wtbWQtb2Zmc2V0LTIgcG9zdC1jb250ZW50Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tLXRlYXNlciBjZiI+CiAgPGRpdiBjbGFzcz0iaXNMZWZ0Ij4KICAgIDxzZWN0aW9uIGNsYXNzPSJhdXRob3IiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYXV0aG9yLWltYWdlIiBzdHlsZT0iYmFja2dyb3VuZC1pbWFnZTogdXJsKGh0dHBzOi8vd3d3LmdyYXZhdGFyLmNvbS9hdmF0YXIvNDM0NTkyYTA5N2U5MTI2MTc5MmViZDZiNDkyMDQyYmM/cz0yNTAmZD1tbSZyPXgpIj5CbG9nIExvZ288L2Rpdj4KICAgICAgICA8aDQ+TWFydGluIEZlbm5lcjwvaDQ+CiAgICAgICAgPHAgY2xhc3M9ImJpbyI+RGF0YUNpdGUgVGVjaG5pY2FsIERpcmVjdG9yPC9wPgogICAgICAgIDxwIGNsYXNzPSJvcmNpZCI+PGEgaHJlZj0iaHR0cHM6Ly9vcmNpZC5vcmcvMDAwMC0wMDAzLTE0MTktMjQwNSI+aHR0cHM6Ly9vcmNpZC5vcmcvMDAwMC0wMDAzLTE0MTktMjQwNTwvYT48L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iY2xlYXJmaXgiPjwvZGl2PgogICAgICA8aDQ+RWF0aW5nIHlvdXIgb3duIERvZyBGb29kPC9oND4KICAgICAgICA8cCBjbGFzcz0icHVibGlzaGVkIj48YSBocmVmPSJodHRwczovL2RvaS5vcmcvMTAuNTQzOC80azNtLW55dmciPmh0dHBzOi8vZG9pLm9yZy8xMC41NDM4LzRrM20tbnl2ZzwvYT4KICAgICAgPHAgY2xhc3M9InB1Ymxpc2hlZCI+PGkgY2xhc3M9ImZhIGZhLWNhbGVuZGFyIj48L2k+IDx0aW1lIGRhdGV0aW1lPSIyMDE2LTEyLTIwIDAwOjAwIj5EZWNlbWJlciAyMCwgMjAxNjwvdGltZT48L3A+CiAgICAgIDxwIGNsYXNzPSJwdWJsaXNoZWQiPjxpIGNsYXNzPSJmYSBmYS1oaXN0b3J5Ij48L2k+IDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kYXRhY2l0ZS9ibG9nL2NvbW1pdHMvbWFzdGVyL3NvdXJjZS9wb3N0cy9lYXRpbmcteW91ci1vd24tZG9nLWZvb2QuaHRtbC5tZCI+SGlzdG9yeTwvYT48L3A+CiAgICAgIDxwIGNsYXNzPSJwdWJsaXNoZWQiPsKpIDIwMTYgTWFydGluIEZlbm5lci4gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSA8YSBocmVmPSJodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvNC4wLyI+Q3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbiBsaWNlbnNlPC9hPi48L3A+CiAgICAgIDxwIGNsYXNzPSJwdWJsaXNoZWQiPgogICAgICAgIDxpIGNsYXNzPSJmYSBmYS10YWdzIj48L2k+CiAgICAgICAgPGEgaHJlZj0iL2luZGV4Lmh0bWw/dGFnPWRhdGFjaXRlIj5kYXRhY2l0ZTwvYT4sIDxhIGhyZWY9Ii9pbmRleC5odG1sP3RhZz1kb2kiPmRvaTwvYT4sIDxhIGhyZWY9Ii9pbmRleC5odG1sP3RhZz1tZXRhZGF0YSI+bWV0YWRhdGE8L2E+LCA8YSBocmVmPSIvaW5kZXguaHRtbD90YWc9ZmVhdHVyZWQiPmZlYXR1cmVkPC9hPgogICAgICA8L3A+CiAgICA8L3NlY3Rpb24+CiAgPC9kaXY+CjwvZGl2PgoKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTIgY29sLW1kLW9mZnNldC0xIj4KICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbS10ZWFzZXIgY2YiPgogIDxkaXYgY2xhc3M9ImlzTGVmdCI+CiAgICA8aDUgY2xhc3M9ImluZGV4LWhlYWRsaW5lIGZlYXR1cmVkIj48c3Bhbj5TaGFyZSBvbjwvc3Bhbj48L2g1PgogICAgICA8YSBjbGFzcz0iaWNvbi10d2l0dGVyIiBocmVmPSJodHRwOi8vdHdpdHRlci5jb20vc2hhcmU/dGV4dD1PbiB0aGUgQGRhdGFjaXRlIGJsb2c6IEVhdGluZyB5b3VyIG93biBEb2cgRm9vZCZhbXA7dXJsPWh0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmcvZWF0aW5nLXlvdXItb3duLWRvZy1mb29kLyIKICAgICAgICBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsICd0d2l0dGVyLXNoYXJlJywgJ3dpZHRoPTU1MCxoZWlnaHQ9MjU1Jyk7cmV0dXJuIGZhbHNlOyI+CiAgICAgICAgPGkgY2xhc3M9ImZhIGZhLXR3aXR0ZXIgZmEtMngiPjwvaT48c3BhbiBjbGFzcz0iaGlkZGVuIj50d2l0dGVyPC9zcGFuPgogICAgICA8L2E+CiAgICAgIDxhIGNsYXNzPSJpY29uLWZhY2Vib29rIiBocmVmPSJodHRwczovL3d3dy5mYWNlYm9vay5jb20vc2hhcmVyLnBocD90PU9uIHRoZSBAZGF0YWNpdGUgYmxvZzogRWF0aW5nIHlvdXIgb3duIERvZyBGb29kJmFtcDt1PWh0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmcvZWF0aW5nLXlvdXItb3duLWRvZy1mb29kLyIKICAgICAgICBvbmNsaWNrPSJ3aW5kb3cub3Blbih0aGlzLmhyZWYsICdmYWNlYm9vay1zaGFyZScsICd3aWR0aD01NTAsaGVpZ2h0PTI1NScpO3JldHVybiBmYWxzZTsiPgogICAgICAgIDxpIGNsYXNzPSJmYSBmYS1mYWNlYm9vayBmYS0yeCI+PC9pPjxzcGFuIGNsYXNzPSJoaWRkZW4iPmZhY2Vib29rPC9zcGFuPgogICAgICA8L2E+CiAgPC9kaXY+CjwvZGl2PgoKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icm93Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sLW1kLTggY29sLW1kLW9mZnNldC0yIHBvc3QtY29udGVudCI+CiAgICAgICAgICAgICAgPGRpdiBpZD0iZGlzcXVzX3RocmVhZCI+PC9kaXY+CjxzY3JpcHQ+CiAgICB2YXIgZGlzcXVzX2NvbmZpZyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICB0aGlzLnBhZ2UudXJsID0gJ2h0dHBzOi8vYmxvZy5kYXRhY2l0ZS5vcmcvZWF0aW5nLXlvdXItb3duLWRvZy1mb29kLyc7CiAgICAgICAgdGhpcy5wYWdlLmlkZW50aWZpZXIgPSAnaHR0cHM6Ly9ibG9nLmRhdGFjaXRlLm9yZy9lYXRpbmcteW91ci1vd24tZG9nLWZvb2QvJzsKICAgIH07CiAgICAoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGQgPSBkb2N1bWVudCwgcyA9IGQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CgogICAgICAgIHMuc3JjID0gJy8vZGF0YWNpdGUuZGlzcXVzLmNvbS9lbWJlZC5qcyc7ICAvLwoKICAgICAgICBzLnNldEF0dHJpYnV0ZSgnZGF0YS10aW1lc3RhbXAnLCArbmV3IERhdGUoKSk7CiAgICAgICAgKGQuaGVhZCB8fCBkLmJvZHkpLmFwcGVuZENoaWxkKHMpOwogICAgfSkoKTsKPC9zY3JpcHQ+Cjxub3NjcmlwdD5QbGVhc2UgZW5hYmxlIEphdmFTY3JpcHQgdG8gdmlldyB0aGUgPGEgaHJlZj0iaHR0cHM6Ly9kaXNxdXMuY29tLz9yZWZfbm9zY3JpcHQiIHJlbD0ibm9mb2xsb3ciPmNvbW1lbnRzIHBvd2VyZWQgYnkgRGlzcXVzLjwvYT48L25vc2NyaXB0PgoKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICAgIDxmb290ZXIgY2xhc3M9J3JvdyBmb290ZXInPgogICAgICA8ZGl2IGNsYXNzPSJjb250YWluZXItZmx1aWQiPgogICAgICAgIDxkaXYgY2xhc3M9J2NvbC1tZC0zIGNvbC1zbS00Jz4KICAgICAgICAgIDxoND5BYm91dCBEYXRhQ2l0ZTwvaDQ+CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvbWlzc2lvbi5odG1sIj5XaGF0IHdlIGRvPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvYm9hcmQuaHRtbCI+Qm9hcmQ8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9zdGVlcmluZy5odG1sIj5TdGVlcmluZyBncm91cHM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9zdGFmZi5odG1sIj5TdGFmZjwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL2pvYm9wcG9ydHVuaXRpZXMuaHRtbCI+Sm9iIG9wcG9ydHVuaXRpZXM8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTMgY29sLXNtLTQnPgogICAgICAgICAgPGg0PlNlcnZpY2VzPC9oND4KICAgICAgICAgIDx1bD4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9kb2lzLmh0bWwiPkFzc2lnbiBET0lzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvc2VhcmNoLmh0bWwiPk1ldGFkYXRhIHNlYXJjaDwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL2V2ZW50ZGF0YS5odG1sIj5FdmVudCBkYXRhPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvcHJvZmlsZXMuaHRtbCI+UHJvZmlsZXM8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9yZTNkYXRhLmh0bWwiPnJlM2RhdGE8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9jaXRhdGlvbi5odG1sIj5DaXRhdGlvbiBmb3JtYXR0ZXI8L2E+PC9saT4KICAgICAgICAgICAgPGxpPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmRhdGFjaXRlLm9yZy9zdGF0cy5odG1sIj5TdGF0aXN0aWNzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvY29udGVudC5odG1sIj5Db250ZW50IG5lZ290aWF0aW9uPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvb2FpcG1oLmh0bWwiPk9BSS1QTUg8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTMgY29sLXNtLTQnPgogICAgICAgICAgPGg0PlJlc291cmNlczwvaDQ+CiAgICAgICAgICA8dWw+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3NjaGVtYS5kYXRhY2l0ZS5vcmciPk1ldGFkYXRhIHNjaGVtYTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly9zdXBwb3J0LmRhdGFjaXRlLm9yZyI+U3VwcG9ydDwvYT48L2xpPgogICAgICAgICAgPC91bD4KICAgICAgICAgIDxoND5Db21tdW5pdHk8L2g0PgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL21lbWJlcnMuaHRtbCI+TWVtYmVyczwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3BhcnRuZXJzLmh0bWwiPlBhcnRuZXJzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvc3RlZXJpbmcuaHRtbCI+U3RlZXJpbmcgZ3JvdXBzPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvZXZlbnRzLmh0bWwiPkV2ZW50czwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3JvYWRtYXAuaHRtbCI+Um9hZG1hcDwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3VzZXItc3Rvcmllcy5odG1sIj5Vc2VyIFN0b3JpZXM8L2E+PC9saT4KICAgICAgICAgIDwvdWw+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0nY29sLW1kLTMnPgogICAgICAgICAgPGg0IGNsYXNzPSJzaGFyZSI+Q29udGFjdCB1czwvaDQ+CiAgICAgICAgICA8YSBocmVmPSdtYWlsdG86c3VwcG9ydEBkYXRhY2l0ZS5vcmcnIGNsYXNzPSJzaGFyZSI+CiAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1hdCc+PC9pPgogICAgICAgICAgPC9hPgogICAgICAgICAgPGEgaHJlZj0naHR0cHM6Ly9ibG9nLmRhdGFjaXRlLm9yZy9mZWVkLnhtbCcgY2xhc3M9InNoYXJlIj4KICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLXJzcyc+PC9pPgogICAgICAgICAgPC9hPgogICAgICAgICAgPGEgaHJlZj0naHR0cHM6Ly90d2l0dGVyLmNvbS9kYXRhY2l0ZScgY2xhc3M9InNoYXJlIj4KICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLXR3aXR0ZXInPjwvaT4KICAgICAgICAgIDwvYT4KICAgICAgICAgIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9kYXRhY2l0ZS9kYXRhY2l0ZScgY2xhc3M9InNoYXJlIj4KICAgICAgICAgICAgPGkgY2xhc3M9J2ZhIGZhLWdpdGh1Yic+PC9pPgogICAgICAgICAgPC9hPgogICAgICAgICAgPGEgaHJlZj0naHR0cHM6Ly93d3cubGlua2VkaW4uY29tL2NvbXBhbnkvZGF0YWNpdGUnIGNsYXNzPSJzaGFyZSI+CiAgICAgICAgICAgIDxpIGNsYXNzPSdmYSBmYS1saW5rZWRpbic+PC9pPgogICAgICAgICAgPC9hPgogICAgICAgICAgPHVsPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL3Rlcm1zLmh0bWwiPlRlcm1zIGFuZCBjb25kaXRpb25zPC9hPjwvbGk+CiAgICAgICAgICAgIDxsaT48YSBocmVmPSJodHRwczovL3d3dy5kYXRhY2l0ZS5vcmcvcHJpdmFjeS5odG1sIj5Qcml2YWN5IHBvbGljeTwvYT48L2xpPgogICAgICAgICAgICA8bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuZGF0YWNpdGUub3JnL2Fja25vd2xlZGdtZW50cy5odG1sIj5BY2tub3dsZWRnZW1lbnRzPC9hPjwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgICAgPGEgaHJlZj0iaHR0cDovL3N0YXR1cy5kYXRhY2l0ZS5vcmciIHRhcmdldD0iX2JsYW5rIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbG9yLWRvdCI+PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sb3ItZGVzY3JpcHRpb24iPjwvc3Bhbj4KICAgICAgICAgIDwvYT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Zvb3Rlcj4KICAgIDxzY3JpcHQgc3JjPSIvL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMi4xLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIvL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjMuNi9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIvL2Nkbi5zdGF0dXNwYWdlLmlvL3NlLXYyLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Fzc2V0cy5kYXRhY2l0ZS5vcmcvamF2YXNjcmlwdHMvZGVmYXVsdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iL2phdmFzY3JpcHRzL3JlYWRpbmdUaW1lLm1pbi5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHNyYz0iL2phdmFzY3JpcHRzL2luZGV4LmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSIvamF2YXNjcmlwdHMvc2VhcmNoLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgaWQ9ImRzcS1jb3VudC1zY3IiIHNyYz0iLy9kYXRhY2l0ZS5kaXNxdXMuY29tL2NvdW50LmpzIiBhc3luYz48L3NjcmlwdD4KICAgIDxzY3JpcHQ+CiAgICAgIChmdW5jdGlvbihpLHMsbyxnLHIsYSxtKXtpWydHb29nbGVBbmFseXRpY3NPYmplY3QnXT1yO2lbcl09aVtyXXx8ZnVuY3Rpb24oKXsKICAgICAgKGlbcl0ucT1pW3JdLnF8fFtdKS5wdXNoKGFyZ3VtZW50cyl9LGlbcl0ubD0xKm5ldyBEYXRlKCk7YT1zLmNyZWF0ZUVsZW1lbnQobyksCiAgICAgIG09cy5nZXRFbGVtZW50c0J5VGFnTmFtZShvKVswXTthLmFzeW5jPTE7YS5zcmM9ZzttLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGEsbSkKICAgICAgfSkod2luZG93LGRvY3VtZW50LCdzY3JpcHQnLCcvL3d3dy5nb29nbGUtYW5hbHl0aWNzLmNvbS9hbmFseXRpY3MuanMnLCdnYScpOwoKICAgICAgZ2EoJ2NyZWF0ZScsICdVQS0yMjgwNjE5Ni02JywgJ2F1dG8nKTsKICAgICAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsKICAgIDwvc2NyaXB0PgogIDwvYm9keT4KPC9odG1sPgo=
|
103
105
|
http_version:
|
104
|
-
recorded_at: Thu,
|
106
|
+
recorded_at: Thu, 30 Aug 2018 23:17:01 GMT
|
105
107
|
recorded_with: VCR 3.0.3
|
data/spec/spec_helper.rb
CHANGED
@@ -80,12 +80,12 @@ end
|
|
80
80
|
alias silence capture
|
81
81
|
|
82
82
|
VCR.configure do |c|
|
83
|
-
mds_token = Base64.
|
83
|
+
mds_token = Base64.strict_encode64("#{ENV['MDS_USERNAME']}:#{ENV['MDS_PASSWORD']}")
|
84
84
|
|
85
85
|
c.cassette_library_dir = "spec/fixtures/vcr_cassettes"
|
86
86
|
c.hook_into :webmock
|
87
87
|
c.ignore_localhost = true
|
88
|
-
c.ignore_hosts 'codeclimate.com'
|
88
|
+
c.ignore_hosts 'codeclimate.com'
|
89
89
|
c.filter_sensitive_data("<MDS_TOKEN>") { mds_token }
|
90
90
|
c.configure_rspec_metadata!
|
91
91
|
end
|
data/spec/utils_spec.rb
CHANGED
@@ -19,8 +19,8 @@ describe Cirneco::DataCenter, vcr: true, :order => :defined do
|
|
19
19
|
it 'should get all dois by prefix' do
|
20
20
|
response = subject.get_dois_by_prefix(prefix, options)
|
21
21
|
dois = response.body["data"]
|
22
|
-
expect(dois.length).to eq(
|
23
|
-
expect(dois.first).to eq("10.
|
22
|
+
expect(dois.length).to eq(438)
|
23
|
+
expect(dois.first).to eq("10.5438/0000-00SS")
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -37,16 +37,16 @@ describe Cirneco::DataCenter, vcr: true, :order => :defined do
|
|
37
37
|
|
38
38
|
it 'should encode doi' do
|
39
39
|
number = 123
|
40
|
-
expect(subject.encode_doi(prefix, number: number)).to eq("10.
|
40
|
+
expect(subject.encode_doi(prefix, number: number)).to eq("10.5438/0000-3v20")
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should encode doi number with other characters' do
|
44
44
|
number = "MS-2-7196-7302"
|
45
|
-
expect(subject.encode_doi(prefix, number: number)).to eq("10.
|
45
|
+
expect(subject.encode_doi(prefix, number: number)).to eq("10.5438/83bs-2615")
|
46
46
|
end
|
47
47
|
|
48
48
|
it 'should encode doi random number' do
|
49
|
-
expect(subject.encode_doi(prefix)).to start_with("10.
|
49
|
+
expect(subject.encode_doi(prefix)).to start_with("10.5438")
|
50
50
|
end
|
51
51
|
|
52
52
|
it 'should not encode invalid prefix' do
|
@@ -57,13 +57,13 @@ describe Cirneco::DataCenter, vcr: true, :order => :defined do
|
|
57
57
|
it 'should encode doi with shoulder' do
|
58
58
|
number = 7654321
|
59
59
|
shoulder = "fk2"
|
60
|
-
expect(subject.encode_doi(prefix, number: number, shoulder: shoulder)).to eq("10.
|
60
|
+
expect(subject.encode_doi(prefix, number: number, shoulder: shoulder)).to eq("10.5438/fk2-079j-xh42")
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'should encode doi with empty shoulder' do
|
64
64
|
number = 7654321
|
65
65
|
shoulder = nil
|
66
|
-
expect(subject.encode_doi(prefix, number: number, shoulder: shoulder)).to eq("10.
|
66
|
+
expect(subject.encode_doi(prefix, number: number, shoulder: shoulder)).to eq("10.5438/079j-xh42")
|
67
67
|
end
|
68
68
|
end
|
69
69
|
|
data/spec/work_spec.rb
CHANGED
@@ -14,11 +14,10 @@ describe Cirneco::Work, vcr: true do
|
|
14
14
|
it "BlogPosting" do
|
15
15
|
expect(subject.valid?).to be true
|
16
16
|
expect(subject.id).to eq("https://doi.org/10.5438/4k3m-nyvg")
|
17
|
-
expect(subject.
|
17
|
+
expect(subject.b_url).to eq("https://blog.datacite.org/eating-your-own-dog-food")
|
18
18
|
expect(subject.type).to eq("BlogPosting")
|
19
19
|
expect(subject.author).to eq("type"=>"Person", "id"=>"https://orcid.org/0000-0003-1419-2405", "name"=>"Martin Fenner", "givenName"=>"Martin", "familyName"=>"Fenner")
|
20
20
|
expect(subject.title).to eq("Eating your own Dog Food")
|
21
|
-
expect(subject.alternate_name).to eq("MS-49-3632-5083")
|
22
21
|
expect(subject.description["text"]).to start_with("Eating your own dog food")
|
23
22
|
expect(subject.keywords).to eq(["datacite", "doi", "metadata", "featured"])
|
24
23
|
expect(subject.date_published).to eq("2016-12-20")
|
@@ -37,7 +36,7 @@ describe Cirneco::Work, vcr: true do
|
|
37
36
|
expect(subject.type).to eq("SoftwareSourceCode")
|
38
37
|
expect(subject.author).to eq("type"=>"Person", "id"=>"https://orcid.org/0000-0001-5000-0007", "name"=>"Miller, Elizabeth", "givenName"=>"Elizabeth", "familyName"=>"Miller")
|
39
38
|
expect(subject.title).to eq([{"lang"=>"en-US", "text"=>"Full DataCite XML Example"}, {"title_type"=>"Subtitle", "lang"=>"en-US", "text"=>"Demonstration of DataCite Properties."}])
|
40
|
-
expect(subject.
|
39
|
+
expect(subject.alternate_identifier).to eq("type"=>"URL", "name"=>"https://schema.datacite.org/meta/kernel-4.1/example/datacite-example-full-v4.1.xml")
|
41
40
|
expect(subject.description["text"]).to start_with("XML example of all DataCite Metadata Schema v4.1 properties.")
|
42
41
|
expect(subject.keywords).to eq([{"subject_scheme"=>"dewey", "scheme_uri"=>"http://dewey.info/", "text"=>"000 computer science"}])
|
43
42
|
expect(subject.date_published).to eq("2014")
|
metadata
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cirneco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Martin Fenner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: maremma
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '3.5'
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: '4.1'
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '3.5'
|
30
27
|
- - ">="
|
31
28
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
29
|
+
version: '4.1'
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: bergamasco
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -362,6 +362,19 @@ files:
|
|
362
362
|
- resources/kernel-4.0/samples/datacite-example-workflow-v4.1.xml
|
363
363
|
- spec/api_spec.rb
|
364
364
|
- spec/doi_spec.rb
|
365
|
+
- spec/fixtures/vcr_cassettes/Cirneco_DataCenter/get/should_get_all_dois_by_prefix.yml
|
366
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_all_dois.yml
|
367
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/get/should_get_doi.yml
|
368
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Doi/MDS_DOI_API/put/should_put_doi.yml
|
369
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_all_dois.yml
|
370
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi.yml
|
371
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/get/should_get_doi_not_found.yml
|
372
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/DOI_API/put/should_put_doi.yml
|
373
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/get/should_get_media.yml
|
374
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/Media_API/post/should_post_media.yml
|
375
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/delete/should_delete_metadata.yml
|
376
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/get/should_get_metadata.yml
|
377
|
+
- spec/fixtures/vcr_cassettes/Cirneco_Work/Metadata_API/post/should_post_metadata.yml
|
365
378
|
- spec/fixtures/vcr_cassettes/Cirneco_Work/media/includes_media.yml
|
366
379
|
- spec/fixtures/vcr_cassettes/Cirneco_Work/schema/BlogPosting.yml
|
367
380
|
- spec/spec_helper.rb
|
@@ -387,7 +400,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
387
400
|
version: '0'
|
388
401
|
requirements: []
|
389
402
|
rubyforge_project:
|
390
|
-
rubygems_version: 2.7.
|
403
|
+
rubygems_version: 2.7.7
|
391
404
|
signing_key:
|
392
405
|
specification_version: 4
|
393
406
|
summary: Ruby client library for the DataCite MDS
|