Introduction § ↑
A flood fill is a sparse-graph traversal in which both adjacency and visitation information are implicit in the image being read and written. When a flood fill is performed atomically (no other changes to the image while the fill is happening), all variations produce the same results. But the order in which pixels are found and filled depends on:
- The data structure used for the fringe : the collection of nodes (pixel locations) that have been discovered but are not yet filled. This is most often a stack (last-in, first-out) or “queue” (first-in, first-out), but any kind of generalized queue will work. See Fills.
- The order in which neighboring nodes (pixel locations) that may need to be filled are checked and added to the fringe. This is especially significant when a stack is used for the fringe, because with a stack, many steps often progress between when a node (pixel location) is added to the fringe and when it is actually colored. See Neighbor Enumeration Strategies.
This is an early version, perhaps even a prototype for a different design. Fill type and configuration can only be specified through shortcuts, not menus. Besides fixing that, other accessibility improvements should be made: at minimum, it should be no harder to use without a mouse (or limited mousing) than popular raster graphics editors. This also only runs on Windows, which is not ideal.
Drawing § ↑
To draw in black on the canvas, click and drag with the left mouse button.
The breadth of the curve drawn is 1 pixel.
Clicking without dragging draws a single pixel.
(This is to say that drawing works as it does in Microsoft Paint, the GNU Image Manipulation Program, and other familiar raster graphics editors.)
Fills § ↑
Most of the different fills—stack, queue, random, and deque fill—are implemented the same way in terms of an abstract fringe data type, and the difference between them is how that type is implemented. Specifically, the difference is due to the behavior of the extraction operation, which determines the order in which nodes (pixel locations) are taken out of the fringe. For the order in which they are put in, see Neighbor Enumeration Strategies.
However, recursive fill does not use an explicit fringe data structure, and instant fill completes immediately (rather than animating over time) so it doesn’t matter (for using the program) how it is implemented.
The available fills—stack fill, queue fill, random fill, deque fill, recursive fill, and instant fill—are listed below.
Stack (LIFO) § ↑
Use right click to flood-fill with a stack. This data structure is last-in first-out (LIFO). The filled area expands depth-first.
Stack fill uses red.
For consecutively inserted locations, extraction is in reverse order of insertion. This produces visible behavior that some people find unintuitive: since the order in which neighbors are enumerated is the reverse of the order in which they are visited, LRUD goes down and up (when it can) before it goes right and left.
This corresponds to the need, when converting a recursive left-to-right depth-first binary-tree traversal to use iteration instead (in the usual way), to push each node’s right child to the fringe (which is a stack) before its left child. See Recursive.
Queue (FIFO) § ↑
Use middle click to flood-fill with a “queue”. This data structure is first-in first-out (FIFO). The filled area expands breadth-first.
Queue fill uses blue.
The word “queue” has two common meanings. In the broad sense, a queue is any data structure that supports insertion as well as extraction of inserted elements. (It is in this sense that a priority queue is a queue.) In that sense, all the data types used as fringes, in this program or any program, are queues.
Here I mean “queue” in the narrow sense: a FIFO queue, which supports breadth-first traversals in a manner analogous to how stacks (“LIFO queues”) support depth-first traversals.
Random § ↑
Use Alt + right-click to flood-fill with a random extraction queue. Extraction selects any element with equal probability.
Random fill uses yellow.
Deque § ↑
Use Alt + middle-click to flood-fill with a deque, where extraction randomly selects the front or back, each with 50% probability.
Deque fill uses purple.
Picking randomly between the front and back of a deque is, of course, not an operation provided by deques. Deques (double-ended queues) provide two extraction operations. So the data structure being used here as the fringe is not, strictly speaking, a deque, but rather is implemented, in a straightforward way, in terms of a deque.
Recursive § ↑
Use ⊞Win+right-click to flood-fill recursively. This is depth-first, as with a stack.
Recursive fill uses orange.
The visible difference between recursive fill and stack fill is that recursive fill visits each location’s neighbors in the order in which the neighbors are enumerated, whereas stack fill visits them in the opposite order (since they are inserted into the fringe in the order they are enumerated, and thus extracted in the opposite order since the fringe is a stack).
Thus a recursive fill taking neighbors in (for example) LRUD order has the same observable behavior as a stack fill taking neighbors in DURL order.
Although queue fill also visits neighbors in the order they are enumerated, its behavior is not similar to recursive fill (or to stack fill). In recursive fill, arbitrarily many other locations are visited between the neighbors. For each neighbor, a recursive function call is made. Like a stack fill (but not a queue fill), a recursive fill will sometimes even visit most of the remaining region to be filled before it gets back to the next neighbor.
But shouldn’t this overflow the call stack and crash? § ↑
The most interesting thing about recursive fill, in this program, is that it does not crash.
In the common use case of a 1080p screen, this program creates a 600×600 canvas. (At higher resolutions, the canvas is larger.)
With most languages and implementations/environments, unbounded recursion risks overflowing the call stack and crashing (if you’re lucky) or otherwise behaving erratically, and this is a major source of security vulnerabilities. So while recursion has many good practical uses, including in some graph traversal problems, recursive flood fill is mostly good only for demonstration and some testing purposes. Common image sizes are too large for recursive flood fills to work, except when the region being filled happens to be small.
This program is written in C# and targets
.NET 5.
C# (with that or other framework implementations) is no exception
to this: the call stack is strictly limited and non-expanding at
runtime. The runtime can usually detect the stack overflow and
throw a
StackOverflowException
,
which terminates the application abnormally, i.e., crashes it. (An
exception handler
cannot actually catch
exceptions of that type, nor would such an ability enable a fill
written this way to complete.)
Tail-call elimination is not a solution, since even in languages that guarantee it in all eligible cases, it can only apply to the call that visits the last neighbor enumerated. (C# never guarantees it anyway.)
Some environments allow the call-stack size to be increased for a program, either before the program is run or while it is running. This may be a valuable solution for some non-trivial cases, but it is not a general solution if very large images must be supported. It is also not the solution used here.
The reason recursive fill doesn’t crash this program is a consequence (or accident) of the asynchronous mechanism through which concurrently running fills have their work broken up into pieces, which are performed with intervening delays so you can see the fills being gradually applied, and which are interleaved with one another (and other operations that maintain UI responsiveness).
The recursive fill is coded recursively, in direct style. Like the other fills described above, it is an asynchronous method. After some number of pixels (see Speed Modifiers) are colored synchronously, it awaits a delay task and is scheduled to continue, on the same thread (the UI thread), when the delay has completed.
Roslyn, the C# compiler, achieves this by converting the code written in direct style, representing an entire fill operation with interleaved delays, into corresponding code in continuation-passing style, representing the work to do from when the task is resumed (or first started) to when it is suspended (or finishes), as well as the transformation from a description of the work that must be done before one synchronous sequence of operations to a description of whatever work still needs to be done.
A recursive algorithm implemented in continuation-passing style (unless all its recursive calls are tail calls) carries data corresponding to a call stack if it were implemented in direct style. The continuation comprises this structure together with information about what step to resume at (the “state” of the state machine).
In this program, those data exist, in part, as a chain of asynchronous tasks linked by continuations. If the goal were to do a fill as quickly and efficiently as possible (see Instant), this would be unsuitable. But the goal here is deliberately to run slowly, to visualize the incremental work done by the fill.
Instant § ↑
Use ⊞Win + left-click to flood-fill instantly: the algorithm runs very quickly, rather than being broken up into pieces separated by delays, and the canvas is not updated between the beginning and the end of the fill.
Instant fill uses black.
This is quite different from the other fills. It should be really be viewed as a drawing command, since it does not visualize the behavior of a fill. It has the same behavior as the bucket tool in a raster graphics editor: a connected region of one color is immediately changed to have another color.
This is really atomic rather than instant, but it should appear to complete immediately. No other changes happen to the canvas between when it starts and ends. The intermediate state is not even observed during it.
The choice of algorithm, data structure, and neighbor enumeration order is thus an implementation detail that does not affect any observable behavior. As of this writing, it happens to be a flood fill with a stack, enumerating neighbors in LRUD order. (But there are other differences between this and stack fill, related to performance.)
Speed Modifiers § ↑
By default, fills proceed at a rate of 5 pixels per frame. You can override that by pressing:
-
- Shift to fill slowly (1 pixel per frame).
-
- Ctrl to fill very fast (20 pixels per frame).
-
- Ctrl+Shift to fill pretty fast (10 pixels per frame).
Modifiers affect the speed of newly started fills. That way, you can have concurrent fills proceeding at different speeds.
The speed shown in the status bar (immediately below the canvas) is therefore not necessarily the speed of any of the currently running fills, but rather the speed a fill started now would use, so long as you’re still pressing the same modifier keys.
Neighbor Enumeration Strategies § ↑
There are four major strategies for the order in which neighbors can be enumerated. Some (currently, just one) of these are configurable by the selection of sub-strategies.
Use the scroll-wheel (with no modifier keys) to cycle between major neighbor-enumeration strategies.
Hold down Shift while using the scroll-wheel to cycle between sub-strategies for the currently selected major strategy. To scroll “fast” through them—the meaning of which is determined per strategy—use Ctrl+Shift.
The mouse pointer must be over the canvas when scrolling. This is to avoid accidentally changing the neighbor enumeration strategy when attempting to scroll something else. In particular, the entire UI becomes scrollable if it is too small to show everything.
The available neighbor enumeration strategies—Uniform, Random per fill, Random always, and Random per pixel—are detailed below.
Uniform § ↑
Neighbors are always enumerated in the same order. The sub-strategy determines which order that is. There are 24 sub-strategies, since that’s how many permutations of Left, Right, Up, and Down there are.
- Scrolling with Shift goes to the next or previous permutation.
- Scrolling with Ctrl+Shift (in either direction) goes to the reverse of the current permutation.
Sub-strategies are abbreviated by the first letters of each direction, in the order in which neighbors are enumerated. The default sub-strategy is LRUD.
Random per fill § ↑
Neighbors are enumerated in an order that is uniform in each fill, but different—and randomly chosen—each time a fill is performed. This is thus the same as using the Uniform strategy and choosing a sub-strategy randomly before every fill.
Random always § ↑
Each time neighbors are enumerated, even within the same fill, the order is randomly selected. If the same pixel is reached multiple times, even in the same fill (which is possible in the case of concurrent physically nested fills interfering with each other), a different order may be chosen.
Random per pixel § ↑
Each pixel in the image has an order in which its neighbors are always enumerated, and each order is randomly determined separately. If the same pixel is reached multiple times, even in separate fills (whether or not they overlap in time), its neighbors are enumerated in that order each time. Restarting the program generates a different order. Without looking closely, you won’t notice the difference between this and Random always.
Dependencies (and licenses) § ↑
Flood is free open source software. It is written by Eliah Kagan and licensed under 0BSD (the “Zero-Clause BSD License”):
View 0BSD “Copyright (C) 2020, 2021 Eliah Kagan …”
Copyright (C) 2020, 2021 Eliah Kagan <degeneracypressure@gmail.com> Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
However, it depends on some other software to run that is written by other authors and offered under different licenses than 0BSD.
Platform § ↑
Flood is a C# program targeting .NET 5 on Windows. It uses Windows Forms, and to a much lesser extent WPF, which are part of .NET. It is implemented as a LINQPad 6 query; LINQPad is a proprietary freeware program written by Joseph Albahari (with paid editions offering more features). Flood’s charting feature uses the version of System.Windows.Forms.DataVisualization that is included in LINQPad 6 (which I believe is the fork by Joseph Albahari).
If the Microsoft Edge WebView2 control is installed, Flood’s built-in help browser will use it automatically. If not, it falls back to the classic WebBrowser control. (Also, the “tips” mini-help always uses the WebBrowser control.) The help is written in such a way as to work properly via either engine, as well as in any popular standalone web browsers such as Firefox or Chrome (for perusal outside the application). Flood does not require WebView2 and does not offer to install WebView2 or automate its installation.
Other than LINQPad—and Windows itself—the software Flood requires to run is free and open source. See Other Libraries and Fonts below.
Other Libraries § ↑
In addition to the components listed above, Flood uses the libraries classList.js, Deque, details-element-polyfill, Hyphenopoly, Microsoft.Web.WebView2, MoreLINQ, and URLSearchParams:
classList.js
classList.js 1.2.20180112 is written by Eli Grey. It is offered under the Unlicense:
View Unlicense “This is free and unencumbered software released into the public domain. …”
This is free and unencumbered software released into the public domain. Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to <http://unlicense.org/>
Deque (Nito.Collections.Deque)
Deque 1.1.0 is written by Stephen Cleary and licensed under the MIT license:
View MIT license “Copyright (c) 2015 Stephen Cleary …”
The MIT License (MIT) Copyright (c) 2015 Stephen Cleary Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
details-element-polyfill
details-element-polyfill 2.4.0 is written by Javan Makhmali and licensed under the MIT license:
View MIT license “Copyright (c) 2019 Javan Makhmali …”
The MIT License (MIT) Copyright (c) 2019 Javan Makhmali Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Hyphenopoly
Hyphenopoly 3.4.0 is written by Mathias Nater and licensed under the MIT license:
View MIT license “Copyright (c) 2019 Mathias Nater …”
The MIT License (MIT) Copyright (c) 2019 Mathias Nater Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Microsoft.Web.WebView2
Microsoft.Web.WebView2 1.0.902.49 is written by software developers at Microsoft and licensed under the following license (which is similar to the 3-clause BSD license):
View license “Copyright (C) Microsoft Corporation. All rights reserved. …”
Copyright (C) Microsoft Corporation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * The name of Microsoft Corporation, or the names of its contributors may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Microsoft.Web.WebView2 is a library that exposes the WebView2 control for use by .NET programs, but it is not itself that control. This is to say Microsoft.Web.WebView2 is only a binding for the WebView2 control. I do not claim that the WebView2 control is itself available under the license shown above, which I don’t believe to be the case.
Flood does not require the WebView2 control, but it does require the Microsoft.Web.WebView2 library even in the absence of the WebView2 control. (The mechanism Flood uses to check if the WebView2 control is present uses that library.)
MoreLINQ
MoreLINQ 3.3.2 is written by various authors. Its principal maintainer is Atif Aziz; it has many contributors. It is licensed under the Apache 2.0 license with a small portion of the code (from Microsoft) carrying the MIT license:
View Apache License 2.0 + MIT license “TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION …”
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS ============================================================================== The following notice applies to a small portion of the code: The MIT License (MIT) Copyright (c) Microsoft Corporation Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
URLSearchParams
URLSearchParams 0.2.2 is written by Andrea Giammarchi and licensed under the ISC license:
View ISC license “Copyright (c) 2018, Andrea Giammarchi, @WebReflection …”
ISC License Copyright (c) 2018, Andrea Giammarchi, @WebReflection Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Fonts § ↑
Aside from fonts supplied by the operating system, Flood uses the fonts IBM Plex Mono, Inter, Source Code Pro, Source Serif Pro, and Ubuntu:
IBM Plex Mono
IBM Plex (including its Mono subfamily) is designed for IBM by Mike Abbink and the Bold Monday team. It is licensed under the SIL OFL 1.1:
View SIL OFL 1.1 “Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" …”
Copyright © 2017 IBM Corp. with Reserved Font Name "Plex" This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
Inter
Inter is principally designed by Rasmus Andersson. It is licensed under the SIL OFL 1.1:
View SIL OFL 1.1 “Copyright (c) 2016-2020 The Inter Project Authors …”
Copyright (c) 2016-2020 The Inter Project Authors. "Inter" is trademark of Rasmus Andersson. https://github.com/rsms/inter This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION AND CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
Source Code Pro
Source Code Pro is principally designed by Paul D. Hunt. It is licensed under the SIL OFL 1.1:
View SIL OFL 1.1 “Copyright 2010-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source' …”
Copyright 2010-2019 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
Source Serif Pro
Source Serif Pro is principally designed by Frank Grießhammer. It is licensed under the SIL OFL 1.1:
View SIL OFL 1.1 “Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source' …”
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. This Font Software is licensed under the SIL Open Font License, Version 1.1. This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL ----------------------------------------------------------- SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ----------------------------------------------------------- PREAMBLE The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. "Reserved Font Name" refers to any names specified as such after the copyright statement(s). "Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. PERMISSION & CONDITIONS Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: 1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. 2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. 5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. TERMINATION This license becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.
Although the current version is Source Serif 4, Flood uses an earlier version of the font, which went by the name Source Serif Pro.
Ubuntu
The Ubuntu font family is designed for Canonical Ltd. by typographers at the font foundry Dalton Maag, with some other contributors.
Copyright 2010,2011 Canonical Ltd. This Font Software is licensed under the Ubuntu Font Licence, Version 1.0. https://launchpad.net/ubuntu-font-licence
As stated in the copyright notice, it is licensed under the Ubuntu Font Licence, Version 1.0:
View Ubuntu Font Licence “This licence allows the licensed fonts to be used, studied, modified and redistributed …”
------------------------------- UBUNTU FONT LICENCE Version 1.0 ------------------------------- PREAMBLE This licence allows the licensed fonts to be used, studied, modified and redistributed freely. The fonts, including any derivative works, can be bundled, embedded, and redistributed provided the terms of this licence are met. The fonts and derivatives, however, cannot be released under any other licence. The requirement for fonts to remain under this licence does not require any document created using the fonts or their derivatives to be published under this licence, as long as the primary purpose of the document is not to be a vehicle for the distribution of the fonts. DEFINITIONS "Font Software" refers to the set of files released by the Copyright Holder(s) under this licence and clearly marked as such. This may include source files, build scripts and documentation. "Original Version" refers to the collection of Font Software components as received under this licence. "Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. "Copyright Holder(s)" refers to all individuals and companies who have a copyright ownership of the Font Software. "Substantially Changed" refers to Modified Versions which can be easily identified as dissimilar to the Font Software by users of the Font Software comparing the Original Version with the Modified Version. To "Propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification and with or without charging a redistribution fee), making available to the public, and in some countries other activities as well. PERMISSION & CONDITIONS This licence does not grant any rights under trademark law and all such rights are reserved. Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to propagate the Font Software, subject to the below conditions: 1) Each copy of the Font Software must contain the above copyright notice and this licence. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine- readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. 2) The font name complies with the following: (a) The Original Version must retain its name, unmodified. (b) Modified Versions which are Substantially Changed must be renamed to avoid use of the name of the Original Version or similar names entirely. (c) Modified Versions which are not Substantially Changed must be renamed to both (i) retain the name of the Original Version and (ii) add additional naming elements to distinguish the Modified Version from the Original Version. The name of such Modified Versions must be the name of the Original Version, with "derivative X" where X represents the name of the new work, appended to that name. 3) The name(s) of the Copyright Holder(s) and any contributor to the Font Software shall not be used to promote, endorse or advertise any Modified Version, except (i) as required by this licence, (ii) to acknowledge the contribution(s) of the Copyright Holder(s) or (iii) with their explicit written permission. 4) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this licence, and must not be distributed under any other licence. The requirement for fonts to remain under this licence does not affect any document created using the Font Software, except any version of the Font Software extracted from a document created using the Font Software may only be distributed under this licence. TERMINATION This licence becomes null and void if any of the above conditions are not met. DISCLAIMER THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE.