auth-sanitizer 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee9c13c8e833242ae444802320b2a44204222f09529c8d7d588bbb7f725e2dff
4
- data.tar.gz: 7fc39449d814609f58f5c7b6ce432bbb14fb532e5cf84e0a3f296e7e2e770763
3
+ metadata.gz: e553dcb05812a620438872bb9726ae4b87806b78e4a188f475db2962fb3ace16
4
+ data.tar.gz: c6f928c8ede605a82cce0bb88238eb855529d5464b0655372b6662b90770f537
5
5
  SHA512:
6
- metadata.gz: 1c3fdbb99b0835a7694818b891daebe08bdc6e1cd95348e214970bf02c3ece6caa41fc9ae9d22a118720c9064baf16c066c0a7718121362b7d7141622ec2ccd9
7
- data.tar.gz: 9057c5111136395c5418bfbd2acde6206d42a7c4b19d67e7fff8ae5449675019608557d4582ac53bd62f9b1792cdf56a186ffaac10989b5148a180e2cc48efcd
6
+ metadata.gz: '018736223d93b251e19b6b47f87ade2c70dd033762a97830cd73c13ea40dce3c175d4629140ca151d04ee64672fc3a46423ab70ea25d59b5e368078cbf119f3b'
7
+ data.tar.gz: '0897d315fefb00a8fd951e58a8a9ed0e85f97444394357b2a98d0e4b122cbff788da6fef4250512170eb18ee03bd5ba263bc6cb6512328527b7de0d1e9ad80bd'
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -30,6 +30,38 @@ Please file a bug if you notice a violation of semantic versioning.
30
30
 
31
31
  ### Security
32
32
 
33
+ ## [0.2.2] - 2026-06-18
34
+
35
+ - TAG: [v0.2.2][0.2.2t]
36
+ - COVERAGE: 100.00% -- 145/145 lines in 6 files
37
+ - BRANCH COVERAGE: 100.00% -- 28/28 branches in 6 files
38
+ - 84.62% documented
39
+
40
+ ### Changed
41
+
42
+ - Documented the released `anonymous_loader` gem as the preferred reusable
43
+ helper for zero-`auth-sanitizer`-namespace loading.
44
+
45
+ ### Fixed
46
+
47
+ - Documented the `$LOAD_PATH` fallback needed by isolated loader consumers when
48
+ Bundler standalone setup provides `auth_sanitizer/loader.rb` without a
49
+ matching `Gem.loaded_specs` or `GEM_PATH` entry.
50
+
51
+ ## [0.2.1] - 2026-06-06
52
+
53
+ - TAG: [v0.2.1][0.2.1t]
54
+ - COVERAGE: 100.00% -- 145/145 lines in 6 files
55
+ - BRANCH COVERAGE: 100.00% -- 28/28 branches in 6 files
56
+ - 84.62% documented
57
+
58
+ ### Fixed
59
+
60
+ - Removed the duplicate RBS declaration for `Auth::Sanitizer::VERSION`, fixing
61
+ `RBS::DuplicatedDeclarationError` in downstream projects.
62
+ - Fixed the README support table to list Ruby 2.3 as supported but untested,
63
+ matching the current runtime support and CI policy.
64
+
33
65
  ## [0.2.0] - 2026-06-04
34
66
 
35
67
  - TAG: [v0.2.0][0.2.0t]
@@ -137,7 +169,11 @@ Please file a bug if you notice a violation of semantic versioning.
137
169
 
138
170
  - Initial release
139
171
 
140
- [Unreleased]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.0...HEAD
172
+ [Unreleased]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.2...HEAD
173
+ [0.2.2]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.1...v0.2.2
174
+ [0.2.2t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.2
175
+ [0.2.1]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.2.0...v0.2.1
176
+ [0.2.1t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.1
141
177
  [0.2.0]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.1.5...v0.2.0
142
178
  [0.2.0t]: https://github.com/ruby-oauth/auth-sanitizer/releases/tag/v0.2.0
143
179
  [0.1.5]: https://github.com/ruby-oauth/auth-sanitizer/compare/v0.1.4...v0.1.5
data/LICENSE.md CHANGED
@@ -7,4 +7,4 @@ Choose the option that best fits your use case:
7
7
 
8
8
  ## Copyright Notice
9
9
 
10
- Copyright (c) 2026 Peter H. Boling
10
+ - Copyright (c) 2026 Peter H. Boling
data/README.md CHANGED
@@ -63,12 +63,18 @@ The returned module is an anonymously namespaced `Auth::Sanitizer`, suitable for
63
63
  Use `require: false` in gems that want to avoid every new top-level namespace, including `AuthSanitizer`; see
64
64
  [Zero Top-Level Namespace Additions](#zero-top-level-namespace-additions).
65
65
 
66
+ Consumers that want a reusable resolver for that stricter loading mode can use
67
+ [`anonymous_loader`](https://github.com/ruby-oauth/anonymous_loader). It handles
68
+ explicit paths, RubyGems metadata, and `$LOAD_PATH` fallback resolution while evaluating
69
+ the loader under an anonymous namespace.
70
+
66
71
  This gem is used by the following libraries to ensure clean output:
67
72
 
68
73
  - oauth
69
74
  - oauth-tty
70
75
  - oauth2
71
76
  - omniauth-ldap
77
+ - omniauth-identity
72
78
 
73
79
  ## 💡 Info you can shake a stick at
74
80
 
@@ -78,7 +84,7 @@ This gem is used by the following libraries to ensure clean output:
78
84
  | Works with Truffle Ruby | [![Truffle Ruby 22.3 Compat][💎truby-22.3i]][🚎truby-22.3-wf] [![Truffle Ruby 23.0 Compat][💎truby-23.0i]][🚎truby-23.0-wf] [![Truffle Ruby 23.1 Compat][💎truby-23.1i]][🚎truby-23.1-wf] <br/> [![Truffle Ruby 24.2 Compat][💎truby-24.2i]][🚎truby-24.2-wf] [![Truffle Ruby 25.0 Compat][💎truby-25.0i]][🚎truby-25.0-wf] [![Truffle Ruby current Compat][💎truby-c-i]][🚎9-t-wf]|
79
85
  | Works with MRI Ruby 4 | [![Ruby 4.0 Compat][💎ruby-4.0i]][🚎11-c-wf] [![Ruby current Compat][💎ruby-c-i]][🚎11-c-wf] [![Ruby HEAD Compat][💎ruby-headi]][🚎3-hd-wf]|
80
86
  | Works with MRI Ruby 3 | [![Ruby 3.0 Compat][💎ruby-3.0i]][🚎ruby-3.0-wf] [![Ruby 3.1 Compat][💎ruby-3.1i]][🚎ruby-3.1-wf] [![Ruby 3.2 Compat][💎ruby-3.2i]][🚎ruby-3.2-wf] [![Ruby 3.3 Compat][💎ruby-3.3i]][🚎ruby-3.3-wf] [![Ruby 3.4 Compat][💎ruby-3.4i]][🚎ruby-3.4-wf]|
81
- | Works with MRI Ruby 2 | ![Ruby 2.2 Compat][💎ruby-2.2i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
87
+ | Works with MRI Ruby 2 | ![Ruby 2.2 Compat][💎ruby-2.2i] ![Ruby 2.3 Compat][💎ruby-2.3i] <br/> [![Ruby 2.4 Compat][💎ruby-2.4i]][🚎ruby-2.4-wf] [![Ruby 2.5 Compat][💎ruby-2.5i]][🚎ruby-2.5-wf] [![Ruby 2.6 Compat][💎ruby-2.6i]][🚎ruby-2.6-wf] [![Ruby 2.7 Compat][💎ruby-2.7i]][🚎ruby-2.7-wf]|
82
88
  | Support & Community | [![Join Me on Daily.dev's RubyFriends][✉️ruby-friends-img]][✉️ruby-friends] [![Live Chat on Discord][✉️discord-invite-img-ftb]][✉️discord-invite] [![Get help from me on Upwork][👨🏼‍🏫expsup-upwork-img]][👨🏼‍🏫expsup-upwork] [![Get help from me on Codementor][👨🏼‍🏫expsup-codementor-img]][👨🏼‍🏫expsup-codementor] |
83
89
  | Source | [![Source on GitLab.com][📜src-gl-img]][📜src-gl] [![Source on CodeBerg.org][📜src-cb-img]][📜src-cb] [![Source on Github.com][📜src-gh-img]][📜src-gh] [![The best SHA: dQw4w9WgXcQ!][🧮kloc-img]][🧮kloc] |
84
90
  | Documentation | [![Current release on RubyDoc.info][📜docs-cr-rd-img]][🚎yard-current] [![YARD on Galtzo.com][📜docs-head-rd-img]][🚎yard-head] [![Maintainer Blog][🚂maint-blog-img]][🚂maint-blog] [![GitLab Wiki][📜gl-wiki-img]][📜gl-wiki] [![GitHub Wiki][📜gh-wiki-img]][📜gh-wiki] |
@@ -204,27 +210,26 @@ gem "auth-sanitizer", require: "auth_sanitizer/loader"
204
210
  Use `require: false` when the consuming library will decide which loading mode to use internally. Use
205
211
  `require: "auth_sanitizer/loader"` when Bundler should make the isolated loader available during `Bundler.require`.
206
212
 
213
+ When Bundler standalone setup is loaded directly, a dependency can be present on `$LOAD_PATH` without a matching
214
+ `Gem.loaded_specs` entry or `GEM_PATH` entry. Consumers that locate the isolated loader themselves should therefore
215
+ use `AnonymousLoader.load_path`, or otherwise fall back to `Gem.find_files("auth_sanitizer/loader.rb")`, before failing.
216
+
207
217
  #### Zero Top-Level Namespace Additions
208
218
 
209
- A gem that needs zero new top-level namespaces from this dependency can load the loader itself inside an anonymous
210
- namespace. On Ruby 3.1+, use `Kernel.load(path, module)`:
219
+ For a gem that needs zero new top-level namespaces from `auth-sanitizer`, use `anonymous_loader` to evaluate
220
+ `auth_sanitizer/loader.rb` inside an anonymous namespace, then call `AuthSanitizer::Loader.load_isolated` from that
221
+ anonymous namespace:
211
222
 
212
223
  ```ruby
213
- auth_sanitizer_requirement = Gem::Requirement.new("~> 0.1", ">= 0.1.3")
214
- auth_sanitizer_spec = Gem.loaded_specs["auth-sanitizer"]
215
- unless auth_sanitizer_spec && auth_sanitizer_requirement.satisfied_by?(auth_sanitizer_spec.version)
216
- auth_sanitizer_spec = Gem::Specification.find_by_name("auth-sanitizer", auth_sanitizer_requirement)
217
- end
218
- auth_sanitizer_loader_path = File.join(
219
- auth_sanitizer_spec.full_gem_path,
220
- "lib/auth_sanitizer/loader.rb"
224
+ require "anonymous_loader"
225
+
226
+ auth_sanitizer_requirement = Gem::Requirement.new("~> 0.2", ">= 0.2.1")
227
+ auth_sanitizer_loader_namespace = AnonymousLoader.load_path(
228
+ gem_name: "auth-sanitizer",
229
+ require_path: "auth_sanitizer/loader.rb",
230
+ version_requirement: auth_sanitizer_requirement,
231
+ version_file: "auth/sanitizer/version.rb"
221
232
  )
222
- unless File.file?(auth_sanitizer_loader_path)
223
- raise LoadError, "auth-sanitizer #{auth_sanitizer_requirement} loader not found at #{auth_sanitizer_loader_path}"
224
- end
225
-
226
- auth_sanitizer_loader_namespace = Module.new
227
- Kernel.load(auth_sanitizer_loader_path, auth_sanitizer_loader_namespace)
228
233
 
229
234
  AUTH_SANITIZER = auth_sanitizer_loader_namespace
230
235
  .const_get(:AuthSanitizer)
@@ -233,42 +238,26 @@ AUTH_SANITIZER = auth_sanitizer_loader_namespace
233
238
  ```
234
239
 
235
240
  That pattern leaves both `Auth` and `AuthSanitizer` undefined at top level. The consuming gem should assign the returned
236
- module under its own namespace and use that internal constant.
241
+ module under its own namespace and use that internal constant. It does define `AnonymousLoader`, whose namespace is
242
+ specific to the resolver gem and intentionally much less collision-prone than `Auth`.
237
243
 
238
- <details markdown="1">
239
- <summary>Ruby 2.2-compatible zero-top-level loading</summary>
240
-
241
- Ruby 2.2 through Ruby 3.0 do not support `Kernel.load(path, module)`. For those versions, evaluate the loader source
242
- inside an anonymous namespace with `Module#module_eval`:
244
+ Declare both dependencies with `require: false` when the consuming library owns its loading path:
243
245
 
244
246
  ```ruby
245
- auth_sanitizer_requirement = Gem::Requirement.new("~> 0.1", ">= 0.1.3")
246
- auth_sanitizer_spec = Gem.loaded_specs["auth-sanitizer"]
247
- unless auth_sanitizer_spec && auth_sanitizer_requirement.satisfied_by?(auth_sanitizer_spec.version)
248
- auth_sanitizer_spec = Gem::Specification.find_by_name("auth-sanitizer", auth_sanitizer_requirement)
249
- end
250
- auth_sanitizer_loader_path = File.join(
251
- auth_sanitizer_spec.full_gem_path,
252
- "lib/auth_sanitizer/loader.rb"
253
- )
254
- unless File.file?(auth_sanitizer_loader_path)
255
- raise LoadError, "auth-sanitizer #{auth_sanitizer_requirement} loader not found at #{auth_sanitizer_loader_path}"
256
- end
247
+ gem "anonymous_loader", "~> 0.1", ">= 0.1.0", require: false
248
+ gem "auth-sanitizer", "~> 0.2", ">= 0.2.1", require: false
249
+ ```
257
250
 
258
- auth_sanitizer_loader_namespace = Module.new
259
- auth_sanitizer_loader_namespace.module_eval(
260
- File.read(auth_sanitizer_loader_path),
261
- auth_sanitizer_loader_path,
262
- 1
263
- )
251
+ If the host application uses `Bundler.require`, use:
264
252
 
265
- AUTH_SANITIZER = auth_sanitizer_loader_namespace
266
- .const_get(:AuthSanitizer)
267
- .const_get(:Loader)
268
- .load_isolated
253
+ ```ruby
254
+ gem "anonymous_loader", "~> 0.1", ">= 0.1.0"
255
+ gem "auth-sanitizer", "~> 0.2", ">= 0.2.1", require: false
269
256
  ```
270
257
 
271
- </details>
258
+ `AnonymousLoader.load_path` raises `AnonymousLoader::FileNotFoundError` when it cannot resolve the loader, and
259
+ `AnonymousLoader::VersionMismatchError` when it finds a load-path candidate whose adjacent version file does not satisfy
260
+ the requested range.
272
261
 
273
262
  ### Filtered Label
274
263
 
@@ -423,7 +412,7 @@ require "auth/sanitizer"
423
412
  ```
424
413
 
425
414
  Or load it without defining top-level `Auth`. This still defines top-level `AuthSanitizer`; see
426
- [Zero Top-Level Namespace Additions](#zero-top-level-namespace-additions) for the stricter loading pattern.
415
+ [Zero Top-Level Namespace Additions](#zero-top-level-namespace-additions) for the stricter `anonymous_loader` pattern.
427
416
 
428
417
  ```ruby
429
418
  require "auth_sanitizer/loader"
@@ -586,6 +575,10 @@ NOTE: [kettle-readme-backers][kettle-readme-backers] updates this list every day
586
575
 
587
576
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:START -->
588
577
  No sponsors yet. Be the first!
578
+
579
+ ### Open Collective for Donors
580
+
581
+ [Bill Woika](https://opencollective.com/bill-woika) [Philipp Ebneter](https://opencollective.com/guest-e77282f7) [Grigoriy](https://opencollective.com/guest-c93e0c48)
589
582
  <!-- OPENCOLLECTIVE-ORGANIZATIONS:END -->
590
583
 
591
584
  [kettle-readme-backers]: https://github.com/ruby-oauth/auth-sanitizer/blob/main/exe/kettle-readme-backers
@@ -862,6 +855,7 @@ Thanks for RTFM. ☺️
862
855
  [🚎15-🪪-wf]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/license-eye.yml
863
856
  [🚎15-🪪-wfi]: https://github.com/ruby-oauth/auth-sanitizer/actions/workflows/license-eye.yml/badge.svg
864
857
  [💎ruby-2.2i]: https://img.shields.io/badge/Ruby-2.2_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
858
+ [💎ruby-2.3i]: https://img.shields.io/badge/Ruby-2.3_(%F0%9F%9A%ABCI)-AABBCC?style=for-the-badge&logo=ruby&logoColor=white
865
859
  [💎ruby-2.4i]: https://img.shields.io/badge/Ruby-2.4-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
866
860
  [💎ruby-2.5i]: https://img.shields.io/badge/Ruby-2.5-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
867
861
  [💎ruby-2.6i]: https://img.shields.io/badge/Ruby-2.6-DF00CA?style=for-the-badge&logo=ruby&logoColor=white
@@ -932,3 +926,14 @@ Thanks for RTFM. ☺️
932
926
  [💎appraisal2]: https://github.com/appraisal-rb/appraisal2
933
927
  [💎appraisal2-img]: https://img.shields.io/badge/appraised_by-appraisal2-34495e.svg?plastic&logo=ruby&logoColor=white
934
928
  [💎d-in-dvcs]: https://railsbling.com/posts/dvcs/put_the_d_in_dvcs/
929
+
930
+ <!-- kettle-jem:metadata:start -->
931
+ | Field | Value |
932
+ |---|---|
933
+ | Package | auth-sanitizer |
934
+ | Description | 💎 Configurable KV output redaction. Sanitize/filter your secrets. |
935
+ | Homepage | https://github.com/ruby-oauth/auth-sanitizer |
936
+ | Source | https://github.com/ruby-oauth/auth-sanitizer/tree/v0.2.0 |
937
+ | License | `MIT` |
938
+ | Funding | https://github.com/sponsors/pboling, https://issuehunt.io/u/pboling, https://ko-fi.com/pboling, https://liberapay.com/pboling/donate, https://opencollective.com/ruby-oauth, https://patreon.com/galtzo, https://polar.sh/pboling, https://thanks.dev/u/gh/pboling, https://tidelift.com/funding/github/rubygems/auth-sanitizer, https://www.buymeacoffee.com/pboling |
939
+ <!-- kettle-jem:metadata:end -->
@@ -3,7 +3,7 @@
3
3
  module Auth
4
4
  module Sanitizer
5
5
  module Version
6
- VERSION = "0.2.0"
6
+ VERSION = "0.2.2"
7
7
  end
8
8
  VERSION = Version::VERSION # Traditional Constant Location
9
9
  end
@@ -1,10 +1,3 @@
1
- module Auth
2
- module Sanitizer
3
- VERSION: String
4
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
5
- end
6
- end
7
-
8
1
  module AuthSanitizer
9
2
  module Loader
10
3
  FILES: Array[String]
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auth-sanitizer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter H. Boling
@@ -46,7 +46,7 @@ dependencies:
46
46
  version: '1.1'
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 1.1.9
49
+ version: 1.1.10
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
@@ -56,27 +56,27 @@ dependencies:
56
56
  version: '1.1'
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: 1.1.9
59
+ version: 1.1.10
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: kettle-dev
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
- version: '2.0'
66
+ version: '2.1'
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
- version: 2.0.8
69
+ version: 2.1.0
70
70
  type: :development
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '2.0'
76
+ version: '2.1'
77
77
  - - ">="
78
78
  - !ruby/object:Gem::Version
79
- version: 2.0.8
79
+ version: 2.1.0
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: bundler-audit
82
82
  requirement: !ruby/object:Gem::Requirement
@@ -131,20 +131,20 @@ dependencies:
131
131
  requirements:
132
132
  - - "~>"
133
133
  - !ruby/object:Gem::Version
134
- version: '3.0'
134
+ version: '3.1'
135
135
  - - ">="
136
136
  - !ruby/object:Gem::Version
137
- version: 3.0.6
137
+ version: 3.1.1
138
138
  type: :development
139
139
  prerelease: false
140
140
  version_requirements: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '3.0'
144
+ version: '3.1'
145
145
  - - ">="
146
146
  - !ruby/object:Gem::Version
147
- version: 3.0.6
147
+ version: 3.1.1
148
148
  - !ruby/object:Gem::Dependency
149
149
  name: kettle-test
150
150
  requirement: !ruby/object:Gem::Requirement
@@ -279,10 +279,10 @@ licenses:
279
279
  - MIT
280
280
  metadata:
281
281
  homepage_uri: https://auth-sanitizer.galtzo.com
282
- source_code_uri: https://github.com/ruby-oauth/auth-sanitizer/tree/v0.2.0
283
- changelog_uri: https://github.com/ruby-oauth/auth-sanitizer/blob/v0.2.0/CHANGELOG.md
282
+ source_code_uri: https://github.com/ruby-oauth/auth-sanitizer/tree/v0.2.2
283
+ changelog_uri: https://github.com/ruby-oauth/auth-sanitizer/blob/v0.2.2/CHANGELOG.md
284
284
  bug_tracker_uri: https://github.com/ruby-oauth/auth-sanitizer/issues
285
- documentation_uri: https://www.rubydoc.info/gems/auth-sanitizer/0.2.0
285
+ documentation_uri: https://www.rubydoc.info/gems/auth-sanitizer/0.2.2
286
286
  funding_uri: https://github.com/sponsors/pboling
287
287
  wiki_uri: https://github.com/ruby-oauth/auth-sanitizer/wiki
288
288
  news_uri: https://www.railsbling.com/tags/auth-sanitizer
metadata.gz.sig CHANGED
Binary file