├── owl.png ├── barn-owl.png ├── owl-pink.png ├── README.md ├── src-img ├── barn-owl.webp ├── owlwebp.webp ├── owl.pxd │ ├── metadata.info │ ├── QuickLook │ │ ├── Icon.tiff │ │ └── Thumbnail.tiff │ └── data │ │ ├── originalImportedContentDocumentInfo │ │ ├── 43096AF0-3173-418B-9717-4D72B7213128 │ │ ├── 6FBC734D-BE56-42C7-A2FB-9C8B3E583363 │ │ ├── 840F9A8A-C404-4198-9EEF-BA6E5A7F2060 │ │ ├── 85FB7668-07AF-4340-9E32-C456CA457A81 │ │ ├── 9B67EF81-1B35-462A-A954-61F13B1D2AD6 │ │ ├── AAE94F31-EE48-404F-A158-594581C4A589 │ │ └── FE5BB698-A7BF-4F8D-A4FA-477E175BBD2D └── barn-owl.pxd │ ├── metadata.info │ ├── QuickLook │ ├── Icon.tiff │ └── Thumbnail.tiff │ └── data │ ├── originalImportedContentDocumentInfo │ ├── 85FFFBAC-F90B-4114-BF89-BA4BB1701D38 │ ├── B8B6EF5A-36A8-41F5-B01F-5E2A43110DA3 │ ├── DED49B18-00C5-49C7-87D7-C438EBA695FB │ └── EA457466-9040-4772-B65C-8C7C7656F99F ├── LICENSE ├── .gitignore ├── proposal.svg └── index.html /owl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/owl.png -------------------------------------------------------------------------------- /barn-owl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/barn-owl.png -------------------------------------------------------------------------------- /owl-pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/owl-pink.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # garuda 2 | Governance of Ad Requests by a Union of Diverse Actors 3 | -------------------------------------------------------------------------------- /src-img/barn-owl.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.webp -------------------------------------------------------------------------------- /src-img/owlwebp.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owlwebp.webp -------------------------------------------------------------------------------- /src-img/owl.pxd/metadata.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/metadata.info -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/metadata.info: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/metadata.info -------------------------------------------------------------------------------- /src-img/owl.pxd/QuickLook/Icon.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/QuickLook/Icon.tiff -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/QuickLook/Icon.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/QuickLook/Icon.tiff -------------------------------------------------------------------------------- /src-img/owl.pxd/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/QuickLook/Thumbnail.tiff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/QuickLook/Thumbnail.tiff -------------------------------------------------------------------------------- /src-img/owl.pxd/data/originalImportedContentDocumentInfo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/originalImportedContentDocumentInfo -------------------------------------------------------------------------------- /src-img/owl.pxd/data/43096AF0-3173-418B-9717-4D72B7213128: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/43096AF0-3173-418B-9717-4D72B7213128 -------------------------------------------------------------------------------- /src-img/owl.pxd/data/6FBC734D-BE56-42C7-A2FB-9C8B3E583363: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/6FBC734D-BE56-42C7-A2FB-9C8B3E583363 -------------------------------------------------------------------------------- /src-img/owl.pxd/data/840F9A8A-C404-4198-9EEF-BA6E5A7F2060: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/840F9A8A-C404-4198-9EEF-BA6E5A7F2060 -------------------------------------------------------------------------------- /src-img/owl.pxd/data/85FB7668-07AF-4340-9E32-C456CA457A81: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/85FB7668-07AF-4340-9E32-C456CA457A81 -------------------------------------------------------------------------------- /src-img/owl.pxd/data/9B67EF81-1B35-462A-A954-61F13B1D2AD6: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/9B67EF81-1B35-462A-A954-61F13B1D2AD6 -------------------------------------------------------------------------------- /src-img/owl.pxd/data/AAE94F31-EE48-404F-A158-594581C4A589: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/AAE94F31-EE48-404F-A158-594581C4A589 -------------------------------------------------------------------------------- /src-img/owl.pxd/data/FE5BB698-A7BF-4F8D-A4FA-477E175BBD2D: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/owl.pxd/data/FE5BB698-A7BF-4F8D-A4FA-477E175BBD2D -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/data/originalImportedContentDocumentInfo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/data/originalImportedContentDocumentInfo -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/data/85FFFBAC-F90B-4114-BF89-BA4BB1701D38: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/data/85FFFBAC-F90B-4114-BF89-BA4BB1701D38 -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/data/B8B6EF5A-36A8-41F5-B01F-5E2A43110DA3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/data/B8B6EF5A-36A8-41F5-B01F-5E2A43110DA3 -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/data/DED49B18-00C5-49C7-87D7-C438EBA695FB: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/data/DED49B18-00C5-49C7-87D7-C438EBA695FB -------------------------------------------------------------------------------- /src-img/barn-owl.pxd/data/EA457466-9040-4772-B65C-8C7C7656F99F: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/darobin/garuda/main/src-img/barn-owl.pxd/data/EA457466-9040-4772-B65C-8C7C7656F99F -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Robin Berjon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /proposal.svg: -------------------------------------------------------------------------------- 1 | 16 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 | 6 | 7 |65 | Multiple proposals exist to reform programmatic advertising on the Web. Some, most 66 | notably PARAKEET, 67 | the FLEDGE bid server, 68 | and ongoing work by Prebid, rely on the existence of a 69 | trustworthy server that can perform tasks such as anonymising ad requests. This type 70 | of model has interesting properties, notably they are easier to audit and do not require 71 | moving significant chunks of logic into the browser, but they also suffer from the problem 72 | that the server itself must be trusted, even while sitting outside the realm of the user's 73 | control. 74 |
75 |76 | This document drafts an overall vision and governance model able to support such 77 | trustworthy utility servers by having them owned and operated by an entity governed in 78 | common by different constituencies. The name comes from Garuda, 79 | which Wikipedia describes as "the king of birds" and "a protector with the power 80 | to swiftly go anywhere, ever watchful." 81 |
82 |87 | Digital advertising has rightly become despised through decades of mismanagement, but it 88 | nevertheless is an essential utility. While other business models do exist and should 89 | prosper, they are simply insufficient to make up for the loss that eradicating advertising 90 | would cause. Our only option, then, is to fix it. 91 |
92 |93 | Most parties support reform, but it is proving politically difficult to achieve. 94 | Advertising is a complex environment involving multiple stakeholders that run completely 95 | different organisations yet the pieces they provide must all more or less fit together for 96 | the system to function. The current system operates poorly — in some parts staggeringly so — 97 | but it does operate. Changing the way in which some parts fit together requires different 98 | stakeholders to agree to change in matching ways, and therein lies the rub. 99 |
100 |101 | Coordinate change is difficult at all times, but in digital advertising it is particularly 102 | challenging because most of the parties actively distrust one another. 103 |
104 |105 | We therefore find ourselves presented with a choice: reform can either happen through 106 | vertical integration which will favour the most integrated, or it can happen through 107 | multistakeholder standards. The latter is preferable as it can bring forward a healthier 108 | ecosystem in which more voices are represented, but it can only exist if we develop a 109 | principled governance structure to foster trust between stakeholders. 110 |
111 |112 | This is where a trustworthy server becomes a particularly useful construct. Since it 113 | has to be trusted by all stakeholders (no one would trust such a server operated by 114 | just one type of party), it provides a common space for browsers (representing users), 115 | publishers, and adtech intermediaries to meet, and where they can be put in a position of 116 | needing to achieve consensus for the system to operate. 117 |
118 |122 | The goal of Garuda is to make a trustworthy advertising server 123 | possible. The notion of a trustworthy advertising server is a potentially very 124 | powerful one in that it can enable a number of highly-desirable use cases in advertising 125 | technology, notably that of anonymising requests. However, trust does not appear as if by 126 | magic and it needs to be designed for. 127 |
128 |129 | Several suggestions have been made in order to make this trust possible, but none of them 130 | works today: 131 |
132 |169 | Garuda's core tenet is that we can solve problems of trust with human arrangements. On the 170 | downside, these are necessarily imperfect and they incur some overhead. On the upside, a 171 | group of people with effective checks and balances can handle complex and evolving 172 | situations better than anything else — and provide a strong foundation atop which to build 173 | trust between parties that, historically and structurally, do not trust one another much. 174 |
175 |179 | Garuda is an institutional arrangement composed of several constituencies and groups that 180 | together form the Garuda institution. The 181 | [=Garuda institution=] has several responsibilities: 182 |
183 |218 | This section provides only an outline of the governance model for the [=Garuda institution=]. 219 | At this stage, my purpose is solely to describe the approach and sketch out enough of its 220 | mechanics to establish feasibility. Development of the full principles and bylaws will, by 221 | nature, have to be an open and multistakeholder exercise. 222 |
223 |224 | Significant parts of the Internet's infrastructure operate under more or less formal 225 | governance arrangements. Standards, of course (W3C, IETF, WHATWG, TC-39), but also top-level 226 | domain names, internet peering, or the ISRG and Let's Encrypt. We can make this work for 227 | advertising too. 228 |
229 |230 | The [=Garuda institution=] is comprised of two primary bodies: the [=Governance Board=] and 231 | the [=Legal Entity=]. 232 |
233 |234 | The Governance Board is tasked with the oversight of the 235 | [=institution=]. It concerns itself primarily with the [=principles=], which it will control 236 | for in the behaviour of the [=Legal Entity=] as well as the technical standards and open 237 | source implementation of the trusted server. It also names the [=Executive Director=]. 238 | All [=Board=] deliberations are public (with perhaps a few exceptions for personnel matters). 239 |
240 |241 | The Legal Entity takes care of day-to-day operations. It is 242 | responsible for maintaining, deploying, and operating the trusted server at requisite SLAs 243 | and at reasonable cost, as well as of research into future technology that Garuda could use, 244 | with organising the various working groups that will bring stakeholders together to help 245 | evolve Garuda over time, and with the elaboration of policy positions which Garuda will 246 | cooperate with regulators on. It is run by the [=Executive Director=]. 247 |
248 |249 | The [=Board=] selects (by consensus) an Executive Director every three years or 250 | whenever the post becomes vacant. There is a strong assumption that the [=Executive Director=] 251 | will not necessarily be renewed: every time a new [=ED=] must be selected, the [=Board=] is 252 | expected to review multiple candidates. The [=Board=] can revoke the [=ED=] with a 253 | [=supermajority=]. The [=ED=] leads the [=Legal Entity=]. 254 |
255 |256 | Garuda operates according to fundamental ethical principles 257 | (which need to be written before it kicks off, [[?ETHICAL-WEB]], [[?RFC8890]], or [[?PUP]] 258 | are good starting points). These [=principles=] can be changed with [=supermajority=]. The 259 | purpose of these [=principles=] is to guide the [=Board=]'s discussions and inform its decisions. 260 |
261 |262 | There are three primary constituencies: browser vendors (vendors, not engines, and 263 | expected to proxy for users), publishers, and adtech intermediaries. For each of them, 264 | there are inclusion criteria that are based on volume of the traffic they see through the 265 | trusted server. The volume threshold can differ per [=constituency=], it is designed to 266 | prevent gaming the system by spawning multiple entities. Entities with sufficient volume 267 | have voting rights on a one-entity/one-vote basis, there is no volume proration. 268 |
269 |270 | Any entity eligible to be part of a [=constituency=] has some voting rights. These voting 271 | rights allow them to elect their representatives to the [=Governance Board=] for that 272 | [=constituency=]. Candidates can be nominated by any entity with voting rights. 273 | [=Board=] seats are open for three years with a third being renewed every year. 274 |
275 |276 | Each [=constituency=] has three representatives on the [=Board=]. No company can have more 277 | than one representative, even if it participates in different [=constituencies=]. If one 278 | [=constituency=] has fewer than two candidates in a given election, then it gains zero 279 | representation. (If interest from that group is too low, it shouldn't be taken over by a 280 | single party.) 281 |
282 |283 | Supermajority: some changes require a [=supermajority=] of the [=Board=]. 284 | [=Supermajority=] is defined as: 285 |
286 |297 | The [=Legal Entity=] is financed through a very small tax on advertising. Two models are 298 | possible: one is a flat fee per request, another is a percentage of effective CPM. The 299 | latter is preferred in that it will incentivise Garuda to increase effectiveness of 300 | advertising (whereas the former incentivises volume) but may prove more complicated to 301 | build, especially in terms of how to avoid lying about it (so long as it's above the 302 | provided bid floor). The amount and type of the tax is determined by the [=Board=]. The 303 | overall taxation structure might further depend on the type of operation requested, since 304 | not all are equally computationally expensive, and making sure that we properly cost in 305 | computational cost is important from an ecological point of view. 306 |
307 |308 | Part of the tax should further be set aside to provide financial support to stakeholders 309 | who cannot afford to pay someone to spend time in [=Board=] discussions, so as to ensure that 310 | participants from companies of all sizes, and from all backgrounds the world around can 311 | participate with equity. 312 |
313 |317 | The immediate focus is on getting enough of a PARAKEET-like structure off the ground, so 318 | that we can have an open source system and the server infrastructure to operate it in a 319 | trustworthy fashion up and running. This should enable sufficient anonymisation in the ad 320 | environment to make it safe for users, and enable novel publisher techniques. But longer-term, 321 | more can be done from this position because the PARAKEET server creates a "place" of sort 322 | which can broker multiple adtech functions in such a way that multiple stakeholders have to 323 | reach consensus as to how it works. This can progressively build a way out of the current 324 | unilateral, conflict-driven model that is causing so much strife across the ecosystem. 325 |
326 |327 | Some problems that this could help address are listed below. Note that I am deliberately 328 | staying at a very high level for the time being as I do not believe that any of these should 329 | be the first area of focus. 330 |
331 |377 | These issues need to be addressed before this can move forward. 378 |
379 |380 | One core problem in institution provision is how to pick who is legitimately in a given 381 | constituency, or put differently who is the polity? Garuda selects the polities of its 382 | constituencies through volume thresholds as measured by the trusted server. This is expedient 383 | for some constituencies, but does not work for all (see below). 384 |
385 |386 | Another core problem is how to ensure that the constituencies are balanced? 387 | Historically, the interests of the buy-side and of the intermediaries have often aligned 388 | against users, with publishers splitting between the two. A system in which some stakeholder 389 | constituencies that are almost always aligned have a guaranteed majority will lack the checks 390 | and balances to be effective, fair, and credible. 391 |
392 |393 | This can in part be addressed with principles (which we need anyway, and that would 394 | prevent approaching users from an adversarial angle), which can't be changed without support 395 | from at least one entity in each constituency, and also from the fact that if 396 | user-hostile tactics were to become supported in Garuda then enough browsers would just walk 397 | as to void their constituency, returning the world to ad blocking as the logical line of 398 | defense. But that offers relatively weak protection. 399 |
400 |403 | Traditionally, user agents have taken on the role of aligning with users. As detailed in 404 | [[?RFC8890]], this is an architecture that presents multiple advantages. Unfortunately, 405 | in recent times, some user agents have drifted away from this position of trustworthiness, 406 | and this complicates the process of relying on them as representatives of users. 407 |
408 |409 | Additionally, the problems created by advertising often target underrepresented and 410 | marginalised communities, issues which browser vendors have limited expertise in 411 | combating. Browser vendors are not, either in terms of their employees or their legal 412 | structures, very representative of the global community, notably of the global South. 413 |
414 |415 | Establishing a legitimate worldwide polity for humankind (including those not yet 416 | connected whose participation could be helped by a healthy advertising ecosystem) is not a 417 | problem that we can solve, however we should seek ways to increase representativity. One 418 | option could be the UN (possibly as an observer). 419 |
420 |424 | The buy side is where the money comes from and is the set of sources who have the strongest 425 | incentives to keep everyone honest in terms of fraud, effectiveness, and brand safety. 426 |
427 |428 | It is not obvious how to pick a good polity for this group either. There is also a risk 429 | that they could align excessively with intermediaries, which would unbalance the 430 | governance structure and undermine its credibility. 431 |
432 |433 | One potential solution is to make it so that the Garuda system knows who is paying for 434 | every creative that it eventually serves. If the system supports farm-to-table traceability 435 | and revenue transparency, this is a requirement anyway as the creative will need to contain 436 | verifiable information about who paid for it and how much. Extracting this payment 437 | information would make it possible to establish a volume threshold (in spend) for the 438 | buy-side to be represented. This would not address balancing issues — unless users also 439 | got a constituency of their own (or intermediaries lost theirs). 440 |
441 |442 | Another potential option would be the WFA (possibly as an observer). 443 |
444 |449 | I stole a bunch of ideas from Mark Nottingham, and a few from Cullen Jennings too. Aram 450 | Zucker-Scharff, Mihir Kshirsagar, and Reuben Binns provided a lot of invaluable feedback. 451 | Many thanks to Juan Ortiz Freuler for organising a discussion session around Garuda at the 452 | Berkman Klein Center for Internet & Society before it was even public, as well as to 453 | Levin Kim, Crystal Lee, Sahar Massachi, Tom Zick as convenors of the Ethical Tech 454 | and Big Tech Governance groups, and the attendees of the session for a spirited and 455 | constructive discussion. 456 |
457 |458 | I am very grateful for my colleagues at The New York Times for supporting this work, 459 | atypical as it may be. 460 |
461 |