hackerone-client 0.16.0 → 0.20.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/build.yml +5 -4
- data/CHANGELOG.md +18 -1
- data/Gemfile +2 -2
- data/README.md +11 -2
- data/fixtures/vcr_cassettes/create_report.yml +81 -0
- data/fixtures/vcr_cassettes/create_report_invalid.yml +79 -0
- data/fixtures/vcr_cassettes/get_balance.yml +80 -0
- data/fixtures/vcr_cassettes/lock_report.yml +156 -0
- data/fixtures/vcr_cassettes/report.yml +22 -1
- data/fixtures/vcr_cassettes/report_list_triaged.yml +77 -0
- data/fixtures/vcr_cassettes/update_severity.yml +78 -0
- data/lib/hackerone/client.rb +49 -3
- data/lib/hackerone/client/activity.rb +11 -1
- data/lib/hackerone/client/attachment.rb +24 -0
- data/lib/hackerone/client/billing_balance.rb +18 -0
- data/lib/hackerone/client/program.rb +7 -0
- data/lib/hackerone/client/report.rb +56 -0
- data/lib/hackerone/client/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8bc7c771f9513ac464c291fcd7aff64f7bac61f07a599bc3df69fa50b5620aef
|
4
|
+
data.tar.gz: 2e1bfeee93c61b44b0852a49c24297b8c75cfc1a44fe74482961682e8de57225
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e432abcb996c438be845f68f46785a8d58d5cad4ea30623fd4878358f8ae5d2857b9ba00f6bc33393c1ee30d35e92db49bbf0a4432ffb7a62b4021a4eb676c8
|
7
|
+
data.tar.gz: 483858e438178da5283d87b29df8bd3281a73f9716936dce4620be7b8420baf1c8f9afa59aa4d78f32426e248465fd5f106d5e2473d0b79e0a32c749a18dcbcc
|
data/.github/workflows/build.yml
CHANGED
@@ -7,13 +7,14 @@ jobs:
|
|
7
7
|
runs-on: ubuntu-latest
|
8
8
|
strategy:
|
9
9
|
matrix:
|
10
|
-
ruby: [ '2.4', '2.5', '2.6', '2.7']
|
10
|
+
ruby: [ '2.4.0', '2.5.0', '2.6.0', '2.7.2', '3.0.0']
|
11
11
|
steps:
|
12
|
-
- uses: actions/checkout@
|
12
|
+
- uses: actions/checkout@v2
|
13
13
|
- name: Set up Ruby ${{ matrix.ruby }}
|
14
|
-
uses:
|
14
|
+
uses: ruby/setup-ruby@v1.64.1
|
15
15
|
with:
|
16
16
|
ruby-version: ${{ matrix.ruby }}
|
17
|
+
bundler-cache: true
|
17
18
|
- name: Build and test with Rake with Ruby ${{ matrix.ruby }}
|
18
19
|
run: |
|
19
20
|
gem install bundler
|
@@ -23,7 +24,7 @@ jobs:
|
|
23
24
|
name: Rubocop
|
24
25
|
runs-on: ubuntu-latest
|
25
26
|
steps:
|
26
|
-
- uses: actions/checkout@
|
27
|
+
- uses: actions/checkout@v2
|
27
28
|
- name: Set up Ruby 2.6
|
28
29
|
uses: actions/setup-ruby@v1
|
29
30
|
with:
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,23 @@
|
|
1
|
+
## [0.20.0] - 2020-10-21
|
2
|
+
|
3
|
+
[Add ability to lock a report](https://github.com/oreoshake/hackerone-client/pull/59) (@rzhade3)
|
4
|
+
[Add ability to list attachments on a report](https://github.com/oreoshake/hackerone-client/pull/58) (@rzhade3)
|
5
|
+
|
6
|
+
## [0.19.0] - 2020-05-08
|
7
|
+
|
8
|
+
[Add ability to create a report](https://github.com/oreoshake/hackerone-client/pull/57) (@rzhade3)
|
9
|
+
|
10
|
+
## [0.18.0] - 2020-03-23
|
11
|
+
|
12
|
+
[Add ability to filter reports on states other than "new"](https://github.com/oreoshake/hackerone-client/pull/54) (@rzhade3)
|
13
|
+
|
14
|
+
## [0.17.0] - 2020-03-23
|
15
|
+
|
16
|
+
[Add support for updating the severity of an issue](https://github.com/oreoshake/hackerone-client/pull/50) (@rzhade3)
|
17
|
+
|
1
18
|
## [0.16.0] - 2020-03-23
|
2
19
|
|
3
|
-
-
|
20
|
+
- Whooops, no change
|
4
21
|
|
5
22
|
## [0.15.0] - 2020-03-09
|
6
23
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -5,8 +5,11 @@ A limited client library for interacting with HackerOne. Currently only supports
|
|
5
5
|
```ruby
|
6
6
|
client = HackerOne::Client::Api.new("github")
|
7
7
|
|
8
|
-
#
|
9
|
-
client.
|
8
|
+
# POST '/reports' creates a new report
|
9
|
+
client.create_report(title: "hi", summary: "hi", impact: "string", severity_rating: :high, source: "api")
|
10
|
+
|
11
|
+
# GET '/reports' returns all reports in a given state for a program, by default :new
|
12
|
+
client.reports(state: :new)
|
10
13
|
|
11
14
|
# GET '/report/{id}' returns report data for a given report
|
12
15
|
report = client.report(id)
|
@@ -29,6 +32,9 @@ report.add_report_reference(reference)
|
|
29
32
|
# Triage an issue (add a reference and set state to :triaged)
|
30
33
|
report.triage(reference)
|
31
34
|
|
35
|
+
# Set the severity on a report (rating can be :none, :low, :medium, :high or :critical)
|
36
|
+
report.update_severity(rating: :high)
|
37
|
+
|
32
38
|
# POST /reports/{id}/bounty_suggestions
|
33
39
|
report.suggest_bounty(message: "I suggest $500 with a small bonus. Report is well-written.", amount: 500, bonus_amount: 50)
|
34
40
|
|
@@ -48,6 +54,9 @@ program.common_responses
|
|
48
54
|
|
49
55
|
# Updates a program's policy
|
50
56
|
program.update_policy(policy: "Please submit valid vulnerabilities")
|
57
|
+
|
58
|
+
# Gets a program's balance
|
59
|
+
program.balance
|
51
60
|
```
|
52
61
|
|
53
62
|
## State change hooks
|
@@ -0,0 +1,81 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.hackerone.com/v1/reports
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"data":{"type":"report","attributes":{"team_handle":"github","title":"hi","vulnerability_information":"hi","impact":"string","severity_rating":"none","source":"api"}}}'
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Basic NOPE
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v1.0.1
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 201
|
23
|
+
message: Created
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 06 May 2020 23:02:54 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- __cfduid=d31f31bc632e337f7fa240d7a863f92a01588806173; expires=Fri, 05-Jun-20
|
35
|
+
23:02:53 GMT; path=/; Domain=api.hackerone.com; HttpOnly; SameSite=Lax; Secure
|
36
|
+
X-Request-Id:
|
37
|
+
- 55676c0a-2510-4787-9e47-7f74c1e9b2ac
|
38
|
+
Etag:
|
39
|
+
- W/"1f8bd995ef79550e2f8c8484301fadcc"
|
40
|
+
Cache-Control:
|
41
|
+
- max-age=0, private, must-revalidate
|
42
|
+
Strict-Transport-Security:
|
43
|
+
- max-age=31536000; includeSubDomains; preload
|
44
|
+
X-Frame-Options:
|
45
|
+
- DENY
|
46
|
+
X-Content-Type-Options:
|
47
|
+
- nosniff
|
48
|
+
X-Xss-Protection:
|
49
|
+
- 1; mode=block
|
50
|
+
X-Download-Options:
|
51
|
+
- noopen
|
52
|
+
X-Permitted-Cross-Domain-Policies:
|
53
|
+
- none
|
54
|
+
Referrer-Policy:
|
55
|
+
- strict-origin-when-cross-origin
|
56
|
+
Expect-Ct:
|
57
|
+
- enforce, max-age=86400
|
58
|
+
Content-Security-Policy:
|
59
|
+
- 'default-src ''none''; base-uri ''self''; block-all-mixed-content; child-src
|
60
|
+
www.youtube-nocookie.com; connect-src ''self'' www.google-analytics.com errors.hackerone.net;
|
61
|
+
font-src ''self''; form-action ''self''; frame-ancestors ''none''; img-src
|
62
|
+
''self'' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com
|
63
|
+
profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
64
|
+
media-src ''self'' hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
65
|
+
script-src ''self'' www.google-analytics.com; style-src ''self'' ''unsafe-inline'';
|
66
|
+
report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598'
|
67
|
+
Cf-Cache-Status:
|
68
|
+
- DYNAMIC
|
69
|
+
Server:
|
70
|
+
- cloudflare
|
71
|
+
Cf-Ray:
|
72
|
+
- 58f654d83ea1bc9c-SEA
|
73
|
+
Cf-Request-Id:
|
74
|
+
- '028dd35b1e0000bc9c75365200000001'
|
75
|
+
body:
|
76
|
+
encoding: ASCII-8BIT
|
77
|
+
string: !binary |-
|
78
|
+
eyJkYXRhIjp7ImlkIjoiODY3NDc5IiwidHlwZSI6InJlcG9ydCIsImF0dHJpYnV0ZXMiOnsidGl0bGUiOiJoaSIsInN0YXRlIjoibmV3IiwiY3JlYXRlZF9hdCI6IjIwMjAtMDUtMDZUMjM6MDI6NTMuNjE1WiIsInZ1bG5lcmFiaWxpdHlfaW5mb3JtYXRpb24iOiJoaVxuXG4jIyBJbXBhY3Rcblxuc3RyaW5nIiwidHJpYWdlZF9hdCI6bnVsbCwiY2xvc2VkX2F0IjpudWxsLCJsYXN0X3JlcG9ydGVyX2FjdGl2aXR5X2F0IjoiMjAyMC0wNS0wNlQyMzowMjo1My42NzlaIiwiZmlyc3RfcHJvZ3JhbV9hY3Rpdml0eV9hdCI6IjIwMjAtMDUtMDZUMjM6MDI6NTMuNjc5WiIsImxhc3RfcHJvZ3JhbV9hY3Rpdml0eV9hdCI6IjIwMjAtMDUtMDZUMjM6MDI6NTMuNjc5WiIsImJvdW50eV9hd2FyZGVkX2F0IjpudWxsLCJzd2FnX2F3YXJkZWRfYXQiOm51bGwsImRpc2Nsb3NlZF9hdCI6bnVsbCwicmVwb3J0ZXJfYWdyZWVkX29uX2dvaW5nX3B1YmxpY19hdCI6bnVsbCwibGFzdF9wdWJsaWNfYWN0aXZpdHlfYXQiOiIyMDIwLTA1LTA2VDIzOjAyOjUzLjY3OVoiLCJsYXN0X2FjdGl2aXR5X2F0IjoiMjAyMC0wNS0wNlQyMzowMjo1My42NzlaIiwiY3ZlX2lkcyI6W10sInNvdXJjZSI6ImFwaSJ9LCJyZWxhdGlvbnNoaXBzIjp7InJlcG9ydGVyIjp7ImRhdGEiOnsiaWQiOiIxMDEzNTk2IiwidHlwZSI6InVzZXIiLCJhdHRyaWJ1dGVzIjp7InVzZXJuYW1lIjoicnpoYWRlMy10ZXN0ZXIiLCJuYW1lIjpudWxsLCJkaXNhYmxlZCI6ZmFsc2UsImNyZWF0ZWRfYXQiOiIyMDIwLTAzLTMwVDE1OjIxOjEwLjg3M1oiLCJwcm9maWxlX3BpY3R1cmUiOnsiNjJ4NjIiOiIvYXNzZXRzL2F2YXRhcnMvZGVmYXVsdC03MWEzMDJkNzA2NDU3ZjNkM2EzMWViMzBmYTNlNzNlNmNmMGIxZDY3N2I4ZmEyMThlYWVhZmZkNjdhZTk3OTE4LnBuZyIsIjgyeDgyIjoiL2Fzc2V0cy9hdmF0YXJzL2RlZmF1bHQtNzFhMzAyZDcwNjQ1N2YzZDNhMzFlYjMwZmEzZTczZTZjZjBiMWQ2NzdiOGZhMjE4ZWFlYWZmZDY3YWU5NzkxOC5wbmciLCIxMTB4MTEwIjoiL2Fzc2V0cy9hdmF0YXJzL2RlZmF1bHQtNzFhMzAyZDcwNjQ1N2YzZDNhMzFlYjMwZmEzZTczZTZjZjBiMWQ2NzdiOGZhMjE4ZWFlYWZmZDY3YWU5NzkxOC5wbmciLCIyNjB4MjYwIjoiL2Fzc2V0cy9hdmF0YXJzL2RlZmF1bHQtNzFhMzAyZDcwNjQ1N2YzZDNhMzFlYjMwZmEzZTczZTZjZjBiMWQ2NzdiOGZhMjE4ZWFlYWZmZDY3YWU5NzkxOC5wbmcifSwiYmlvIjpudWxsLCJ3ZWJzaXRlIjpudWxsLCJsb2NhdGlvbiI6bnVsbCwiaGFja2Vyb25lX3RyaWFnZXIiOmZhbHNlfX19LCJwcm9ncmFtIjp7ImRhdGEiOnsiaWQiOiIxMTc2NyIsInR5cGUiOiJwcm9ncmFtIiwiYXR0cmlidXRlcyI6eyJoYW5kbGUiOiJnaXRodWItdGVzdCIsInBvbGljeSI6IiMgR2l0SHViIFNlY3VyaXR5IEJ1ZyBCb3VudHlcblxuU29mdHdhcmUgc2VjdXJpdHkgcmVzZWFyY2hlcnMgYXJlIGluY3JlYXNpbmdseSBlbmdhZ2luZyB3aXRoIEludGVybmV0IGNvbXBhbmllcyB0byBodW50IGRvd24gdnVsbmVyYWJpbGl0aWVzLiBPdXIgYm91bnR5IHByb2dyYW0gZ2l2ZXMgYSB0aXAgb2YgdGhlIGhhdCB0byB0aGVzZSByZXNlYXJjaGVycyBhbmQgcHJvdmlkZXMgcmV3YXJkcyBvZiAgJDMwLDAwMCBvciBtb3JlIGZvciBjcml0aWNhbCB2dWxuZXJhYmlsaXRpZXMuXG5cblxuWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gaW4gb3VyIFtydWxlc10oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS8jcnVsZXMpLCBbc2NvcGVdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vI3Njb3BlKSwgW3RhcmdldHNdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vI3RhcmdldHMpLCBhbmQgW0ZBUV0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS8jZmFxcykgc2VjdGlvbnMuIFlvdSBjYW4gYWxzbyBjaGVjayB0aGUgY3VycmVudCByYW5raW5ncyBvbiB0aGUgW2xlYWRlcmJvYXJkXShodHRwczovL2JvdW50eS5naXRodWIuY29tLyNsZWFkZXJib2FyZCkuXG5cbkhhcHB5IGhhY2tpbmchXG5cblxuIyMgUnVsZXNcblxuIyMjIEJlZm9yZSB5b3Ugc3RhcnRcblxuKiBDaGVjayB0aGUgbGlzdCBvZiBidWdzIHRoYXQgaGF2ZSBiZWVuIFtjbGFzc2lmaWVkIGFzIGluZWxpZ2libGVdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vaW5lbGlnaWJsZS5odG1sKS4gU3VibWlzc2lvbnMgd2hpY2ggYXJlIGluZWxpZ2libGUgd2lsbCBsaWtlbHkgYmUgY2xvc2VkIGFzIGBOb3QgQXBwbGljYWJsZWAuXG4qIENoZWNrIHRoZSBbR2l0SHViIENoYW5nZWxvZ10oaHR0cHM6Ly9naXRodWIuYmxvZy9jaGFuZ2Vsb2cvKSBmb3IgcmVjZW50bHkgbGF1bmNoZWQgZmVhdHVyZXMuXG4qIE5ldmVyIGF0dGVtcHQgbm9uLXRlY2huaWNhbCBhdHRhY2tzIHN1Y2ggYXMgc29jaWFsIGVuZ2luZWVyaW5nLCBwaGlzaGluZywgb3IgcGh5c2ljYWwgYXR0YWNrcyBhZ2FpbnN0IG91ciBlbXBsb3llZXMsIHVzZXJzLCBvciBpbmZyYXN0cnVjdHVyZS5cbiogV2hlbiBpbiBkb3VidCwgY29udGFjdCB1cyBhdCBgYm91bnR5QGdpdGh1Yi5jb21gLlxuKiBCeSBwYXJ0aWNpcGF0aW5nIGluIEdpdEh1YidzIEJ1ZyBCb3VudHkgcHJvZ3JhbSAodGhlIFwiUHJvZ3JhbVwiKSwgeW91IGFja25vd2xlZGdlIHRoYXQgeW91IGhhdmUgcmVhZCBhbmQgYWdyZWUgdG8gR2l0SHViJ3MgW1Rlcm1zIG9mIFNlcnZpY2VdKGh0dHBzOi8vaGVscC5naXRodWIuY29tL2FydGljbGVzL2dpdGh1Yi10ZXJtcy1vZi1zZXJ2aWNlKSBhcyB3ZWxsIGFzIHRoZSBmb2xsb3dpbmc6XG5cbiAgKiB5b3UncmUgbm90IHBhcnRpY2lwYXRpbmcgZnJvbSBhIGNvdW50cnkgYWdhaW5zdCB3aGljaCB0aGUgVW5pdGVkIFN0YXRlcyBoYXMgaXNzdWVkIGV4cG9ydCBzYW5jdGlvbnMgb3Igb3RoZXIgdHJhZGUgcmVzdHJpY3Rpb25zLCBpbmNsdWRpbmcgQ3ViYSwgSXJhbiwgTm9ydGggS29yZWEsIFN1ZGFuLCBhbmQgU3lyaWEuXG5cbiAgKiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIFByb2dyYW0gd2lsbCBub3QgdmlvbGF0ZSBhbnkgbGF3IGFwcGxpY2FibGUgdG8geW91LCBvciBkaXNydXB0IG9yIGNvbXByb21pc2UgYW55IGRhdGEgdGhhdCBpcyBub3QgeW91ciBvd24uXG5cbiAgKiB5b3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgYW55IGFwcGxpY2FibGUgdGF4ZXMsIHdpdGhob2xkaW5nIG9yIG90aGVyd2lzZSwgYXJpc2luZyBmcm9tIG9yIHJlbGF0aW5nIHRvIHlvdXIgcGFydGljaXBhdGlvbiBpbiB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nIGZyb20gYW55IGJvdW50eSBwYXltZW50cy5cblxuICAqIEdpdEh1YiByZXNlcnZlcyB0aGUgcmlnaHQgdG8gdGVybWluYXRlIG9yIGRpc2NvbnRpbnVlIHRoZSBQcm9ncmFtIGF0IGl0cyBkaXNjcmV0aW9uLlxuXG4gICogT25seSB0ZXN0IGZvciB2dWxuZXJhYmlsaXRpZXMgb24gc2l0ZXMgeW91IGtub3cgdG8gYmUgb3BlcmF0ZWQgYnkgR2l0SHViIGFuZCBhcmUgW2luLXNjb3BlXShodHRwczovL2JvdW50eS5naXRodWIuY29tI3Njb3BlKS4gU29tZSBzaXRlcyBob3N0ZWQgb24gc3ViZG9tYWlucyBvZiBgR2l0SHViLmNvbWAgYXJlIG9wZXJhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgYW5kIHNob3VsZCBub3QgYmUgdGVzdGVkLlxuXG5cbiMjIyBMZWdhbCBzYWZlIGhhcmJvclxuXG5Zb3VyIHJlc2VhcmNoIGlzIGNvdmVyZWQgYnkgdGhlIFtHaXRIdWIgQnVnIEJvdW50eSBQcm9ncmFtIExlZ2FsIFNhZmUgSGFyYm9yXShodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy9naXRodWItYnVnLWJvdW50eS1wcm9ncmFtLWxlZ2FsLXNhZmUtaGFyYm9yLykgcG9saWN5LiBJbiBzdW1tYXJ5OlxuKiBXZSBjb25zaWRlciBzZWN1cml0eSByZXNlYXJjaCBhbmQgdnVsbmVyYWJpbGl0eSBkaXNjbG9zdXJlIGFjdGl2aXRpZXMgY29uZHVjdGVkIGNvbnNpc3RlbnQgd2l0aCB0aGlzIHBvbGljeSBhcyDigJxhdXRob3JpemVk4oCdIGNvbmR1Y3QgdW5kZXIgdGhlIENvbXB1dGVyIEZyYXVkIGFuZCBBYnVzZSBBY3QsIHRoZSBETUNBLCBhbmQgb3RoZXIgYXBwbGljYWJsZSBjb21wdXRlciB1c2UgbGF3cyBzdWNoIGFzIENhbC4gUGVuYWwgQ29kZSA1MDIoYykuIFdlIHdhaXZlIGFueSBwb3RlbnRpYWwgRE1DQSBjbGFpbSBhZ2FpbnN0IHlvdSBmb3IgY2lyY3VtdmVudGluZyB0aGUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB3ZSBoYXZlIHVzZWQgdG8gcHJvdGVjdCB0aGUgYXBwbGljYXRpb25zIGluIHRoaXMgYnVnIGJvdW50eSBwcm9ncmFtJ3Mgc2NvcGUuXG4qIFdlIHdhbnQgeW91IHRvIHJlc3BvbnNpYmx5IGRpc2Nsb3NlIHRocm91Z2ggb3VyIGJ1ZyBib3VudHkgcHJvZ3JhbSwgYW5kIGRvbid0IHdhbnQgcmVzZWFyY2hlcnMgcHV0IGluIGZlYXIgb2YgbGVnYWwgY29uc2VxdWVuY2VzIGJlY2F1c2Ugb2YgdGhlaXIgZ29vZCBmYWl0aCBhdHRlbXB0cyB0byBjb21wbHkgd2l0aCBvdXIgYnVnIGJvdW50eSBwb2xpY3kuIFdlIGNhbm5vdCBiaW5kIGFueSB0aGlyZCBwYXJ0eSwgc28gZG8gbm90IGFzc3VtZSB0aGlzIHByb3RlY3Rpb24gZXh0ZW5kcyB0byBhbnkgdGhpcmQgcGFydHkuIElmIGluIGRvdWJ0LCBhc2sgdXMgYmVmb3JlIGVuZ2FnaW5nIGluIGFueSBzcGVjaWZpYyBhY3Rpb24geW91IHRoaW5rIG1pZ2h0IGdvIG91dHNpZGUgdGhlIGJvdW5kcyBvZiBvdXIgcG9saWN5LlxuKiBCZWNhdXNlIGJvdGggaWRlbnRpZnlpbmcgYW5kIG5vbi1pZGVudGlmeWluZyBpbmZvcm1hdGlvbiBjYW4gcHV0IGEgcmVzZWFyY2hlciBhdCByaXNrLCB3ZSBsaW1pdCB3aGF0IHdlIHNoYXJlIHdpdGggdGhpcmQgcGFydGllcy4gV2UgbWF5IHByb3ZpZGUgbm9uLWlkZW50aWZ5aW5nIHN1YnN0YW50aXZlIGluZm9ybWF0aW9uIGZyb20geW91ciByZXBvcnQgdG8gYW4gYWZmZWN0ZWQgdGhpcmQgcGFydHksIGJ1dCBvbmx5IGFmdGVyIG5vdGlmeWluZyB5b3UgYW5kIHJlY2VpdmluZyBhIGNvbW1pdG1lbnQgdGhhdCB0aGUgdGhpcmQgcGFydHkgd2lsbCBub3QgcHVyc3VlIGxlZ2FsIGFjdGlvbiBhZ2FpbnN0IHlvdS4gV2Ugd2lsbCBvbmx5IHNoYXJlIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIChuYW1lLCBlbWFpbCBhZGRyZXNzLCBwaG9uZSBudW1iZXIsIGV0Yy4pIHdpdGggYSB0aGlyZCBwYXJ0eSBpZiB5b3UgZ2l2ZSB5b3VyIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiogSWYgeW91ciBzZWN1cml0eSByZXNlYXJjaCBhcyBwYXJ0IG9mIHRoZSBidWcgYm91bnR5IHByb2dyYW0gdmlvbGF0ZXMgY2VydGFpbiByZXN0cmljdGlvbnMgaW4gb3VyIHNpdGUgcG9saWNpZXMsIHRoZSBzYWZlIGhhcmJvciB0ZXJtcyBwZXJtaXQgYSBsaW1pdGVkIGV4ZW1wdGlvbi5cblxuXG4jIyMgUGVyZm9ybWluZyB5b3VyIHJlc2VhcmNoXG5cbiogRG8gbm90IGltcGFjdCBvdGhlciB1c2VycyB3aXRoIHlvdXIgdGVzdGluZywgdGhpcyBpbmNsdWRlcyB0ZXN0aW5nIHZ1bG5lcmFiaWxpdGllcyBpbiByZXBvc2l0b3JpZXMgb3Igb3JnYW5pemF0aW9ucyB5b3UgZG8gbm90IG93bi4gSWYgeW91IGFyZSBhdHRlbXB0aW5nIHRvIGZpbmQgYW4gYXV0aG9yaXphdGlvbiBieXBhc3MsIHlvdSBtdXN0IHVzZSBhY2NvdW50cyB5b3Ugb3duLlxuKiBUaGUgZm9sbG93aW5nIGFyZSAqKm5ldmVyKiogYWxsb3dlZCBhbmQgYXJlIGluZWxpZ2libGUgZm9yIHJld2FyZC4gV2UgbWF5IHN1c3BlbmQgeW91ciBHaXRIdWIgYWNjb3VudCBhbmQgYmFuIHlvdXIgSVAgYWRkcmVzcyBmb3I6XG5cbiAgKiBQZXJmb3JtaW5nIGRpc3RyaWJ1dGVkIGRlbmlhbCBvZiBzZXJ2aWNlIChERG9TKSBvciBvdGhlciB2b2x1bWV0cmljIGF0dGFja3NcbiAgKiBTcGFtbWluZyBjb250ZW50XG4gICogTGFyZ2Utc2NhbGUgdnVsbmVyYWJpbGl0eSBzY2FubmVycywgc2NyYXBlcnMsIG9yIGF1dG9tYXRlZCB0b29scyB3aGljaCBwcm9kdWNlIGV4Y2Vzc2l2ZSBhbW91bnRzIG9mIHRyYWZmaWMuXG4gICAgKiBOb3RlOiBXZSBfZG9fIGFsbG93IHRoZSB1c2Ugb2YgYXV0b21hdGVkIHRvb2xzIHNvIGxvbmcgYXMgdGhleSBkbyBub3QgcHJvZHVjZSBleGNlc3NpdmUgYW1vdW50cyBvZiB0cmFmZmljLiBGb3IgZXhhbXBsZSwgcnVubmluZyBvbmUgYG5tYXBgIHNjYW4gYWdhaW5zdCBvbmUgaG9zdCBpcyBhbGxvd2VkLCBidXQgc2VuZGluZyA2NSwwMDAgcmVxdWVzdHMgaW4gdHdvIG1pbnV0ZXMgdXNpbmcgQnVycCBTdWl0ZSBJbnRydWRlciBpcyBleGNlc3NpdmUuXG4qIFJlc2VhcmNoaW5nIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MgaXMgYWxsb3dlZCBhbmQgZWxpZ2libGUgZm9yIHJld2FyZHMgb25seSBpZiB5b3UgZm9sbG93IHRoZXNlIHJ1bGVzOlxuXG4gICogUmVzZWFyY2ggKiptdXN0KiogYmUgcGVyZm9ybWVkIGluIG9yZ2FuaXphdGlvbnMgb3IgcmVwb3NpdG9yaWVzIHlvdSBvd25cbiAgKiBTdG9wICoqaW1tZWRpYXRlbHkqKiBpZiB5b3UgYmVsaWV2ZSB5b3UgaGF2ZSBhZmZlY3RlZCB0aGUgYXZhaWxhYmlsaXR5IG9mIG91ciBzZXJ2aWNlcy4gRG9uJ3Qgd29ycnkgYWJvdXQgZGVtb25zdHJhdGluZyB0aGUgZnVsbCBpbXBhY3Qgb2YgeW91ciB2dWxuZXJhYmlsaXR5LCBHaXRIdWIncyBzZWN1cml0eSB0ZWFtIHdpbGwgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltcGFjdC5cbiAgKiBUaGVyZSBhcmUgbm8gbGltaXRzIGZvciByZXNlYXJjaGluZyBkZW5pYWwgb2Ygc2VydmljZSB2dWxuZXJhYmlsaXRpZXMgYWdhaW5zdCB5b3VyIG93biBpbnN0YW5jZSBvZiBbR2l0SHViIEVudGVycHJpc2UgU2VydmVyXShodHRwczovL2JvdW50eS5naXRodWIuY29tL3RhcmdldHMvZ2l0aHViLWVudGVycHJpc2Utc2VydmVyLmh0bWwpXG5cblxuIyMjIEhhbmRsaW5nIHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlIGluZm9ybWF0aW9uIChQSUkpXG5cbiogUGVyc29uYWxseSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiAoUElJKSBpbmNsdWRlczpcbiAgKiBsZWdhbCBhbmQvb3IgZnVsbCBuYW1lc1xuICAqIG5hbWVzIG9yIHVzZXJuYW1lcyBjb21iaW5lZCB3aXRoIG90aGVyIGlkZW50aWZpZXJzIGxpa2UgcGhvbmUgbnVtYmVycyBvciBlbWFpbCBhZGRyZXNzZXNcbiAgKiBoZWFsdGggb3IgZmluYW5jaWFsIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgaW5zdXJhbmNlIGluZm9ybWF0aW9uLCBzb2NpYWwgc2VjdXJpdHkgbnVtYmVycywgZXRjLilcbiAgKiBpbmZvcm1hdGlvbiBhYm91dCBwb2xpdGljYWwgb3IgcmVsaWdpb3VzIGFmZmlsaWF0aW9uc1xuICAqIGluZm9ybWF0aW9uIGFib3V0IHJhY2UsIGV0aG5pY2l0eSwgc2V4dWFsIG9yaWVudGF0aW9uLCBnZW5kZXIsIG9yIG90aGVyIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIHRoYXQgY291bGQgYmUgdXNlZCBmb3IgZGlzY3JpbWluYXRvcnkgcHVycG9zZXNcbiogRG8gbm90IGludGVudGlvbmFsbHkgYWNjZXNzIG90aGVycycgUElJLiBJZiB5b3Ugc3VzcGVjdCBhIHNlcnZpY2UgcHJvdmlkZXMgYWNjZXNzIHRvIFBJSSwgbGltaXQgcXVlcmllcyB0byB5b3VyIG93biBwZXJzb25hbCBpbmZvcm1hdGlvbi5cbiogUmVwb3J0IHRoZSB2dWxuZXJhYmlsaXR5ICppbW1lZGlhdGVseSogYW5kIGRvIG5vdCBhdHRlbXB0IHRvIGFjY2VzcyBhbnkgb3RoZXIgZGF0YS4gVGhlIEdpdEh1YiBTZWN1cml0eSB0ZWFtIHdpbGwgYXNzZXNzIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIHRoZSBQSUkgZXhwb3N1cmUuXG4qIExpbWl0IHRoZSBhbW91bnQgb2YgZGF0YSByZXR1cm5lZCBmcm9tIHNlcnZpY2VzLiBGb3IgU1FMIGluamVjdGlvbiwgZm9yIGV4YW1wbGUsIGxpbWl0IHRoZSBudW1iZXIgb2Ygcm93cyByZXR1cm5lZFxuKiBZb3UgbXVzdCBkZWxldGUgYWxsIHlvdXIgbG9jYWwsIHN0b3JlZCwgb3IgY2FjaGVkIGNvcGllcyBvZiBkYXRhIGNvbnRhaW5pbmcgUElJIGFzIHNvb24gYXMgcG9zc2libGUuIFdlIG1heSBhc2sgeW91IHRvIHNpZ24gYSBjZXJ0aWZpY2F0ZSBvZiBkZWxldGlvbiBhbmQgY29uZmlkZW50aWFsaXR5IGFncmVlbWVudCByZWdhcmRpbmcgdGhlIGV4YWN0IGluZm9ybWF0aW9uIHlvdSBhY2Nlc3NlZC4gVGhpcyBhZ3JlZW1lbnQgd2lsbCBub3QgYWZmZWN0IHlvdXIgYm91bnR5IHJld2FyZC5cbiogV2UgbWF5IGFzayB5b3UgZm9yIHRoZSB1c2VybmFtZXMgYW5kIElQIGFkZHJlc3NlcyB1c2VkIGR1cmluZyB5b3VyIHRlc3RpbmcgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhlIHZ1bG5lcmFiaWxpdHlcblxuXG4jIyMgUmVwb3J0aW5nIHlvdXIgdnVsbmVyYWJpbGl0eVxuXG4qIFN1Ym1pc3Npb25zIG11c3QgaW5jbHVkZSB3cml0dGVuIGluc3RydWN0aW9ucyBmb3IgcmVwcm9kdWNpbmcgdGhlIHZ1bG5lcmFiaWxpdHkuIFN1Ym1pc3Npb25zIHdpdGhvdXQgY2xlYXIgcmVwcm9kdWN0aW9uIHN0ZXBzIG9yIHdoaWNoIG9ubHkgaW5jbHVkZSByZXByb2R1Y3Rpb24gc3RlcHMgaW4gdmlkZW8gZm9ybSBtYXkgYmUgaW5lbGlnaWJsZSBmb3IgYSByZXdhcmQuXG4qIFdoZW4gcmVwb3J0aW5nIHZ1bG5lcmFiaWxpdGllcyB5b3UgbXVzdCBrZWVwIGFsbCBpbmZvcm1hdGlvbiBvbiBIYWNrZXJPbmUuIERvIG5vdCBwb3N0IGluZm9ybWF0aW9uIHRvIHZpZGVvLXNoYXJpbmcgb3IgcGFzdGViaW4gc2l0ZXMuIFZpZGVvcyBhbmQgaW1hZ2VzIGNhbiBiZSB1cGxvYWRlZCBkaXJlY3RseSB2aWEgSGFja2VyT25lLlxuKiBGb3IgdnVsbmVyYWJpbGl0aWVzIGludm9sdmluZyBwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiwgcGxlYXNlIGV4cGxhaW4gdGhlIGtpbmQgb2YgUElJIHlvdSBiZWxpZXZlIGlzIGV4cG9zZWQgYW5kIGxpbWl0IHRoZSBhbW91bnQgb2YgUElJIGRhdGEgaW5jbHVkZWQgaW4geW91ciBzdWJtaXNzaW9ucy4gRm9yIHRleHR1YWwgaW5mb3JtYXRpb24gYW5kIHNjcmVlbnNob3RzLCBwbGVhc2Ugb25seSBpbmNsdWRlIHJlZGFjdGVkIGRhdGEgaW4geW91ciBzdWJtaXNzaW9uLlxuKiBEbyBub3QgcHVibGljbHkgZGlzY2xvc2UgeW91ciBzdWJtaXNzaW9uIHVudGlsIEdpdEh1YiBoYXMgZXZhbHVhdGVkIHRoZSBpbXBhY3QuXG5cblxuIyMjIFJlY2VpdmluZyB5b3VyIGF3YXJkXG5cbiogQWxsIHJld2FyZCBhbW91bnRzIGFyZSBkZXRlcm1pbmVkIGJ5IG91ciBbc2V2ZXJpdHkgZ3VpZGVsaW5lc10oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS8jc2V2ZXJpdHktZ3VpZGVsaW5lcykuXG4qIFdoZW4gZHVwbGljYXRlcyBvY2N1ciwgd2Ugb25seSBhd2FyZCB0aGUgZmlyc3QgcmVwb3J0IHRoYXQgd2FzIHJlY2VpdmVkIChwcm92aWRlZCB0aGF0IGl0IGNhbiBiZSBmdWxseSByZXByb2R1Y2VkKS5cbiogWW91IGFyZSBmcmVlIHRvIHB1Ymxpc2ggd3JpdGUtdXBzIGFib3V0IHlvdXIgdnVsbmVyYWJpbGl0eSBhbmQgR2l0SHViIHdpbGwgbm90IGxpbWl0IHdoYXQgeW91IHdyaXRlLiBXZSBtYXkgcGF5IG91dCB5b3VyIHJld2FyZCBiZWZvcmUgdGhlIHZ1bG5lcmFiaWxpdHkgaXMgcGF0Y2hlZCBzbyB3ZSBtYXkgYXNrIHRoYXQgeW91IGRlbGF5IHB1Ymxpc2hpbmcgdG8ga2VlcCBvdGhlciBHaXRIdWIgdXNlcnMgc2FmZS5cbiogTWVkaXVtLCBoaWdoLCBhbmQgY3JpdGljYWwgc2V2ZXJpdHkgaXNzdWVzIHdpbGwgYmUgd3JpdHRlbiB1cCBvbiB0aGUgR2l0SHViIEJ1ZyBCb3VudHkgc2l0ZSBhbmQgaW5jbHVkZWQgaW4gb3VyIGxlYWRlcmJvYXJkLiBXZSBkb24ndCBjdXJyZW50bHkgcG9zdCB3cml0ZS11cHMgZm9yIGxvdyBzZXZlcml0eSB2dWxuZXJhYmlsaXRpZXMuXG4qIEdpdEh1YiBpcyBhIENWRSBOdW1iZXJpbmcgQXV0aG9yaXR5IChDTkEpIGZvciBHaXRIdWIgRW50ZXJwcmlzZSBTZXJ2ZXIuIEVsaWdpYmxlIEJ1ZyBCb3VudHkgc3VibWlzc2lvbnMgdGhhdCBhZmZlY3QgR2l0SHViIEVudGVycHJpc2UgU2VydmVyIG1heSBiZSBhc3NpZ25lZCBDVkVzLiBUaGVzZSBDVkVzIHdpbGwgYmUgc2hhcmVkIHdpdGggc3VibWl0dGVycyB2aWEgSGFja2VyT25lLCBpbmNsdWRlZCBpbiBbYm91bnR5IHdyaXRlLXVwc10oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS9ib3VudHktaHVudGVycy5odG1sKSBhbmQgbGlzdGVkIGluIHRoZSBHaXRIdWIgRW50ZXJwcmlzZSBTZXJ2ZXIgW3JlbGVhc2Ugbm90ZXNdKGh0dHBzOi8vZW50ZXJwcmlzZS5naXRodWIuY29tL3JlbGVhc2VzKS5cbiogWW91IG1heSBwcmVmZXIgdGhlIHJld2FyZCBnbyB0b3dhcmQgaGVscGluZyBvdGhlcnMuIElmIHlvdSBjaG9vc2UgdG8gZG8gc28sIEdpdEh1YiB3aWxsIGRvbmF0ZSB5b3VyIHJld2FyZCB0byBhbiBlc3RhYmxpc2hlZCA1MDEoYykoMykgY2hhcml0YWJsZSBvcmdhbml6YXRpb24gb2YgeW91ciBjaG9pY2UuIEdpdEh1YiB3aWxsIGFsc28gbWF0Y2ggeW91ciBkb25hdGlvbiAtIHN1YmplY3QgdG8gb3VyIGRpc2NyZXRpb24uIEFueSByZXdhcmRzIHRoYXQgZ28gdW5jbGFpbWVkIGFmdGVyIDEyIG1vbnRocyB3aWxsIGJlIGRvbmF0ZWQgdG8gYSBjaGFyaXR5IG9mIEdpdEh1YidzIGNob29zaW5nLlxuXG5cbiMjIFNjb3BlXG5cbkdpdEh1YiBydW5zIGEgbnVtYmVyIG9mIHNlcnZpY2VzIGJ1dCBvbmx5IHN1Ym1pc3Npb25zIHVuZGVyIHRoZSBmb2xsb3dpbmcgZG9tYWlucyBhcmUgZWxpZ2libGUgZm9yIHJld2FyZHMuIEFueSBHaXRIdWItb3duZWQgZG9tYWlucyBub3QgbGlzdGVkIGJlbG93IGFyZSAqbm90KiBpbi1zY29wZSwgKm5vdCogZWxpZ2libGUgZm9yIHJld2FyZHMgYW5kICpub3QqIGNvdmVyZWQgYnkgb3VyIFtsZWdhbCBzYWZlIGhhcmJvcl0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbSNsZWdhbF9zYWZlX2hhcmJvcikuXG5cblxuIyMjIGdpdGh1Yi5jb21cblxuT3VyIG1haW4gZG9tYWluIGhvc3RpbmcgdXNlci1mYWNpbmcgR2l0SHViIHNlcnZpY2VzLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1Yi5jb21gIGFyZSBpbi1zY29wZSAqZXhjZXB0KjpcbiogYGJsb2cuZ2l0aHViLmNvbWBcbiogYGNvbW11bml0eS5naXRodWIuY29tYFxuKiBgZW1haWwuZW50ZXJwcmlzZS5naXRodWIuY29tYFxuKiBgZW1haWwuZmluYW5jZS5naXRodWIuY29tYFxuKiBgZW1haWwuc3RhZ2luZy5maW5hbmNlLmdpdGh1Yi5jb21gXG4qIGBlbWFpbC5zdXBwb3J0LmdpdGh1Yi5jb21gXG4qIGBlbWFpbC52ZXJpZnkuZ2l0aHViLmNvbWBcbiogYGdvb2dsZTc2NTBkY2Y2MTQ2ZjA0ZDguZ2l0aHViLmNvbWBcbiogYGsxLl9kb21haW5rZXkuZ2l0aHViLmNvbWBcbiogYGsxLl9kb21haW5rZXkubWNtYWlsLmdpdGh1Yi5jb21gXG4qIGBtY21haWwuZ2l0aHViLmNvbWBcbiogYHJlc291cmNlcy5naXRodWIuY29tYFxuKiBgKi5yZXNvdXJjZXMuZ2l0aHViLmNvbWBcbiogYHNnbWFpbC5naXRodWIuY29tYFxuKiBgKi5zZ21haWwuZ2l0aHViLmNvbWBcbiogYHNob3AuZ2l0aHViLmNvbWBcbiogYHNtdHAuZ2l0aHViLmNvbWBcbiogYCouc210cC5naXRodWIuY29tYFxuKiBgc3VwcG9ydC5naXRodWIuY29tYFxuXG4jIyMgZ2l0aHViYXNzZXRzLmNvbVxuXG5PdXIgZG9tYWluIGZvciBob3N0aW5nIHN0YXRpYyBhc3NldHMuLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgZ2l0aHViYXNzZXRzLmNvbWAgYXJlIGluLXNjb3BlXG5cbiMjIyBnaXRodWJ1c2VyY29udGVudC5jb21cblxuT3VyIGRvbWFpbiBmb3IgaG9zdGluZyBhbmQgcmVuZGVyaW5nIHVzZXJzJyBkYXRhLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1YnVzZXJjb250ZW50LmNvbWAgYXJlIGluLXNjb3BlXG5cbiMjIyBnaXRodWJhcHAuY29tXG5cbk91ciBkb21haW4gZm9yIGhvc3RpbmcgZW1wbG95ZWUtZmFjaW5nIHNlcnZpY2VzLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1YmFwcC5jb21gIGFyZSBpbi1zY29wZSAqZXhjZXB0KjpcbiogYGF0b20taW8uZ2l0aHViYXBwLmNvbWBcbiogYGF0b20taW8tc3RhZ2luZy5naXRodWJhcHAuY29tYFxuKiBgZW1haWwuZW50ZXJwcmlzZS1zdGFnaW5nLmdpdGh1YmFwcC5jb21gXG4qIGBlbWFpbC5oYXlzdGFjay5naXRodWJhcHAuY29tYFxuKiBgcmVwbHkuZ2l0aHViYXBwLmNvbWBcblxuIyMjIGdpdGh1Yi5uZXRcblxuT3VyIGRvbWFpbiBmb3IgaG9zdGluZyBHaXRIdWIncyBpbnRlcm5hbCBwcm9kdWN0aW9uIHNlcnZpY2VzLiBNYW55IG9mIHRoZXNlIHNlcnZpY2VzIGFyZSBub3QgYWNjZXNzaWJsZSBmcm9tIG91dHNpZGUgb3VyIGludGVybmFsIG5ldHdvcmsuLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgZ2l0aHViLm5ldGAgYXJlIGluLXNjb3BlXG5cbiMjIyBzZW1tbGUuY29tXG5cbk91ciBtYWluIGRvbWFpbiBmb3IgU2VtbWxlIGFuZCBMR1RNIHNlcnZpY2VzLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgc2VtbWxlLmNvbWAgYXJlIGluLXNjb3BlICpleGNlcHQqOlxuKiBgZGV2LnNlbW1sZS5jb21gXG4qIGBnaXQuc2VtbWxlLmNvbWBcbiogYGppcmEuc2VtbWxlLmNvbWBcbiogYHdpa2kuc2VtbWxlLmNvbWBcblxuIyMjIHNlbW1sZS5uZXRcblxuT3VyIGRvbWFpbiBmb3Igbm9uLXByb2R1Y3Rpb24gU2VtbWxlIHNlcnZpY2VzLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgc2VtbWxlLm5ldGAgYXJlIGluLXNjb3BlXG5cbiMjIyBkb3dubG9hZHMubGd0bS5jb21cblxuT3VyIGRvbWFpbiBmb3Igc2VydmluZyBMR1RNIGRvd25sb2Fkcy4uIEFsbCBzdWJkb21haW5zIHVuZGVyIGBkb3dubG9hZHMubGd0bS5jb21gIGFyZSBpbi1zY29wZVxuXG4jIyMgbGd0bS1jb20ucGVudGVzdGluZy5zZW1tbGUubmV0XG5cbkFuIGluc3RhbmNlIG9mIFtMR1RNXShodHRwczovL2JvdW50eS5naXRodWIuY29tL3RhcmdldHMvbGd0bS5odG1sKSBlc3BlY2lhbGx5IGZvciBCdWcgQm91bnR5IHJlc2VhcmNoLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGxndG0tY29tLnBlbnRlc3Rpbmcuc2VtbWxlLm5ldGAgYXJlIGluLXNjb3BlXG5cbiMjIyBiYWNrZW5kLWRvdC1sZ3RtLXBlbmV0cmF0aW9uLXRlc3RpbmcuYXBwc3BvdC5jb21cblxuQW4gaW5zdGFuY2Ugb2YgW0xHVE1dKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vdGFyZ2V0cy9sZ3RtLmh0bWwpJ3MgYmFja2VuZCB1c2VkIGZvciB0cmlnZ2VyaW5nIGF1dG9tYXRlZCB0YXNrcy4uIEFsbCBzdWJkb21haW5zIHVuZGVyIGBiYWNrZW5kLWRvdC1sZ3RtLXBlbmV0cmF0aW9uLXRlc3RpbmcuYXBwc3BvdC5jb21gIGFyZSBpbi1zY29wZVxuXG4jIyBTZXZlcml0eSBHdWlkZWxpbmVzXG5cbkFsbCBib3VudHkgc3VibWlzc2lvbnMgYXJlIHJhdGVkIGJ5IEdpdEh1YiB1c2luZyBhIHB1cnBvc2VmdWxseSBzaW1wbGUgc2NhbGUuIEVhY2ggdnVsbmVyYWJpbGl0eSBpcyB1bmlxdWUgYnV0IHRoZSBmb2xsb3dpbmcgaXMgYSByb3VnaCBndWlkZWxpbmUgd2UgdXNlIGludGVybmFsbHkgZm9yIHJhdGluZyBhbmQgcmV3YXJkaW5nIHN1Ym1pc3Npb25zOlxuXG5cbiMjIyBDcml0aWNhbDogJDIwLDAwMCAtICQzMCwwMDBcblxuQ3JpdGljYWwgc2V2ZXJpdHkgaXNzdWVzIHByZXNlbnQgYSBkaXJlY3QgYW5kIGltbWVkaWF0ZSByaXNrIHRvIGEgYnJvYWQgYXJyYXkgb2Ygb3VyIHVzZXJzIG9yIHRvIEdpdEh1YiBpdHNlbGYuIFRoZXkgb2Z0ZW4gYWZmZWN0IHJlbGF0aXZlbHkgbG93LWxldmVsL2ZvdW5kYXRpb25hbCBjb21wb25lbnRzIGluIG9uZSBvZiBvdXIgYXBwbGljYXRpb24gc3RhY2tzIG9yIGluZnJhc3RydWN0dXJlLiBGb3IgZXhhbXBsZTpcbiogYXJiaXRyYXJ5IGNvZGUvY29tbWFuZCBleGVjdXRpb24gb24gYSBHaXRIdWIgc2VydmVyIGluIG91ciBwcm9kdWN0aW9uIG5ldHdvcmsuXG4qIGFyYml0cmFyeSBTUUwgcXVlcmllcyBvbiB0aGUgR2l0SHViIHByb2R1Y3Rpb24gZGF0YWJhc2UuXG4qIGJ5cGFzc2luZyB0aGUgR2l0SHViIGxvZ2luIHByb2Nlc3MsIGVpdGhlciBwYXNzd29yZCBvciAyRkEuXG4qIGFjY2VzcyB0byBzZW5zaXRpdmUgcHJvZHVjdGlvbiB1c2VyIGRhdGEgb3IgYWNjZXNzIHRvIGludGVybmFsIHByb2R1Y3Rpb24gc3lzdGVtcy5cbiogYWNjZXNzaW5nIGFub3RoZXIgdXNlcidzIGRhdGEgaW4gdGhlIEdpdEh1YiBBY3Rpb25zIHNlcnZpY2UuXG5cblRoZSB1cHBlciBib3VuZCBmb3IgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzLCAkMzAsMDAwLCBpcyBvbmx5IGEgZ3VpZGVsaW5lIGFuZCBHaXRIdWIgbWF5IHJld2FyZCBoaWdoZXIgYW1vdW50cyBmb3IgZXhjZXB0aW9uYWwgcmVwb3J0cy5cblxuXG4jIyMgSGlnaDogJDEwLDAwMCAtICQyMCwwMDBcblxuSGlnaCBzZXZlcml0eSBpc3N1ZXMgYWxsb3cgYW4gYXR0YWNrZXIgdG8gcmVhZCBvciBtb2RpZnkgaGlnaGx5IHNlbnNpdGl2ZSBkYXRhIHRoYXQgdGhleSBhcmUgbm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzLiBUaGV5IGFyZSBnZW5lcmFsbHkgbW9yZSBuYXJyb3cgaW4gc2NvcGUgdGhhbiBjcml0aWNhbCBpc3N1ZXMsIHRob3VnaCB0aGV5IG1heSBzdGlsbCBncmFudCBhbiBhdHRhY2tlciBleHRlbnNpdmUgYWNjZXNzLiBGb3IgZXhhbXBsZTpcbiogaW5qZWN0aW5nIGF0dGFja2VyIGNvbnRyb2xsZWQgY29udGVudCBpbnRvIEdpdEh1Yi5jb20gKFhTUykgd2hpY2ggYnlwYXNzZXMgQ1NQLlxuKiBieXBhc3NpbmcgYXV0aG9yaXphdGlvbiBsb2dpYyB0byBncmFudCBhIHJlcG9zaXRvcnkgY29sbGFib3JhdG9yIG1vcmUgYWNjZXNzIHRoYW4gaW50ZW5kZWQuXG4qIGRpc2NvdmVyaW5nIHNlbnNpdGl2ZSB1c2VyIG9yIEdpdEh1YiBkYXRhIGluIGEgcHVibGljbHkgZXhwb3NlZCByZXNvdXJjZSwgc3VjaCBhcyBhbiBTMyBidWNrZXQuXG4qIGdhaW5pbmcgYWNjZXNzIHRvIGEgbm9uLWNyaXRpY2FsIHJlc291cmNlIHRoYXQgb25seSBHaXRIdWIgZW1wbG95ZWVzIHNob3VsZCBiZSBhYmxlIHRvIHJlYWNoLlxuKiB1c2luZyB0aGUgR2l0SHViIEFjdGlvbnMgcmVwby1zY29wZWQgR2l0SHViIHRva2VuIHRvIGFjY2VzcyBoaWdoLXJpc2sgcHJpdmF0ZSBjb250ZW50IG91dHNpZGUgb2YgdGhhdCByZXBvc2l0b3J5LlxuKiBjb2RlIGV4ZWN1dGlvbiBpbiBhIGRlc2t0b3AgYXBwIHRoYXQgcmVxdWlyZXMgbm8gdXNlciBpbnRlcmFjdGlvbi5cblxuXG4jIyMgTWVkaXVtOiAkNCwwMDAgLSAkMTAsMDAwXG5cbk1lZGl1bSBzZXZlcml0eSBpc3N1ZXMgYWxsb3cgYW4gYXR0YWNrZXIgdG8gcmVhZCBvciBtb2RpZnkgbGltaXRlZCBhbW91bnRzIG9mIGRhdGEgdGhhdCB0aGV5IGFyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MuIFRoZXkgZ2VuZXJhbGx5IGdyYW50IGFjY2VzcyB0byBsZXNzIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0aGFuIGhpZ2ggc2V2ZXJpdHkgaXNzdWVzLiBGb3IgZXhhbXBsZTpcbiogZGlzY2xvc2luZyB0aGUgdGl0bGUgb2YgaXNzdWVzIGluIHByaXZhdGUgcmVwb3NpdG9yaWVzIHdoaWNoIHNob3VsZCBiZSBiZSBpbmFjY2Vzc2libGUuXG4qIGluamVjdGluZyBhdHRhY2tlciBjb250cm9sbGVkIGNvbnRlbnQgaW50byBHaXRIdWIuY29tIChYU1MpIGJ1dCBub3QgYnlwYXNzaW5nIENTUCBvciBleGVjdXRpbmcgc2Vuc2l0aXZlIGFjdGlvbnMgd2l0aCBhbm90aGVyIHVzZXIncyBzZXNzaW9uLlxuKiBieXBhc3NpbmcgQ1NSRiB2YWxpZGF0aW9uIGZvciBsb3cgcmlzayBhY3Rpb25zLCBzdWNoIGFzIHN0YXJyaW5nIGEgcmVwb3NpdG9yeSBvciB1bnN1YnNjcmliaW5nIGZyb20gYSBtYWlsaW5nIGxpc3QuXG4qIGVzY2FwaW5nIHRoZSBMR1RNIHdvcmtlciBzYW5kYm94IHRvIGFjY2VzcyBvdGhlciB1c2VyJ3MgZGF0YSBvciBwcml2YXRlIG5ldHdvcmtlZCByZXNvdXJjZXNcblxuXG4jIyMgTG93OiAkNjE3IC0gJDIsMDAwXG5cbkxvdyBzZXZlcml0eSBpc3N1ZXMgYWxsb3cgYW4gYXR0YWNrZXIgdG8gYWNjZXNzIGV4dHJlbWVseSBsaW1pdGVkIGFtb3VudHMgb2YgZGF0YS4gVGhleSBtYXkgdmlvbGF0ZSBhbiBleHBlY3RhdGlvbiBmb3IgaG93IHNvbWV0aGluZyBpcyBpbnRlbmRlZCB0byB3b3JrLCBidXQgaXQgYWxsb3dzIG5lYXJseSBubyBlc2NhbGF0aW9uIG9mIHByaXZpbGVnZSBvciBhYmlsaXR5IHRvIHRyaWdnZXIgdW5pbnRlbmRlZCBiZWhhdmlvciBieSBhbiBhdHRhY2tlci4gRm9yIGV4YW1wbGU6XG4qIHNpZ25pbmcgdXAgYXJiaXRyYXJ5IHVzZXJzIGZvciBhY2Nlc3MgdG8gYW4gXCJlYXJseSBhY2Nlc3MgZmVhdHVyZVwiIHdpdGhvdXQgdGhlaXIgY29uc2VudC5cbiogY3JlYXRpbmcgYW4gaXNzdWUgY29tbWVudCB0aGF0IGJ5cGFzc2VzIG91ciBpbWFnZSBwcm94eWluZyBmaWx0ZXIgYnkgcHJvdmlkaW5nIGEgbWFsZm9ybWVkIFVSTC5cbiogYnlwYXNzaW5nIGNvbW11bml0eS1hbmQtc2FmZXR5IGZlYXR1cmVzIHN1Y2ggYXMgbG9ja2VkIGNvbnZlcnNhdGlvbnMuXG4qIGJ5cGFzc2luZyBiaWxsaW5nIFx1MDAyNiBwbGFuIHJlc3RyaWN0aW9ucyB0byBnYWluIGFjY2VzcyB0byBwYWlkIGZlYXR1cmVzLlxuKiB0cmlnZ2VyaW5nIHZlcmJvc2Ugb3IgZGVidWcgZXJyb3IgcGFnZXMgd2l0aG91dCBwcm9vZiBvZiBleHBsb2l0YWJpbGl0eSBvciBvYnRhaW5pbmcgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLlxuKiB0cmlnZ2VyaW5nIGFwcGxpY2F0aW9uIGV4Y2VwdGlvbnMgdGhhdCBjb3VsZCBhZmZlY3QgbWFueSBHaXRIdWIgdXNlcnMuXG4qIHRyaWdnZXJpbmcgWFNTIG9yIENTUkYgdnVsbmVyYWJpbGl0aWVzIGluIExHVE1cblxuIiwiY3JlYXRlZF9hdCI6IjIwMTYtMDQtMTVUMTc6MTA6MzEuMjYxWiIsInVwZGF0ZWRfYXQiOiIyMDIwLTA0LTA4VDEzOjQ1OjQ5LjU0OFoifX19LCJzZXZlcml0eSI6eyJkYXRhIjp7ImlkIjoiNzEzNTY4IiwidHlwZSI6InNldmVyaXR5IiwiYXR0cmlidXRlcyI6eyJyYXRpbmciOiJub25lIiwiYXV0aG9yX3R5cGUiOiJVc2VyIiwidXNlcl9pZCI6MTAxMzU5NiwiY3JlYXRlZF9hdCI6IjIwMjAtMDUtMDZUMjM6MDI6NTMuNjM0WiJ9fX0sInN3YWciOnsiZGF0YSI6W119LCJhdHRhY2htZW50cyI6eyJkYXRhIjpbXX0sImFjdGl2aXRpZXMiOnsiZGF0YSI6W119LCJib3VudGllcyI6eyJkYXRhIjpbXX0sInN1bW1hcmllcyI6eyJkYXRhIjpbXX0sImN1c3RvbV9maWVsZF92YWx1ZXMiOnsiZGF0YSI6W119fX19
|
79
|
+
http_version: null
|
80
|
+
recorded_at: Wed, 06 May 2020 23:02:53 GMT
|
81
|
+
recorded_with: VCR 5.1.0
|
@@ -0,0 +1,79 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.hackerone.com/v1/reports
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"data":{"type":"report","attributes":{"team_handle":"github","title":"hi","vulnerability_information":"hi","impact":"string","severity_rating":"invalid_severity","source":"api"}}}'
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Basic NOPE
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v1.0.1
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 400
|
23
|
+
message: Bad Request
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Wed, 06 May 2020 23:18:54 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- __cfduid=de6cf45714928bec4f073b32dab8dddec1588807134; expires=Fri, 05-Jun-20
|
35
|
+
23:18:54 GMT; path=/; Domain=api.hackerone.com; HttpOnly; SameSite=Lax; Secure
|
36
|
+
X-Request-Id:
|
37
|
+
- ef6a977c-7273-4682-86ac-97a6af3d8ba0
|
38
|
+
Cache-Control:
|
39
|
+
- no-cache
|
40
|
+
Strict-Transport-Security:
|
41
|
+
- max-age=31536000; includeSubDomains; preload
|
42
|
+
X-Frame-Options:
|
43
|
+
- DENY
|
44
|
+
X-Content-Type-Options:
|
45
|
+
- nosniff
|
46
|
+
X-Xss-Protection:
|
47
|
+
- 1; mode=block
|
48
|
+
X-Download-Options:
|
49
|
+
- noopen
|
50
|
+
X-Permitted-Cross-Domain-Policies:
|
51
|
+
- none
|
52
|
+
Referrer-Policy:
|
53
|
+
- strict-origin-when-cross-origin
|
54
|
+
Expect-Ct:
|
55
|
+
- enforce, max-age=86400
|
56
|
+
Content-Security-Policy:
|
57
|
+
- 'default-src ''none''; base-uri ''self''; block-all-mixed-content; child-src
|
58
|
+
www.youtube-nocookie.com; connect-src ''self'' www.google-analytics.com errors.hackerone.net;
|
59
|
+
font-src ''self''; form-action ''self''; frame-ancestors ''none''; img-src
|
60
|
+
''self'' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com
|
61
|
+
profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
62
|
+
media-src ''self'' hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
63
|
+
script-src ''self'' www.google-analytics.com; style-src ''self'' ''unsafe-inline'';
|
64
|
+
report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598'
|
65
|
+
Cf-Cache-Status:
|
66
|
+
- DYNAMIC
|
67
|
+
Server:
|
68
|
+
- cloudflare
|
69
|
+
Cf-Ray:
|
70
|
+
- 58f66c4e6cd3f56d-SEA
|
71
|
+
Cf-Request-Id:
|
72
|
+
- '028de204fe0000f56dae94e200000001'
|
73
|
+
body:
|
74
|
+
encoding: UTF-8
|
75
|
+
string: '{"errors":[{"status":400,"title":"Invalid Parameter","detail":"The
|
76
|
+
parameter ''severity_rating'' is invalid.","source":{"parameter":"severity_rating"}}]}'
|
77
|
+
http_version: null
|
78
|
+
recorded_at: Wed, 06 May 2020 23:18:54 GMT
|
79
|
+
recorded_with: VCR 5.1.0
|
@@ -0,0 +1,80 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.hackerone.com/v1/programs/18969/billing/balance
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Basic NOPE
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v0.17.3
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Fri, 12 Feb 2021 20:37:48 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- __cfduid=d64ff625fe5f42c2547caf518714b001c1613162268; expires=Sun, 14-Mar-21
|
35
|
+
20:37:48 GMT; path=/; Domain=api.hackerone.com; HttpOnly; SameSite=Lax; Secure
|
36
|
+
X-Request-Id:
|
37
|
+
- 49e5c329-cf7f-4723-9853-a47db4c6ef4d
|
38
|
+
Etag:
|
39
|
+
- W/"623ba11e90acdaa5bfcf60eb7743af10"
|
40
|
+
Cache-Control:
|
41
|
+
- max-age=0, private, must-revalidate
|
42
|
+
Strict-Transport-Security:
|
43
|
+
- max-age=31536000; includeSubDomains; preload
|
44
|
+
X-Frame-Options:
|
45
|
+
- DENY
|
46
|
+
X-Content-Type-Options:
|
47
|
+
- nosniff
|
48
|
+
X-Xss-Protection:
|
49
|
+
- 1; mode=block
|
50
|
+
X-Download-Options:
|
51
|
+
- noopen
|
52
|
+
X-Permitted-Cross-Domain-Policies:
|
53
|
+
- none
|
54
|
+
Referrer-Policy:
|
55
|
+
- strict-origin-when-cross-origin
|
56
|
+
Expect-Ct:
|
57
|
+
- enforce, max-age=86400
|
58
|
+
Content-Security-Policy:
|
59
|
+
- 'default-src ''none''; base-uri ''self''; block-all-mixed-content; child-src
|
60
|
+
www.youtube-nocookie.com; connect-src ''self'' www.google-analytics.com errors.hackerone.net;
|
61
|
+
font-src ''self''; form-action ''self''; frame-ancestors ''none''; img-src
|
62
|
+
''self'' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com
|
63
|
+
profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
64
|
+
media-src ''self'' hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
65
|
+
script-src ''self'' www.google-analytics.com; style-src ''self'' ''unsafe-inline'';
|
66
|
+
report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=374aea95847f4040a69f9c8d49a3a59d'
|
67
|
+
Cf-Cache-Status:
|
68
|
+
- DYNAMIC
|
69
|
+
Cf-Request-Id:
|
70
|
+
- '08398fde1c000027e4d90cd000000001'
|
71
|
+
Server:
|
72
|
+
- cloudflare
|
73
|
+
Cf-Ray:
|
74
|
+
- 62091c102ef927e4-SLC
|
75
|
+
body:
|
76
|
+
encoding: ASCII-8BIT
|
77
|
+
string: '{"data":{"id":"1894","type":"program-balance","attributes":{"balance":"118386.40"}}}'
|
78
|
+
http_version:
|
79
|
+
recorded_at: Fri, 12 Feb 2021 20:37:48 GMT
|
80
|
+
recorded_with: VCR 3.0.3
|
@@ -0,0 +1,156 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.hackerone.com/v1/reports/200/state_changes
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"data":{"type":"state-change","attributes":{"state":"resolved","message":""}}}'
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Basic NOPE=
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v1.0.1
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 201
|
23
|
+
message: Created
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Tue, 04 Aug 2020 20:22:57 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- __cfduid=d5217b52e915c7a8c7008d9acee5e37701596572577; expires=Thu, 03-Sep-20
|
35
|
+
20:22:57 GMT; path=/; Domain=api.hackerone.com; HttpOnly; SameSite=Lax; Secure
|
36
|
+
X-Request-Id:
|
37
|
+
- 2667dcb8-451b-4c3c-a3a0-c8a6571cf5ff
|
38
|
+
Etag:
|
39
|
+
- W/"90fc4eba1716b554d0709bafb6b998ed"
|
40
|
+
Cache-Control:
|
41
|
+
- max-age=0, private, must-revalidate
|
42
|
+
Strict-Transport-Security:
|
43
|
+
- max-age=31536000; includeSubDomains; preload
|
44
|
+
X-Frame-Options:
|
45
|
+
- DENY
|
46
|
+
X-Content-Type-Options:
|
47
|
+
- nosniff
|
48
|
+
X-Xss-Protection:
|
49
|
+
- 1; mode=block
|
50
|
+
X-Download-Options:
|
51
|
+
- noopen
|
52
|
+
X-Permitted-Cross-Domain-Policies:
|
53
|
+
- none
|
54
|
+
Referrer-Policy:
|
55
|
+
- strict-origin-when-cross-origin
|
56
|
+
Expect-Ct:
|
57
|
+
- enforce, max-age=86400
|
58
|
+
Content-Security-Policy:
|
59
|
+
- 'default-src ''none''; base-uri ''self''; block-all-mixed-content; child-src
|
60
|
+
www.youtube-nocookie.com; connect-src ''self'' www.google-analytics.com errors.hackerone.net;
|
61
|
+
font-src ''self''; form-action ''self''; frame-ancestors ''none''; img-src
|
62
|
+
''self'' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com
|
63
|
+
profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
64
|
+
media-src ''self'' hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
65
|
+
script-src ''self'' www.google-analytics.com; style-src ''self'' ''unsafe-inline'';
|
66
|
+
report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598'
|
67
|
+
Cf-Cache-Status:
|
68
|
+
- DYNAMIC
|
69
|
+
Cf-Request-Id:
|
70
|
+
- 045cbd44e40000934c0c8d6200000001
|
71
|
+
Server:
|
72
|
+
- cloudflare
|
73
|
+
Cf-Ray:
|
74
|
+
- 5bdafe4e3b7c934c-SJC
|
75
|
+
body:
|
76
|
+
encoding: ASCII-8BIT
|
77
|
+
string: !binary |-
|
78
|
+
eyJkYXRhIjp7ImlkIjoiMjAwIiwidHlwZSI6InJlcG9ydCIsImF0dHJpYnV0ZXMiOnsidGl0bGUiOiJ5YSIsInN0YXRlIjoicmVzb2x2ZWQiLCJjcmVhdGVkX2F0IjoiMjAyMC0wOC0wNFQxODozNDo0Mi44OTlaIiwidnVsbmVyYWJpbGl0eV9pbmZvcm1hdGlvbiI6ImFscmlnaHQgYWxyaWdodCBhbHJpZ2h0IGFscmlnaHRcblxuIyMgSW1wYWN0XG5cbmFscmlnaHQgYWxyaWdodCBhbHJpZ2h0IGFscmlnaHQiLCJ0cmlhZ2VkX2F0IjpudWxsLCJjbG9zZWRfYXQiOiIyMDIwLTA4LTA0VDIwOjIyOjU3LjIxN1oiLCJsYXN0X3JlcG9ydGVyX2FjdGl2aXR5X2F0IjoiMjAyMC0wOC0wNFQxODozNDo0My4wNjNaIiwiZmlyc3RfcHJvZ3JhbV9hY3Rpdml0eV9hdCI6IjIwMjAtMDgtMDRUMTg6MzQ6NDMuMDYzWiIsImxhc3RfcHJvZ3JhbV9hY3Rpdml0eV9hdCI6IjIwMjAtMDgtMDRUMjA6MjI6NTcuMjE3WiIsImJvdW50eV9hd2FyZGVkX2F0IjpudWxsLCJzd2FnX2F3YXJkZWRfYXQiOm51bGwsImRpc2Nsb3NlZF9hdCI6bnVsbCwicmVwb3J0ZXJfYWdyZWVkX29uX2dvaW5nX3B1YmxpY19hdCI6bnVsbCwibGFzdF9wdWJsaWNfYWN0aXZpdHlfYXQiOiIyMDIwLTA4LTA0VDIwOjIyOjU3LjIxN1oiLCJsYXN0X2FjdGl2aXR5X2F0IjoiMjAyMC0wOC0wNFQyMDoyMjo1Ny4yMTdaIiwiY3ZlX2lkcyI6W10sInNvdXJjZSI6bnVsbH0sInJlbGF0aW9uc2hpcHMiOnsicmVwb3J0ZXIiOnsiZGF0YSI6eyJpZCI6IjI5MTA3OSIsInR5cGUiOiJ1c2VyIiwiYXR0cmlidXRlcyI6eyJ1c2VybmFtZSI6InJ6aGFkZTMiLCJuYW1lIjoiUmFodWwgWmhhZGUiLCJkaXNhYmxlZCI6ZmFsc2UsImNyZWF0ZWRfYXQiOiIyMDE4LTA2LTEyVDE3OjQzOjQwLjg1MloiLCJwcm9maWxlX3BpY3R1cmUiOnsiNjJ4NjIiOiJodHRwczovL3Byb2ZpbGUtcGhvdG9zLmhhY2tlcm9uZS11c2VyLWNvbnRlbnQuY29tL3ZhcmlhbnRzLzAwMC8yOTEvMDc5L2I3OWMzYzM0MzEzMGJkNjMxMTMxZjY5MGUyZjA0YmMwZDFmZGU4YmZfb3JpZ2luYWwucG5nLzNhZmNiNWM4OTYyNDdlN2VlOGFkYTMxYjFjMWViODY1N2UyMjI0MWY5MTEwOTNhY2ZlNGVjN2U5N2EzYTk1OWEiLCI4Mng4MiI6Imh0dHBzOi8vcHJvZmlsZS1waG90b3MuaGFja2Vyb25lLXVzZXItY29udGVudC5jb20vdmFyaWFudHMvMDAwLzI5MS8wNzkvYjc5YzNjMzQzMTMwYmQ2MzExMzFmNjkwZTJmMDRiYzBkMWZkZThiZl9vcmlnaW5hbC5wbmcvZWIzMTgyM2E0Y2M5ZjZiNmJiNGRiOTMwZmZkZjUxMjUzMzkyOGE2OGE0MjU1ZmI1MGE4MzE4MDI4MWE2MGRhNSIsIjExMHgxMTAiOiJodHRwczovL3Byb2ZpbGUtcGhvdG9zLmhhY2tlcm9uZS11c2VyLWNvbnRlbnQuY29tL3ZhcmlhbnRzLzAwMC8yOTEvMDc5L2I3OWMzYzM0MzEzMGJkNjMxMTMxZjY5MGUyZjA0YmMwZDFmZGU4YmZfb3JpZ2luYWwucG5nLzY5MjIzN2ViOTY5MWZiZGU5MmExNzE3NGNkYjgwOWE3ODhhY2UwMmJjNzdjNzI4MDNmMTdkMzJiNDFlNGYyMTMiLCIyNjB4MjYwIjoiaHR0cHM6Ly9wcm9maWxlLXBob3Rvcy5oYWNrZXJvbmUtdXNlci1jb250ZW50LmNvbS92YXJpYW50cy8wMDAvMjkxLzA3OS9iNzljM2MzNDMxMzBiZDYzMTEzMWY2OTBlMmYwNGJjMGQxZmRlOGJmX29yaWdpbmFsLnBuZy9jZjFlNGI1ZDQ0MDA1Y2I2MWZhYjM1OGRkNjk2ODQxNWYyMDU0NWRlNWYwNTViYTRlZDMzY2E0Mzg3OTQ4Y2RjIn0sImJpbyI6IkFwcGxpY2F0aW9uIFNlY3VyaXR5IEBHaXRIdWIiLCJ3ZWJzaXRlIjoiaHR0cHM6Ly96aGFkZS5kZXYiLCJsb2NhdGlvbiI6IiIsImhhY2tlcm9uZV90cmlhZ2VyIjpmYWxzZX19fSwicHJvZ3JhbSI6eyJkYXRhIjp7ImlkIjoiMTE3NjciLCJ0eXBlIjoicHJvZ3JhbSIsImF0dHJpYnV0ZXMiOnsiaGFuZGxlIjoiZ2l0aHViLXRlc3QiLCJwb2xpY3kiOiIjIEdpdEh1YiBTZWN1cml0eSBCdWcgQm91bnR5XG5cblNvZnR3YXJlIHNlY3VyaXR5IHJlc2VhcmNoZXJzIGFyZSBpbmNyZWFzaW5nbHkgZW5nYWdpbmcgd2l0aCBJbnRlcm5ldCBjb21wYW5pZXMgdG8gaHVudCBkb3duIHZ1bG5lcmFiaWxpdGllcy4gT3VyIGJvdW50eSBwcm9ncmFtIGdpdmVzIGEgdGlwIG9mIHRoZSBoYXQgdG8gdGhlc2UgcmVzZWFyY2hlcnMgYW5kIHByb3ZpZGVzIHJld2FyZHMgb2YgICQzMCwwMDAgb3IgbW9yZSBmb3IgY3JpdGljYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbllvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIGluIG91ciBbcnVsZXNdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vI3J1bGVzKSwgW3Njb3BlXShodHRwczovL2JvdW50eS5naXRodWIuY29tLyNzY29wZSksIFt0YXJnZXRzXShodHRwczovL2JvdW50eS5naXRodWIuY29tLyN0YXJnZXRzKSwgYW5kIFtGQVFdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vI2ZhcXMpIHNlY3Rpb25zLiBZb3UgY2FuIGFsc28gY2hlY2sgdGhlIGN1cnJlbnQgcmFua2luZ3Mgb24gdGhlIFtsZWFkZXJib2FyZF0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS8jbGVhZGVyYm9hcmQpLlxuXG5IYXBweSBoYWNraW5nIVxuXG5cbiMjIFJ1bGVzXG5cbiMjIyBCZWZvcmUgeW91IHN0YXJ0XG5cbiogQ2hlY2sgdGhlIGxpc3Qgb2YgYnVncyB0aGF0IGhhdmUgYmVlbiBbY2xhc3NpZmllZCBhcyBpbmVsaWdpYmxlXShodHRwczovL2JvdW50eS5naXRodWIuY29tL2luZWxpZ2libGUuaHRtbCkuIFN1Ym1pc3Npb25zIHdoaWNoIGFyZSBpbmVsaWdpYmxlIHdpbGwgbGlrZWx5IGJlIGNsb3NlZCBhcyBgTm90IEFwcGxpY2FibGVgLlxuKiBDaGVjayB0aGUgW0dpdEh1YiBDaGFuZ2Vsb2ddKGh0dHBzOi8vZ2l0aHViLmJsb2cvY2hhbmdlbG9nLykgZm9yIHJlY2VudGx5IGxhdW5jaGVkIGZlYXR1cmVzLlxuKiBOZXZlciBhdHRlbXB0IG5vbi10ZWNobmljYWwgYXR0YWNrcyBzdWNoIGFzIHNvY2lhbCBlbmdpbmVlcmluZywgcGhpc2hpbmcsIG9yIHBoeXNpY2FsIGF0dGFja3MgYWdhaW5zdCBvdXIgZW1wbG95ZWVzLCB1c2Vycywgb3IgaW5mcmFzdHJ1Y3R1cmUuXG4qIFdoZW4gaW4gZG91YnQsIGNvbnRhY3QgdXMgYXQgYGJvdW50eUBnaXRodWIuY29tYC5cbiogQnkgcGFydGljaXBhdGluZyBpbiBHaXRIdWIncyBCdWcgQm91bnR5IHByb2dyYW0gKHRoZSBcIlByb2dyYW1cIiksIHlvdSBhY2tub3dsZWRnZSB0aGF0IHlvdSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIEdpdEh1YidzIFtUZXJtcyBvZiBTZXJ2aWNlXShodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy9naXRodWItdGVybXMtb2Ytc2VydmljZSkgYXMgd2VsbCBhcyB0aGUgZm9sbG93aW5nOlxuXG4gICogeW91J3JlIG5vdCBwYXJ0aWNpcGF0aW5nIGZyb20gYSBjb3VudHJ5IGFnYWluc3Qgd2hpY2ggdGhlIFVuaXRlZCBTdGF0ZXMgaGFzIGlzc3VlZCBleHBvcnQgc2FuY3Rpb25zIG9yIG90aGVyIHRyYWRlIHJlc3RyaWN0aW9ucywgaW5jbHVkaW5nIEN1YmEsIElyYW4sIE5vcnRoIEtvcmVhLCBTdWRhbiwgYW5kIFN5cmlhLlxuXG4gICogeW91ciBwYXJ0aWNpcGF0aW9uIGluIHRoZSBQcm9ncmFtIHdpbGwgbm90IHZpb2xhdGUgYW55IGxhdyBhcHBsaWNhYmxlIHRvIHlvdSwgb3IgZGlzcnVwdCBvciBjb21wcm9taXNlIGFueSBkYXRhIHRoYXQgaXMgbm90IHlvdXIgb3duLlxuXG4gICogeW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBhcHBsaWNhYmxlIHRheGVzLCB3aXRoaG9sZGluZyBvciBvdGhlcndpc2UsIGFyaXNpbmcgZnJvbSBvciByZWxhdGluZyB0byB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIFByb2dyYW0sIGluY2x1ZGluZyBmcm9tIGFueSBib3VudHkgcGF5bWVudHMuXG5cbiAgKiBHaXRIdWIgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHRlcm1pbmF0ZSBvciBkaXNjb250aW51ZSB0aGUgUHJvZ3JhbSBhdCBpdHMgZGlzY3JldGlvbi5cblxuICAqIE9ubHkgdGVzdCBmb3IgdnVsbmVyYWJpbGl0aWVzIG9uIHNpdGVzIHlvdSBrbm93IHRvIGJlIG9wZXJhdGVkIGJ5IEdpdEh1YiBhbmQgYXJlIFtpbi1zY29wZV0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbSNzY29wZSkuIFNvbWUgc2l0ZXMgaG9zdGVkIG9uIHN1YmRvbWFpbnMgb2YgYEdpdEh1Yi5jb21gIGFyZSBvcGVyYXRlZCBieSB0aGlyZCBwYXJ0aWVzIGFuZCBzaG91bGQgbm90IGJlIHRlc3RlZC5cblxuXG4jIyMgTGVnYWwgc2FmZSBoYXJib3JcblxuWW91ciByZXNlYXJjaCBpcyBjb3ZlcmVkIGJ5IHRoZSBbR2l0SHViIEJ1ZyBCb3VudHkgUHJvZ3JhbSBMZWdhbCBTYWZlIEhhcmJvcl0oaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vYXJ0aWNsZXMvZ2l0aHViLWJ1Zy1ib3VudHktcHJvZ3JhbS1sZWdhbC1zYWZlLWhhcmJvci8pIHBvbGljeS4gSW4gc3VtbWFyeTpcbiogV2UgY29uc2lkZXIgc2VjdXJpdHkgcmVzZWFyY2ggYW5kIHZ1bG5lcmFiaWxpdHkgZGlzY2xvc3VyZSBhY3Rpdml0aWVzIGNvbmR1Y3RlZCBjb25zaXN0ZW50IHdpdGggdGhpcyBwb2xpY3kgYXMg4oCcYXV0aG9yaXplZOKAnSBjb25kdWN0IHVuZGVyIHRoZSBDb21wdXRlciBGcmF1ZCBhbmQgQWJ1c2UgQWN0LCB0aGUgRE1DQSwgYW5kIG90aGVyIGFwcGxpY2FibGUgY29tcHV0ZXIgdXNlIGxhd3Mgc3VjaCBhcyBDYWwuIFBlbmFsIENvZGUgNTAyKGMpLiBXZSB3YWl2ZSBhbnkgcG90ZW50aWFsIERNQ0EgY2xhaW0gYWdhaW5zdCB5b3UgZm9yIGNpcmN1bXZlbnRpbmcgdGhlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgd2UgaGF2ZSB1c2VkIHRvIHByb3RlY3QgdGhlIGFwcGxpY2F0aW9ucyBpbiB0aGlzIGJ1ZyBib3VudHkgcHJvZ3JhbSdzIHNjb3BlLlxuKiBXZSB3YW50IHlvdSB0byByZXNwb25zaWJseSBkaXNjbG9zZSB0aHJvdWdoIG91ciBidWcgYm91bnR5IHByb2dyYW0sIGFuZCBkb24ndCB3YW50IHJlc2VhcmNoZXJzIHB1dCBpbiBmZWFyIG9mIGxlZ2FsIGNvbnNlcXVlbmNlcyBiZWNhdXNlIG9mIHRoZWlyIGdvb2QgZmFpdGggYXR0ZW1wdHMgdG8gY29tcGx5IHdpdGggb3VyIGJ1ZyBib3VudHkgcG9saWN5LiBXZSBjYW5ub3QgYmluZCBhbnkgdGhpcmQgcGFydHksIHNvIGRvIG5vdCBhc3N1bWUgdGhpcyBwcm90ZWN0aW9uIGV4dGVuZHMgdG8gYW55IHRoaXJkIHBhcnR5LiBJZiBpbiBkb3VidCwgYXNrIHVzIGJlZm9yZSBlbmdhZ2luZyBpbiBhbnkgc3BlY2lmaWMgYWN0aW9uIHlvdSB0aGluayBtaWdodCBnbyBvdXRzaWRlIHRoZSBib3VuZHMgb2Ygb3VyIHBvbGljeS5cbiogQmVjYXVzZSBib3RoIGlkZW50aWZ5aW5nIGFuZCBub24taWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gY2FuIHB1dCBhIHJlc2VhcmNoZXIgYXQgcmlzaywgd2UgbGltaXQgd2hhdCB3ZSBzaGFyZSB3aXRoIHRoaXJkIHBhcnRpZXMuIFdlIG1heSBwcm92aWRlIG5vbi1pZGVudGlmeWluZyBzdWJzdGFudGl2ZSBpbmZvcm1hdGlvbiBmcm9tIHlvdXIgcmVwb3J0IHRvIGFuIGFmZmVjdGVkIHRoaXJkIHBhcnR5LCBidXQgb25seSBhZnRlciBub3RpZnlpbmcgeW91IGFuZCByZWNlaXZpbmcgYSBjb21taXRtZW50IHRoYXQgdGhlIHRoaXJkIHBhcnR5IHdpbGwgbm90IHB1cnN1ZSBsZWdhbCBhY3Rpb24gYWdhaW5zdCB5b3UuIFdlIHdpbGwgb25seSBzaGFyZSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiAobmFtZSwgZW1haWwgYWRkcmVzcywgcGhvbmUgbnVtYmVyLCBldGMuKSB3aXRoIGEgdGhpcmQgcGFydHkgaWYgeW91IGdpdmUgeW91ciB3cml0dGVuIHBlcm1pc3Npb24uXG4qIElmIHlvdXIgc2VjdXJpdHkgcmVzZWFyY2ggYXMgcGFydCBvZiB0aGUgYnVnIGJvdW50eSBwcm9ncmFtIHZpb2xhdGVzIGNlcnRhaW4gcmVzdHJpY3Rpb25zIGluIG91ciBzaXRlIHBvbGljaWVzLCB0aGUgc2FmZSBoYXJib3IgdGVybXMgcGVybWl0IGEgbGltaXRlZCBleGVtcHRpb24uXG5cblxuIyMjIFBlcmZvcm1pbmcgeW91ciByZXNlYXJjaFxuXG4qIERvIG5vdCBpbXBhY3Qgb3RoZXIgdXNlcnMgd2l0aCB5b3VyIHRlc3RpbmcsIHRoaXMgaW5jbHVkZXMgdGVzdGluZyB2dWxuZXJhYmlsaXRpZXMgaW4gcmVwb3NpdG9yaWVzIG9yIG9yZ2FuaXphdGlvbnMgeW91IGRvIG5vdCBvd24uIElmIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBmaW5kIGFuIGF1dGhvcml6YXRpb24gYnlwYXNzLCB5b3UgbXVzdCB1c2UgYWNjb3VudHMgeW91IG93bi5cbiogVGhlIGZvbGxvd2luZyBhcmUgKipuZXZlcioqIGFsbG93ZWQgYW5kIGFyZSBpbmVsaWdpYmxlIGZvciByZXdhcmQuIFdlIG1heSBzdXNwZW5kIHlvdXIgR2l0SHViIGFjY291bnQgYW5kIGJhbiB5b3VyIElQIGFkZHJlc3MgZm9yOlxuXG4gICogUGVyZm9ybWluZyBkaXN0cmlidXRlZCBkZW5pYWwgb2Ygc2VydmljZSAoRERvUykgb3Igb3RoZXIgdm9sdW1ldHJpYyBhdHRhY2tzXG4gICogU3BhbW1pbmcgY29udGVudFxuICAqIExhcmdlLXNjYWxlIHZ1bG5lcmFiaWxpdHkgc2Nhbm5lcnMsIHNjcmFwZXJzLCBvciBhdXRvbWF0ZWQgdG9vbHMgd2hpY2ggcHJvZHVjZSBleGNlc3NpdmUgYW1vdW50cyBvZiB0cmFmZmljLlxuICAgICogTm90ZTogV2UgX2RvXyBhbGxvdyB0aGUgdXNlIG9mIGF1dG9tYXRlZCB0b29scyBzbyBsb25nIGFzIHRoZXkgZG8gbm90IHByb2R1Y2UgZXhjZXNzaXZlIGFtb3VudHMgb2YgdHJhZmZpYy4gRm9yIGV4YW1wbGUsIHJ1bm5pbmcgb25lIGBubWFwYCBzY2FuIGFnYWluc3Qgb25lIGhvc3QgaXMgYWxsb3dlZCwgYnV0IHNlbmRpbmcgNjUsMDAwIHJlcXVlc3RzIGluIHR3byBtaW51dGVzIHVzaW5nIEJ1cnAgU3VpdGUgSW50cnVkZXIgaXMgZXhjZXNzaXZlLlxuKiBSZXNlYXJjaGluZyBkZW5pYWwtb2Ytc2VydmljZSBhdHRhY2tzIGlzIGFsbG93ZWQgYW5kIGVsaWdpYmxlIGZvciByZXdhcmRzIG9ubHkgaWYgeW91IGZvbGxvdyB0aGVzZSBydWxlczpcblxuICAqIFJlc2VhcmNoICoqbXVzdCoqIGJlIHBlcmZvcm1lZCBpbiBvcmdhbml6YXRpb25zIG9yIHJlcG9zaXRvcmllcyB5b3Ugb3duXG4gICogU3RvcCAqKmltbWVkaWF0ZWx5KiogaWYgeW91IGJlbGlldmUgeW91IGhhdmUgYWZmZWN0ZWQgdGhlIGF2YWlsYWJpbGl0eSBvZiBvdXIgc2VydmljZXMuIERvbid0IHdvcnJ5IGFib3V0IGRlbW9uc3RyYXRpbmcgdGhlIGZ1bGwgaW1wYWN0IG9mIHlvdXIgdnVsbmVyYWJpbGl0eSwgR2l0SHViJ3Mgc2VjdXJpdHkgdGVhbSB3aWxsIGJlIGFibGUgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3QuXG4gICogVGhlcmUgYXJlIG5vIGxpbWl0cyBmb3IgcmVzZWFyY2hpbmcgZGVuaWFsIG9mIHNlcnZpY2UgdnVsbmVyYWJpbGl0aWVzIGFnYWluc3QgeW91ciBvd24gaW5zdGFuY2Ugb2YgW0dpdEh1YiBFbnRlcnByaXNlIFNlcnZlcl0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS90YXJnZXRzL2dpdGh1Yi1lbnRlcnByaXNlLXNlcnZlci5odG1sKVxuXG5cbiMjIyBIYW5kbGluZyBwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiAoUElJKVxuXG4qIFBlcnNvbmFsbHkgaWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gKFBJSSkgaW5jbHVkZXM6XG4gICogbGVnYWwgYW5kL29yIGZ1bGwgbmFtZXNcbiAgKiBuYW1lcyBvciB1c2VybmFtZXMgY29tYmluZWQgd2l0aCBvdGhlciBpZGVudGlmaWVycyBsaWtlIHBob25lIG51bWJlcnMgb3IgZW1haWwgYWRkcmVzc2VzXG4gICogaGVhbHRoIG9yIGZpbmFuY2lhbCBpbmZvcm1hdGlvbiAoaW5jbHVkaW5nIGluc3VyYW5jZSBpbmZvcm1hdGlvbiwgc29jaWFsIHNlY3VyaXR5IG51bWJlcnMsIGV0Yy4pXG4gICogaW5mb3JtYXRpb24gYWJvdXQgcG9saXRpY2FsIG9yIHJlbGlnaW91cyBhZmZpbGlhdGlvbnNcbiAgKiBpbmZvcm1hdGlvbiBhYm91dCByYWNlLCBldGhuaWNpdHksIHNleHVhbCBvcmllbnRhdGlvbiwgZ2VuZGVyLCBvciBvdGhlciBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlIHVzZWQgZm9yIGRpc2NyaW1pbmF0b3J5IHB1cnBvc2VzXG4qIERvIG5vdCBpbnRlbnRpb25hbGx5IGFjY2VzcyBvdGhlcnMnIFBJSS4gSWYgeW91IHN1c3BlY3QgYSBzZXJ2aWNlIHByb3ZpZGVzIGFjY2VzcyB0byBQSUksIGxpbWl0IHF1ZXJpZXMgdG8geW91ciBvd24gcGVyc29uYWwgaW5mb3JtYXRpb24uXG4qIFJlcG9ydCB0aGUgdnVsbmVyYWJpbGl0eSAqaW1tZWRpYXRlbHkqIGFuZCBkbyBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgYW55IG90aGVyIGRhdGEuIFRoZSBHaXRIdWIgU2VjdXJpdHkgdGVhbSB3aWxsIGFzc2VzcyB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiB0aGUgUElJIGV4cG9zdXJlLlxuKiBMaW1pdCB0aGUgYW1vdW50IG9mIGRhdGEgcmV0dXJuZWQgZnJvbSBzZXJ2aWNlcy4gRm9yIFNRTCBpbmplY3Rpb24sIGZvciBleGFtcGxlLCBsaW1pdCB0aGUgbnVtYmVyIG9mIHJvd3MgcmV0dXJuZWRcbiogWW91IG11c3QgZGVsZXRlIGFsbCB5b3VyIGxvY2FsLCBzdG9yZWQsIG9yIGNhY2hlZCBjb3BpZXMgb2YgZGF0YSBjb250YWluaW5nIFBJSSBhcyBzb29uIGFzIHBvc3NpYmxlLiBXZSBtYXkgYXNrIHlvdSB0byBzaWduIGEgY2VydGlmaWNhdGUgb2YgZGVsZXRpb24gYW5kIGNvbmZpZGVudGlhbGl0eSBhZ3JlZW1lbnQgcmVnYXJkaW5nIHRoZSBleGFjdCBpbmZvcm1hdGlvbiB5b3UgYWNjZXNzZWQuIFRoaXMgYWdyZWVtZW50IHdpbGwgbm90IGFmZmVjdCB5b3VyIGJvdW50eSByZXdhcmQuXG4qIFdlIG1heSBhc2sgeW91IGZvciB0aGUgdXNlcm5hbWVzIGFuZCBJUCBhZGRyZXNzZXMgdXNlZCBkdXJpbmcgeW91ciB0ZXN0aW5nIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZSB2dWxuZXJhYmlsaXR5XG5cblxuIyMjIFJlcG9ydGluZyB5b3VyIHZ1bG5lcmFiaWxpdHlcblxuKiBTdWJtaXNzaW9ucyBtdXN0IGluY2x1ZGUgd3JpdHRlbiBpbnN0cnVjdGlvbnMgZm9yIHJlcHJvZHVjaW5nIHRoZSB2dWxuZXJhYmlsaXR5LiBTdWJtaXNzaW9ucyB3aXRob3V0IGNsZWFyIHJlcHJvZHVjdGlvbiBzdGVwcyBvciB3aGljaCBvbmx5IGluY2x1ZGUgcmVwcm9kdWN0aW9uIHN0ZXBzIGluIHZpZGVvIGZvcm0gbWF5IGJlIGluZWxpZ2libGUgZm9yIGEgcmV3YXJkLlxuKiBXaGVuIHJlcG9ydGluZyB2dWxuZXJhYmlsaXRpZXMgeW91IG11c3Qga2VlcCBhbGwgaW5mb3JtYXRpb24gb24gSGFja2VyT25lLiBEbyBub3QgcG9zdCBpbmZvcm1hdGlvbiB0byB2aWRlby1zaGFyaW5nIG9yIHBhc3RlYmluIHNpdGVzLiBWaWRlb3MgYW5kIGltYWdlcyBjYW4gYmUgdXBsb2FkZWQgZGlyZWN0bHkgdmlhIEhhY2tlck9uZS5cbiogRm9yIHZ1bG5lcmFiaWxpdGllcyBpbnZvbHZpbmcgcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24sIHBsZWFzZSBleHBsYWluIHRoZSBraW5kIG9mIFBJSSB5b3UgYmVsaWV2ZSBpcyBleHBvc2VkIGFuZCBsaW1pdCB0aGUgYW1vdW50IG9mIFBJSSBkYXRhIGluY2x1ZGVkIGluIHlvdXIgc3VibWlzc2lvbnMuIEZvciB0ZXh0dWFsIGluZm9ybWF0aW9uIGFuZCBzY3JlZW5zaG90cywgcGxlYXNlIG9ubHkgaW5jbHVkZSByZWRhY3RlZCBkYXRhIGluIHlvdXIgc3VibWlzc2lvbi5cbiogRG8gbm90IHB1YmxpY2x5IGRpc2Nsb3NlIHlvdXIgc3VibWlzc2lvbiB1bnRpbCBHaXRIdWIgaGFzIGV2YWx1YXRlZCB0aGUgaW1wYWN0LlxuXG5cbiMjIyBSZWNlaXZpbmcgeW91ciBhd2FyZFxuXG4qIEFsbCByZXdhcmQgYW1vdW50cyBhcmUgZGV0ZXJtaW5lZCBieSBvdXIgW3NldmVyaXR5IGd1aWRlbGluZXNdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vI3NldmVyaXR5LWd1aWRlbGluZXMpLlxuKiBXaGVuIGR1cGxpY2F0ZXMgb2NjdXIsIHdlIG9ubHkgYXdhcmQgdGhlIGZpcnN0IHJlcG9ydCB0aGF0IHdhcyByZWNlaXZlZCAocHJvdmlkZWQgdGhhdCBpdCBjYW4gYmUgZnVsbHkgcmVwcm9kdWNlZCkuXG4qIFlvdSBhcmUgZnJlZSB0byBwdWJsaXNoIHdyaXRlLXVwcyBhYm91dCB5b3VyIHZ1bG5lcmFiaWxpdHkgYW5kIEdpdEh1YiB3aWxsIG5vdCBsaW1pdCB3aGF0IHlvdSB3cml0ZS4gV2UgbWF5IHBheSBvdXQgeW91ciByZXdhcmQgYmVmb3JlIHRoZSB2dWxuZXJhYmlsaXR5IGlzIHBhdGNoZWQgc28gd2UgbWF5IGFzayB0aGF0IHlvdSBkZWxheSBwdWJsaXNoaW5nIHRvIGtlZXAgb3RoZXIgR2l0SHViIHVzZXJzIHNhZmUuXG4qIE1lZGl1bSwgaGlnaCwgYW5kIGNyaXRpY2FsIHNldmVyaXR5IGlzc3VlcyB3aWxsIGJlIHdyaXR0ZW4gdXAgb24gdGhlIEdpdEh1YiBCdWcgQm91bnR5IHNpdGUgYW5kIGluY2x1ZGVkIGluIG91ciBsZWFkZXJib2FyZC4gV2UgZG9uJ3QgY3VycmVudGx5IHBvc3Qgd3JpdGUtdXBzIGZvciBsb3cgc2V2ZXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuKiBHaXRIdWIgaXMgYSBDVkUgTnVtYmVyaW5nIEF1dGhvcml0eSAoQ05BKSBmb3IgR2l0SHViIEVudGVycHJpc2UgU2VydmVyLiBFbGlnaWJsZSBCdWcgQm91bnR5IHN1Ym1pc3Npb25zIHRoYXQgYWZmZWN0IEdpdEh1YiBFbnRlcnByaXNlIFNlcnZlciBtYXkgYmUgYXNzaWduZWQgQ1ZFcy4gVGhlc2UgQ1ZFcyB3aWxsIGJlIHNoYXJlZCB3aXRoIHN1Ym1pdHRlcnMgdmlhIEhhY2tlck9uZSwgaW5jbHVkZWQgaW4gW2JvdW50eSB3cml0ZS11cHNdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vYm91bnR5LWh1bnRlcnMuaHRtbCkgYW5kIGxpc3RlZCBpbiB0aGUgR2l0SHViIEVudGVycHJpc2UgU2VydmVyIFtyZWxlYXNlIG5vdGVzXShodHRwczovL2VudGVycHJpc2UuZ2l0aHViLmNvbS9yZWxlYXNlcykuXG4qIFlvdSBtYXkgcHJlZmVyIHRoZSByZXdhcmQgZ28gdG93YXJkIGhlbHBpbmcgb3RoZXJzLiBJZiB5b3UgY2hvb3NlIHRvIGRvIHNvLCBHaXRIdWIgd2lsbCBkb25hdGUgeW91ciByZXdhcmQgdG8gYW4gZXN0YWJsaXNoZWQgNTAxKGMpKDMpIGNoYXJpdGFibGUgb3JnYW5pemF0aW9uIG9mIHlvdXIgY2hvaWNlLiBHaXRIdWIgd2lsbCBhbHNvIG1hdGNoIHlvdXIgZG9uYXRpb24gLSBzdWJqZWN0IHRvIG91ciBkaXNjcmV0aW9uLiBBbnkgcmV3YXJkcyB0aGF0IGdvIHVuY2xhaW1lZCBhZnRlciAxMiBtb250aHMgd2lsbCBiZSBkb25hdGVkIHRvIGEgY2hhcml0eSBvZiBHaXRIdWIncyBjaG9vc2luZy5cblxuXG4jIyBTY29wZVxuXG5HaXRIdWIgcnVucyBhIG51bWJlciBvZiBzZXJ2aWNlcyBidXQgb25seSBzdWJtaXNzaW9ucyB1bmRlciB0aGUgZm9sbG93aW5nIGRvbWFpbnMgYXJlIGVsaWdpYmxlIGZvciByZXdhcmRzLiBBbnkgR2l0SHViLW93bmVkIGRvbWFpbnMgbm90IGxpc3RlZCBiZWxvdyBhcmUgKm5vdCogaW4tc2NvcGUsICpub3QqIGVsaWdpYmxlIGZvciByZXdhcmRzIGFuZCAqbm90KiBjb3ZlcmVkIGJ5IG91ciBbbGVnYWwgc2FmZSBoYXJib3JdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20jbGVnYWxfc2FmZV9oYXJib3IpLlxuXG5cbiMjIyBnaXRodWIuY29tXG5cbk91ciBtYWluIGRvbWFpbiBob3N0aW5nIHVzZXItZmFjaW5nIEdpdEh1YiBzZXJ2aWNlcy4uIEFsbCBzdWJkb21haW5zIHVuZGVyIGBnaXRodWIuY29tYCBhcmUgaW4tc2NvcGUgKmV4Y2VwdCo6XG4qIGBibG9nLmdpdGh1Yi5jb21gXG4qIGBjb21tdW5pdHkuZ2l0aHViLmNvbWBcbiogYGVtYWlsLmVudGVycHJpc2UuZ2l0aHViLmNvbWBcbiogYGVtYWlsLmZpbmFuY2UuZ2l0aHViLmNvbWBcbiogYGVtYWlsLnN0YWdpbmcuZmluYW5jZS5naXRodWIuY29tYFxuKiBgZW1haWwuc3VwcG9ydC5naXRodWIuY29tYFxuKiBgZW1haWwudmVyaWZ5LmdpdGh1Yi5jb21gXG4qIGBnb29nbGU3NjUwZGNmNjE0NmYwNGQ4LmdpdGh1Yi5jb21gXG4qIGBrMS5fZG9tYWlua2V5LmdpdGh1Yi5jb21gXG4qIGBrMS5fZG9tYWlua2V5Lm1jbWFpbC5naXRodWIuY29tYFxuKiBgbWNtYWlsLmdpdGh1Yi5jb21gXG4qIGByZXNvdXJjZXMuZ2l0aHViLmNvbWBcbiogYCoucmVzb3VyY2VzLmdpdGh1Yi5jb21gXG4qIGBzZ21haWwuZ2l0aHViLmNvbWBcbiogYCouc2dtYWlsLmdpdGh1Yi5jb21gXG4qIGBzaG9wLmdpdGh1Yi5jb21gXG4qIGBzbXRwLmdpdGh1Yi5jb21gXG4qIGAqLnNtdHAuZ2l0aHViLmNvbWBcbiogYHN1cHBvcnQuZ2l0aHViLmNvbWBcblxuIyMjIGdpdGh1YmFzc2V0cy5jb21cblxuT3VyIGRvbWFpbiBmb3IgaG9zdGluZyBzdGF0aWMgYXNzZXRzLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1YmFzc2V0cy5jb21gIGFyZSBpbi1zY29wZVxuXG4jIyMgZ2l0aHVidXNlcmNvbnRlbnQuY29tXG5cbk91ciBkb21haW4gZm9yIGhvc3RpbmcgYW5kIHJlbmRlcmluZyB1c2VycycgZGF0YS4uIEFsbCBzdWJkb21haW5zIHVuZGVyIGBnaXRodWJ1c2VyY29udGVudC5jb21gIGFyZSBpbi1zY29wZVxuXG4jIyMgZ2l0aHViYXBwLmNvbVxuXG5PdXIgZG9tYWluIGZvciBob3N0aW5nIGVtcGxveWVlLWZhY2luZyBzZXJ2aWNlcy4uIEFsbCBzdWJkb21haW5zIHVuZGVyIGBnaXRodWJhcHAuY29tYCBhcmUgaW4tc2NvcGUgKmV4Y2VwdCo6XG4qIGBhdG9tLWlvLmdpdGh1YmFwcC5jb21gXG4qIGBhdG9tLWlvLXN0YWdpbmcuZ2l0aHViYXBwLmNvbWBcbiogYGVtYWlsLmVudGVycHJpc2Utc3RhZ2luZy5naXRodWJhcHAuY29tYFxuKiBgZW1haWwuaGF5c3RhY2suZ2l0aHViYXBwLmNvbWBcbiogYHJlcGx5LmdpdGh1YmFwcC5jb21gXG5cbiMjIyBnaXRodWIubmV0XG5cbk91ciBkb21haW4gZm9yIGhvc3RpbmcgR2l0SHViJ3MgaW50ZXJuYWwgcHJvZHVjdGlvbiBzZXJ2aWNlcy4gTWFueSBvZiB0aGVzZSBzZXJ2aWNlcyBhcmUgbm90IGFjY2Vzc2libGUgZnJvbSBvdXRzaWRlIG91ciBpbnRlcm5hbCBuZXR3b3JrLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1Yi5uZXRgIGFyZSBpbi1zY29wZVxuXG4jIyMgc2VtbWxlLmNvbVxuXG5PdXIgbWFpbiBkb21haW4gZm9yIFNlbW1sZSBhbmQgTEdUTSBzZXJ2aWNlcy4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYHNlbW1sZS5jb21gIGFyZSBpbi1zY29wZSAqZXhjZXB0KjpcbiogYGRldi5zZW1tbGUuY29tYFxuKiBgZ2l0LnNlbW1sZS5jb21gXG4qIGBqaXJhLnNlbW1sZS5jb21gXG4qIGB3aWtpLnNlbW1sZS5jb21gXG5cbiMjIyBzZW1tbGUubmV0XG5cbk91ciBkb21haW4gZm9yIG5vbi1wcm9kdWN0aW9uIFNlbW1sZSBzZXJ2aWNlcy4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYHNlbW1sZS5uZXRgIGFyZSBpbi1zY29wZVxuXG4jIyMgZG93bmxvYWRzLmxndG0uY29tXG5cbk91ciBkb21haW4gZm9yIHNlcnZpbmcgTEdUTSBkb3dubG9hZHMuLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgZG93bmxvYWRzLmxndG0uY29tYCBhcmUgaW4tc2NvcGVcblxuIyMjIGxndG0tY29tLnBlbnRlc3Rpbmcuc2VtbWxlLm5ldFxuXG5BbiBpbnN0YW5jZSBvZiBbTEdUTV0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS90YXJnZXRzL2xndG0uaHRtbCkgZXNwZWNpYWxseSBmb3IgQnVnIEJvdW50eSByZXNlYXJjaC4uIEFsbCBzdWJkb21haW5zIHVuZGVyIGBsZ3RtLWNvbS5wZW50ZXN0aW5nLnNlbW1sZS5uZXRgIGFyZSBpbi1zY29wZVxuXG4jIyMgYmFja2VuZC1kb3QtbGd0bS1wZW5ldHJhdGlvbi10ZXN0aW5nLmFwcHNwb3QuY29tXG5cbkFuIGluc3RhbmNlIG9mIFtMR1RNXShodHRwczovL2JvdW50eS5naXRodWIuY29tL3RhcmdldHMvbGd0bS5odG1sKSdzIGJhY2tlbmQgdXNlZCBmb3IgdHJpZ2dlcmluZyBhdXRvbWF0ZWQgdGFza3MuLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgYmFja2VuZC1kb3QtbGd0bS1wZW5ldHJhdGlvbi10ZXN0aW5nLmFwcHNwb3QuY29tYCBhcmUgaW4tc2NvcGVcblxuIyMgU2V2ZXJpdHkgR3VpZGVsaW5lc1xuXG5BbGwgYm91bnR5IHN1Ym1pc3Npb25zIGFyZSByYXRlZCBieSBHaXRIdWIgdXNpbmcgYSBwdXJwb3NlZnVsbHkgc2ltcGxlIHNjYWxlLiBFYWNoIHZ1bG5lcmFiaWxpdHkgaXMgdW5pcXVlIGJ1dCB0aGUgZm9sbG93aW5nIGlzIGEgcm91Z2ggZ3VpZGVsaW5lIHdlIHVzZSBpbnRlcm5hbGx5IGZvciByYXRpbmcgYW5kIHJld2FyZGluZyBzdWJtaXNzaW9uczpcblxuXG4jIyMgQ3JpdGljYWw6ICQyMCwwMDAgLSAkMzAsMDAwXG5cbkNyaXRpY2FsIHNldmVyaXR5IGlzc3VlcyBwcmVzZW50IGEgZGlyZWN0IGFuZCBpbW1lZGlhdGUgcmlzayB0byBhIGJyb2FkIGFycmF5IG9mIG91ciB1c2VycyBvciB0byBHaXRIdWIgaXRzZWxmLiBUaGV5IG9mdGVuIGFmZmVjdCByZWxhdGl2ZWx5IGxvdy1sZXZlbC9mb3VuZGF0aW9uYWwgY29tcG9uZW50cyBpbiBvbmUgb2Ygb3VyIGFwcGxpY2F0aW9uIHN0YWNrcyBvciBpbmZyYXN0cnVjdHVyZS4gRm9yIGV4YW1wbGU6XG4qIGFyYml0cmFyeSBjb2RlL2NvbW1hbmQgZXhlY3V0aW9uIG9uIGEgR2l0SHViIHNlcnZlciBpbiBvdXIgcHJvZHVjdGlvbiBuZXR3b3JrLlxuKiBhcmJpdHJhcnkgU1FMIHF1ZXJpZXMgb24gdGhlIEdpdEh1YiBwcm9kdWN0aW9uIGRhdGFiYXNlLlxuKiBieXBhc3NpbmcgdGhlIEdpdEh1YiBsb2dpbiBwcm9jZXNzLCBlaXRoZXIgcGFzc3dvcmQgb3IgMkZBLlxuKiBhY2Nlc3MgdG8gc2Vuc2l0aXZlIHByb2R1Y3Rpb24gdXNlciBkYXRhIG9yIGFjY2VzcyB0byBpbnRlcm5hbCBwcm9kdWN0aW9uIHN5c3RlbXMuXG4qIGFjY2Vzc2luZyBhbm90aGVyIHVzZXIncyBkYXRhIGluIHRoZSBHaXRIdWIgQWN0aW9ucyBzZXJ2aWNlLlxuXG5UaGUgdXBwZXIgYm91bmQgZm9yIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcywgJDMwLDAwMCwgaXMgb25seSBhIGd1aWRlbGluZSBhbmQgR2l0SHViIG1heSByZXdhcmQgaGlnaGVyIGFtb3VudHMgZm9yIGV4Y2VwdGlvbmFsIHJlcG9ydHMuXG5cblxuIyMjIEhpZ2g6ICQxMCwwMDAgLSAkMjAsMDAwXG5cbkhpZ2ggc2V2ZXJpdHkgaXNzdWVzIGFsbG93IGFuIGF0dGFja2VyIHRvIHJlYWQgb3IgbW9kaWZ5IGhpZ2hseSBzZW5zaXRpdmUgZGF0YSB0aGF0IHRoZXkgYXJlIG5vdCBhdXRob3JpemVkIHRvIGFjY2Vzcy4gVGhleSBhcmUgZ2VuZXJhbGx5IG1vcmUgbmFycm93IGluIHNjb3BlIHRoYW4gY3JpdGljYWwgaXNzdWVzLCB0aG91Z2ggdGhleSBtYXkgc3RpbGwgZ3JhbnQgYW4gYXR0YWNrZXIgZXh0ZW5zaXZlIGFjY2Vzcy4gRm9yIGV4YW1wbGU6XG4qIGluamVjdGluZyBhdHRhY2tlciBjb250cm9sbGVkIGNvbnRlbnQgaW50byBHaXRIdWIuY29tIChYU1MpIHdoaWNoIGJ5cGFzc2VzIENTUC5cbiogYnlwYXNzaW5nIGF1dGhvcml6YXRpb24gbG9naWMgdG8gZ3JhbnQgYSByZXBvc2l0b3J5IGNvbGxhYm9yYXRvciBtb3JlIGFjY2VzcyB0aGFuIGludGVuZGVkLlxuKiBkaXNjb3ZlcmluZyBzZW5zaXRpdmUgdXNlciBvciBHaXRIdWIgZGF0YSBpbiBhIHB1YmxpY2x5IGV4cG9zZWQgcmVzb3VyY2UsIHN1Y2ggYXMgYW4gUzMgYnVja2V0LlxuKiBnYWluaW5nIGFjY2VzcyB0byBhIG5vbi1jcml0aWNhbCByZXNvdXJjZSB0aGF0IG9ubHkgR2l0SHViIGVtcGxveWVlcyBzaG91bGQgYmUgYWJsZSB0byByZWFjaC5cbiogdXNpbmcgdGhlIEdpdEh1YiBBY3Rpb25zIHJlcG8tc2NvcGVkIEdpdEh1YiB0b2tlbiB0byBhY2Nlc3MgaGlnaC1yaXNrIHByaXZhdGUgY29udGVudCBvdXRzaWRlIG9mIHRoYXQgcmVwb3NpdG9yeS5cbiogY29kZSBleGVjdXRpb24gaW4gYSBkZXNrdG9wIGFwcCB0aGF0IHJlcXVpcmVzIG5vIHVzZXIgaW50ZXJhY3Rpb24uXG5cblxuIyMjIE1lZGl1bTogJDQsMDAwIC0gJDEwLDAwMFxuXG5NZWRpdW0gc2V2ZXJpdHkgaXNzdWVzIGFsbG93IGFuIGF0dGFja2VyIHRvIHJlYWQgb3IgbW9kaWZ5IGxpbWl0ZWQgYW1vdW50cyBvZiBkYXRhIHRoYXQgdGhleSBhcmUgbm90IGF1dGhvcml6ZWQgdG8gYWNjZXNzLiBUaGV5IGdlbmVyYWxseSBncmFudCBhY2Nlc3MgdG8gbGVzcyBzZW5zaXRpdmUgaW5mb3JtYXRpb24gdGhhbiBoaWdoIHNldmVyaXR5IGlzc3Vlcy4gRm9yIGV4YW1wbGU6XG4qIGRpc2Nsb3NpbmcgdGhlIHRpdGxlIG9mIGlzc3VlcyBpbiBwcml2YXRlIHJlcG9zaXRvcmllcyB3aGljaCBzaG91bGQgYmUgYmUgaW5hY2Nlc3NpYmxlLlxuKiBpbmplY3RpbmcgYXR0YWNrZXIgY29udHJvbGxlZCBjb250ZW50IGludG8gR2l0SHViLmNvbSAoWFNTKSBidXQgbm90IGJ5cGFzc2luZyBDU1Agb3IgZXhlY3V0aW5nIHNlbnNpdGl2ZSBhY3Rpb25zIHdpdGggYW5vdGhlciB1c2VyJ3Mgc2Vzc2lvbi5cbiogYnlwYXNzaW5nIENTUkYgdmFsaWRhdGlvbiBmb3IgbG93IHJpc2sgYWN0aW9ucywgc3VjaCBhcyBzdGFycmluZyBhIHJlcG9zaXRvcnkgb3IgdW5zdWJzY3JpYmluZyBmcm9tIGEgbWFpbGluZyBsaXN0LlxuKiBlc2NhcGluZyB0aGUgTEdUTSB3b3JrZXIgc2FuZGJveCB0byBhY2Nlc3Mgb3RoZXIgdXNlcidzIGRhdGEgb3IgcHJpdmF0ZSBuZXR3b3JrZWQgcmVzb3VyY2VzXG5cblxuIyMjIExvdzogJDYxNyAtICQyLDAwMFxuXG5Mb3cgc2V2ZXJpdHkgaXNzdWVzIGFsbG93IGFuIGF0dGFja2VyIHRvIGFjY2VzcyBleHRyZW1lbHkgbGltaXRlZCBhbW91bnRzIG9mIGRhdGEuIFRoZXkgbWF5IHZpb2xhdGUgYW4gZXhwZWN0YXRpb24gZm9yIGhvdyBzb21ldGhpbmcgaXMgaW50ZW5kZWQgdG8gd29yaywgYnV0IGl0IGFsbG93cyBuZWFybHkgbm8gZXNjYWxhdGlvbiBvZiBwcml2aWxlZ2Ugb3IgYWJpbGl0eSB0byB0cmlnZ2VyIHVuaW50ZW5kZWQgYmVoYXZpb3IgYnkgYW4gYXR0YWNrZXIuIEZvciBleGFtcGxlOlxuKiBzaWduaW5nIHVwIGFyYml0cmFyeSB1c2VycyBmb3IgYWNjZXNzIHRvIGFuIFwiZWFybHkgYWNjZXNzIGZlYXR1cmVcIiB3aXRob3V0IHRoZWlyIGNvbnNlbnQuXG4qIGNyZWF0aW5nIGFuIGlzc3VlIGNvbW1lbnQgdGhhdCBieXBhc3NlcyBvdXIgaW1hZ2UgcHJveHlpbmcgZmlsdGVyIGJ5IHByb3ZpZGluZyBhIG1hbGZvcm1lZCBVUkwuXG4qIGJ5cGFzc2luZyBjb21tdW5pdHktYW5kLXNhZmV0eSBmZWF0dXJlcyBzdWNoIGFzIGxvY2tlZCBjb252ZXJzYXRpb25zLlxuKiBieXBhc3NpbmcgYmlsbGluZyBcdTAwMjYgcGxhbiByZXN0cmljdGlvbnMgdG8gZ2FpbiBhY2Nlc3MgdG8gcGFpZCBmZWF0dXJlcy5cbiogdHJpZ2dlcmluZyB2ZXJib3NlIG9yIGRlYnVnIGVycm9yIHBhZ2VzIHdpdGhvdXQgcHJvb2Ygb2YgZXhwbG9pdGFiaWxpdHkgb3Igb2J0YWluaW5nIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cbiogdHJpZ2dlcmluZyBhcHBsaWNhdGlvbiBleGNlcHRpb25zIHRoYXQgY291bGQgYWZmZWN0IG1hbnkgR2l0SHViIHVzZXJzLlxuKiB0cmlnZ2VyaW5nIFhTUyBvciBDU1JGIHZ1bG5lcmFiaWxpdGllcyBpbiBMR1RNXG5cbiIsImNyZWF0ZWRfYXQiOiIyMDE2LTA0LTE1VDE3OjEwOjMxLjI2MVoiLCJ1cGRhdGVkX2F0IjoiMjAyMC0wNC0wOFQxMzo0NTo0OS41NDhaIn19fSwic2V2ZXJpdHkiOnsiZGF0YSI6eyJpZCI6IjgwOTQxMiIsInR5cGUiOiJzZXZlcml0eSIsImF0dHJpYnV0ZXMiOnsicmF0aW5nIjoiaGlnaCIsImF1dGhvcl90eXBlIjoiVXNlciIsInVzZXJfaWQiOjI5MTA3OSwiY3JlYXRlZF9hdCI6IjIwMjAtMDgtMDRUMTg6MzQ6NDIuOTcwWiJ9fX0sInN3YWciOnsiZGF0YSI6W119LCJhdHRhY2htZW50cyI6eyJkYXRhIjpbeyJpZCI6IjkzNjQyNCIsInR5cGUiOiJhdHRhY2htZW50IiwiYXR0cmlidXRlcyI6eyJleHBpcmluZ191cmwiOiJodHRwczovL2hhY2tlcm9uZS11cy13ZXN0LTItcHJvZHVjdGlvbi1hdHRhY2htZW50cy5zMy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbS9qTE05M0JmTDRDQkRHZnZ3dEVEVnhZM2I/cmVzcG9uc2UtY29udGVudC1kaXNwb3NpdGlvbj1hdHRhY2htZW50JTNCJTIwZmlsZW5hbWUlM0QlMjIyMTgyX0Z0WDhWZEZxLmpwZyUyMiUzQiUyMGZpbGVuYW1lJTJBJTNEVVRGLTglMjclMjcyMTgyX0Z0WDhWZEZxLmpwZ1x1MDAyNnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRmpwZWdcdTAwMjZYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1Nlx1MDAyNlgtQW16LUNyZWRlbnRpYWw9QVNJQVFHSzZGVVJRMkFFSVZEMkolMkYyMDIwMDgwNCUyRnVzLXdlc3QtMiUyRnMzJTJGYXdzNF9yZXF1ZXN0XHUwMDI2WC1BbXotRGF0ZT0yMDIwMDgwNFQyMDIyNTdaXHUwMDI2WC1BbXotRXhwaXJlcz0zNjAwXHUwMDI2WC1BbXotU2lnbmVkSGVhZGVycz1ob3N0XHUwMDI2WC1BbXotU2VjdXJpdHktVG9rZW49SVFvSmIzSnBaMmx1WDJWakVPUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRndFYUNYVnpMWGRsYzNRdE1pSkdNRVFDSUNNbElMSXkzVVhUczg2U2VrSU9lSDFRTlcwZnAweU00JTJCNVNVM0VSd3Z4RUFpQWxMOG1SdkZwdFg3Mkc3RVpIaWxiOTZTNHhtaVUzN0xiWElocHVQbkZPRXlxOUF3aXMlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4QkVBRWFEREF4TXpZeE9USTNORGcwT1NJTUgzUnpVMFpaVUklMkI5eHhjV0twRURBdEZUJTJGd0hRR1llY3ZoVjdvSlMxaDROQkd2QVNnclY5V1FzSWZEeXdzNjklMkIzSEtpSXE4JTJGQmV4dWI3cms5cSUyRjdxJTJCdXA2UE9iaUcwVFRMSXBoeTVvWmNERmslMkI0QnQwWUl1M09oZyUyRkZxQURidlpIdjMxSFRzRm1JU2FQUiUyQnpEYjJLZGR0d0RKMzNhaDcxQzJ0WjNCdkh3R3ZGSnB1Y0paVWRpcmNVRVlNM3VWUDZabnNDSXMzMkNFcElqYU1USkhSRXVUNk8zYk9YalclMkJUdmhLR0tvRnJaYWtnNGZhaWpseG9pWnI0TktJakZzUEp0UERTRTFYYjRrZnFzZUlUb0wyWWpROTNJUiUyRldhSlRudnphMDV2dEg0TGpGMnRQc3lXeE9Pam1iTm9qV2d5TDh4RVRXVVd4cGhFQVElMkZ5dWxnWlIlMkJmYjRrSGJBRjlUank3a3BJdURxb0x5NjROYkdzRjhjWDJ6VCUyQlNhcUlhYW0yTWRKejBIOTd2MjJuWUUyeG82dGJpZWRVVEp6NTdIMDN2NkZpcW5WcGdrN2N6ZEtDMmpqcmJURkk4MHo4Z2F0T2VSZ2k1bFNDUG1GRXZ4ekNyTFdMRiUyQnY4QjBCN2F2MGVtQ2c5aGNkVjAyRGR5TjlRSVByb2kxcEs2akw1MThRZVglMkJXaklWNHVtQ281UnFEaUNoSlM1NDdyeDhmd25kTTIySmxBQm1MeFhrd3V1T20lMkJRVTY3QUdlbjVuYkxmcUFWdWNtbHhmV3p4QThTOSUyRkdnMjRLWk9ZTlI1ZSUyQlpFb3lHNHNhUDMyZ2E0VzFYMHdycGFaT3V5JTJGN1lMZXFEalNNMjE0SzhVUXJ2RmQwSyUyRkdvZFVZcGVrUWt2dVo4Sk5rWk5xd1hOenpzN1B1NUcxZmdVdTJoQTZ3QXZNYkk3VEVzWmF4cGhXNXV0NEY1WVZLdkc4JTJCVFNKY0UlMkZWVUl3UGhLZmFsUjBzekdIRGtIaEg5ajRSRjJXRFMyRmUxZzh2QVc5bHJDQ3JDT2dYYTRlVXA2ZzJLQmNnWEJ5c010MW84Um5KR0JVSjklMkJDejZwQ2xSQ3VnRHBqQkVSVXVTd3RobENqeUZpYjZsVEphQ2Zmb0tHeiUyRlMwUGdueW9GaDRYRms4MSUyQjA2NXNyUE9majhwclZuM2clM0QlM0RcdTAwMjZYLUFtei1TaWduYXR1cmU9YTZhYmQwZGM4OTc3MTlkYTFiY2JhMDFjOWExOWMxM2VjYWJjMDI3YmYzNGE4ZjZkZjA5ZDQ2ZGE3MTAwMWNjNCIsImNyZWF0ZWRfYXQiOiIyMDIwLTA4LTA0VDE4OjM0OjA5LjQ0NloiLCJmaWxlX25hbWUiOiIyMTgyX0Z0WDhWZEZxLmpwZyIsImNvbnRlbnRfdHlwZSI6ImltYWdlL2pwZWciLCJmaWxlX3NpemUiOjY1MzY5NX19LHsiaWQiOiI5MzY0MjUiLCJ0eXBlIjoiYXR0YWNobWVudCIsImF0dHJpYnV0ZXMiOnsiZXhwaXJpbmdfdXJsIjoiaHR0cHM6Ly9oYWNrZXJvbmUtdXMtd2VzdC0yLXByb2R1Y3Rpb24tYXR0YWNobWVudHMuczMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20vTndoSFpYU2dSbm9xaWJoQlhOejlIeG1OP3Jlc3BvbnNlLWNvbnRlbnQtZGlzcG9zaXRpb249YXR0YWNobWVudCUzQiUyMGZpbGVuYW1lJTNEJTIyc3dhZ2dlcl9wYXJzZS5weSUyMiUzQiUyMGZpbGVuYW1lJTJBJTNEVVRGLTglMjclMjdzd2FnZ2VyX3BhcnNlLnB5XHUwMDI2cmVzcG9uc2UtY29udGVudC10eXBlPXRleHQlMkZ4LXB5dGhvbi1zY3JpcHRcdTAwMjZYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1Nlx1MDAyNlgtQW16LUNyZWRlbnRpYWw9QVNJQVFHSzZGVVJRMkFFSVZEMkolMkYyMDIwMDgwNCUyRnVzLXdlc3QtMiUyRnMzJTJGYXdzNF9yZXF1ZXN0XHUwMDI2WC1BbXotRGF0ZT0yMDIwMDgwNFQyMDIyNTdaXHUwMDI2WC1BbXotRXhwaXJlcz0zNjAwXHUwMDI2WC1BbXotU2lnbmVkSGVhZGVycz1ob3N0XHUwMDI2WC1BbXotU2VjdXJpdHktVG9rZW49SVFvSmIzSnBaMmx1WDJWakVPUCUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRiUyRndFYUNYVnpMWGRsYzNRdE1pSkdNRVFDSUNNbElMSXkzVVhUczg2U2VrSU9lSDFRTlcwZnAweU00JTJCNVNVM0VSd3Z4RUFpQWxMOG1SdkZwdFg3Mkc3RVpIaWxiOTZTNHhtaVUzN0xiWElocHVQbkZPRXlxOUF3aXMlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkYlMkY4QkVBRWFEREF4TXpZeE9USTNORGcwT1NJTUgzUnpVMFpaVUklMkI5eHhjV0twRURBdEZUJTJGd0hRR1llY3ZoVjdvSlMxaDROQkd2QVNnclY5V1FzSWZEeXdzNjklMkIzSEtpSXE4JTJGQmV4dWI3cms5cSUyRjdxJTJCdXA2UE9iaUcwVFRMSXBoeTVvWmNERmslMkI0QnQwWUl1M09oZyUyRkZxQURidlpIdjMxSFRzRm1JU2FQUiUyQnpEYjJLZGR0d0RKMzNhaDcxQzJ0WjNCdkh3R3ZGSnB1Y0paVWRpcmNVRVlNM3VWUDZabnNDSXMzMkNFcElqYU1USkhSRXVUNk8zYk9YalclMkJUdmhLR0tvRnJaYWtnNGZhaWpseG9pWnI0TktJakZzUEp0UERTRTFYYjRrZnFzZUlUb0wyWWpROTNJUiUyRldhSlRudnphMDV2dEg0TGpGMnRQc3lXeE9Pam1iTm9qV2d5TDh4RVRXVVd4cGhFQVElMkZ5dWxnWlIlMkJmYjRrSGJBRjlUank3a3BJdURxb0x5NjROYkdzRjhjWDJ6VCUyQlNhcUlhYW0yTWRKejBIOTd2MjJuWUUyeG82dGJpZWRVVEp6NTdIMDN2NkZpcW5WcGdrN2N6ZEtDMmpqcmJURkk4MHo4Z2F0T2VSZ2k1bFNDUG1GRXZ4ekNyTFdMRiUyQnY4QjBCN2F2MGVtQ2c5aGNkVjAyRGR5TjlRSVByb2kxcEs2akw1MThRZVglMkJXaklWNHVtQ281UnFEaUNoSlM1NDdyeDhmd25kTTIySmxBQm1MeFhrd3V1T20lMkJRVTY3QUdlbjVuYkxmcUFWdWNtbHhmV3p4QThTOSUyRkdnMjRLWk9ZTlI1ZSUyQlpFb3lHNHNhUDMyZ2E0VzFYMHdycGFaT3V5JTJGN1lMZXFEalNNMjE0SzhVUXJ2RmQwSyUyRkdvZFVZcGVrUWt2dVo4Sk5rWk5xd1hOenpzN1B1NUcxZmdVdTJoQTZ3QXZNYkk3VEVzWmF4cGhXNXV0NEY1WVZLdkc4JTJCVFNKY0UlMkZWVUl3UGhLZmFsUjBzekdIRGtIaEg5ajRSRjJXRFMyRmUxZzh2QVc5bHJDQ3JDT2dYYTRlVXA2ZzJLQmNnWEJ5c010MW84Um5KR0JVSjklMkJDejZwQ2xSQ3VnRHBqQkVSVXVTd3RobENqeUZpYjZsVEphQ2Zmb0tHeiUyRlMwUGdueW9GaDRYRms4MSUyQjA2NXNyUE9majhwclZuM2clM0QlM0RcdTAwMjZYLUFtei1TaWduYXR1cmU9OTk5NTBkMTQwMmVlZWU3ZDJkZjEwYzY4ZmNkNGQ4ZjRmODQ3MzI4ODViNWRiMmMyNDE3ODQyZWIyNjZkMGExOSIsImNyZWF0ZWRfYXQiOiIyMDIwLTA4LTA0VDE4OjM0OjI4Ljk3MFoiLCJmaWxlX25hbWUiOiJzd2FnZ2VyX3BhcnNlLnB5IiwiY29udGVudF90eXBlIjoidGV4dC94LXB5dGhvbi1zY3JpcHQiLCJmaWxlX3NpemUiOjQ4Mn19XX0sIndlYWtuZXNzIjp7ImRhdGEiOnsiaWQiOiIzMSIsInR5cGUiOiJ3ZWFrbmVzcyIsImF0dHJpYnV0ZXMiOnsibmFtZSI6IkJydXRlIEZvcmNlIiwiZGVzY3JpcHRpb24iOiJUaGUgc29mdHdhcmUgZG9lcyBub3QgaW1wbGVtZW50IHN1ZmZpY2llbnQgbWVhc3VyZXMgdG8gcHJldmVudCBtdWx0aXBsZSBmYWlsZWQgYXV0aGVudGljYXRpb24gYXR0ZW1wdHMgd2l0aGluIGluIGEgc2hvcnQgdGltZSBmcmFtZSwgbWFraW5nIGl0IG1vcmUgc3VzY2VwdGlibGUgdG8gYnJ1dGUgZm9yY2UgYXR0YWNrcy4iLCJleHRlcm5hbF9pZCI6ImN3ZS0zMDciLCJjcmVhdGVkX2F0IjoiMjAxNy0wMS0wNVQwMTo1MToxOS4wMDBaIn19fSwic3RydWN0dXJlZF9zY29wZSI6eyJkYXRhIjp7ImlkIjoiMTU0NTUiLCJ0eXBlIjoic3RydWN0dXJlZC1zY29wZSIsImF0dHJpYnV0ZXMiOnsiYXNzZXRfdHlwZSI6IlVSTCIsImFzc2V0X2lkZW50aWZpZXIiOiJyZW5kZXIuZ2l0aHViLmNvbSIsImVsaWdpYmxlX2Zvcl9ib3VudHkiOnRydWUsImVsaWdpYmxlX2Zvcl9zdWJtaXNzaW9uIjp0cnVlLCJpbnN0cnVjdGlvbiI6IiIsIm1heF9zZXZlcml0eSI6ImNyaXRpY2FsIiwiY3JlYXRlZF9hdCI6IjIwMTgtMTAtMTBUMDA6NDA6NTEuNDc5WiIsInVwZGF0ZWRfYXQiOiIyMDE4LTEwLTEwVDAwOjQwOjUxLjQ3OVoiLCJyZWZlcmVuY2UiOiIiLCJjb25maWRlbnRpYWxpdHlfcmVxdWlyZW1lbnQiOiJtZWRpdW0iLCJpbnRlZ3JpdHlfcmVxdWlyZW1lbnQiOiJtZWRpdW0iLCJhdmFpbGFiaWxpdHlfcmVxdWlyZW1lbnQiOiJsb3cifX19LCJhY3Rpdml0aWVzIjp7ImRhdGEiOlt7InR5cGUiOiJhY3Rpdml0eS1idWctcmVzb2x2ZWQiLCJpZCI6Ijg4NDgyMzEiLCJhdHRyaWJ1dGVzIjp7Im1lc3NhZ2UiOiIiLCJjcmVhdGVkX2F0IjoiMjAyMC0wOC0wNFQyMDoyMjo1Ny4yMTdaIiwidXBkYXRlZF9hdCI6IjIwMjAtMDgtMDRUMjA6MjI6NTcuMjE3WiIsImludGVybmFsIjpmYWxzZX0sInJlbGF0aW9uc2hpcHMiOnsiYWN0b3IiOnsiZGF0YSI6eyJpZCI6IjEyNzM5MDMiLCJ0eXBlIjoidXNlciIsImF0dHJpYnV0ZXMiOnsidXNlcm5hbWUiOiJyemhhZGUzLXRlc3RlciIsIm5hbWUiOm51bGwsImRpc2FibGVkIjpmYWxzZSwiY3JlYXRlZF9hdCI6IjIwMjAtMDgtMDRUMDY6MjY6NDIuNDkxWiIsInByb2ZpbGVfcGljdHVyZSI6eyI2Mng2MiI6Ii9hc3NldHMvYXZhdGFycy9kZWZhdWx0LTcxYTMwMmQ3MDY0NTdmM2QzYTMxZWIzMGZhM2U3M2U2Y2YwYjFkNjc3YjhmYTIxOGVhZWFmZmQ2N2FlOTc5MTgucG5nIiwiODJ4ODIiOiIvYXNzZXRzL2F2YXRhcnMvZGVmYXVsdC03MWEzMDJkNzA2NDU3ZjNkM2EzMWViMzBmYTNlNzNlNmNmMGIxZDY3N2I4ZmEyMThlYWVhZmZkNjdhZTk3OTE4LnBuZyIsIjExMHgxMTAiOiIvYXNzZXRzL2F2YXRhcnMvZGVmYXVsdC03MWEzMDJkNzA2NDU3ZjNkM2EzMWViMzBmYTNlNzNlNmNmMGIxZDY3N2I4ZmEyMThlYWVhZmZkNjdhZTk3OTE4LnBuZyIsIjI2MHgyNjAiOiIvYXNzZXRzL2F2YXRhcnMvZGVmYXVsdC03MWEzMDJkNzA2NDU3ZjNkM2EzMWViMzBmYTNlNzNlNmNmMGIxZDY3N2I4ZmEyMThlYWVhZmZkNjdhZTk3OTE4LnBuZyJ9LCJzaWduYWwiOm51bGwsImltcGFjdCI6bnVsbCwicmVwdXRhdGlvbiI6bnVsbCwiYmlvIjpudWxsLCJ3ZWJzaXRlIjpudWxsLCJsb2NhdGlvbiI6bnVsbCwiaGFja2Vyb25lX3RyaWFnZXIiOmZhbHNlfX19fX1dfSwiYm91bnRpZXMiOnsiZGF0YSI6W119LCJzdW1tYXJpZXMiOnsiZGF0YSI6W119LCJjdXN0b21fZmllbGRfdmFsdWVzIjp7ImRhdGEiOltdfX19fQ==
|
79
|
+
recorded_at: Tue, 04 Aug 2020 20:22:57 GMT
|
80
|
+
- request:
|
81
|
+
method: put
|
82
|
+
uri: https://api.hackerone.com/v1/reports/200/close_comments
|
83
|
+
body:
|
84
|
+
encoding: UTF-8
|
85
|
+
string: '{"data":{"type":"activity-comments-closed"}}'
|
86
|
+
headers:
|
87
|
+
Authorization:
|
88
|
+
- Basic NOPE=
|
89
|
+
User-Agent:
|
90
|
+
- Faraday v1.0.1
|
91
|
+
Content-Type:
|
92
|
+
- application/json
|
93
|
+
Accept-Encoding:
|
94
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
95
|
+
Accept:
|
96
|
+
- "*/*"
|
97
|
+
response:
|
98
|
+
status:
|
99
|
+
code: 200
|
100
|
+
message: OK
|
101
|
+
headers:
|
102
|
+
Date:
|
103
|
+
- Tue, 04 Aug 2020 20:22:58 GMT
|
104
|
+
Content-Type:
|
105
|
+
- application/json; charset=utf-8
|
106
|
+
Transfer-Encoding:
|
107
|
+
- chunked
|
108
|
+
Connection:
|
109
|
+
- keep-alive
|
110
|
+
Set-Cookie:
|
111
|
+
- __cfduid=d2984afa39f16a0fa59898d5a119139eb1596572577; expires=Thu, 03-Sep-20
|
112
|
+
20:22:57 GMT; path=/; Domain=api.hackerone.com; HttpOnly; SameSite=Lax; Secure
|
113
|
+
X-Request-Id:
|
114
|
+
- cfc4b577-2ac0-4466-9018-821da6d76939
|
115
|
+
Etag:
|
116
|
+
- W/"f008fe54d1f034fdb39ac356b76f029e"
|
117
|
+
Cache-Control:
|
118
|
+
- max-age=0, private, must-revalidate
|
119
|
+
Strict-Transport-Security:
|
120
|
+
- max-age=31536000; includeSubDomains; preload
|
121
|
+
X-Frame-Options:
|
122
|
+
- DENY
|
123
|
+
X-Content-Type-Options:
|
124
|
+
- nosniff
|
125
|
+
X-Xss-Protection:
|
126
|
+
- 1; mode=block
|
127
|
+
X-Download-Options:
|
128
|
+
- noopen
|
129
|
+
X-Permitted-Cross-Domain-Policies:
|
130
|
+
- none
|
131
|
+
Referrer-Policy:
|
132
|
+
- strict-origin-when-cross-origin
|
133
|
+
Expect-Ct:
|
134
|
+
- enforce, max-age=86400
|
135
|
+
Content-Security-Policy:
|
136
|
+
- 'default-src ''none''; base-uri ''self''; block-all-mixed-content; child-src
|
137
|
+
www.youtube-nocookie.com; connect-src ''self'' www.google-analytics.com errors.hackerone.net;
|
138
|
+
font-src ''self''; form-action ''self''; frame-ancestors ''none''; img-src
|
139
|
+
''self'' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com
|
140
|
+
profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
141
|
+
media-src ''self'' hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
142
|
+
script-src ''self'' www.google-analytics.com; style-src ''self'' ''unsafe-inline'';
|
143
|
+
report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598'
|
144
|
+
Cf-Cache-Status:
|
145
|
+
- DYNAMIC
|
146
|
+
Cf-Request-Id:
|
147
|
+
- 045cbd479000000293bd38e200000001
|
148
|
+
Server:
|
149
|
+
- cloudflare
|
150
|
+
Cf-Ray:
|
151
|
+
- 5bdafe528d570293-SJC
|
152
|
+
body:
|
153
|
+
encoding: ASCII-8BIT
|
154
|
+
string: '{"data":{"type":"activity-comments-closed","id":"8848232","attributes":{"message":"","created_at":"2020-08-04T20:22:57.889Z","updated_at":"2020-08-04T20:22:57.889Z","internal":false},"relationships":{"actor":{"data":{"id":"1273903","type":"user","attributes":{"username":"rzhade3-tester","name":null,"disabled":false,"created_at":"2020-08-04T06:26:42.491Z","profile_picture":{"62x62":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","82x82":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","110x110":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png","260x260":"/assets/avatars/default-71a302d706457f3d3a31eb30fa3e73e6cf0b1d677b8fa218eaeaffd67ae97918.png"},"signal":null,"impact":null,"reputation":null,"bio":null,"website":null,"location":null,"hackerone_triager":false}}}}}}'
|
155
|
+
recorded_at: Tue, 04 Aug 2020 20:22:58 GMT
|
156
|
+
recorded_with: VCR 6.0.0
|
@@ -191,7 +191,28 @@ http_interactions:
|
|
191
191
|
},
|
192
192
|
"attachments": {
|
193
193
|
"data": [
|
194
|
-
|
194
|
+
{
|
195
|
+
"id": "936424",
|
196
|
+
"type": "attachment",
|
197
|
+
"attributes": {
|
198
|
+
"expiring_url": "https://redacted.aws.s3.link",
|
199
|
+
"created_at": "2020-08-04T18:34:09.446Z",
|
200
|
+
"file_name": "2182_FtX8VdFq.jpg",
|
201
|
+
"content_type": "image/jpeg",
|
202
|
+
"file_size": 653695
|
203
|
+
}
|
204
|
+
},
|
205
|
+
{
|
206
|
+
"id": "936425",
|
207
|
+
"type": "attachment",
|
208
|
+
"attributes": {
|
209
|
+
"expiring_url": "https://redacted.aws.s3.link",
|
210
|
+
"created_at": "2020-08-04T18:34:28.970Z",
|
211
|
+
"file_name": "swagger_parse.py",
|
212
|
+
"content_type": "text/x-python-script",
|
213
|
+
"file_size": 482
|
214
|
+
}
|
215
|
+
}
|
195
216
|
]
|
196
217
|
},
|
197
218
|
"vulnerability_types": {
|
@@ -0,0 +1,77 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.hackerone.com/v1/reports?filter%5Bcreated_at__gt%5D=2017-02-11T16:00:44-10:00&filter%5Bprogram%5D%5B0%5D=github&filter%5Bstate%5D%5B0%5D=triaged
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Basic NOPE
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v1.0.0
|
14
|
+
Accept-Encoding:
|
15
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
16
|
+
Accept:
|
17
|
+
- "*/*"
|
18
|
+
response:
|
19
|
+
status:
|
20
|
+
code: 200
|
21
|
+
message: OK
|
22
|
+
headers:
|
23
|
+
Date:
|
24
|
+
- Tue, 24 Mar 2020 14:11:47 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json; charset=utf-8
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Set-Cookie:
|
32
|
+
- __cfduid=dabd0c152e7e92db1c896d18efb3473911585059107; expires=Thu, 23-Apr-20
|
33
|
+
14:11:47 GMT; path=/; Domain=api.hackerone.com; HttpOnly; SameSite=Lax; Secure
|
34
|
+
X-Request-Id:
|
35
|
+
- 5ead5fa1-86fb-4b8f-ae8b-755d0b08b40c
|
36
|
+
Etag:
|
37
|
+
- W/"a9d3a797dc03972084547d21d1a4ebcd"
|
38
|
+
Cache-Control:
|
39
|
+
- max-age=0, private, must-revalidate
|
40
|
+
Strict-Transport-Security:
|
41
|
+
- max-age=31536000; includeSubDomains; preload
|
42
|
+
X-Frame-Options:
|
43
|
+
- DENY
|
44
|
+
X-Content-Type-Options:
|
45
|
+
- nosniff
|
46
|
+
X-Xss-Protection:
|
47
|
+
- 1; mode=block
|
48
|
+
X-Download-Options:
|
49
|
+
- noopen
|
50
|
+
X-Permitted-Cross-Domain-Policies:
|
51
|
+
- none
|
52
|
+
Referrer-Policy:
|
53
|
+
- strict-origin-when-cross-origin
|
54
|
+
Expect-Ct:
|
55
|
+
- enforce, max-age=86400
|
56
|
+
Content-Security-Policy:
|
57
|
+
- 'default-src ''none''; base-uri ''self''; block-all-mixed-content; child-src
|
58
|
+
www.youtube-nocookie.com; connect-src ''self'' www.google-analytics.com errors.hackerone.net;
|
59
|
+
font-src ''self''; form-action ''self''; frame-ancestors ''none''; img-src
|
60
|
+
''self'' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com
|
61
|
+
profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
62
|
+
media-src ''self'' hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
63
|
+
script-src ''self'' www.google-analytics.com; style-src ''self'' ''unsafe-inline'';
|
64
|
+
report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598'
|
65
|
+
Cf-Cache-Status:
|
66
|
+
- DYNAMIC
|
67
|
+
Server:
|
68
|
+
- cloudflare
|
69
|
+
Cf-Ray:
|
70
|
+
- 5790fbbbb977e4d8-ATL
|
71
|
+
body:
|
72
|
+
encoding: ASCII-8BIT
|
73
|
+
string: !binary |-
|
74
|
+
eyJkYXRhIjpbeyJpZCI6IjgxNTA5OSIsInR5cGUiOiJyZXBvcnQiLCJhdHRyaWJ1dGVzIjp7InRpdGxlIjoiSmFsIiwic3RhdGUiOiJ0cmlhZ2VkIiwiY3JlYXRlZF9hdCI6IjIwMjAtMDMtMDlUMTQ6NDU6MzIuNzQxWiIsInZ1bG5lcmFiaWxpdHlfaW5mb3JtYXRpb24iOiJLYWxcblxuIyMgSW1wYWN0XG5cbkxhbCIsInRyaWFnZWRfYXQiOiIyMDIwLTAzLTI0VDE0OjExOjM3LjcxMloiLCJjbG9zZWRfYXQiOm51bGwsImxhc3RfcmVwb3J0ZXJfYWN0aXZpdHlfYXQiOiIyMDIwLTAzLTI0VDE0OjExOjM3LjcxMloiLCJmaXJzdF9wcm9ncmFtX2FjdGl2aXR5X2F0IjoiMjAyMC0wMy0wOVQxNDo0NTozMi43OTZaIiwibGFzdF9wcm9ncmFtX2FjdGl2aXR5X2F0IjoiMjAyMC0wMy0yNFQxNDoxMTozNy43MTJaIiwiYm91bnR5X2F3YXJkZWRfYXQiOm51bGwsInN3YWdfYXdhcmRlZF9hdCI6bnVsbCwiZGlzY2xvc2VkX2F0IjpudWxsLCJyZXBvcnRlcl9hZ3JlZWRfb25fZ29pbmdfcHVibGljX2F0IjpudWxsLCJsYXN0X3B1YmxpY19hY3Rpdml0eV9hdCI6IjIwMjAtMDMtMjRUMTQ6MTE6MzcuNzEyWiIsImxhc3RfYWN0aXZpdHlfYXQiOiIyMDIwLTAzLTI0VDE0OjExOjM3LjcxMloiLCJzb3VyY2UiOm51bGx9LCJyZWxhdGlvbnNoaXBzIjp7InJlcG9ydGVyIjp7ImRhdGEiOnsiaWQiOiIyOTEwNzkiLCJ0eXBlIjoidXNlciIsImF0dHJpYnV0ZXMiOnsidXNlcm5hbWUiOiJyemhhZGUzIiwibmFtZSI6IlJhaHVsIFpoYWRlIiwiZGlzYWJsZWQiOmZhbHNlLCJjcmVhdGVkX2F0IjoiMjAxOC0wNi0xMlQxNzo0Mzo0MC44NTJaIiwicHJvZmlsZV9waWN0dXJlIjp7IjYyeDYyIjoiaHR0cHM6Ly9wcm9maWxlLXBob3Rvcy5oYWNrZXJvbmUtdXNlci1jb250ZW50LmNvbS92YXJpYW50cy8wMDAvMjkxLzA3OS9iNzljM2MzNDMxMzBiZDYzMTEzMWY2OTBlMmYwNGJjMGQxZmRlOGJmX29yaWdpbmFsLnBuZy8zYWZjYjVjODk2MjQ3ZTdlZThhZGEzMWIxYzFlYjg2NTdlMjIyNDFmOTExMDkzYWNmZTRlYzdlOTdhM2E5NTlhIiwiODJ4ODIiOiJodHRwczovL3Byb2ZpbGUtcGhvdG9zLmhhY2tlcm9uZS11c2VyLWNvbnRlbnQuY29tL3ZhcmlhbnRzLzAwMC8yOTEvMDc5L2I3OWMzYzM0MzEzMGJkNjMxMTMxZjY5MGUyZjA0YmMwZDFmZGU4YmZfb3JpZ2luYWwucG5nL2ViMzE4MjNhNGNjOWY2YjZiYjRkYjkzMGZmZGY1MTI1MzM5MjhhNjhhNDI1NWZiNTBhODMxODAyODFhNjBkYTUiLCIxMTB4MTEwIjoiaHR0cHM6Ly9wcm9maWxlLXBob3Rvcy5oYWNrZXJvbmUtdXNlci1jb250ZW50LmNvbS92YXJpYW50cy8wMDAvMjkxLzA3OS9iNzljM2MzNDMxMzBiZDYzMTEzMWY2OTBlMmYwNGJjMGQxZmRlOGJmX29yaWdpbmFsLnBuZy82OTIyMzdlYjk2OTFmYmRlOTJhMTcxNzRjZGI4MDlhNzg4YWNlMDJiYzc3YzcyODAzZjE3ZDMyYjQxZTRmMjEzIiwiMjYweDI2MCI6Imh0dHBzOi8vcHJvZmlsZS1waG90b3MuaGFja2Vyb25lLXVzZXItY29udGVudC5jb20vdmFyaWFudHMvMDAwLzI5MS8wNzkvYjc5YzNjMzQzMTMwYmQ2MzExMzFmNjkwZTJmMDRiYzBkMWZkZThiZl9vcmlnaW5hbC5wbmcvY2YxZTRiNWQ0NDAwNWNiNjFmYWIzNThkZDY5Njg0MTVmMjA1NDVkZTVmMDU1YmE0ZWQzM2NhNDM4Nzk0OGNkYyJ9LCJiaW8iOiJBcHBsaWNhdGlvbiBTZWN1cml0eSBAR2l0SHViIiwid2Vic2l0ZSI6Imh0dHBzOi8vemhhZGUuZGV2IiwibG9jYXRpb24iOiIiLCJoYWNrZXJvbmVfdHJpYWdlciI6ZmFsc2V9fX0sImFzc2lnbmVlIjp7ImRhdGEiOnsiaWQiOiI4NTA0OSIsInR5cGUiOiJ1c2VyIiwiYXR0cmlidXRlcyI6eyJ1c2VybmFtZSI6ImJyZW50am8tZ2giLCJuYW1lIjoiQnJlbnQgSm9obnNvbiIsImRpc2FibGVkIjpmYWxzZSwiY3JlYXRlZF9hdCI6IjIwMTYtMDYtMTRUMjA6MDE6MzAuODkxWiIsInByb2ZpbGVfcGljdHVyZSI6eyI2Mng2MiI6Ii9hc3NldHMvYXZhdGFycy9kZWZhdWx0LTcxYTMwMmQ3MDY0NTdmM2QzYTMxZWIzMGZhM2U3M2U2Y2YwYjFkNjc3YjhmYTIxOGVhZWFmZmQ2N2FlOTc5MTgucG5nIiwiODJ4ODIiOiIvYXNzZXRzL2F2YXRhcnMvZGVmYXVsdC03MWEzMDJkNzA2NDU3ZjNkM2EzMWViMzBmYTNlNzNlNmNmMGIxZDY3N2I4ZmEyMThlYWVhZmZkNjdhZTk3OTE4LnBuZyIsIjExMHgxMTAiOiIvYXNzZXRzL2F2YXRhcnMvZGVmYXVsdC03MWEzMDJkNzA2NDU3ZjNkM2EzMWViMzBmYTNlNzNlNmNmMGIxZDY3N2I4ZmEyMThlYWVhZmZkNjdhZTk3OTE4LnBuZyIsIjI2MHgyNjAiOiIvYXNzZXRzL2F2YXRhcnMvZGVmYXVsdC03MWEzMDJkNzA2NDU3ZjNkM2EzMWViMzBmYTNlNzNlNmNmMGIxZDY3N2I4ZmEyMThlYWVhZmZkNjdhZTk3OTE4LnBuZyJ9LCJzaWduYWwiOm51bGwsImltcGFjdCI6bnVsbCwicmVwdXRhdGlvbiI6bnVsbCwiYmlvIjoiIiwid2Vic2l0ZSI6bnVsbCwibG9jYXRpb24iOiIiLCJoYWNrZXJvbmVfdHJpYWdlciI6ZmFsc2V9fX0sInByb2dyYW0iOnsiZGF0YSI6eyJpZCI6IjExNzY3IiwidHlwZSI6InByb2dyYW0iLCJhdHRyaWJ1dGVzIjp7ImhhbmRsZSI6ImdpdGh1Yi10ZXN0IiwicG9saWN5IjoiIyBHaXRIdWIgVGVzdCBCdWcgQm91bnR5XHJcblxyXG5Tb2Z0d2FyZSBzZWN1cml0eSByZXNlYXJjaGVycyBhcmUgaW5jcmVhc2luZ2x5IGVuZ2FnaW5nIHdpdGggSW50ZXJuZXQgY29tcGFuaWVzIHRvIGh1bnQgZG93biB2dWxuZXJhYmlsaXRpZXMuIE91ciBib3VudHkgcHJvZ3JhbSBnaXZlcyBhIHRpcCBvZiB0aGUgaGF0IHRvIHRoZXNlIHJlc2VhcmNoZXJzIGFuZCBwcm92aWRlcyByZXdhcmRzIG9mICAkMzAsMDAwIG9yIG1vcmUgZm9yIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcy5cclxuXHJcblxyXG5Zb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBpbiBvdXIgW3J1bGVzXShodHRwczovL2JvdW50eS5naXRodWIuY29tLyNydWxlcyksIFtzY29wZV0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS8jc2NvcGUpLCBbdGFyZ2V0c10oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS8jdGFyZ2V0cyksIGFuZCBbRkFRXShodHRwczovL2JvdW50eS5naXRodWIuY29tLyNmYXFzKSBzZWN0aW9ucy4gWW91IGNhbiBhbHNvIGNoZWNrIHRoZSBjdXJyZW50IHJhbmtpbmdzIG9uIHRoZSBbbGVhZGVyYm9hcmRdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vI2xlYWRlcmJvYXJkKS5cclxuXHJcbkhhcHB5IGhhY2tpbmchXHJcblxyXG5cclxuIyMgUnVsZXNcclxuXHJcbiMjIyBCZWZvcmUgeW91IHN0YXJ0XHJcblxyXG4qIENoZWNrIHRoZSBsaXN0IG9mIGJ1Z3MgdGhhdCBoYXZlIGJlZW4gW2NsYXNzaWZpZWQgYXMgaW5lbGlnaWJsZV0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS9pbmVsaWdpYmxlLmh0bWwpLiBTdWJtaXNzaW9ucyB3aGljaCBhcmUgaW5lbGlnaWJsZSB3aWxsIGxpa2VseSBiZSBjbG9zZWQgYXMgYE5vdCBBcHBsaWNhYmxlYC5cclxuKiBDaGVjayB0aGUgW0dpdEh1YiBDaGFuZ2Vsb2ddKGh0dHBzOi8vZ2l0aHViLmJsb2cvY2hhbmdlbG9nLykgZm9yIHJlY2VudGx5IGxhdW5jaGVkIGZlYXR1cmVzLlxyXG4qIE5ldmVyIGF0dGVtcHQgbm9uLXRlY2huaWNhbCBhdHRhY2tzIHN1Y2ggYXMgc29jaWFsIGVuZ2luZWVyaW5nLCBwaGlzaGluZywgb3IgcGh5c2ljYWwgYXR0YWNrcyBhZ2FpbnN0IG91ciBlbXBsb3llZXMsIHVzZXJzLCBvciBpbmZyYXN0cnVjdHVyZS5cclxuKiBXaGVuIGluIGRvdWJ0LCBjb250YWN0IHVzIGF0IGBib3VudHlAZ2l0aHViLmNvbWAuXHJcbiogQnkgcGFydGljaXBhdGluZyBpbiBHaXRIdWIncyBCdWcgQm91bnR5IHByb2dyYW0gKHRoZSBcIlByb2dyYW1cIiksIHlvdSBhY2tub3dsZWRnZSB0aGF0IHlvdSBoYXZlIHJlYWQgYW5kIGFncmVlIHRvIEdpdEh1YidzIFtUZXJtcyBvZiBTZXJ2aWNlXShodHRwczovL2hlbHAuZ2l0aHViLmNvbS9hcnRpY2xlcy9naXRodWItdGVybXMtb2Ytc2VydmljZSkgYXMgd2VsbCBhcyB0aGUgZm9sbG93aW5nOlxyXG5cclxuICAqIHlvdSdyZSBub3QgcGFydGljaXBhdGluZyBmcm9tIGEgY291bnRyeSBhZ2FpbnN0IHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBpc3N1ZWQgZXhwb3J0IHNhbmN0aW9ucyBvciBvdGhlciB0cmFkZSByZXN0cmljdGlvbnMsIGluY2x1ZGluZyBDdWJhLCBJcmFuLCBOb3J0aCBLb3JlYSwgU3VkYW4sIGFuZCBTeXJpYS5cclxuXHJcbiAgKiB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIFByb2dyYW0gd2lsbCBub3QgdmlvbGF0ZSBhbnkgbGF3IGFwcGxpY2FibGUgdG8geW91LCBvciBkaXNydXB0IG9yIGNvbXByb21pc2UgYW55IGRhdGEgdGhhdCBpcyBub3QgeW91ciBvd24uXHJcblxyXG4gICogeW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBhcHBsaWNhYmxlIHRheGVzLCB3aXRoaG9sZGluZyBvciBvdGhlcndpc2UsIGFyaXNpbmcgZnJvbSBvciByZWxhdGluZyB0byB5b3VyIHBhcnRpY2lwYXRpb24gaW4gdGhlIFByb2dyYW0sIGluY2x1ZGluZyBmcm9tIGFueSBib3VudHkgcGF5bWVudHMuXHJcblxyXG4gICogR2l0SHViIHJlc2VydmVzIHRoZSByaWdodCB0byB0ZXJtaW5hdGUgb3IgZGlzY29udGludWUgdGhlIFByb2dyYW0gYXQgaXRzIGRpc2NyZXRpb24uXHJcblxyXG4gICogT25seSB0ZXN0IGZvciB2dWxuZXJhYmlsaXRpZXMgb24gc2l0ZXMgeW91IGtub3cgdG8gYmUgb3BlcmF0ZWQgYnkgR2l0SHViIGFuZCBhcmUgW2luLXNjb3BlXShodHRwczovL2JvdW50eS5naXRodWIuY29tI3Njb3BlKS4gU29tZSBzaXRlcyBob3N0ZWQgb24gc3ViZG9tYWlucyBvZiBgR2l0SHViLmNvbWAgYXJlIG9wZXJhdGVkIGJ5IHRoaXJkIHBhcnRpZXMgYW5kIHNob3VsZCBub3QgYmUgdGVzdGVkLlxyXG5cclxuXHJcbiMjIyBMZWdhbCBzYWZlIGhhcmJvclxyXG5cclxuWW91ciByZXNlYXJjaCBpcyBjb3ZlcmVkIGJ5IHRoZSBbR2l0SHViIEJ1ZyBCb3VudHkgUHJvZ3JhbSBMZWdhbCBTYWZlIEhhcmJvcl0oaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vYXJ0aWNsZXMvZ2l0aHViLWJ1Zy1ib3VudHktcHJvZ3JhbS1sZWdhbC1zYWZlLWhhcmJvci8pIHBvbGljeS4gSW4gc3VtbWFyeTpcclxuKiBXZSBjb25zaWRlciBzZWN1cml0eSByZXNlYXJjaCBhbmQgdnVsbmVyYWJpbGl0eSBkaXNjbG9zdXJlIGFjdGl2aXRpZXMgY29uZHVjdGVkIGNvbnNpc3RlbnQgd2l0aCB0aGlzIHBvbGljeSBhcyDigJxhdXRob3JpemVk4oCdIGNvbmR1Y3QgdW5kZXIgdGhlIENvbXB1dGVyIEZyYXVkIGFuZCBBYnVzZSBBY3QsIHRoZSBETUNBLCBhbmQgb3RoZXIgYXBwbGljYWJsZSBjb21wdXRlciB1c2UgbGF3cyBzdWNoIGFzIENhbC4gUGVuYWwgQ29kZSA1MDIoYykuIFdlIHdhaXZlIGFueSBwb3RlbnRpYWwgRE1DQSBjbGFpbSBhZ2FpbnN0IHlvdSBmb3IgY2lyY3VtdmVudGluZyB0aGUgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB3ZSBoYXZlIHVzZWQgdG8gcHJvdGVjdCB0aGUgYXBwbGljYXRpb25zIGluIHRoaXMgYnVnIGJvdW50eSBwcm9ncmFtJ3Mgc2NvcGUuXHJcbiogV2Ugd2FudCB5b3UgdG8gcmVzcG9uc2libHkgZGlzY2xvc2UgdGhyb3VnaCBvdXIgYnVnIGJvdW50eSBwcm9ncmFtLCBhbmQgZG9uJ3Qgd2FudCByZXNlYXJjaGVycyBwdXQgaW4gZmVhciBvZiBsZWdhbCBjb25zZXF1ZW5jZXMgYmVjYXVzZSBvZiB0aGVpciBnb29kIGZhaXRoIGF0dGVtcHRzIHRvIGNvbXBseSB3aXRoIG91ciBidWcgYm91bnR5IHBvbGljeS4gV2UgY2Fubm90IGJpbmQgYW55IHRoaXJkIHBhcnR5LCBzbyBkbyBub3QgYXNzdW1lIHRoaXMgcHJvdGVjdGlvbiBleHRlbmRzIHRvIGFueSB0aGlyZCBwYXJ0eS4gSWYgaW4gZG91YnQsIGFzayB1cyBiZWZvcmUgZW5nYWdpbmcgaW4gYW55IHNwZWNpZmljIGFjdGlvbiB5b3UgdGhpbmsgbWlnaHQgZ28gb3V0c2lkZSB0aGUgYm91bmRzIG9mIG91ciBwb2xpY3kuXHJcbiogQmVjYXVzZSBib3RoIGlkZW50aWZ5aW5nIGFuZCBub24taWRlbnRpZnlpbmcgaW5mb3JtYXRpb24gY2FuIHB1dCBhIHJlc2VhcmNoZXIgYXQgcmlzaywgd2UgbGltaXQgd2hhdCB3ZSBzaGFyZSB3aXRoIHRoaXJkIHBhcnRpZXMuIFdlIG1heSBwcm92aWRlIG5vbi1pZGVudGlmeWluZyBzdWJzdGFudGl2ZSBpbmZvcm1hdGlvbiBmcm9tIHlvdXIgcmVwb3J0IHRvIGFuIGFmZmVjdGVkIHRoaXJkIHBhcnR5LCBidXQgb25seSBhZnRlciBub3RpZnlpbmcgeW91IGFuZCByZWNlaXZpbmcgYSBjb21taXRtZW50IHRoYXQgdGhlIHRoaXJkIHBhcnR5IHdpbGwgbm90IHB1cnN1ZSBsZWdhbCBhY3Rpb24gYWdhaW5zdCB5b3UuIFdlIHdpbGwgb25seSBzaGFyZSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiAobmFtZSwgZW1haWwgYWRkcmVzcywgcGhvbmUgbnVtYmVyLCBldGMuKSB3aXRoIGEgdGhpcmQgcGFydHkgaWYgeW91IGdpdmUgeW91ciB3cml0dGVuIHBlcm1pc3Npb24uXHJcbiogSWYgeW91ciBzZWN1cml0eSByZXNlYXJjaCBhcyBwYXJ0IG9mIHRoZSBidWcgYm91bnR5IHByb2dyYW0gdmlvbGF0ZXMgY2VydGFpbiByZXN0cmljdGlvbnMgaW4gb3VyIHNpdGUgcG9saWNpZXMsIHRoZSBzYWZlIGhhcmJvciB0ZXJtcyBwZXJtaXQgYSBsaW1pdGVkIGV4ZW1wdGlvbi5cclxuXHJcblxyXG4jIyMgUGVyZm9ybWluZyB5b3VyIHJlc2VhcmNoXHJcblxyXG4qIERvIG5vdCBpbXBhY3Qgb3RoZXIgdXNlcnMgd2l0aCB5b3VyIHRlc3RpbmcsIHRoaXMgaW5jbHVkZXMgdGVzdGluZyB2dWxuZXJhYmlsaXRpZXMgaW4gcmVwb3NpdG9yaWVzIG9yIG9yZ2FuaXphdGlvbnMgeW91IGRvIG5vdCBvd24uIElmIHlvdSBhcmUgYXR0ZW1wdGluZyB0byBmaW5kIGFuIGF1dGhvcml6YXRpb24gYnlwYXNzLCB5b3UgbXVzdCB1c2UgYWNjb3VudHMgeW91IG93bi5cclxuKiBUaGUgZm9sbG93aW5nIGFyZSAqKm5ldmVyKiogYWxsb3dlZCBhbmQgYXJlIGluZWxpZ2libGUgZm9yIHJld2FyZC4gV2UgbWF5IHN1c3BlbmQgeW91ciBHaXRIdWIgYWNjb3VudCBhbmQgYmFuIHlvdXIgSVAgYWRkcmVzcyBmb3I6XHJcblxyXG4gICogUGVyZm9ybWluZyBkaXN0cmlidXRlZCBkZW5pYWwgb2Ygc2VydmljZSAoRERvUykgb3Igb3RoZXIgdm9sdW1ldHJpYyBhdHRhY2tzXHJcbiAgKiBTcGFtbWluZyBjb250ZW50XHJcbiAgKiBMYXJnZS1zY2FsZSB2dWxuZXJhYmlsaXR5IHNjYW5uZXJzLCBzY3JhcGVycywgb3IgYXV0b21hdGVkIHRvb2xzIHdoaWNoIHByb2R1Y2UgZXhjZXNzaXZlIGFtb3VudHMgb2YgdHJhZmZpYy5cclxuICAgICogTm90ZTogV2UgX2RvXyBhbGxvdyB0aGUgdXNlIG9mIGF1dG9tYXRlZCB0b29scyBzbyBsb25nIGFzIHRoZXkgZG8gbm90IHByb2R1Y2UgZXhjZXNzaXZlIGFtb3VudHMgb2YgdHJhZmZpYy4gRm9yIGV4YW1wbGUsIHJ1bm5pbmcgb25lIGBubWFwYCBzY2FuIGFnYWluc3Qgb25lIGhvc3QgaXMgYWxsb3dlZCwgYnV0IHNlbmRpbmcgNjUsMDAwIHJlcXVlc3RzIGluIHR3byBtaW51dGVzIHVzaW5nIEJ1cnAgU3VpdGUgSW50cnVkZXIgaXMgZXhjZXNzaXZlLlxyXG4qIFJlc2VhcmNoaW5nIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFja3MgaXMgYWxsb3dlZCBhbmQgZWxpZ2libGUgZm9yIHJld2FyZHMgb25seSBpZiB5b3UgZm9sbG93IHRoZXNlIHJ1bGVzOlxyXG5cclxuICAqIFJlc2VhcmNoICoqbXVzdCoqIGJlIHBlcmZvcm1lZCBpbiBvcmdhbml6YXRpb25zIG9yIHJlcG9zaXRvcmllcyB5b3Ugb3duXHJcbiAgKiBTdG9wICoqaW1tZWRpYXRlbHkqKiBpZiB5b3UgYmVsaWV2ZSB5b3UgaGF2ZSBhZmZlY3RlZCB0aGUgYXZhaWxhYmlsaXR5IG9mIG91ciBzZXJ2aWNlcy4gRG9uJ3Qgd29ycnkgYWJvdXQgZGVtb25zdHJhdGluZyB0aGUgZnVsbCBpbXBhY3Qgb2YgeW91ciB2dWxuZXJhYmlsaXR5LCBHaXRIdWIncyBzZWN1cml0eSB0ZWFtIHdpbGwgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIGltcGFjdC5cclxuICAqIFRoZXJlIGFyZSBubyBsaW1pdHMgZm9yIHJlc2VhcmNoaW5nIGRlbmlhbCBvZiBzZXJ2aWNlIHZ1bG5lcmFiaWxpdGllcyBhZ2FpbnN0IHlvdXIgb3duIGluc3RhbmNlIG9mIFtHaXRIdWIgRW50ZXJwcmlzZSBTZXJ2ZXJdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vdGFyZ2V0cy9naXRodWItZW50ZXJwcmlzZS1zZXJ2ZXIuaHRtbClcclxuXHJcblxyXG4jIyMgSGFuZGxpbmcgcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24gKFBJSSlcclxuXHJcbiogUGVyc29uYWxseSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiAoUElJKSBpbmNsdWRlczpcclxuICAqIGxlZ2FsIGFuZC9vciBmdWxsIG5hbWVzXHJcbiAgKiBuYW1lcyBvciB1c2VybmFtZXMgY29tYmluZWQgd2l0aCBvdGhlciBpZGVudGlmaWVycyBsaWtlIHBob25lIG51bWJlcnMgb3IgZW1haWwgYWRkcmVzc2VzXHJcbiAgKiBoZWFsdGggb3IgZmluYW5jaWFsIGluZm9ybWF0aW9uIChpbmNsdWRpbmcgaW5zdXJhbmNlIGluZm9ybWF0aW9uLCBzb2NpYWwgc2VjdXJpdHkgbnVtYmVycywgZXRjLilcclxuICAqIGluZm9ybWF0aW9uIGFib3V0IHBvbGl0aWNhbCBvciByZWxpZ2lvdXMgYWZmaWxpYXRpb25zXHJcbiAgKiBpbmZvcm1hdGlvbiBhYm91dCByYWNlLCBldGhuaWNpdHksIHNleHVhbCBvcmllbnRhdGlvbiwgZ2VuZGVyLCBvciBvdGhlciBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiB0aGF0IGNvdWxkIGJlIHVzZWQgZm9yIGRpc2NyaW1pbmF0b3J5IHB1cnBvc2VzXHJcbiogRG8gbm90IGludGVudGlvbmFsbHkgYWNjZXNzIG90aGVycycgUElJLiBJZiB5b3Ugc3VzcGVjdCBhIHNlcnZpY2UgcHJvdmlkZXMgYWNjZXNzIHRvIFBJSSwgbGltaXQgcXVlcmllcyB0byB5b3VyIG93biBwZXJzb25hbCBpbmZvcm1hdGlvbi5cclxuKiBSZXBvcnQgdGhlIHZ1bG5lcmFiaWxpdHkgKmltbWVkaWF0ZWx5KiBhbmQgZG8gbm90IGF0dGVtcHQgdG8gYWNjZXNzIGFueSBvdGhlciBkYXRhLiBUaGUgR2l0SHViIFNlY3VyaXR5IHRlYW0gd2lsbCBhc3Nlc3MgdGhlIHNjb3BlIGFuZCBpbXBhY3Qgb2YgdGhlIFBJSSBleHBvc3VyZS5cclxuKiBMaW1pdCB0aGUgYW1vdW50IG9mIGRhdGEgcmV0dXJuZWQgZnJvbSBzZXJ2aWNlcy4gRm9yIFNRTCBpbmplY3Rpb24sIGZvciBleGFtcGxlLCBsaW1pdCB0aGUgbnVtYmVyIG9mIHJvd3MgcmV0dXJuZWRcclxuKiBZb3UgbXVzdCBkZWxldGUgYWxsIHlvdXIgbG9jYWwsIHN0b3JlZCwgb3IgY2FjaGVkIGNvcGllcyBvZiBkYXRhIGNvbnRhaW5pbmcgUElJIGFzIHNvb24gYXMgcG9zc2libGUuIFdlIG1heSBhc2sgeW91IHRvIHNpZ24gYSBjZXJ0aWZpY2F0ZSBvZiBkZWxldGlvbiBhbmQgY29uZmlkZW50aWFsaXR5IGFncmVlbWVudCByZWdhcmRpbmcgdGhlIGV4YWN0IGluZm9ybWF0aW9uIHlvdSBhY2Nlc3NlZC4gVGhpcyBhZ3JlZW1lbnQgd2lsbCBub3QgYWZmZWN0IHlvdXIgYm91bnR5IHJld2FyZC5cclxuKiBXZSBtYXkgYXNrIHlvdSBmb3IgdGhlIHVzZXJuYW1lcyBhbmQgSVAgYWRkcmVzc2VzIHVzZWQgZHVyaW5nIHlvdXIgdGVzdGluZyB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGUgdnVsbmVyYWJpbGl0eVxyXG5cclxuXHJcbiMjIyBSZXBvcnRpbmcgeW91ciB2dWxuZXJhYmlsaXR5XHJcblxyXG4qIFN1Ym1pc3Npb25zIG11c3QgaW5jbHVkZSB3cml0dGVuIGluc3RydWN0aW9ucyBmb3IgcmVwcm9kdWNpbmcgdGhlIHZ1bG5lcmFiaWxpdHkuIFN1Ym1pc3Npb25zIHdpdGhvdXQgY2xlYXIgcmVwcm9kdWN0aW9uIHN0ZXBzIG9yIHdoaWNoIG9ubHkgaW5jbHVkZSByZXByb2R1Y3Rpb24gc3RlcHMgaW4gdmlkZW8gZm9ybSBtYXkgYmUgaW5lbGlnaWJsZSBmb3IgYSByZXdhcmQuXHJcbiogV2hlbiByZXBvcnRpbmcgdnVsbmVyYWJpbGl0aWVzIHlvdSBtdXN0IGtlZXAgYWxsIGluZm9ybWF0aW9uIG9uIEhhY2tlck9uZS4gRG8gbm90IHBvc3QgaW5mb3JtYXRpb24gdG8gdmlkZW8tc2hhcmluZyBvciBwYXN0ZWJpbiBzaXRlcy4gVmlkZW9zIGFuZCBpbWFnZXMgY2FuIGJlIHVwbG9hZGVkIGRpcmVjdGx5IHZpYSBIYWNrZXJPbmUuXHJcbiogRm9yIHZ1bG5lcmFiaWxpdGllcyBpbnZvbHZpbmcgcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24sIHBsZWFzZSBleHBsYWluIHRoZSBraW5kIG9mIFBJSSB5b3UgYmVsaWV2ZSBpcyBleHBvc2VkIGFuZCBsaW1pdCB0aGUgYW1vdW50IG9mIFBJSSBkYXRhIGluY2x1ZGVkIGluIHlvdXIgc3VibWlzc2lvbnMuIEZvciB0ZXh0dWFsIGluZm9ybWF0aW9uIGFuZCBzY3JlZW5zaG90cywgcGxlYXNlIG9ubHkgaW5jbHVkZSByZWRhY3RlZCBkYXRhIGluIHlvdXIgc3VibWlzc2lvbi5cclxuKiBEbyBub3QgcHVibGljbHkgZGlzY2xvc2UgeW91ciBzdWJtaXNzaW9uIHVudGlsIEdpdEh1YiBoYXMgZXZhbHVhdGVkIHRoZSBpbXBhY3QuXHJcblxyXG5cclxuIyMjIFJlY2VpdmluZyB5b3VyIGF3YXJkXHJcblxyXG4qIEFsbCByZXdhcmQgYW1vdW50cyBhcmUgZGV0ZXJtaW5lZCBieSBvdXIgW3NldmVyaXR5IGd1aWRlbGluZXNdKGh0dHBzOi8vYm91bnR5LmdpdGh1Yi5jb20vI3NldmVyaXR5LWd1aWRlbGluZXMpLlxyXG4qIFdoZW4gZHVwbGljYXRlcyBvY2N1ciwgd2Ugb25seSBhd2FyZCB0aGUgZmlyc3QgcmVwb3J0IHRoYXQgd2FzIHJlY2VpdmVkIChwcm92aWRlZCB0aGF0IGl0IGNhbiBiZSBmdWxseSByZXByb2R1Y2VkKS5cclxuKiBZb3UgYXJlIGZyZWUgdG8gcHVibGlzaCB3cml0ZS11cHMgYWJvdXQgeW91ciB2dWxuZXJhYmlsaXR5IGFuZCBHaXRIdWIgd2lsbCBub3QgbGltaXQgd2hhdCB5b3Ugd3JpdGUuIFdlIG1heSBwYXkgb3V0IHlvdXIgcmV3YXJkIGJlZm9yZSB0aGUgdnVsbmVyYWJpbGl0eSBpcyBwYXRjaGVkIHNvIHdlIG1heSBhc2sgdGhhdCB5b3UgZGVsYXkgcHVibGlzaGluZyB0byBrZWVwIG90aGVyIEdpdEh1YiB1c2VycyBzYWZlLlxyXG4qIE1lZGl1bSwgaGlnaCwgYW5kIGNyaXRpY2FsIHNldmVyaXR5IGlzc3VlcyB3aWxsIGJlIHdyaXR0ZW4gdXAgb24gdGhlIEdpdEh1YiBCdWcgQm91bnR5IHNpdGUgYW5kIGluY2x1ZGVkIGluIG91ciBsZWFkZXJib2FyZC4gV2UgZG9uJ3QgY3VycmVudGx5IHBvc3Qgd3JpdGUtdXBzIGZvciBsb3cgc2V2ZXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxyXG4qIFlvdSBtYXkgcHJlZmVyIHRoZSByZXdhcmQgZ28gdG93YXJkIGhlbHBpbmcgb3RoZXJzLiBJZiB5b3UgY2hvb3NlIHNvLCBHaXRIdWIgd2lsbCBkb25hdGUgeW91ciByZXdhcmQgdG8gYW4gZXN0YWJsaXNoZWQgNTAxKGMpKDMpIGNoYXJpdGFibGUgb3JnYW5pemF0aW9uIG9mIHlvdXIgY2hvaWNlLiBHaXRIdWIgd2lsbCBhbHNvIG1hdGNoIHlvdXIgZG9uYXRpb24gLSBzdWJqZWN0IHRvIG91ciBkaXNjcmV0aW9uLiBBbnkgcmV3YXJkcyB0aGF0IGdvIHVuY2xhaW1lZCBhZnRlciAxMiBtb250aHMgd2lsbCBiZSBkb25hdGVkIHRvIGEgY2hhcml0eSBvZiBHaXRIdWIncyBjaG9vc2luZy5cclxuXHJcblxyXG4jIyBTY29wZVxyXG5cclxuR2l0SHViIHJ1bnMgYSBudW1iZXIgb2Ygc2VydmljZXMgYnV0IG9ubHkgc3VibWlzc2lvbnMgdW5kZXIgdGhlIGZvbGxvd2luZyBkb21haW5zIGFyZSBlbGlnaWJsZSBmb3IgcmV3YXJkcy4gQW55IEdpdEh1Yi1vd25lZCBkb21haW5zIG5vdCBsaXN0ZWQgYmVsb3cgYXJlICpub3QqIGluLXNjb3BlLCAqbm90KiBlbGlnaWJsZSBmb3IgcmV3YXJkcyBhbmQgKm5vdCogY292ZXJlZCBieSBvdXIgW2xlZ2FsIHNhZmUgaGFyYm9yXShodHRwczovL2JvdW50eS5naXRodWIuY29tI2xlZ2FsX3NhZmVfaGFyYm9yKS5cclxuXHJcblxyXG4jIyMgZ2l0aHViLmNvbVxyXG5cclxuT3VyIG1haW4gZG9tYWluIGhvc3RpbmcgdXNlci1mYWNpbmcgR2l0SHViIHNlcnZpY2VzLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1Yi5jb21gIGFyZSBpbi1zY29wZSAqZXhjZXB0KjpcclxuKiBgYmxvZy5naXRodWIuY29tYFxyXG4qIGBjb21tdW5pdHkuZ2l0aHViLmNvbWBcclxuKiBgZW1haWwuZW50ZXJwcmlzZS5naXRodWIuY29tYFxyXG4qIGBlbWFpbC5maW5hbmNlLmdpdGh1Yi5jb21gXHJcbiogYGVtYWlsLnN0YWdpbmcuZmluYW5jZS5naXRodWIuY29tYFxyXG4qIGBlbWFpbC5zdXBwb3J0LmdpdGh1Yi5jb21gXHJcbiogYGVtYWlsLnZlcmlmeS5naXRodWIuY29tYFxyXG4qIGBnb29nbGU3NjUwZGNmNjE0NmYwNGQ4LmdpdGh1Yi5jb21gXHJcbiogYGsxLl9kb21haW5rZXkuZ2l0aHViLmNvbWBcclxuKiBgazEuX2RvbWFpbmtleS5tY21haWwuZ2l0aHViLmNvbWBcclxuKiBgbWNtYWlsLmdpdGh1Yi5jb21gXHJcbiogYHJlc291cmNlcy5naXRodWIuY29tYFxyXG4qIGAqLnJlc291cmNlcy5naXRodWIuY29tYFxyXG4qIGBzZ21haWwuZ2l0aHViLmNvbWBcclxuKiBgKi5zZ21haWwuZ2l0aHViLmNvbWBcclxuKiBgc2hvcC5naXRodWIuY29tYFxyXG4qIGBzbXRwLmdpdGh1Yi5jb21gXHJcbiogYCouc210cC5naXRodWIuY29tYFxyXG4qIGBzdXBwb3J0LmdpdGh1Yi5jb21gXHJcblxyXG4jIyMgZ2l0aHViYXNzZXRzLmNvbVxyXG5cclxuT3VyIGRvbWFpbiBmb3IgaG9zdGluZyBzdGF0aWMgYXNzZXRzLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1YmFzc2V0cy5jb21gIGFyZSBpbi1zY29wZVxyXG5cclxuIyMjIGdpdGh1YnVzZXJjb250ZW50LmNvbVxyXG5cclxuT3VyIGRvbWFpbiBmb3IgaG9zdGluZyBhbmQgcmVuZGVyaW5nIHVzZXJzJyBkYXRhLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGdpdGh1YnVzZXJjb250ZW50LmNvbWAgYXJlIGluLXNjb3BlXHJcblxyXG4jIyMgZ2l0aHViYXBwLmNvbVxyXG5cclxuT3VyIGRvbWFpbiBmb3IgaG9zdGluZyBlbXBsb3llZS1mYWNpbmcgc2VydmljZXMuLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgZ2l0aHViYXBwLmNvbWAgYXJlIGluLXNjb3BlICpleGNlcHQqOlxyXG4qIGBhdG9tLWlvLmdpdGh1YmFwcC5jb21gXHJcbiogYGF0b20taW8tc3RhZ2luZy5naXRodWJhcHAuY29tYFxyXG4qIGBlbWFpbC5lbnRlcnByaXNlLXN0YWdpbmcuZ2l0aHViYXBwLmNvbWBcclxuKiBgZW1haWwuaGF5c3RhY2suZ2l0aHViYXBwLmNvbWBcclxuKiBgcmVwbHkuZ2l0aHViYXBwLmNvbWBcclxuXHJcbiMjIyBnaXRodWIubmV0XHJcblxyXG5PdXIgZG9tYWluIGZvciBob3N0aW5nIEdpdEh1YidzIGludGVybmFsIHByb2R1Y3Rpb24gc2VydmljZXMuIE1hbnkgb2YgdGhlc2Ugc2VydmljZXMgYXJlIG5vdCBhY2Nlc3NpYmxlIGZyb20gb3V0c2lkZSBvdXIgaW50ZXJuYWwgbmV0d29yay4uIEFsbCBzdWJkb21haW5zIHVuZGVyIGBnaXRodWIubmV0YCBhcmUgaW4tc2NvcGVcclxuXHJcbiMjIyBzZW1tbGUuY29tXHJcblxyXG5PdXIgbWFpbiBkb21haW4gZm9yIFNlbW1sZSBhbmQgTEdUTSBzZXJ2aWNlcy4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYHNlbW1sZS5jb21gIGFyZSBpbi1zY29wZSAqZXhjZXB0KjpcclxuKiBgZGV2LnNlbW1sZS5jb21gXHJcbiogYGdpdC5zZW1tbGUuY29tYFxyXG4qIGBqaXJhLnNlbW1sZS5jb21gXHJcbiogYHdpa2kuc2VtbWxlLmNvbWBcclxuXHJcbiMjIyBzZW1tbGUubmV0XHJcblxyXG5PdXIgZG9tYWluIGZvciBub24tcHJvZHVjdGlvbiBTZW1tbGUgc2VydmljZXMuIEFsbCBzdWJkb21haW5zIHVuZGVyIGBzZW1tbGUubmV0YCBhcmUgaW4tc2NvcGVcclxuXHJcbiMjIyBkb3dubG9hZHMubGd0bS5jb21cclxuXHJcbk91ciBkb21haW4gZm9yIHNlcnZpbmcgTEdUTSBkb3dubG9hZHMuLiBBbGwgc3ViZG9tYWlucyB1bmRlciBgZG93bmxvYWRzLmxndG0uY29tYCBhcmUgaW4tc2NvcGVcclxuXHJcbiMjIyBsZ3RtLWNvbS5wZW50ZXN0aW5nLnNlbW1sZS5uZXRcclxuXHJcbkFuIGluc3RhbmNlIG9mIFtMR1RNXShodHRwczovL2JvdW50eS5naXRodWIuY29tL3RhcmdldHMvbGd0bS5odG1sKSBlc3BlY2lhbGx5IGZvciBCdWcgQm91bnR5IHJlc2VhcmNoLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGxndG0tY29tLnBlbnRlc3Rpbmcuc2VtbWxlLm5ldGAgYXJlIGluLXNjb3BlXHJcblxyXG4jIyMgYmFja2VuZC1kb3QtbGd0bS1wZW5ldHJhdGlvbi10ZXN0aW5nLmFwcHNwb3QuY29tXHJcblxyXG5BbiBpbnN0YW5jZSBvZiBbTEdUTV0oaHR0cHM6Ly9ib3VudHkuZ2l0aHViLmNvbS90YXJnZXRzL2xndG0uaHRtbCkncyBiYWNrZW5kIHVzZWQgZm9yIHRyaWdnZXJpbmcgYXV0b21hdGVkIHRhc2tzLi4gQWxsIHN1YmRvbWFpbnMgdW5kZXIgYGJhY2tlbmQtZG90LWxndG0tcGVuZXRyYXRpb24tdGVzdGluZy5hcHBzcG90LmNvbWAgYXJlIGluLXNjb3BlXHJcblxyXG4jIyBTZXZlcml0eSBHdWlkZWxpbmVzXHJcblxyXG5BbGwgYm91bnR5IHN1Ym1pc3Npb25zIGFyZSByYXRlZCBieSBHaXRIdWIgdXNpbmcgYSBwdXJwb3NlZnVsbHkgc2ltcGxlIHNjYWxlLiBFYWNoIHZ1bG5lcmFiaWxpdHkgaXMgdW5pcXVlIGJ1dCB0aGUgZm9sbG93aW5nIGlzIGEgcm91Z2ggZ3VpZGVsaW5lIHdlIHVzZSBpbnRlcm5hbGx5IGZvciByYXRpbmcgYW5kIHJld2FyZGluZyBzdWJtaXNzaW9uczpcclxuXHJcblxyXG4jIyMgQ3JpdGljYWw6ICQyMCwwMDAgLSAkMzAsMDAwXHJcblxyXG5Dcml0aWNhbCBzZXZlcml0eSBpc3N1ZXMgcHJlc2VudCBhIGRpcmVjdCBhbmQgaW1tZWRpYXRlIHJpc2sgdG8gYSBicm9hZCBhcnJheSBvZiBvdXIgdXNlcnMgb3IgdG8gR2l0SHViIGl0c2VsZi4gVGhleSBvZnRlbiBhZmZlY3QgcmVsYXRpdmVseSBsb3ctbGV2ZWwvZm91bmRhdGlvbmFsIGNvbXBvbmVudHMgaW4gb25lIG9mIG91ciBhcHBsaWNhdGlvbiBzdGFja3Mgb3IgaW5mcmFzdHJ1Y3R1cmUuIEZvciBleGFtcGxlOlxyXG4qIGFyYml0cmFyeSBjb2RlL2NvbW1hbmQgZXhlY3V0aW9uIG9uIGEgR2l0SHViIHNlcnZlciBpbiBvdXIgcHJvZHVjdGlvbiBuZXR3b3JrLlxyXG4qIGFyYml0cmFyeSBTUUwgcXVlcmllcyBvbiB0aGUgR2l0SHViIHByb2R1Y3Rpb24gZGF0YWJhc2UuXHJcbiogYnlwYXNzaW5nIHRoZSBHaXRIdWIgbG9naW4gcHJvY2VzcywgZWl0aGVyIHBhc3N3b3JkIG9yIDJGQS5cclxuKiBhY2Nlc3MgdG8gc2Vuc2l0aXZlIHByb2R1Y3Rpb24gdXNlciBkYXRhIG9yIGFjY2VzcyB0byBpbnRlcm5hbCBwcm9kdWN0aW9uIHN5c3RlbXMuXHJcbiogYWNjZXNzaW5nIGFub3RoZXIgdXNlcidzIGRhdGEgaW4gdGhlIEdpdEh1YiBBY3Rpb25zIHNlcnZpY2UuXHJcblxyXG5UaGUgdXBwZXIgYm91bmQgZm9yIGNyaXRpY2FsIHZ1bG5lcmFiaWxpdGllcywgJDMwLDAwMCwgaXMgb25seSBhIGd1aWRlbGluZSBhbmQgR2l0SHViIG1heSByZXdhcmQgaGlnaGVyIGFtb3VudHMgZm9yIGV4Y2VwdGlvbmFsIHJlcG9ydHMuXHJcblxyXG5cclxuIyMjIEhpZ2g6ICQxMCwwMDAgLSAkMjAsMDAwXHJcblxyXG5IaWdoIHNldmVyaXR5IGlzc3VlcyBhbGxvdyBhbiBhdHRhY2tlciB0byByZWFkIG9yIG1vZGlmeSBoaWdobHkgc2Vuc2l0aXZlIGRhdGEgdGhhdCB0aGV5IGFyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MuIFRoZXkgYXJlIGdlbmVyYWxseSBtb3JlIG5hcnJvdyBpbiBzY29wZSB0aGFuIGNyaXRpY2FsIGlzc3VlcywgdGhvdWdoIHRoZXkgbWF5IHN0aWxsIGdyYW50IGFuIGF0dGFja2VyIGV4dGVuc2l2ZSBhY2Nlc3MuIEZvciBleGFtcGxlOlxyXG4qIGluamVjdGluZyBhdHRhY2tlciBjb250cm9sbGVkIGNvbnRlbnQgaW50byBHaXRIdWIuY29tIChYU1MpIHdoaWNoIGJ5cGFzc2VzIENTUC5cclxuKiBieXBhc3NpbmcgYXV0aG9yaXphdGlvbiBsb2dpYyB0byBncmFudCBhIHJlcG9zaXRvcnkgY29sbGFib3JhdG9yIG1vcmUgYWNjZXNzIHRoYW4gaW50ZW5kZWQuXHJcbiogZGlzY292ZXJpbmcgc2Vuc2l0aXZlIHVzZXIgb3IgR2l0SHViIGRhdGEgaW4gYSBwdWJsaWNseSBleHBvc2VkIHJlc291cmNlLCBzdWNoIGFzIGFuIFMzIGJ1Y2tldC5cclxuKiBnYWluaW5nIGFjY2VzcyB0byBhIG5vbi1jcml0aWNhbCByZXNvdXJjZSB0aGF0IG9ubHkgR2l0SHViIGVtcGxveWVlcyBzaG91bGQgYmUgYWJsZSB0byByZWFjaC5cclxuKiB1c2luZyB0aGUgR2l0SHViIEFjdGlvbnMgcmVwby1zY29wZWQgR2l0SHViIHRva2VuIHRvIGFjY2VzcyBoaWdoLXJpc2sgcHJpdmF0ZSBjb250ZW50IG91dHNpZGUgb2YgdGhhdCByZXBvc2l0b3J5LlxyXG4qIGNvZGUgZXhlY3V0aW9uIGluIGEgZGVza3RvcCBhcHAgdGhhdCByZXF1aXJlcyBubyB1c2VyIGludGVyYWN0aW9uLlxyXG5cclxuXHJcbiMjIyBNZWRpdW06ICQ0LDAwMCAtICQxMCwwMDBcclxuXHJcbk1lZGl1bSBzZXZlcml0eSBpc3N1ZXMgYWxsb3cgYW4gYXR0YWNrZXIgdG8gcmVhZCBvciBtb2RpZnkgbGltaXRlZCBhbW91bnRzIG9mIGRhdGEgdGhhdCB0aGV5IGFyZSBub3QgYXV0aG9yaXplZCB0byBhY2Nlc3MuIFRoZXkgZ2VuZXJhbGx5IGdyYW50IGFjY2VzcyB0byBsZXNzIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiB0aGFuIGhpZ2ggc2V2ZXJpdHkgaXNzdWVzLiBGb3IgZXhhbXBsZTpcclxuKiBkaXNjbG9zaW5nIHRoZSB0aXRsZSBvZiBpc3N1ZXMgaW4gcHJpdmF0ZSByZXBvc2l0b3JpZXMgd2hpY2ggc2hvdWxkIGJlIGJlIGluYWNjZXNzaWJsZS5cclxuKiBpbmplY3RpbmcgYXR0YWNrZXIgY29udHJvbGxlZCBjb250ZW50IGludG8gR2l0SHViLmNvbSAoWFNTKSBidXQgbm90IGJ5cGFzc2luZyBDU1Agb3IgZXhlY3V0aW5nIHNlbnNpdGl2ZSBhY3Rpb25zIHdpdGggYW5vdGhlciB1c2VyJ3Mgc2Vzc2lvbi5cclxuKiBieXBhc3NpbmcgQ1NSRiB2YWxpZGF0aW9uIGZvciBsb3cgcmlzayBhY3Rpb25zLCBzdWNoIGFzIHN0YXJyaW5nIGEgcmVwb3NpdG9yeSBvciB1bnN1YnNjcmliaW5nIGZyb20gYSBtYWlsaW5nIGxpc3QuXHJcbiogZXNjYXBpbmcgdGhlIExHVE0gd29ya2VyIHNhbmRib3ggdG8gYWNjZXNzIG90aGVyIHVzZXIncyBkYXRhIG9yIHByaXZhdGUgbmV0d29ya2VkIHJlc291cmNlc1xyXG5cclxuXHJcbiMjIyBMb3c6ICQ2MTcgLSAkMiwwMDBcclxuXHJcbkxvdyBzZXZlcml0eSBpc3N1ZXMgYWxsb3cgYW4gYXR0YWNrZXIgdG8gYWNjZXNzIGV4dHJlbWVseSBsaW1pdGVkIGFtb3VudHMgb2YgZGF0YS4gVGhleSBtYXkgdmlvbGF0ZSBhbiBleHBlY3RhdGlvbiBmb3IgaG93IHNvbWV0aGluZyBpcyBpbnRlbmRlZCB0byB3b3JrLCBidXQgaXQgYWxsb3dzIG5lYXJseSBubyBlc2NhbGF0aW9uIG9mIHByaXZpbGVnZSBvciBhYmlsaXR5IHRvIHRyaWdnZXIgdW5pbnRlbmRlZCBiZWhhdmlvciBieSBhbiBhdHRhY2tlci4gRm9yIGV4YW1wbGU6XHJcbiogc2lnbmluZyB1cCBhcmJpdHJhcnkgdXNlcnMgZm9yIGFjY2VzcyB0byBhbiBcImVhcmx5IGFjY2VzcyBmZWF0dXJlXCIgd2l0aG91dCB0aGVpciBjb25zZW50LlxyXG4qIGNyZWF0aW5nIGFuIGlzc3VlIGNvbW1lbnQgdGhhdCBieXBhc3NlcyBvdXIgaW1hZ2UgcHJveHlpbmcgZmlsdGVyIGJ5IHByb3ZpZGluZyBhIG1hbGZvcm1lZCBVUkwuXHJcbiogYnlwYXNzaW5nIGNvbW11bml0eS1hbmQtc2FmZXR5IGZlYXR1cmVzIHN1Y2ggYXMgbG9ja2VkIGNvbnZlcnNhdGlvbnMuXHJcbiogYnlwYXNzaW5nIGJpbGxpbmcgJiBwbGFuIHJlc3RyaWN0aW9ucyB0byBnYWluIGFjY2VzcyB0byBwYWlkIGZlYXR1cmVzLlxyXG4qIHRyaWdnZXJpbmcgdmVyYm9zZSBvciBkZWJ1ZyBlcnJvciBwYWdlcyB3aXRob3V0IHByb29mIG9mIGV4cGxvaXRhYmlsaXR5IG9yIG9idGFpbmluZyBzZW5zaXRpdmUgaW5mb3JtYXRpb24uXHJcbiogdHJpZ2dlcmluZyBhcHBsaWNhdGlvbiBleGNlcHRpb25zIHRoYXQgY291bGQgYWZmZWN0IG1hbnkgR2l0SHViIHVzZXJzLlxyXG4qIHRyaWdnZXJpbmcgWFNTIG9yIENTUkYgdnVsbmVyYWJpbGl0aWVzIGluIExHVE1cclxuIiwiY3JlYXRlZF9hdCI6IjIwMTYtMDQtMTVUMTc6MTA6MzEuMjYxWiIsInVwZGF0ZWRfYXQiOiIyMDIwLTAzLTA5VDIwOjI0OjUyLjQxOFoifX19LCJ3ZWFrbmVzcyI6eyJkYXRhIjp7ImlkIjoiOSIsInR5cGUiOiJ3ZWFrbmVzcyIsImF0dHJpYnV0ZXMiOnsibmFtZSI6IkJ1ZmZlciBPdmVyLXJlYWQiLCJkZXNjcmlwdGlvbiI6IlRoZSBzb2Z0d2FyZSByZWFkcyBmcm9tIGEgYnVmZmVyIHVzaW5nIGJ1ZmZlciBhY2Nlc3MgbWVjaGFuaXNtcyBzdWNoIGFzIGluZGV4ZXMgb3IgcG9pbnRlcnMgdGhhdCByZWZlcmVuY2UgbWVtb3J5IGxvY2F0aW9ucyBhZnRlciB0aGUgdGFyZ2V0ZWQgYnVmZmVyLiIsImV4dGVybmFsX2lkIjoiY3dlLTEyNiIsImNyZWF0ZWRfYXQiOiIyMDE3LTAxLTA1VDAxOjUxOjE5LjAwMFoifX19LCJzdHJ1Y3R1cmVkX3Njb3BlIjp7ImRhdGEiOnsiaWQiOiIxNTQ1NSIsInR5cGUiOiJzdHJ1Y3R1cmVkLXNjb3BlIiwiYXR0cmlidXRlcyI6eyJhc3NldF90eXBlIjoiVVJMIiwiYXNzZXRfaWRlbnRpZmllciI6InJlbmRlci5naXRodWIuY29tIiwiZWxpZ2libGVfZm9yX2JvdW50eSI6dHJ1ZSwiZWxpZ2libGVfZm9yX3N1Ym1pc3Npb24iOnRydWUsImluc3RydWN0aW9uIjoiIiwibWF4X3NldmVyaXR5IjoiY3JpdGljYWwiLCJjcmVhdGVkX2F0IjoiMjAxOC0xMC0xMFQwMDo0MDo1MS40NzlaIiwidXBkYXRlZF9hdCI6IjIwMTgtMTAtMTBUMDA6NDA6NTEuNDc5WiIsInJlZmVyZW5jZSI6IiIsImNvbmZpZGVudGlhbGl0eV9yZXF1aXJlbWVudCI6Im1lZGl1bSIsImludGVncml0eV9yZXF1aXJlbWVudCI6Im1lZGl1bSIsImF2YWlsYWJpbGl0eV9yZXF1aXJlbWVudCI6ImxvdyJ9fX0sImJvdW50aWVzIjp7ImRhdGEiOltdfSwiY3VzdG9tX2ZpZWxkX3ZhbHVlcyI6eyJkYXRhIjpbXX19fV0sImxpbmtzIjp7fX0=
|
75
|
+
http_version: null
|
76
|
+
recorded_at: Tue, 24 Mar 2020 14:11:47 GMT
|
77
|
+
recorded_with: VCR 5.1.0
|
@@ -0,0 +1,78 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.hackerone.com/v1/reports/200/severities
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: '{"data":{"type":"severity","attributes":{"rating":"high"}}}'
|
9
|
+
headers:
|
10
|
+
Authorization:
|
11
|
+
- Basic NOPE
|
12
|
+
User-Agent:
|
13
|
+
- Faraday v1.0.0
|
14
|
+
Content-Type:
|
15
|
+
- application/json
|
16
|
+
Accept-Encoding:
|
17
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
18
|
+
Accept:
|
19
|
+
- "*/*"
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 200
|
23
|
+
message: OK
|
24
|
+
headers:
|
25
|
+
Date:
|
26
|
+
- Mon, 23 Mar 2020 22:11:50 GMT
|
27
|
+
Content-Type:
|
28
|
+
- application/json; charset=utf-8
|
29
|
+
Transfer-Encoding:
|
30
|
+
- chunked
|
31
|
+
Connection:
|
32
|
+
- keep-alive
|
33
|
+
Set-Cookie:
|
34
|
+
- __cfduid=defc457f4849bd5da92f0d0a9e21f70cf1585001510; expires=Wed, 22-Apr-20
|
35
|
+
22:11:50 GMT; path=/; Domain=api.hackerone.com; HttpOnly; SameSite=Lax; Secure
|
36
|
+
X-Request-Id:
|
37
|
+
- bc58a27f-3140-4457-b7b0-12a3c86f4f03
|
38
|
+
Etag:
|
39
|
+
- W/"30c2790e73edc770a9ed3fea69f0e8ea"
|
40
|
+
Cache-Control:
|
41
|
+
- max-age=0, private, must-revalidate
|
42
|
+
Strict-Transport-Security:
|
43
|
+
- max-age=31536000; includeSubDomains; preload
|
44
|
+
X-Frame-Options:
|
45
|
+
- DENY
|
46
|
+
X-Content-Type-Options:
|
47
|
+
- nosniff
|
48
|
+
X-Xss-Protection:
|
49
|
+
- 1; mode=block
|
50
|
+
X-Download-Options:
|
51
|
+
- noopen
|
52
|
+
X-Permitted-Cross-Domain-Policies:
|
53
|
+
- none
|
54
|
+
Referrer-Policy:
|
55
|
+
- strict-origin-when-cross-origin
|
56
|
+
Expect-Ct:
|
57
|
+
- enforce, max-age=86400
|
58
|
+
Content-Security-Policy:
|
59
|
+
- 'default-src ''none''; base-uri ''self''; block-all-mixed-content; child-src
|
60
|
+
www.youtube-nocookie.com; connect-src ''self'' www.google-analytics.com errors.hackerone.net;
|
61
|
+
font-src ''self''; form-action ''self''; frame-ancestors ''none''; img-src
|
62
|
+
''self'' data: cover-photos.hackerone-user-content.com hackathon-photos.hackerone-user-content.com
|
63
|
+
profile-photos.hackerone-user-content.com hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
64
|
+
media-src ''self'' hackerone-us-west-2-production-attachments.s3.us-west-2.amazonaws.com;
|
65
|
+
script-src ''self'' www.google-analytics.com; style-src ''self'' ''unsafe-inline'';
|
66
|
+
report-uri https://errors.hackerone.net/api/30/csp-report/?sentry_key=61c1e2f50d21487c97a071737701f598'
|
67
|
+
Cf-Cache-Status:
|
68
|
+
- DYNAMIC
|
69
|
+
Server:
|
70
|
+
- cloudflare
|
71
|
+
Cf-Ray:
|
72
|
+
- 578b7d8e9faa3856-ATL
|
73
|
+
body:
|
74
|
+
encoding: ASCII-8BIT
|
75
|
+
string: '{"data":{"id":"668494","type":"severity","attributes":{"rating":"high","author_type":"Team","user_id":983615,"created_at":"2020-03-23T22:11:50.360Z"}}}'
|
76
|
+
http_version: null
|
77
|
+
recorded_at: Mon, 23 Mar 2020 22:11:50 GMT
|
78
|
+
recorded_with: VCR 5.1.0
|
data/lib/hackerone/client.rb
CHANGED
@@ -14,8 +14,11 @@ require_relative "client/group"
|
|
14
14
|
require_relative "client/structured_scope"
|
15
15
|
require_relative "client/swag"
|
16
16
|
require_relative "client/address"
|
17
|
+
require_relative "client/attachment"
|
17
18
|
require_relative "client/bounty"
|
18
19
|
require_relative "client/incremental/activities"
|
20
|
+
require_relative "client/billing_balance"
|
21
|
+
require "active_support/core_ext/hash"
|
19
22
|
|
20
23
|
module HackerOne
|
21
24
|
module Client
|
@@ -28,6 +31,17 @@ module HackerOne
|
|
28
31
|
|
29
32
|
LENIENT_MODE_ENV_VARIABLE = "HACKERONE_CLIENT_LENIENT_MODE"
|
30
33
|
|
34
|
+
REPORT_STATES = %w(
|
35
|
+
new
|
36
|
+
triaged
|
37
|
+
needs-more-info
|
38
|
+
resolved
|
39
|
+
not-applicable
|
40
|
+
informative
|
41
|
+
duplicate
|
42
|
+
spam
|
43
|
+
)
|
44
|
+
|
31
45
|
class << self
|
32
46
|
ATTRS = [:low_range, :medium_range, :high_range, :critical_range].freeze
|
33
47
|
attr_accessor :program
|
@@ -66,17 +80,20 @@ module HackerOne
|
|
66
80
|
end
|
67
81
|
end
|
68
82
|
|
69
|
-
## Returns all
|
83
|
+
## Returns all reports in a given state, optionally with a time bound
|
70
84
|
#
|
71
85
|
# program: the HackerOne program to search on (configure globally with Hackerone::Client.program=)
|
72
86
|
# since (optional): a time bound, don't include reports earlier than +since+. Must be a DateTime object.
|
87
|
+
# state (optional): state that a report is in, by default new
|
73
88
|
#
|
74
89
|
# returns all open reports or an empty array
|
75
|
-
def reports(since: 3.days.ago)
|
90
|
+
def reports(since: 3.days.ago, state: :new)
|
76
91
|
raise ArgumentError, "Program cannot be nil" unless program
|
92
|
+
raise ArgumentError, "State is invalid" unless REPORT_STATES.include?(state.to_s)
|
93
|
+
|
77
94
|
response = self.class.hackerone_api_connection.get do |req|
|
78
95
|
options = {
|
79
|
-
"filter[state][]" =>
|
96
|
+
"filter[state][]" => state,
|
80
97
|
"filter[program][]" => program,
|
81
98
|
"filter[created_at__gt]" => since.iso8601
|
82
99
|
}
|
@@ -90,6 +107,35 @@ module HackerOne
|
|
90
107
|
end
|
91
108
|
end
|
92
109
|
|
110
|
+
## Public: create a new report
|
111
|
+
#
|
112
|
+
# title: The title of the report
|
113
|
+
# summary: Summary of the report
|
114
|
+
# impact: Impact of the report
|
115
|
+
# severity_rating: severity of report, must be one of https://api.hackerone.com/reference/#severity-ratings
|
116
|
+
# source: where the report came from, i.e. API, Bugcrowd, etc.
|
117
|
+
#
|
118
|
+
# returns an HackerOne::Client::Report object or raises an error if
|
119
|
+
# error during creation
|
120
|
+
def create_report(title:, summary:, impact:, severity_rating:, source:)
|
121
|
+
raise ArgumentError, "Program cannot be nil" unless program
|
122
|
+
|
123
|
+
data = {
|
124
|
+
"data": {
|
125
|
+
"type": "report",
|
126
|
+
"attributes": {
|
127
|
+
"team_handle": program,
|
128
|
+
"title": title,
|
129
|
+
"vulnerability_information": summary,
|
130
|
+
"impact": impact,
|
131
|
+
"severity_rating": severity_rating,
|
132
|
+
"source": source
|
133
|
+
}
|
134
|
+
}
|
135
|
+
}
|
136
|
+
Report.new(post("reports", data))
|
137
|
+
end
|
138
|
+
|
93
139
|
## Public: retrieve a report
|
94
140
|
#
|
95
141
|
# id: the ID of a specific report
|
@@ -15,6 +15,12 @@ module HackerOne
|
|
15
15
|
attributes.internal
|
16
16
|
end
|
17
17
|
|
18
|
+
def attachments
|
19
|
+
@attachments ||= activity.relationships.fetch(:attachments, {})
|
20
|
+
.fetch(:data, [])
|
21
|
+
.map { |attachment| HackerOne::Client::Attachment.new(attachment) }
|
22
|
+
end
|
23
|
+
|
18
24
|
private
|
19
25
|
|
20
26
|
def relationships
|
@@ -85,6 +91,9 @@ module HackerOne
|
|
85
91
|
delegate :message, :bounty_amount, :bonus_amount, to: :attributes
|
86
92
|
end
|
87
93
|
|
94
|
+
class ReportLocked < Activity
|
95
|
+
end
|
96
|
+
|
88
97
|
ACTIVITY_TYPE_CLASS_MAPPING = {
|
89
98
|
"activity-bounty-awarded" => BountyAwarded,
|
90
99
|
"activity-swag-awarded" => SwagAwarded,
|
@@ -93,7 +102,8 @@ module HackerOne
|
|
93
102
|
"activity-bug-triaged" => BugTriaged,
|
94
103
|
"activity-reference-id-added" => ReferenceIdAdded,
|
95
104
|
"activity-comment" => CommentAdded,
|
96
|
-
"activity-bounty-suggested" => BountySuggested
|
105
|
+
"activity-bounty-suggested" => BountySuggested,
|
106
|
+
"activity-comments-closed" => ReportLocked
|
97
107
|
}.freeze
|
98
108
|
|
99
109
|
def self.build(activity_data)
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HackerOne
|
4
|
+
module Client
|
5
|
+
class Attachment
|
6
|
+
delegate :expiring_url, :file_name, :content_type, :created_at, \
|
7
|
+
:file_size, to: :attributes
|
8
|
+
|
9
|
+
def initialize(attachment)
|
10
|
+
@attachment = attachment
|
11
|
+
end
|
12
|
+
|
13
|
+
def id
|
14
|
+
@attachment[:id]
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def attributes
|
20
|
+
OpenStruct.new(@attachment[:attributes])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HackerOne
|
4
|
+
module Client
|
5
|
+
class BillingBalance
|
6
|
+
delegate :balance, to: :attributes
|
7
|
+
|
8
|
+
def initialize(billing_balance)
|
9
|
+
@billing_balance = OpenStruct.new billing_balance
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def attributes
|
14
|
+
OpenStruct.new(@billing_balance[:attributes])
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -76,6 +76,13 @@ module HackerOne
|
|
76
76
|
response_body.map { |r| Swag.new(r, self) }
|
77
77
|
end
|
78
78
|
|
79
|
+
def balance
|
80
|
+
response_body = make_get_request(
|
81
|
+
"programs/#{id}/billing/balance"
|
82
|
+
)
|
83
|
+
BillingBalance.new(response_body).balance
|
84
|
+
end
|
85
|
+
|
79
86
|
private
|
80
87
|
|
81
88
|
def members
|
@@ -26,6 +26,22 @@ module HackerOne
|
|
26
26
|
duplicate
|
27
27
|
).map(&:to_sym).freeze
|
28
28
|
|
29
|
+
RESOLVED_STATES = %w(
|
30
|
+
resolved
|
31
|
+
not-applicable
|
32
|
+
informative
|
33
|
+
duplicate
|
34
|
+
spam
|
35
|
+
).map(&:to_sym).freeze
|
36
|
+
|
37
|
+
SEVERITY_RATINGS = %w(
|
38
|
+
none
|
39
|
+
low
|
40
|
+
medium
|
41
|
+
high
|
42
|
+
critical
|
43
|
+
).freeze
|
44
|
+
|
29
45
|
class << self
|
30
46
|
def add_on_state_change_hook(proc)
|
31
47
|
on_state_change_hooks << proc
|
@@ -64,6 +80,10 @@ module HackerOne
|
|
64
80
|
attributes[:issue_tracker_reference_id]
|
65
81
|
end
|
66
82
|
|
83
|
+
def severity
|
84
|
+
attributes[:severity]
|
85
|
+
end
|
86
|
+
|
67
87
|
def state
|
68
88
|
attributes[:state]
|
69
89
|
end
|
@@ -123,6 +143,12 @@ module HackerOne
|
|
123
143
|
classification_label.split("-").first
|
124
144
|
end
|
125
145
|
|
146
|
+
def attachments
|
147
|
+
@attachments ||= relationships.fetch(:attachments, {})
|
148
|
+
.fetch(:data, [])
|
149
|
+
.map { |attachment| HackerOne::Client::Attachment.new(attachment) }
|
150
|
+
end
|
151
|
+
|
126
152
|
def activities
|
127
153
|
if ships = relationships.fetch(:activities, {}).fetch(:data, [])
|
128
154
|
ships.map do |activity_data|
|
@@ -161,6 +187,23 @@ module HackerOne
|
|
161
187
|
Swag.new(response_body, program)
|
162
188
|
end
|
163
189
|
|
190
|
+
def update_severity(rating:)
|
191
|
+
raise ArgumentError, "Invalid severity rating" unless SEVERITY_RATINGS.include?(rating.to_s)
|
192
|
+
|
193
|
+
request_body = {
|
194
|
+
type: "severity",
|
195
|
+
attributes: {
|
196
|
+
rating: rating
|
197
|
+
}
|
198
|
+
}
|
199
|
+
response_body = make_post_request(
|
200
|
+
"reports/#{id}/severities",
|
201
|
+
request_body: request_body
|
202
|
+
)
|
203
|
+
@report[:attributes][:severity] = { rating: rating }
|
204
|
+
Activities.build(response_body)
|
205
|
+
end
|
206
|
+
|
164
207
|
def suggest_bounty(message:, amount:, bonus_amount: nil)
|
165
208
|
request_body = {
|
166
209
|
message: message,
|
@@ -263,6 +306,19 @@ module HackerOne
|
|
263
306
|
HackerOne::Client::Activities.build(response_json)
|
264
307
|
end
|
265
308
|
|
309
|
+
def lock!
|
310
|
+
unless RESOLVED_STATES.include? self.state.to_sym
|
311
|
+
raise ArgumentError, "Report must be closed before locking"
|
312
|
+
end
|
313
|
+
|
314
|
+
body = {
|
315
|
+
type: "activity-comments-closed"
|
316
|
+
}
|
317
|
+
|
318
|
+
response_json = make_put_request("reports/#{id}/close_comments", request_body: body)
|
319
|
+
HackerOne::Client::Activities.build(response_json)
|
320
|
+
end
|
321
|
+
|
266
322
|
def assign_to_user(name)
|
267
323
|
member = program.find_member(name)
|
268
324
|
_assign_to(member.user.id, :user)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hackerone-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.20.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Neil Matatall
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -142,12 +142,17 @@ files:
|
|
142
142
|
- fixtures/vcr_cassettes/award_a_bounty.yml
|
143
143
|
- fixtures/vcr_cassettes/award_swag.yml
|
144
144
|
- fixtures/vcr_cassettes/common_responses.yml
|
145
|
+
- fixtures/vcr_cassettes/create_report.yml
|
146
|
+
- fixtures/vcr_cassettes/create_report_invalid.yml
|
145
147
|
- fixtures/vcr_cassettes/dup.yml
|
146
148
|
- fixtures/vcr_cassettes/empty_report_list.yml
|
149
|
+
- fixtures/vcr_cassettes/get_balance.yml
|
150
|
+
- fixtures/vcr_cassettes/lock_report.yml
|
147
151
|
- fixtures/vcr_cassettes/missing_report.yml
|
148
152
|
- fixtures/vcr_cassettes/programs.yml
|
149
153
|
- fixtures/vcr_cassettes/report.yml
|
150
154
|
- fixtures/vcr_cassettes/report_list.yml
|
155
|
+
- fixtures/vcr_cassettes/report_list_triaged.yml
|
151
156
|
- fixtures/vcr_cassettes/reporters.yml
|
152
157
|
- fixtures/vcr_cassettes/server_error.yml
|
153
158
|
- fixtures/vcr_cassettes/server_error_when_assigning_report_to_user.yml
|
@@ -159,11 +164,14 @@ files:
|
|
159
164
|
- fixtures/vcr_cassettes/traverse_through_all_activities.yml
|
160
165
|
- fixtures/vcr_cassettes/triage_and_hook_assign_report_to_user.yml
|
161
166
|
- fixtures/vcr_cassettes/update_policy.yml
|
167
|
+
- fixtures/vcr_cassettes/update_severity.yml
|
162
168
|
- fixtures/vcr_cassettes/user_find_fransrosen.yml
|
163
169
|
- hackerone-client.gemspec
|
164
170
|
- lib/hackerone/client.rb
|
165
171
|
- lib/hackerone/client/activity.rb
|
166
172
|
- lib/hackerone/client/address.rb
|
173
|
+
- lib/hackerone/client/attachment.rb
|
174
|
+
- lib/hackerone/client/billing_balance.rb
|
167
175
|
- lib/hackerone/client/bounty.rb
|
168
176
|
- lib/hackerone/client/group.rb
|
169
177
|
- lib/hackerone/client/incremental/activities.rb
|