diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a610913f00c8..ba775febd263b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -77,6 +77,15 @@ don't see it, feel free to [open a new issue][open an issue]. [open an issue]: https://github.com/badges/shields/issues/new/choose +### Requesting new logos + +We consume logos via [the SimpleIcons project][simple-icons github], and +encourage you to contribute logos there. Please review their +[guidance][simple-icons contributing] before doing so. + +[simple-icons github]: https://github.com/simple-icons/simple-icons +[simple-icons contributing]: https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md + ### Spreading the word Feel free to star the repository. This will help increase the visibility of the project, therefore attracting more users and contributors to Shields! @@ -154,10 +163,6 @@ To run the integration tests: There is a [High-level code walkthrough](doc/code-walkthrough.md) describing the layout of the project. -### Logos - -We have [documentation for logo usage](doc/logos.md) which includes [contribution guidance](doc/logos.md#contributing-logos) - ## Pull Requests All code changes are incorporated via pull requests, and pull requests are always squashed into a single commit on merging. Therefore there's no requirement to squash commits within your PR, but feel free to squash or restructure the commits on your PR branch if you think it will be helpful. PRs with well structured commits are always easier to review! diff --git a/README.md b/README.md index f47e925813fae..2c265024a5963 100644 --- a/README.md +++ b/README.md @@ -224,9 +224,6 @@ Alumni: All assets and code are under the [CC0 LICENSE](LICENSE) and in the public domain unless specified otherwise. -The assets in `logo/` are trademarks of their respective companies and are -under their terms and license. - ## Community Thanks to the people and companies who donate money, services or time to keep the project running. [https://shields.io/community](https://shields.io/community) diff --git a/core/base-service/coalesce-badge.js b/core/base-service/coalesce-badge.js index 588d9bd0dcd41..91104d65e1101 100644 --- a/core/base-service/coalesce-badge.js +++ b/core/base-service/coalesce-badge.js @@ -17,12 +17,10 @@ import toArray from './to-array.js' // // Logos are resolved in this manner: // -// 1. When `?logo=` contains a named logo or the name of one of the Shields -// logos or contains base64-encoded SVG, that logo is used. When a -// `&logoColor=` is specified, that color is used (except for the -// base64-encoded logos). Otherwise the default color is used. If the color -// is specified for a multicolor Shield logo, the named logo will be used and -// colored. The appearance of the logo can be customized using `logoWidth`, +// 1. When `?logo=` contains a simple-icons logo or contains a base64-encoded +// SVG, that logo is used. When a `&logoColor=` is specified, that color is +// used (except for the base64-encoded logos). Otherwise the default color +// is used. The appearance of the logo can be customized using `logoWidth`, // When `?logo=` is specified, any logo-related parameters specified // dynamically by the service, or by default in the service, are ignored. // 2. The second precedence is the dynamic logo returned by a service. This is diff --git a/core/base-service/coalesce-badge.spec.js b/core/base-service/coalesce-badge.spec.js index 247c10975fa9e..a98f05debd24f 100644 --- a/core/base-service/coalesce-badge.spec.js +++ b/core/base-service/coalesce-badge.spec.js @@ -1,5 +1,5 @@ import { expect } from 'chai' -import { getShieldsIcon, getSimpleIcon } from '../../lib/logos.js' +import { getSimpleIcon } from '../../lib/logos.js' import coalesceBadge from './coalesce-badge.js' describe('coalesceBadge', function () { @@ -138,7 +138,7 @@ describe('coalesceBadge', function () { }) it('when a social badge, uses the default named logo', function () { - // .not.be.empty for confidence that nothing has changed with `getShieldsIcon()`. + // .not.be.empty for confidence that nothing has changed with `getSimpleIcon()`. expect( coalesceBadge({ style: 'social' }, {}, { namedLogo: 'appveyor' }).logo, ).to.equal(getSimpleIcon({ name: 'appveyor' })).and.not.be.empty @@ -149,52 +149,35 @@ describe('coalesceBadge', function () { namedLogo: 'npm', }) expect(coalesceBadge({}, { namedLogo: 'npm' }, {}).logo).to.equal( - getShieldsIcon({ name: 'npm' }), + getSimpleIcon({ name: 'npm' }), ).and.not.to.be.empty }) - it('applies the named monochrome logo with color', function () { + it('applies the named logo with color', function () { expect( coalesceBadge({}, { namedLogo: 'dependabot', logoColor: 'blue' }, {}) .logo, - ).to.equal(getShieldsIcon({ name: 'dependabot', color: 'blue' })).and.not + ).to.equal(getSimpleIcon({ name: 'dependabot', color: 'blue' })).and.not .to.be.empty }) - it('applies the named multicolored logo with color', function () { - expect( - coalesceBadge({}, { namedLogo: 'npm', logoColor: 'blue' }, {}).logo, - ).to.equal(getSimpleIcon({ name: 'npm', color: 'blue' })).and.not.to.be - .empty - }) - it('overrides the logo', function () { expect( coalesceBadge({ logo: 'npm' }, { namedLogo: 'appveyor' }, {}).logo, - ).to.equal(getShieldsIcon({ name: 'npm' })).and.not.be.empty + ).to.equal(getSimpleIcon({ name: 'npm' })).and.not.be.empty }) - it('overrides the monochrome logo with a color', function () { + it('overrides the logo with a color', function () { expect( coalesceBadge( { logo: 'dependabot', logoColor: 'blue' }, { namedLogo: 'appveyor' }, {}, ).logo, - ).to.equal(getShieldsIcon({ name: 'dependabot', color: 'blue' })).and.not + ).to.equal(getSimpleIcon({ name: 'dependabot', color: 'blue' })).and.not .be.empty }) - it('overrides multicolored logo with a color', function () { - expect( - coalesceBadge( - { logo: 'npm', logoColor: 'blue' }, - { namedLogo: 'appveyor' }, - {}, - ).logo, - ).to.equal(getSimpleIcon({ name: 'npm', color: 'blue' })).and.not.be.empty - }) - it("when the logo is overridden, it ignores the service's logo color and width", function () { expect( coalesceBadge( @@ -206,35 +189,25 @@ describe('coalesceBadge', function () { }, {}, ).logo, - ).to.equal(getShieldsIcon({ name: 'npm' })).and.not.be.empty + ).to.equal(getSimpleIcon({ name: 'npm' })).and.not.be.empty }) - it("overrides the service monochome logo's color", function () { + it("overrides the service logo's color", function () { expect( coalesceBadge( { logoColor: 'blue' }, { namedLogo: 'dependabot', logoColor: 'red' }, {}, ).logo, - ).to.equal(getShieldsIcon({ name: 'dependabot', color: 'blue' })).and.not + ).to.equal(getSimpleIcon({ name: 'dependabot', color: 'blue' })).and.not .be.empty }) - it("overrides the service multicolored logo's color", function () { - expect( - coalesceBadge( - { logoColor: 'blue' }, - { namedLogo: 'npm', logoColor: 'red' }, - {}, - ).logo, - ).to.equal(getSimpleIcon({ name: 'npm', color: 'blue' })).and.not.be.empty - }) - // https://github.com/badges/shields/issues/2998 it('overrides logoSvg', function () { const logoSvg = 'data:image/svg+xml;base64,PHN2ZyB4bWxu' expect(coalesceBadge({ logo: 'npm' }, { logoSvg }, {}).logo).to.equal( - getShieldsIcon({ name: 'npm' }), + getSimpleIcon({ name: 'npm' }), ).and.not.be.empty }) }) diff --git a/core/base-service/openapi.js b/core/base-service/openapi.js index 3d2e6082ee639..bc8d7ffc80303 100644 --- a/core/base-service/openapi.js +++ b/core/base-service/openapi.js @@ -124,7 +124,7 @@ function category2openapi({ category, services, sort = false }) { in: 'query', required: false, description: - 'One of the named logos (bitcoin, dependabot, gitlab, npm, paypal, serverfault, stackexchange, superuser, telegram, travis) or simple-icons. All simple-icons are referenced using icon slugs. You can click the icon title on simple-icons to copy the slug or they can be found in the slugs.md file in the simple-icons repository. Further info.', + 'Icon slug from simple-icons. You can click the icon title on simple-icons to copy the slug or they can be found in the slugs.md file in the simple-icons repository. Further info.', schema: { type: 'string', }, @@ -135,7 +135,7 @@ function category2openapi({ category, services, sort = false }) { in: 'query', required: false, description: - 'The color of the logo (hex, rgb, rgba, hsl, hsla and css named colors supported). Supported for named logos and Shields logos but not for custom logos. For multicolor Shields logos, the corresponding named logo will be used and colored.', + 'The color of the logo (hex, rgb, rgba, hsl, hsla and css named colors supported). Supported for simple-icons logos but not for custom logos.', schema: { type: 'string', }, @@ -146,7 +146,7 @@ function category2openapi({ category, services, sort = false }) { in: 'query', required: false, description: - 'Make icons adaptively resize by setting `auto`. Useful for some wider logos like `amd` and `amg`. Supported for simple-icons logos only.', + 'Make icons adaptively resize by setting `auto`. Useful for some wider logos like `amd` and `amg`. Supported for simple-icons logos but not for custom logos.', schema: { type: 'string', }, diff --git a/core/base-service/openapi.spec.js b/core/base-service/openapi.spec.js index e8911653784e7..aa56fb7a6196d 100644 --- a/core/base-service/openapi.spec.js +++ b/core/base-service/openapi.spec.js @@ -80,7 +80,7 @@ const expected = { in: 'query', required: false, description: - 'One of the named logos (bitcoin, dependabot, gitlab, npm, paypal, serverfault, stackexchange, superuser, telegram, travis) or simple-icons. All simple-icons are referenced using icon slugs. You can click the icon title on simple-icons to copy the slug or they can be found in the slugs.md file in the simple-icons repository. Further info.', + 'Icon slug from simple-icons. You can click the icon title on simple-icons to copy the slug or they can be found in the slugs.md file in the simple-icons repository. Further info.', schema: { type: 'string' }, example: 'appveyor', }, @@ -89,7 +89,7 @@ const expected = { in: 'query', required: false, description: - 'The color of the logo (hex, rgb, rgba, hsl, hsla and css named colors supported). Supported for named logos and Shields logos but not for custom logos. For multicolor Shields logos, the corresponding named logo will be used and colored.', + 'The color of the logo (hex, rgb, rgba, hsl, hsla and css named colors supported). Supported for simple-icons logos but not for custom logos.', schema: { type: 'string' }, example: 'violet', }, @@ -98,7 +98,7 @@ const expected = { in: 'query', required: false, description: - 'Make icons adaptively resize by setting `auto`. Useful for some wider logos like `amd` and `amg`. Supported for simple-icons logos only.', + 'Make icons adaptively resize by setting `auto`. Useful for some wider logos like `amd` and `amg`. Supported for simple-icons logos but not for custom logos.', schema: { type: 'string', }, diff --git a/dangerfile.js b/dangerfile.js index 527be50d9c10b..f4199dff9369e 100644 --- a/dangerfile.js +++ b/dangerfile.js @@ -22,7 +22,6 @@ const server = fileMatch('core/server/**.js', '!*.spec.js') const serverTests = fileMatch('core/server/**.spec.js') const legacyHelpers = fileMatch('lib/**/*.js', '!*.spec.js') const legacyHelperTests = fileMatch('lib/**/*.spec.js') -const logos = fileMatch('logo/*.svg') const packageJson = fileMatch('package.json') const packageLock = fileMatch('package-lock.json') const secretsDocs = fileMatch('doc/server-secrets.md') @@ -78,17 +77,6 @@ if (legacyHelpers.created) { ) } -if (logos.created) { - message( - [ - ':art: Thanks for submitting a logo.
', - 'Please ensure your contribution follows our ', - '[guidance](https://github.com/badges/shields/blob/master/doc/logos.md#contributing-logos) ', - 'for logo submissions.', - ].join(''), - ) -} - if (capitals.created || underscores.created) { fail( [ diff --git a/doc/logos.md b/doc/logos.md deleted file mode 100644 index 84915cb18fb01..0000000000000 --- a/doc/logos.md +++ /dev/null @@ -1,42 +0,0 @@ -# Logos - -For documentation on using logos, see https://shields.io/docs/logos - -## Contributing Logos - -Our preferred way to consume icons is via the SimpleIcons logo. As a first port of call, we encourage you to contribute logos to [the SimpleIcons project][simple-icons github]. Please review their [guidance](https://github.com/simple-icons/simple-icons/blob/develop/CONTRIBUTING.md) before contributing. - -In some cases we may also accept logo submissions directly. In general, we do this only when: - -- We have a corresponding badge on the homepage, (e.g. the Eclipse logo because we support service badges for the Eclipse Marketplace). We may also approve logos for other tools widely used by developers. -- The logo provided in SimpleIcons is unclear when displayed at small size on a badge. -- There is substantial benefit in using a multi-colored icon over a monochrome icon. -- The logo doesn't meet the requirements to be included in the SimpleIcons set. - -If you are submitting a pull request for a custom logo, please: - -- Minimize SVG files through [SVGO][]. This can be done in one of two ways - - The [SVGO Command Line Tool][svgo] - - Install SVGO - - With npm: `npm install -g svgo` - - With Homebrew: `brew install svgo` - - Run the following command `svgo --precision=3 icon.svg -o icon.min.svg` - - Check if there is a loss of quality in the output, if so increase the precision. - - The [SVGOMG Online Tool][svgomg] - - Click "Open SVG" and select an SVG file. - - Set the precision to about 3, depending on if there is a loss of quality. - - Leave the remaining settings untouched (or reset them with the button at the bottom of the settings). - - Click the download button. -- Set a viewbox and ensure the logo is scaled to fit the viewbox, while preserving the logo's original proportions. This means the icon should be touching at least two sides of the viewbox. -- Ensure the logo is vertically and horizontally centered. -- Ensure the logo is minified to a single line with no formatting. -- Ensure the SVG does not contain extraneous attributes. -- Ensure your submission conforms to any relevant brand or logo guidelines. - -### Problems - -We try to ensure our logos are compliant with brand guidelines. If one of our custom logos does not conform to the necessary brand guidelines, please open an issue on the [shields.io tracker](https://github.com/badges/shields/issues) and we'll work with you to resolve it. If a logo from the simple-icons set does not conform to the relevant brand guidelines, please open an issue on the [simple-icons tracker](https://github.com/simple-icons/simple-icons/issues) first. - -[simple-icons github]: https://github.com/simple-icons/simple-icons -[svgo]: https://github.com/svg/svgo -[svgomg]: https://jakearchibald.github.io/svgomg/ diff --git a/frontend/blog/2024-07-10-sunsetting-shields-custom-logos.md b/frontend/blog/2024-07-10-sunsetting-shields-custom-logos.md new file mode 100644 index 0000000000000..de9a2f6074041 --- /dev/null +++ b/frontend/blog/2024-07-10-sunsetting-shields-custom-logos.md @@ -0,0 +1,39 @@ +--- +slug: sunsetting-shields-custom-logos +title: Sunsetting Shields custom logos +authors: + name: PyvesB + title: Shields.io Core Team + url: https://github.com/PyvesB + image_url: https://avatars.githubusercontent.com/u/10694593 +tags: [] +--- + +Following discussions in [#9476](https://github.com/badges/shields/issues/9476), we've gone ahead and deleted all custom logos that were maintained on the Shields.io side (bitcoin, dependabot, gitlab, npm, paypal, serverfault, stackexchange, superuser, telegram, travis), and will solely rely on the [Simple-Icons project](https://github.com/simple-icons/simple-icons) to provide named logos for our badges from now on. If you were using a Shields custom logo, you will have transparently switched over to the corresponding Simple-Icon and do not need to make changes to your badges. + +The reasons behind this decision include the following: + +- reducing code complexity and induced overhead by deleting several dozens lines of code. +- reducing maintenance load; we received regular pull requests to add logos that do not comply with our guidelines, or various other related questions. +- providing a less confusing user experience; all named logos now behave in the same way with regards to `logoColor` and other parameters. +- reducing frustration for contributors who prepared logo pull requests only to be told that they hadn't read the guidelines or that there was a misalignment on the interpretation of said guidelines. +- reinforcing Shields.io's mission to provide consistent badges, with all named logos now being monochrome. +- improving compliance with third-party brands; Simple-Icons regularly reviews whether their icons respect latest brand guidelines, whereas we do not. +- unblocking [#4947](https://github.com/badges/shields/issues/4947). + +We do acknowledge the fact that some of you voiced your preference for a given Shields custom logo over its Simple-Icons equivalent in [#7684](https://github.com/badges/shields/issues/7684). If you really want to go back to the Shields custom logo, you can leverage [custom logos](https://shields.io/docs/logos#custom-logos) to do so. Here are the corresponding Base64-encoded logo parameters for all our existing logos: + +| Name | Logo Preview | `logo` Parameter | +| ------------- | :------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| bitcoin | ![bitcoin](https://github.com/badges/shields/assets/10694593/20ea99c4-a557-476c-91a8-3b886ce98e5e) | `data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIzLjYzNiAxNC45MDJjLTEuNjAyIDYuNDMtOC4xMTQgMTAuMzQyLTE0LjU0MyA4Ljc0QzIuNjY2IDIyLjAzNy0xLjI0NiAxNS41MjUuMzU3IDkuMDk4IDEuOTYgMi42NjkgOC40Ny0xLjI0NCAxNC44OTcuMzU5YzYuNDMgMS42MDIgMTAuMzQxIDguMTE1IDguNzM5IDE0LjU0NCIgZmlsbD0iI2Y3OTMxYSIvPjxwYXRoIGQ9Ik0xNC42ODYgMTAuMjY3Yy0uMzcxIDEuNDg3LTIuNjYzLjczMS0zLjQwNi41NDZsLjY1NS0yLjYyOWMuNzQzLjE4NiAzLjEzOC41MzEgMi43NSAyLjA4M20tLjQwNiA0LjI0MmMtLjQwNyAxLjYzNS0zLjE2Ljc1LTQuMDUzLjUzbC43MjQtMi45Yy44OTMuMjI0IDMuNzU0LjY2NCAzLjMzIDIuMzdtMy4wMDgtNC4yMTljLjIzOC0xLjU5Ni0uOTc3LTIuNDU1LTIuNjQtMy4wMjdsLjU0LTIuMTYzLTEuMzE4LS4zMy0uNTI1IDIuMTA3YTU0LjI5MiA1NC4yOTIgMCAwIDAtMS4wNTQtLjI0OWwuNTMtMi4xMi0xLjMxNy0uMzI4LS41NCAyLjE2MmMtLjI4Ni0uMDY1LS41NjctLjEzLS44NC0uMTk4bC4wMDEtLjAwNy0xLjgxNi0uNDUzLS4zNSAxLjQwNnMuOTc3LjIyNC45NTYuMjM4Yy41MzMuMTMzLjYzLjQ4Ni42MTMuNzY2bC0uNjE1IDIuNDYzYy4wMzguMDEuMDg1LjAyNC4xMzcuMDQ1bC0uMTM4LS4wMzUtLjg2MiAzLjQ1MmMtLjA2NS4xNjEtLjIzLjQwNS0uNjA0LjMxMi4wMTQuMDItLjk1Ny0uMjM5LS45NTctLjIzOUw1LjgzNiAxNS42bDEuNzE0LjQyN2MuMzE4LjA4LjYzLjE2NC45MzguMjQybC0uNTQ1IDIuMTkgMS4zMTUuMzI4LjU0LTIuMTY0Yy4zNi4wOTcuNzA4LjE4NyAxLjA1LjI3MWwtLjUzOCAyLjE1NiAxLjMxNi4zMjguNTQ2LTIuMTgzYzIuMjQ1LjQyNCAzLjkzMy4yNTMgNC42NDMtMS43NzcuNTc0LTEuNjM1LS4wMjctMi41NzgtMS4yMDgtMy4xOTQuODYtLjE5OCAxLjUwOC0uNzY1IDEuNjgxLTEuOTM0IiBmaWxsPSIjZmZmIi8+PC9zdmc+` | +| dependabot | ![dependabot](https://github.com/badges/shields/assets/10694593/5fb27ba4-f940-4782-bba0-8c01f98cce0e) | `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NCA1NCIgZmlsbD0iI2ZmZiI+PHBhdGggZD0iTTI1IDNhMSAxIDAgMCAwLTEgMXY3YTEgMSAwIDAgMCAxIDFoNXYzSDZhMyAzIDAgMCAwLTMgM3YxMkgxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgydjZhMyAzIDAgMCAwIDMgM2g0MmEzIDMgMCAwIDAgMy0zdi02aDJhMSAxIDAgMCAwIDEtMVYzMWExIDEgMCAwIDAtMS0xaC0yVjE4YTMgMyAwIDAgMC0zLTNIMzNWNGExIDEgMCAwIDAtMS0xaC03em0tMy45ODIgMjZhMS4yMSAxLjIxIDAgMCAxIC44MzcuMzU1bDEuMjkgMS4yOWExLjIxIDEuMjEgMCAwIDEgMCAxLjcwOSAxLjIxIDEuMjEgMCAwIDEgMCAuMDAxbC02LjI5MSA2LjI5YTEuMjEgMS4yMSAwIDAgMS0xLjcxIDBsLTMuNzktMy43OTFhMS4yMSAxLjIxIDAgMCAxIDAtMS43MWwxLjI5LTEuMjlhMS4yMSAxLjIxIDAgMCAxIDEuNzEgMEwxNiAzMy41bDQuMTQ1LTQuMTQ1YTEuMjEgMS4yMSAwIDAgMSAuODczLS4zNTV6bTE5Ljk2MiAwYTEuMjEgMS4yMSAwIDAgMSAuODc0LjM1NGwxLjI5IDEuMjlhMS4yMSAxLjIxIDAgMCAxIDAgMS43MWwtNi4yOSA2LjI4OXYuMDAyYTEuMjEgMS4yMSAwIDAgMS0xLjcxMSAwbC0zLjc5LTMuNzlhMS4yMSAxLjIxIDAgMCAxIDAtMS43MWwxLjI5LTEuMjlhMS4yMSAxLjIxIDAgMCAxIDEuNzEgMGwxLjY0NSAxLjY0NSA0LjE0Ny00LjE0NkExLjIxIDEuMjEgMCAwIDEgNDAuOTggMjl6Ii8+PC9zdmc+` | +| gitlab | ![gitlab](https://github.com/badges/shields/assets/10694593/e9c8e584-3860-4fe2-b802-2ed7c87f996f) | `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjkzIDkzIDE5NCAxOTQiPjxkZWZzPjxzdHlsZT4uYntmaWxsOiNmYzZkMjZ9PC9zdHlsZT48L2RlZnM+PHBhdGggc3R5bGU9ImZpbGw6I2UyNDMyOSIgZD0ibTI4Mi44MyAxNzAuNzMtLjI3LS42OS0yNi4xNC02OC4yMmE2LjgxIDYuODEgMCAwIDAtMi42OS0zLjI0IDcgNyAwIDAgMC04IC40MyA3IDcgMCAwIDAtMi4zMiAzLjUybC0xNy42NSA1NGgtNzEuNDdsLTE3LjY1LTU0YTYuODYgNi44NiAwIDAgMC0yLjMyLTMuNTMgNyA3IDAgMCAwLTgtLjQzIDYuODcgNi44NyAwIDAgMC0yLjY5IDMuMjRMOTcuNDQgMTcwbC0uMjYuNjlhNDguNTQgNDguNTQgMCAwIDAgMTYuMSA1Ni4xbC4wOS4wNy4yNC4xNyAzOS44MiAyOS44MiAxOS43IDE0LjkxIDEyIDkuMDZhOC4wNyA4LjA3IDAgMCAwIDkuNzYgMGwxMi05LjA2IDE5LjctMTQuOTEgNDAuMDYtMzAgLjEtLjA4YTQ4LjU2IDQ4LjU2IDAgMCAwIDE2LjA4LTU2LjA0WiIvPjxwYXRoIGNsYXNzPSJiIiBkPSJtMjgyLjgzIDE3MC43My0uMjctLjY5YTg4LjMgODguMyAwIDAgMC0zNS4xNSAxNS44TDE5MCAyMjkuMjVjMTkuNTUgMTQuNzkgMzYuNTcgMjcuNjQgMzYuNTcgMjcuNjRsNDAuMDYtMzAgLjEtLjA4YTQ4LjU2IDQ4LjU2IDAgMCAwIDE2LjEtNTYuMDhaIi8+PHBhdGggc3R5bGU9ImZpbGw6I2ZjYTMyNiIgZD0ibTE1My40MyAyNTYuODkgMTkuNyAxNC45MSAxMiA5LjA2YTguMDcgOC4wNyAwIDAgMCA5Ljc2IDBsMTItOS4wNiAxOS43LTE0LjkxUzIwOS41NSAyNDQgMTkwIDIyOS4yNWMtMTkuNTUgMTQuNzUtMzYuNTcgMjcuNjQtMzYuNTcgMjcuNjRaIi8+PHBhdGggY2xhc3M9ImIiIGQ9Ik0xMzIuNTggMTg1Ljg0QTg4LjE5IDg4LjE5IDAgMCAwIDk3LjQ0IDE3MGwtLjI2LjY5YTQ4LjU0IDQ4LjU0IDAgMCAwIDE2LjEgNTYuMWwuMDkuMDcuMjQuMTcgMzkuODIgMjkuODJMMTkwIDIyOS4yMVoiLz48L3N2Zz4=` | +| npm | ![npm](https://github.com/badges/shields/assets/10694593/ba629fa3-a467-4c96-b191-62c339faac66) | `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZD0iTTAgMGg0MHY0MEgwVjB6IiBmaWxsPSIjY2IwMDAwIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTcgN2gyNnYyNmgtN1YxNGgtNnYxOUg3eiIvPjwvc3ZnPgo=` | +| paypal | ![paypal](https://github.com/badges/shields/assets/10694593/f2eacc65-7a19-4816-8897-f7723a97b26f) | `data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTE5LjcxNSA2LjEzM2MuMjQ5LTEuODY2IDAtMy4xMS0uOTk5LTQuMjY2QzE3LjYzNC42MjIgMTUuNzIxIDAgMTMuMzA3IDBINi4yMzVjLS40MTggMC0uOTE2LjQ0NC0xIC44ODlMMi4zMjMgMjAuNjIyYzAgLjM1Ni4yNS44LjY2NS44aDQuMzI4bC0uMjUgMS45NTZjLS4wODQuMzU1LjE2Ni42MjIuNDk4LjYyMmgzLjY2M2MuNDE3IDAgLjgzMi0uMjY3LjkxNS0uNzExdi0uMjY3bC43NDktNC42MjJ2LS4xNzhjLjA4My0uNDQ0LjUtLjguOTE1LS44aC41YzMuNTc4IDAgNi4zMjUtMS41MSA3LjE1Ni01Ljk1NS40MTgtMS44NjcuMjUyLTMuMzc4LS43NDctNC40NDUtLjI1LS4zNTUtLjY2Ni0uNjIyLTEtLjg4OSIgZmlsbD0iIzAwOWNkZSIvPjxwYXRoIGQ9Ik0xOS43MTUgNi4xMzNjLjI0OS0xLjg2NiAwLTMuMTEtLjk5OS00LjI2NkMxNy42MzQuNjIyIDE1LjcyMSAwIDEzLjMwNyAwSDYuMjM1Yy0uNDE4IDAtLjkxNi40NDQtMSAuODg5TDIuMzIzIDIwLjYyMmMwIC4zNTYuMjUuOC42NjUuOGg0LjMyOGwxLjE2NC03LjM3OC0uMDgzLjI2N2MuMDg0LS41MzMuNS0uODg5Ljk5OC0uODg5aDIuMDhjNC4wNzkgMCA3LjI0MS0xLjc3OCA4LjI0LTYuNzU1LS4wODMtLjI2NyAwLS4zNTYgMC0uNTM0IiBmaWxsPSIjMDEyMTY5Ii8+PHBhdGggZD0iTTkuNTYzIDYuMTMzYy4wODItLjI2Ni4yNS0uNTMzLjQ5OC0uNzEuMTY2IDAgLjI1LS4wOS40MTYtLjA5aDUuNDk0Yy42NjYgMCAxLjMzLjA5IDEuODMuMTc4LjE2NiAwIC4zMzMgMCAuNDk4LjA4OS4xNjguMDg5LjMzNC4wODkuNDE4LjE3OGguMjVjLjI0OC4wODkuNDk3LjI2Ni43NDguMzU1LjI0OC0xLjg2NiAwLTMuMTEtLjk5OS00LjM1NUMxNy43MTcuNTMzIDE1LjgwNCAwIDEzLjM5IDBINi4yMzVjLS40MTggMC0uOTE2LjM1Ni0xIC44ODlMMi4zMjMgMjAuNjIyYzAgLjM1Ni4yNS44LjY2NS44aDQuMzI4bDEuMTY0LTcuMzc4IDEuMDg0LTcuOTF6IiBmaWxsPSIjMDAzMDg3Ii8+PC9zdmc+` | +| serverfault | ![serverfault](https://github.com/badges/shields/assets/10694593/d1b7a0e5-2465-4009-ba5f-89f364554a46) | `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxMjAgMTIwIj48c3R5bGU+LnN0MHtmaWxsOiNhN2E5YWN9LnN0MXtmaWxsOiM4MTgyODV9LnN0MntmaWxsOiM1ODU4NWF9LnN0M3tmaWxsOiNkMWQyZDR9LnN0NHtmaWxsOiMyMzFmMjB9PC9zdHlsZT48cGF0aCBjbGFzcz0ic3QwIiBkPSJNMTMuNyA0MS42aDQ0djguN2gtNDR6Ii8+PHBhdGggY2xhc3M9InN0MSIgZD0iTTEzLjcgNTUuOGg0NHY4LjdoLTQ0eiIvPjxwYXRoIGNsYXNzPSJzdDIiIGQ9Ik0xMy43IDY5aDQ0djguN2gtNDR6Ii8+PHBhdGggY2xhc3M9InN0MyIgZD0iTTEzLjcgMjcuNmg0NHY4LjdoLTQ0eiIvPjxwYXRoIGNsYXNzPSJzdDQiIGQ9Ik0xMy43IDgzLjJoNDR2OC43aC00NHoiLz48cGF0aCBmaWxsPSIjOTkyMjI0IiBkPSJNNjMgNDEuNmgxOC43djguN0g2M3oiLz48cGF0aCBmaWxsPSIjNjMwZjE2IiBkPSJNNjMgNTUuOGgxOC43djguN0g2M3oiLz48cGF0aCBmaWxsPSIjMmIxNDE1IiBkPSJNNjMgNjloMTguN3Y4LjdINjN6Ii8+PHBhdGggZmlsbD0iI2U3MjgyZCIgZD0iTTYzIDI3LjZoMTguN3Y4LjdINjN6Ii8+PHBhdGggY2xhc3M9InN0NCIgZD0iTTYzIDgzLjJoMTguN3Y4LjdINjN6Ii8+PGc+PHBhdGggY2xhc3M9InN0MCIgZD0iTTg2LjggNDJoMTguN3Y4LjdIODYuOHoiLz48cGF0aCBjbGFzcz0ic3QxIiBkPSJNODYuOCA1Ni4yaDE4Ljd2OC43SDg2Ljh6Ii8+PHBhdGggY2xhc3M9InN0MiIgZD0iTTg2LjggNjkuNGgxOC43djguN0g4Ni44eiIvPjxwYXRoIGNsYXNzPSJzdDMiIGQ9Ik04Ni44IDI4aDE4Ljd2OC43SDg2Ljh6Ii8+PHBhdGggY2xhc3M9InN0NCIgZD0iTTg2LjggODMuNmgxOC43djguN0g4Ni44eiIvPjwvZz48L3N2Zz4=` | +| stackexchange | ![stackexchange](https://github.com/badges/shields/assets/10694593/409644d3-4679-4f0d-9fb9-538215eec8c7) | `data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuMjczIDEwLjQ2M2gxOS4zMjV2My45NzhIMi4yNzN6IiBmaWxsPSIjMzc2ZGI2Ii8+PHBhdGggZD0iTTIuMjczIDUuMzIyaDE5LjMyNVY5LjNIMi4yNzN6IiBmaWxsPSIjNGNhMmRhIi8+PHBhdGggZD0iTTE4LjU3NSAwSDUuMzc0Yy0xLjcwNSAwLTMuMSAxLjQyLTMuMSAzLjE3OFY0LjIxaDE5LjMyNFYzLjE3OEMyMS41OTggMS40MiAyMC4yNTQgMCAxOC41NzUgMHoiIGZpbGw9IiM5MWQ4ZjQiLz48cGF0aCBkPSJNMi4yNzMgMTUuNTc4djEuMDMzYzAgMS43NTcgMS4zOTYgMy4xNzggMy4xIDMuMTc4aDguMjY4VjI0bDQuMDgxLTQuMjExaC45MDVjMS43MDUgMCAzLjEtMS40MiAzLjEtMy4xNzh2LTEuMDMzeiIgZmlsbD0iIzFlNTM5NyIvPjwvc3ZnPg==` | +| superuser | ![superuser](https://github.com/badges/shields/assets/10694593/f8d0b5ad-5b67-49f8-8989-59256baad56e) | `data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTIuNTk0IDBhLjUxNC41MTQgMCAwIDAtLjM0NC4xMS40MDQuNDA0IDAgMCAwLS4xMzMuMzA2djIzLjE5N2MwIC4xMjQuMDQ4LjI0Ni4xNDUuMzEyLjA5Ni4wNjUuMjA4LjA3NS4zMzIuMDc1aDUuNTkzYy4xMyAwIC4yNDMtLjAyLjMzNC0uMDkzLjA5Mi0uMDcyLjEzMS0uMi4xMTItLjMxN2wuMDAyLjAyM3YtMS40NjdhLjM2Ny4zNjcgMCAwIDAtLjE2LS4zMDEuNjEyLjYxMiAwIDAgMC0uMzQ0LS4wODdINS42MTNjLS4xMSAwLS4xNy0uMDItLjE5MS0uMDM3LS4wMjItLjAxNi0uMDMyLS4wMy0uMDMyLS4xVjIuNDA4YzAtLjA3MS4wMTItLjA5NC4wNDEtLjExNi4wMy0uMDIzLjEwMi0uMDUuMjM5LS4wNWgyLjQ4OGMuMTI0IDAgLjIzNS0uMDEuMzMyLS4wNzYuMDk3LS4wNjYuMTQ1LS4xODguMTQ1LS4zMTFWLjQxNmEuMzk2LjM5NiAwIDAgMC0uMTU3LS4zMjNBLjU4My41ODMgMCAwIDAgOC4xMzEgMHoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNMjAuOTU4IDE0LjQ3Yy0xLjQ4Mi40MTQtMi40ODkgMS4yNzMtMi40ODkgMi42ODR2NC4wNDJjMCAzLjAxNy0yLjkwOSAyLjY4NS02LjUxNyAyLjY4NWgtLjU2Yy0uMjIzIDAtLjM2My0uMDgzLS4zNjMtLjI3N1YyMi4yMmMwLS4xOTQuMTEyLS4yNzcuMzM2LS4yNzdoLjQ0N2MyLjE1NCAwIDMuNjY0LjQ3IDMuNjY0LTEuMjQ1di0zLjg3NmMwLTEuMTkuODQtMi44NTEgMi41MTctMy40Ni4xMTItLjAyOC4xNC0uMDgzLjE0LS4xMzggMC0uMDU2LS4wMjgtLjEzOS0uMTQtLjE5NC0xLjUzOC0uNjkyLTIuNTE3LTEuODI3LTIuNTE3LTMuMTg0VjUuNDczYzAtMS42ODktMS41MS0zLjM3Ny0zLjY2NC0zLjM3N2gtLjQ0N2MtLjIyNCAwLS4zMzYtLjA4My0uMzM2LS4yNzdWLjQzNWMwLS4xOTQuMTQtLjI3Ny4zNjQtLjI3N2guNTZjMy42MDcgMCA2LjU0NCAyLjU0NyA2LjU0NCA1LjU2NHYzLjY4MmMwIDEuMzg0IDEuMDA3IDIuMTg2IDIuNTE3IDIuNzEyLjU2LjE2Ni44NjcuMTk0Ljg2Ny42Mzd2MS4xNjNjLjAyOC4yNDktLjI1MS4zNi0uOTIzLjU1MyIgZmlsbD0iIzJlYWNlMyIvPjxwYXRoIGQ9Ik0xMS41NzYgOC4zM2MtLjQwNiAwLS43ODUuMzAzLS43ODUuNzJ2MS4zMjhjMCAuMzg5LjM1LjcyMS43ODUuNzIxaDEuNDgyYy40MDYgMCAuNzg0LS4zMDQuNzg0LS43MlY5LjA1YzAtLjM4OC0uMzQ4LS43Mi0uNzg0LS43MnoiIGZpbGw9IiMwMDAiLz48L3N2Zz4=` | +| telegram | ![telegram](https://github.com/badges/shields/assets/10694593/c5c5acc3-f434-4a8d-a834-6d94a7ffb45a) | `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyIDI0YzYuNjI3IDAgMTItNS4zNzMgMTItMTJTMTguNjI3IDAgMTIgMCAwIDUuMzczIDAgMTJzNS4zNzMgMTIgMTIgMTJaIiBmaWxsPSJ1cmwoI2EpIi8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik01LjQyNSAxMS44NzFhNzk2LjQxNCA3OTYuNDE0IDAgMCAxIDYuOTk0LTMuMDE4YzMuMzI4LTEuMzg4IDQuMDI3LTEuNjI4IDQuNDc3LTEuNjM4LjEgMCAuMzIuMDIuNDcuMTQuMTIuMS4xNS4yMy4xNy4zMy4wMi4xLjA0LjMxLjAyLjQ3LS4xOCAxLjg5OC0uOTYgNi41MDQtMS4zNiA4LjYyMi0uMTcuOS0uNSAxLjE5OS0uODE5IDEuMjI5LS43LjA2LTEuMjI5LS40Ni0xLjg5OC0uOS0xLjA2LS42ODktMS42NDktMS4xMTktMi42NzgtMS43OTgtMS4xOS0uNzgtLjQyLTEuMjA5LjI2LTEuOTA4LjE4LS4xOCAzLjI0Ny0yLjk3OCAzLjMwNy0zLjIyOC4wMS0uMDMuMDEtLjE1LS4wNi0uMjEtLjA3LS4wNi0uMTctLjA0LS4yNS0uMDItLjExLjAyLTEuNzg4IDEuMTQtNS4wNTYgMy4zNDgtLjQ4LjMzLS45MDkuNDktMS4yOTkuNDgtLjQzLS4wMS0xLjI0OC0uMjQtMS44NjgtLjQ0LS43NS0uMjQtMS4zNDktLjM3LTEuMjk5LS43OS4wMy0uMjIuMzMtLjQ0Ljg5LS42NjlaIiBmaWxsPSIjZmZmIi8+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJhIiB4MT0iMTEuOTkiIHkxPSIwIiB4Mj0iMTEuOTkiIHkyPSIyMy44MSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiMyQUFCRUUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMyMjlFRDkiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48L3N2Zz4K` | +| travis | ![travis](https://github.com/badges/shields/assets/10694593/67110d9b-b825-4ef7-85ff-1bba963121e1) | `data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNjYuNyIgaGVpZ2h0PSIyNjQuNSI+PHBhdGggZmlsbD0iI2NkMjQ0NSIgZD0iTTY0IDExNXMtNDIgMzAtNDMgNDFsMy0xczQ5LTMzIDg5LTM3bDEtNS01MCAybTY1LTQtMzMgMjMgMiAyIDU4LTE5IDEyLTctMzkgMW0yOCAyOGMyMyAwIDU4LTIyIDU4LTIybC0xMS0zaC0xOGwtOC0zLTIwIDIzLTIgNCAxIDFtLTk4IDg2LTMtMnptMTc0LTEzLTcgMi0zMy0xLTIxLTE2LTI1IDYtMjktMi0xNiAxNy0zMSAxMC0xNS01LTEtMSA3IDE3czE2IDE2IDI0IDE4YzkgMiAyNCAwIDM2LTIgMTItMSAyMS02IDI1LTEybDQtOXMxMSAxNiAyMSAxN2MxMCAyIDM4LTggMzgtOHMxOC00IDIxLTEwbDExLTI2LTkgNSIvPjxwYXRoIGZpbGw9IiNmMmYxOWIiIGQ9Ik0yNjEgOTNhNjYgNjYgMCAwIDAgMC00bC04LTZhMTA2IDEwNiAwIDAgMC0yMC05bC01LTItNS0yIDExIDNhMTQ0IDE0NCAwIDAgMSA2IDJjLTE2LTQzLTU0LTcwLTk2LTcwLTQzIDAtODEgMjctOTcgNzBhMTQ1IDE0NSAwIDAgMSAxNy01bC01IDJhMjAwIDIwMCAwIDAgMC0zMiAxN2wtMSAyYTcwIDcwIDAgMCAwIDAgMiA2OSA2OSAwIDAgMCAwIDYgNzkgNzkgMCAwIDAgMyAyMSA1NyA1NyAwIDAgMCAxIDUgNDMgNDMgMCAwIDAgMiA0bDEgMSAxIDEgNCAxLTMtMTIgMTYtM2E1MiA1MiAwIDAgMS0zLTFsLTYtMmEzMCAzMCAwIDAgMS0zLTFsLTMtMmMxMSAzIDMzIDIgNTMgMGE1MzggNTM4IDAgMCAxIDEwOCAwYzIwIDIgNDIgMyA1MyAwbC0zIDJhMzAgMzAgMCAwIDEtMyAxbC03IDItMSAxIDE4IDMtMyAxMWgybDEtMSAxLTFhMjIgMjIgMCAwIDAgMi00IDU2IDU2IDAgMCAwIDItNSA3OCA3OCAwIDAgMCAyLTIxIDY4IDY4IDAgMCAwIDAtNiIvPjxwYXRoIGZpbGw9IiNlNWM5YTMiIGQ9Ik0xNTYgMjQ0YTU4IDU4IDAgMCAxLTUgMGgtM2E3NzYgNzc2IDAgMCAwIDMtNiAxOTggMTk4IDAgMCAwIDUgNm0zIDNjNCA0IDEwIDcgMTYgNy0xMCA0LTIwIDYtMjcgNi04IDEtMTUgMC0yMi0yYTI3IDI3IDAgMCAxIDEgMGMxLTEgMTQtMiAyMC0xMWg1YTU4IDU4IDAgMCAwIDYtMWwxIDEiLz48cGF0aCBmaWxsPSIjNWQ2NzYyIiBkPSJNMTcxIDExNmExMjggMTI4IDAgMCAxLTEyIDEzIDQ5MyA0OTMgMCAwIDAtMTUgMGwtMjQgMWExOTcgMTk3IDAgMCAxIDUxLTE0bS02NSA1LTEyIDExYTQ4MCA0ODAgMCAwIDAtMjkgM2MxMi01IDI2LTEwIDQxLTE0bTEzNiAyMy01IDMyLTIxIDE1LTU3LTctOC0yOGEyIDIgMCAwIDAtMS0xIDM1IDM1IDAgMCAwLTExIDAgMiAyIDAgMCAwLTIgMWwtOCAyOC01NiAxMi0yMi0xNi01LTM1YTI2NyAyNjcgMCAwIDEgMy0yaDVsNCAzMyAxIDEgMTUgMTFhMiAyIDAgMCAwIDEgMGw0Ni0xMGgxYTIgMiAwIDAgMCAxLTFsOC0yOCAxMy0yIDEzIDIgOCAyOCAyIDEgNDYgNWgxbDE1LTExIDEtMSA0LTI5IDggMm02LTIwLTQgMTVjLTgtMi0yNi01LTUxLTdsMjQtMTMgMzEgNSIvPjxwYXRoIGZpbGw9IiNlNGM4OTYiIGQ9Im0xNTQgMTM0LTcgNS04IDVhNjkgNjkgMCAwIDAtMTAgMiAyIDIgMCAwIDAtMSAxbC04IDI4LTQ1IDktMTQtOS00LTMzIDMyLTVhNzYgNzYgMCAwIDAtNCA1bC04IDExIDExLTdzNy01IDE5LTEwYTUwMyA1MDMgMCAwIDEgNDctMnptLTY5IDM3IDEyLTFhNDAgNDAgMCAwIDAgNCAwYzYgMCAxMCAwIDEwLTlzLTQtMTYtOS0xNmMtNiAwLTEyIDctMTEgMTZsMSA2Yy01IDEtNyA0LTcgNG0xNDYtMjktNCAyOC0xNCA5LTQ1LTUtOC0yN2EyIDIgMCAwIDAtMS0xbC0xMi0yaDFjMSAwIDE3LTIgMzUtOCAyMCAxIDM2IDQgNDggNnptLTI5IDI2YzAtMS0xLTQtNi00bDEtNWMtMS05LTYtMTYtMTItMTZzLTkgNy05IDE2IDUgOSAxMSA5YzcgMCAxMi0yIDE1IDAiLz48cGF0aCBmaWxsPSIjYzRhZjkwIiBkPSJtMTU0IDEzNC03IDUtOCA1YTY5IDY5IDAgMCAwLTEwIDIgMiAyIDAgMCAwLTEgMWwtOCAyOC00NSA5LTE0LTktNC0zMyAzMi01YTc2IDc2IDAgMCAwLTQgNWwtOCAxMSAxMS03czctNSAxOS0xMGE1MDMgNTAzIDAgMCAxIDQ3LTJ6bS02OSAzNyAxMi0xYTQwIDQwIDAgMCAwIDQgMGM2IDAgMTAgMCAxMC05cy00LTE2LTktMTZjLTYgMC0xMiA3LTExIDE2bDEgNmMtNSAxLTcgNC03IDRtMTQ2LTI5LTQgMjgtMTQgOS00NS01LTgtMjdhMiAyIDAgMCAwLTEtMWwtMTItMmgxYzEgMCAxNy0yIDM1LTggMjAgMSAzNiA0IDQ4IDZ6bS0yOSAyNmMwLTEtMS00LTYtNGwxLTVjLTEtOS02LTE2LTEyLTE2cy05IDctOSAxNiA1IDkgMTEgOWM3IDAgMTItMiAxNSAwIi8+PHBhdGggZmlsbD0iI2U1YzlhMyIgZD0ibTI1MCAxNTQgMSA5Yy0xIDgtNSAyMi03IDI1bC0xMC0xIDEtNSA1LTQgMS0xIDQtMjYgNSAzTTU1IDE4OHYzbC0xMSAxYy0yLTItNi0xNy03LTI1di05bDctMyAzIDI3IDEgMSA3IDVtMTA3IDB2MnMtNyA2LTE2IDdjLTEwIDEtMTgtNS0xOC01bDMgNmE3MSA3MSAwIDAgMC04LTFoLTRjLTYgMC0xNCAxMC0yMCAxOWwtMjMgN2MtMTAtMTQtMTUtMjgtMTUtMjlsLTEtMiAzIDIgNiA0IDIgMmEyIDIgMCAwIDAgMiAwbDU4LTEzYTIgMiAwIDAgMCAxLTFsOC0yN2EyOCAyOCAwIDAgMSA4IDBsOCAyOCAyIDFoNCIvPjxwYXRoIGZpbGw9IiNlNWM5YTMiIGQ9Im0yMjggMTg3IDItMmExMjAgMTIwIDAgMCAxLTEwIDI3aC0zbC04LTEtMTYtMi0xNi0xMi0xLTFjLTEtMS0yLTItNS0ybC0xNCAzYzUtMyA1LTcgNS03di0ybDU0IDZhMiAyIDAgMCAwIDEgMGw2LTQgNS0zIi8+PHBhdGggZmlsbD0iI2U5ZDU4NiIgZD0iTTE4OCA3MmMwIDUgMCAxNC0yIDIyYTIgMiAwIDAgMCAwIDEgMzQ2IDM0NiAwIDAgMC05LTFjMy02IDQtMTQgNC0xNmw3LTZtLTgyIDZjMCAyIDEgMTAgNCAxNmEzMzMgMzMzIDAgMCAwLTkgMGMtMi04LTItMTctMi0yMmw3IDYiLz48cGF0aCBmaWxsPSIjMmEyYzMwIiBkPSJNMTg0IDE1NGEzIDMgMCAwIDAgMy0zIDMgMyAwIDAgMC0zLTIgMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAgMyAyem0xOCAxNGMtMy0yLTggMC0xNSAwLTYgMC0xMSAwLTExLTlzMy0xNiA5LTE2IDExIDcgMTIgMTZsLTEgNWM1IDAgNiAzIDYgNCIvPjxwYXRoIGZpbGw9IiNmMWZhZmMiIGQ9Ik0xODQgMTQ5YTMgMyAwIDEgMSAwIDUgMyAzIDAgMSAxIDAtNSIvPjxwYXRoIGZpbGw9IiMyYTJjMzAiIGQ9Ik0xMDIgMTU3YTMgMyAwIDEgMCAwLTYgMyAzIDAgMCAwIDAgNnptOSA0YzAgOS00IDktMTAgOWgtNGwtMTIgMXMyLTMgNy00bC0xLTZjLTEtOSA1LTE2IDExLTE2IDUgMCA5IDcgOSAxNiIvPjxwYXRoIGZpbGw9IiNmMWZhZmMiIGQ9Ik0xMDIgMTUxYTMgMyAwIDEgMSAwIDYgMyAzIDAgMCAxIDAtNiIvPjxwYXRoIGZpbGw9IiNlYmRiOGIiIGQ9Im02NiAxMDEtMS0xdi0zbDItMjAgMzAtNyAyIDI1Yy0xLTItNC02LTUtMTMtMS0zLTMtNC02LTRsLTcgMWMtNCAxLTEwIDMtMTEgNS0yIDUtMiAxNi0yIDE2bC0yIDFtMTU1IDAtMS0xcy0xLTExLTMtMTZjLTEtMi03LTQtMTEtNWwtNy0xYy0zIDAtNSAxLTYgNC0xIDctMyAxMS01IDEzbDItMjUgMzAgNyAyIDE3djZsLTEgMSIvPjxwYXRoIGZpbGw9IiNlYmRjOGMiIGQ9Im0xNzQgOTctNjAtMS0zLTctMy0xMi01LTRWNDVsNy0yMHMxIDYwIDE1IDYwaDM3YzE0IDAgMTUtNjAgMTUtNjBsMTAgMzQtNyAxOS0xIDUtMiA5LTMgNW02MiAxMC0zLTEgMyAxbS0zLTEtMTEtNFY4MXMzIDIxIDExIDI1Ii8+PHBhdGggZmlsbD0iI2VhZDY4NyIgZD0iTTIyMiAxMDB2LTYgNiIvPjxwYXRoIGZpbGw9IiNlYmRjOGMiIGQ9Im01MSAxMDcgNC0xLTQgMW00LTFjNy00IDEwLTI1IDEwLTI1djIxbC0xMCA0Ii8+PHBhdGggZmlsbD0iI2VhZDY4NyIgZD0iTTY1IDEwMHYtMyAzIi8+PHBhdGggZmlsbD0iIzJhMmMzMCIgZD0iTTk4IDk2di0xYy0zLTktMy0xOS0yLTI0bC0yOCA4Yy0yIDEyLTEgMjAgMCAyMmExODUgMTg1IDAgMCAxIDYtMiAyMjkgMjI5IDAgMCAxIDIzLTNoMXptMTItMmMtMy02LTQtMTQtNC0xNmwtNy02YTc3IDc3IDAgMCAwIDIgMjNsOS0xem03NiAwYzItOCAyLTE3IDItMjJsLTcgNmMwIDItMSAxMC00IDE2bDkgMWEyIDIgMCAwIDEgMC0xem0zNCA3YzAtMSAxLTEwLTEtMjJsLTI4LThjMSA1IDEgMTUtMiAyNHYxaDFhMjI4IDIyOCAwIDAgMSAzMCA1em00IDEgMTEgNS02LTJhOTQgOTQgMCAwIDAtNS0xIDE3NSAxNzUgMCAwIDAtMjMtM2wtMTItMWE3NjEgNzYxIDAgMCAwLTkxIDBsLTEyIDFhMjQyIDI0MiAwIDAgMC0zNCA2bDExLTVoMWMwLTEtMS0xMSAxLTI1YTIgMiAwIDAgMSAxLTFsNC0yYzEtMzAgMTMtNDQgMTQtNDRhODMgODMgMCAwIDAtMTEgNDRsMjQtN2gybDIgMmMtMS04IDAtMzEgMTEtNTAtMSAxLTkgMjYtNiA1NGE0NSA0NSAwIDAgMCAzIDJ2MnMxIDkgNSAxN2E0NDQgNDQ0IDAgMCAxIDU5IDBjNC04IDUtMTcgNS0xN2EyIDIgMCAwIDEgMC0yIDQ5IDQ5IDAgMCAwIDMtMmMzLTI4LTUtNTMtNS01NCAxMCAxOSAxMSA0MiAxMSA1MGE4MyA4MyAwIDAgMCAxLTJoMmwyNCA3YzAtNSAwLTI2LTExLTQ0IDEgMCAxMyAxNCAxNCA0NGw0IDJhMiAyIDAgMCAxIDEgMWMzIDE0IDEgMjQgMSAyNWgxIi8+PHBhdGggZmlsbD0iIzJhMmMzMCIgZD0iTTE2OCA0M1YzMGgtNDd2MTNoNnYtNmgxM3Y0MGgtNXY3aDE4di03aC01VjM3aDEzdjZ6bTQtMTh2MjNoLTE2di03aC0zdjMxaDV2MTdoLTI4VjcyaDVWNDFoLTN2N2gtMTZWMjVoNTYiLz48cGF0aCBmaWxsPSIjY2QyNDQ1IiBkPSJNMTY4IDMwdjEzaC03di02aC0xM3Y0MGg1djdoLTE4di03aDVWMzdoLTEzdjZoLTZWMzBoNDciLz48cGF0aCBmaWxsPSIjNWQ2NzYyIiBkPSJtNDEgMTI0IDktMmExMzkgMTM5IDAgMCAwLTggNmwtMS00Ii8+PHBhdGggZmlsbD0iI2M0YWY5MCIgZD0iTTEyNyAxODZzMCA1LTUgNmMtNiAyLTQ0IDEzLTQ4IDEzbC0xNS04LTMtOSAxNiAxMCA1NS0xMm0zMyAwczAgNCA2IDVsNDggMTFjNC0xIDE1LTkgMTUtOWwyLTktMTUgOC01Ni02Ii8+PHBhdGggZmlsbD0iI2M0YWY5MCIgZD0iTTM4IDE3OXM1IDEwIDEzIDZsNiAzdjRsLTEzIDItMy0yLTMtMTNtMjEyLTNzLTggMTEtMTcgN2wtMiAydjRsMTMgMiAzLTIgMy0xM20tMTMxIDgxczMxIDE2IDY2LTVsLTEyLTFzLTI0IDEwLTQzIDRsLTExIDIiLz48cGF0aCBmaWxsPSIjMmEyYzMwIiBkPSJNNTAgMTIyYTMwNSAzMDUgMCAwIDAtOSAybDEgNGExMzkgMTM5IDAgMCAxIDgtNnptNSA2OWE5MSA5MSAwIDAgMSAwLTNsLTctNWEyIDIgMCAwIDEtMS0xbC0zLTI3LTcgM3Y5YzEgOCA1IDIzIDcgMjVsMTEtMXptNDItNzMgMTUtM2ExMTczIDExNzMgMCAwIDAtNDUgMmMtNiA0LTI4IDE4LTQzIDM2IDE1LTEwIDQwLTI2IDczLTM1em0tMyAxNCAxMi0xMWMtMTUgNC0yOSA5LTQxIDE0YTQ4MSA0ODEgMCAwIDEgMjktM3ptNTgtMThoLTIzbC04IDRjLTEgMS0xMiA2LTIzIDE2IDktNSAyMy0xMSAzOS0xNmExOTIgMTkyIDAgMCAxIDE1LTR6bS01IDI1IDctNWE1NjMgNTYzIDAgMCAwLTEwIDAgNTAyIDUwMiAwIDAgMC0zNyAyYy0xMiA1LTE5IDEwLTE5IDEwbC0xMSA3IDgtMTFhNzAgNzAgMCAwIDEgNC01bC0zMiA1IDQgMzMgMTQgOSA0NS05IDgtMjhhMiAyIDAgMCAxIDEtMWwxMC0yem00IDEwNWg1YTE4NSAxODUgMCAwIDEtNS02IDUzMSA1MzEgMCAwIDEtMyA2aDN6bTI0IDEwYTI1IDI1IDAgMCAxLTE3LThsLTYgMWgtNWMtNiA5LTE5IDEwLTIwIDExaC0xYzcgMiAxNCAzIDIyIDIgNyAwIDE3LTIgMjctNnptLTUtMTM2IDEtMmExNTAgMTUwIDAgMCAwLTEzIDJjLTE0IDMtMjcgNy0zOCAxMmE1MTEgNTExIDAgMCAxIDI0LTFoMTVsMTEtMTF6bTQwLTFhNzM1IDczNSAwIDAgMC0xMy0xbC0xOS0xLTIgM2MtMyA0LTEwIDEzLTE4IDE5IDEyLTIgMzMtNyA1MC0xOWwyLTF6bTIwIDY4LTIgMi01IDMtNiA0YTIgMiAwIDAgMS0xIDBsLTU0LTZoLTRhMiAyIDAgMCAxLTItMWwtOC0yOGEyOCAyOCAwIDAgMC04IDBsLTggMjdhMiAyIDAgMCAxLTEgMWwtNTggMTNoLTJsLTItMi02LTQtMy0yIDEgMmMwIDEgNSAxNSAxNSAyOWExMTY2IDExNjYgMCAwIDAgMjMtN2M2LTkgMTQtMTkgMjAtMTlhNjggNjggMCAwIDEgNCAwbDggMS0zLTZzOCA2IDE4IDVjOS0xIDE2LTcgMTYtN3MwIDQtNSA3bDE0LTNjMyAwIDQgMSA1IDJsMSAxYTQ2MjYgNDYyNiAwIDAgMSAxNiAxMiA4MTYgODE2IDAgMCAwIDI3IDMgMTM0IDEzNCAwIDAgMCAxMC0yN3ptLTMtMTUgNC0yOGMtMTItMi0yOC01LTQ4LTYtMTggNi0zNCA4LTM1IDhoLTFsMTIgMiAxIDEgOCAyNyA0NSA1em0xMCA2IDUtMzJhMzIxIDMyMSAwIDAgMC04LTJsLTQgMjlhMiAyIDAgMCAxLTEgMWwtMTUgMTFoLTFsLTQ2LTVhMiAyIDAgMCAxLTItMWwtOC0yOC0xMy0yLTEzIDItOCAyOGEyIDIgMCAwIDEtMiAxbC00NiAxMGgtMWwtMTUtMTFhMiAyIDAgMCAxLTEtMWwtNC0zM2EzMjkgMzI5IDAgMCAwLTUgMGwtMyAyIDUgMzUgMjIgMTYgNTYtMTIgOC0yOCAyLTFhMzUgMzUgMCAwIDEgMTEgMGwxIDEgOCAyOCA1NyA3em03LTM3IDQtMTUtMzEtNS0yNCAxM2MyNSAyIDQzIDUgNTEgN3ptNyAyNC0xLTktNS0zLTQgMjYtMSAxLTUgNC0xIDUgMTAgMWMyLTMgNi0xNyA3LTI1em0xNi02NC0xIDExYTc0IDc0IDAgMCAxLTIgMTIgNjAgNjAgMCAwIDEtMiA1IDUxIDUxIDAgMCAxLTEgM2wtMSAyLTEgMXYxaC0xYTQ1IDQ1IDAgMCAxLTEgMWwtMiAxLTQgMWE4NCA4NCAwIDAgMC0yIDFsLTIgN2gtMWwtMSAxIDggNGMzIDIgMyA2IDMgMTNsLTQgMTdjLTIgMTEtNCAxMy02IDEzYTE3IDE3IDAgMCAxLTQgMWwtMTAtMWMwIDMtMyA5LTcgMTdoMWwxNS03IDctMy0zIDctMTQgMjZjLTUgMTAtMTQgMTItMjAgMTNsLTIgMS0yMCA1YTg1IDg1IDAgMCAxLTE1IDdjLTE5IDctMzkgNy01OCAwbC0xMiAyYTYwIDYwIDAgMCAxLTcgMGMtMTggMC0yNy05LTM0LTE4bC0xNi0yNC02LTggOSA0IDIwIDEwIDEtMWMtNi04LTExLTE4LTE0LTI5bC0xMSAyaC0zYy0yLTEtNC0zLTgtMTNsLTMtMTdjLTEtNy0xLTEwIDItMTNsOS01di0yYy0xOSAxMS0zMCAyMC0zMCAyMUwwIDE3OWw5LTE1YzgtMTEgMTYtMjEgMjQtMjhoLTFsLTItMWE0NyA0NyAwIDAgMS0xLTFoLTF2LTFsLTEtMS0xLTJhNDEgNDEgMCAwIDEtMS0zIDYwIDYwIDAgMCAxLTItNSA3MyA3MyAwIDAgMS0yLTEyIDczIDczIDAgMCAxIDAtMTEgNjkgNjkgMCAwIDEgMS0xMnYtMWgxYzMtMyA2LTQgMTAtNmExMDUgMTA1IDAgMCAxIDgtM2M4LTIyIDIyLTQyIDQwLTU2YTEwNCAxMDQgMCAwIDEgMTI2IDBjMTcgMTQgMzEgMzQgMzkgNTZsOCAzYzQgMiA3IDMgMTAgNmgxdjFhMzYgMzYgMCAwIDEgMSA2bDEgNnpNNTQgNzRhMTkyIDE5MiAwIDAgMC0yNyAxNWwtMSAyYTY4IDY4IDAgMCAwIDAgMiA3MCA3MCAwIDAgMCAwIDYgODAgODAgMCAwIDAgNiAzMGwxIDEgMSAxIDQgMS0zLTEyIDE2LTNhNDUgNDUgMCAwIDEtMy0xIDQ5IDQ5IDAgMCAxLTktM2wtMy0yYzExIDMgMzMgMiA1MyAwYTU0MCA1NDAgMCAwIDEgMTA4IDBjMjAgMiA0MiAzIDUzIDBsLTMgMi0zIDEtNyAyLTEgMSAxOCAzLTMgMTFoMmwxLTEgMS0xYTI4IDI4IDAgMCAwIDItNCA1NiA1NiAwIDAgMCAyLTUgNzcgNzcgMCAwIDAgMi0yMSA3MCA3MCAwIDAgMCAwLTYgNjkgNjkgMCAwIDAgMC0ydi0ybC04LTZhMTA3IDEwNyAwIDAgMC0yMC05bC01LTItNS0yYTEyNCAxMjQgMCAwIDEgMTcgNWMtMTYtNDMtNTQtNzAtOTYtNzAtNDMgMC04MSAyNy05NyA3MGExNDQgMTQ0IDAgMCAxIDE3LTUgMjQ4IDI0OCAwIDAgMC0xMCA0em05NiAxNTUgMiAyIDExIDEyYzQgMyA4IDUgMTQgNWg1bDYtMmE2OTQgNjk0IDAgMCAwIDIyLTVjNS0xIDEyLTMgMTYtMTFsMTAtMTgtNyAzYy0zIDItNyAyLTEyIDJoLTlsLTE2LTJoLTFsLTEtMS0xNy0xM3YtMWgtMmwtMjQgN2gtMnMtMTAtNC0yMi00aC0zYy0xIDAtOCAzLTE3IDE3djFoLTFhMTA2MCAxMDYwIDAgMCAxLTMxIDlsLTEgMS0xLTEtMTItNSAxMSAxNWM2IDggMTQgMTUgMjkgMTVoNmwyMi0zaDJzMTItMiAxNi0xMGw0LTEwIDItM3YtMmwxIDIiLz48L3N2Zz4=` | + +Feel free to reach out to us if you have any questions, and happy badging! diff --git a/frontend/docs/logos.md b/frontend/docs/logos.md index 0b43ef16091c5..244f309c9b148 100644 --- a/frontend/docs/logos.md +++ b/frontend/docs/logos.md @@ -12,12 +12,6 @@ We support a wide range of logos via [SimpleIcons](https://simpleicons.org/). Al You can click the icon title on simple-icons to copy the slug or they can be found in the slugs.md file in the simple-icons repository. NB - the Simple Icons site and slugs.md page may at times contain new icons that haven't yet been pulled into Shields.io yet. More information on how and when we incorporate icon updates can be found [here](https://github.com/badges/shields/discussions/5369). -## Shields logos - -We also maintain a small number of custom logos for a handful of services: https://github.com/badges/shields/tree/master/logo They can also be referenced by name and take preference to SimpleIcons e.g: - -![](https://img.shields.io/npm/v/npm.svg?logo=npm) - https://img.shields.io/npm/v/npm.svg?logo=npm - ## Custom Logos Any custom logo can be passed in a URL parameter by base64 encoding it. e.g: @@ -26,12 +20,7 @@ Any custom logo can be passed in a URL parameter by base64 encoding it. e.g: ## logoColor parameter -The `logoColor` param can be used to set the color of the logo. Hex, rgb, rgba, hsl, hsla and css named colors can all be used. For SimpleIcons named logos (which are monochrome), the color will be applied to the SimpleIcons logo. +The `logoColor` param can be used to set the color of the SimpleIcons named logo. Hex, rgb, rgba, hsl, hsla and css named colors can all be used. - ![](https://img.shields.io/badge/logo-javascript-blue?logo=javascript) - https://img.shields.io/badge/logo-javascript-blue?logo=javascript - ![](https://img.shields.io/badge/logo-javascript-blue?logo=javascript&logoColor=f5f5f5) - https://img.shields.io/badge/logo-javascript-blue?logo=javascript&logoColor=f5f5f5 - -In the case where Shields hosts a custom multi-colored logo, if the `logoColor` param is passed, the corresponding SimpleIcons logo will be substituted and colored. - -- ![](https://img.shields.io/badge/logo-gitlab-blue?logo=gitlab) - https://img.shields.io/badge/logo-gitlab-blue?logo=gitlab -- ![](https://img.shields.io/badge/logo-gitlab-blue?logo=gitlab&logoColor=white) - https://img.shields.io/badge/logo-gitlab-blue?logo=gitlab&logoColor=white diff --git a/lib/load-logos.js b/lib/load-logos.js deleted file mode 100644 index 9af0cc875b32f..0000000000000 --- a/lib/load-logos.js +++ /dev/null @@ -1,36 +0,0 @@ -import fs from 'fs' -import path from 'path' -import { fileURLToPath } from 'url' -import { svg2base64 } from './svg-helpers.js' - -function loadLogos() { - // Cache svg logos from disk in base64 string - const logos = {} - const logoDir = path.join( - path.dirname(fileURLToPath(import.meta.url)), - '..', - 'logo', - ) - const logoFiles = fs.readdirSync(logoDir) - logoFiles.forEach(filename => { - if (filename[0] === '.') { - return - } - // filename is eg, github.svg - const svg = fs.readFileSync(`${logoDir}/${filename}`).toString() - const base64 = svg2base64(svg) - // logo is monochrome if it only has one fill= statement - const isMonochrome = (svg.match(/fill="(.+?)"/g) || []).length === 1 - - // eg, github - const name = filename.slice(0, -'.svg'.length).toLowerCase() - logos[name] = { - isMonochrome, - svg, - base64, - } - }) - return logos -} - -export default loadLogos diff --git a/lib/logos.js b/lib/logos.js index 5927aa59947de..813b4cf3675ff 100644 --- a/lib/logos.js +++ b/lib/logos.js @@ -6,9 +6,7 @@ import { } from '../badge-maker/lib/color.js' import coalesce from '../core/base-service/coalesce.js' import { svg2base64, getIconSize, resetIconPosition } from './svg-helpers.js' -import loadLogos from './load-logos.js' import loadSimpleIcons from './load-simple-icons.js' -const logos = loadLogos() const simpleIcons = loadSimpleIcons() // for backwards-compatibility with deleted logos @@ -19,6 +17,7 @@ const logoAliases = { scrutinizer: 'scrutinizer-ci', stackoverflow: 'stack-overflow', tfs: 'azure-devops', + travis: 'travisci', } const lightThreshold = 0.4 const darkThreshold = 0.6 @@ -59,24 +58,6 @@ function decodeDataUrlFromQueryParam(value) { return isDataUrl(maybeDataUrl) ? maybeDataUrl : undefined } -function getShieldsIcon({ name, color }) { - if (!(name in logos)) { - return undefined - } - - const { svg, base64, isMonochrome } = logos[name] - const svgColor = toSvgColor(color) - if (svgColor) { - if (isMonochrome) { - return svg2base64(svg.replace(/fill="(.+?)"/g, `fill="${svgColor}"`)) - } else { - return undefined - } - } else { - return base64 - } -} - function getSimpleIconStyle({ icon, style }) { const { hex } = icon if (style !== 'social' && brightness(normalizeColor(hex)) <= lightThreshold) { @@ -93,7 +74,7 @@ function getSimpleIconStyle({ icon, style }) { // badge. If `size` is not 'auto', the icon will be displayed at its original. // https://github.com/badges/shields/pull/9191 function getSimpleIcon({ name, color, style, size }) { - const key = name === 'travis' ? 'travis-ci' : name.replace(/ /g, '-') + const key = name.replace(/ /g, '-') if (!(key in simpleIcons)) { return undefined @@ -134,10 +115,7 @@ function prepareNamedLogo({ name, color, style, size }) { name = logoAliases[name] } - return ( - getShieldsIcon({ name, color }) || - getSimpleIcon({ name, color, style, size }) - ) + return getSimpleIcon({ name, color, style, size }) } function makeLogo(defaultNamedLogo, overrides) { @@ -159,7 +137,6 @@ export { isDataUrl, decodeDataUrlFromQueryParam, prepareNamedLogo, - getShieldsIcon, getSimpleIcon, makeLogo, } diff --git a/lib/logos.spec.js b/lib/logos.spec.js index be67e3d2f6af0..cdefebc9171ba 100644 --- a/lib/logos.spec.js +++ b/lib/logos.spec.js @@ -31,24 +31,6 @@ describe('Logo helpers', function () { }) test(prepareNamedLogo, () => { - // use multicolored shield icon - given({ name: 'npm' }).expect( - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZD0iTTAgMGg0MHY0MEgwVjB6IiBmaWxsPSIjY2IwMDAwIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTcgN2gyNnYyNmgtN1YxNGgtNnYxOUg3eiIvPjwvc3ZnPg==', - ) - // use simple icon with color - given({ name: 'npm', color: 'blue' }).expect( - 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMDA3ZWM2IiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+bnBtPC90aXRsZT48cGF0aCBkPSJNMS43NjMgMEMuNzg2IDAgMCAuNzg2IDAgMS43NjN2MjAuNDc0QzAgMjMuMjE0Ljc4NiAyNCAxLjc2MyAyNGgyMC40NzRjLjk3NyAwIDEuNzYzLS43ODYgMS43NjMtMS43NjNWMS43NjNDMjQgLjc4NiAyMy4yMTQgMCAyMi4yMzcgMHpNNS4xMyA1LjMyM2wxMy44MzcuMDE5LS4wMDkgMTMuODM2aC0zLjQ2NGwuMDEtMTAuMzgyaC0zLjQ1NkwxMi4wNCAxOS4xN0g1LjExM3oiLz48L3N2Zz4=', - ) - - // use monochrome shield icon - given({ name: 'dependabot' }).expect( - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NCA1NCIgZmlsbD0iI2ZmZiI+PHBhdGggZD0iTTI1IDNhMSAxIDAgMCAwLTEgMXY3YTEgMSAwIDAgMCAxIDFoNXYzSDZhMyAzIDAgMCAwLTMgM3YxMkgxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgydjZhMyAzIDAgMCAwIDMgM2g0MmEzIDMgMCAwIDAgMy0zdi02aDJhMSAxIDAgMCAwIDEtMVYzMWExIDEgMCAwIDAtMS0xaC0yVjE4YTMgMyAwIDAgMC0zLTNIMzNWNGExIDEgMCAwIDAtMS0xaC03em0tMy45ODIgMjZhMS4yMSAxLjIxIDAgMCAxIC44MzcuMzU1bDEuMjkgMS4yOWExLjIxIDEuMjEgMCAwIDEgMCAxLjcwOSAxLjIxIDEuMjEgMCAwIDEgMCAuMDAxbC02LjI5MSA2LjI5YTEuMjEgMS4yMSAwIDAgMS0xLjcxIDBsLTMuNzktMy43OTFhMS4yMSAxLjIxIDAgMCAxIDAtMS43MWwxLjI5LTEuMjlhMS4yMSAxLjIxIDAgMCAxIDEuNzEgMEwxNiAzMy41bDQuMTQ1LTQuMTQ1YTEuMjEgMS4yMSAwIDAgMSAuODczLS4zNTV6bTE5Ljk2MiAwYTEuMjEgMS4yMSAwIDAgMSAuODc0LjM1NGwxLjI5IDEuMjlhMS4yMSAxLjIxIDAgMCAxIDAgMS43MWwtNi4yOSA2LjI4OXYuMDAyYTEuMjEgMS4yMSAwIDAgMS0xLjcxMSAwbC0zLjc5LTMuNzlhMS4yMSAxLjIxIDAgMCAxIDAtMS43MWwxLjI5LTEuMjlhMS4yMSAxLjIxIDAgMCAxIDEuNzEgMGwxLjY0NSAxLjY0NSA0LjE0Ny00LjE0NkExLjIxIDEuMjEgMCAwIDEgNDAuOTggMjl6Ii8+PC9zdmc+', - ) - // use monochrome shield icon with color - given({ name: 'dependabot', color: 'blue' }).expect( - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1NCA1NCIgZmlsbD0iIzAwN2VjNiI+PHBhdGggZD0iTTI1IDNhMSAxIDAgMCAwLTEgMXY3YTEgMSAwIDAgMCAxIDFoNXYzSDZhMyAzIDAgMCAwLTMgM3YxMkgxYTEgMSAwIDAgMC0xIDF2MTBhMSAxIDAgMCAwIDEgMWgydjZhMyAzIDAgMCAwIDMgM2g0MmEzIDMgMCAwIDAgMy0zdi02aDJhMSAxIDAgMCAwIDEtMVYzMWExIDEgMCAwIDAtMS0xaC0yVjE4YTMgMyAwIDAgMC0zLTNIMzNWNGExIDEgMCAwIDAtMS0xaC03em0tMy45ODIgMjZhMS4yMSAxLjIxIDAgMCAxIC44MzcuMzU1bDEuMjkgMS4yOWExLjIxIDEuMjEgMCAwIDEgMCAxLjcwOSAxLjIxIDEuMjEgMCAwIDEgMCAuMDAxbC02LjI5MSA2LjI5YTEuMjEgMS4yMSAwIDAgMS0xLjcxIDBsLTMuNzktMy43OTFhMS4yMSAxLjIxIDAgMCAxIDAtMS43MWwxLjI5LTEuMjlhMS4yMSAxLjIxIDAgMCAxIDEuNzEgMEwxNiAzMy41bDQuMTQ1LTQuMTQ1YTEuMjEgMS4yMSAwIDAgMSAuODczLS4zNTV6bTE5Ljk2MiAwYTEuMjEgMS4yMSAwIDAgMSAuODc0LjM1NGwxLjI5IDEuMjlhMS4yMSAxLjIxIDAgMCAxIDAgMS43MWwtNi4yOSA2LjI4OXYuMDAyYTEuMjEgMS4yMSAwIDAgMS0xLjcxMSAwbC0zLjc5LTMuNzlhMS4yMSAxLjIxIDAgMCAxIDAtMS43MWwxLjI5LTEuMjlhMS4yMSAxLjIxIDAgMCAxIDEuNzEgMGwxLjY0NSAxLjY0NSA0LjE0Ny00LjE0NkExLjIxIDEuMjEgMCAwIDEgNDAuOTggMjl6Ii8+PC9zdmc+', - ) - // use simple icon given({ name: 'github' }).expect( 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZXNtb2tlIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+R2l0SHViPC90aXRsZT48cGF0aCBkPSJNMTIgLjI5N2MtNi42MyAwLTEyIDUuMzczLTEyIDEyIDAgNS4zMDMgMy40MzggOS44IDguMjA1IDExLjM4NS42LjExMy44Mi0uMjU4LjgyLS41NzcgMC0uMjg1LS4wMS0xLjA0LS4wMTUtMi4wNC0zLjMzOC43MjQtNC4wNDItMS42MS00LjA0Mi0xLjYxQzQuNDIyIDE4LjA3IDMuNjMzIDE3LjcgMy42MzMgMTcuN2MtMS4wODctLjc0NC4wODQtLjcyOS4wODQtLjcyOSAxLjIwNS4wODQgMS44MzggMS4yMzYgMS44MzggMS4yMzYgMS4wNyAxLjgzNSAyLjgwOSAxLjMwNSAzLjQ5NS45OTguMTA4LS43NzYuNDE3LTEuMzA1Ljc2LTEuNjA1LTIuNjY1LS4zLTUuNDY2LTEuMzMyLTUuNDY2LTUuOTMgMC0xLjMxLjQ2NS0yLjM4IDEuMjM1LTMuMjItLjEzNS0uMzAzLS41NC0xLjUyMy4xMDUtMy4xNzYgMCAwIDEuMDA1LS4zMjIgMy4zIDEuMjMuOTYtLjI2NyAxLjk4LS4zOTkgMy0uNDA1IDEuMDIuMDA2IDIuMDQuMTM4IDMgLjQwNSAyLjI4LTEuNTUyIDMuMjg1LTEuMjMgMy4yODUtMS4yMy42NDUgMS42NTMuMjQgMi44NzMuMTIgMy4xNzYuNzY1Ljg0IDEuMjMgMS45MSAxLjIzIDMuMjIgMCA0LjYxLTIuODA1IDUuNjI1LTUuNDc1IDUuOTIuNDIuMzYuODEgMS4wOTYuODEgMi4yMiAwIDEuNjA2LS4wMTUgMi44OTYtLjAxNSAzLjI4NiAwIC4zMTUuMjEuNjkuODI1LjU3QzIwLjU2NSAyMi4wOTIgMjQgMTcuNTkyIDI0IDEyLjI5N2MwLTYuNjI3LTUuMzczLTEyLTEyLTEyIi8+PC9zdmc+', @@ -66,15 +48,6 @@ describe('Logo helpers', function () { 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZSIgcm9sZT0iaW1nIiB2aWV3Qm94PSIwIDAgMjQgNS43MjU5OTk5OTk5OTk5OTkiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkFNRDwvdGl0bGU+PHBhdGggZD0iTTE4LjMyNCAwTDE5Ljg4MyAxLjU2SDIyLjQzOVY0LjExN0wyNCA1LjY3N1YwWk0yIDAuMzgzTDAgNS4zNDNIMS4zMDlMMS42NzkgNC4zNjFIMy45TDQuMzA4IDUuMzQzSDUuNjQ2TDMuNDMyIDAuMzgzWk02LjIwOSAwLjM4M1Y1LjMzOEg3LjQ0N1YyLjI0Nkw4Ljc4NSAzLjgwOEg4Ljk3M0wxMC4zMTEgMi4yNTJWNS4zNDNIMTEuNTQ5VjAuMzgzSDEwLjQ3TDguODc4IDIuMjI4TDcuMjg3IDAuMzgzWk0xMi40OTIgMC4zODNWNS4zNDNIMTQuNTQ5QzE2LjUyOCA1LjM0MyAxNy40MjkgNC4yOTcgMTcuNDI5IDIuODcxQzE3LjQyOSAxLjUxMSAxNi40OTIgMC4zODMgMTQuNjgyIDAuMzgzWk0xMy43MjkgMS4yOTNIMTQuNTIxQzE1LjY5MSAxLjI5MyAxNi4xNTEgMi4wMDQgMTYuMTUxIDIuODYzQzE2LjE1MSAzLjU5MSAxNS43NzkgNC40MzUgMTQuNTM1IDQuNDM1SDEzLjcyOVpNMi43NDQgMS41NjZMMy41MzUgMy40OThIMi4wMDhaTTE5Ljg4MSAxLjg3M0wxOC4yNzcgMy40NzZWNS43MjZIMjAuNTIzTDIyLjEyNyA0LjExOUgxOS44ODFaIi8+PC9zdmc+', ) - // use travis shield icon - given({ name: 'travis' }).expect( - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNjYuNjY2IiBoZWlnaHQ9IjI2NC40OTciPjxwYXRoIGZpbGw9IiNjZDI0NDUiIGQ9Ik02My43MDggMTE1LjQzcy00MS40OSAyOS4yMDMtNDMuMTEzIDQwLjMyOWwzLjExMy0uNjRzNDkuNjg1LTMyLjkzMiA4OS4wNy0zNi45NDhsLjg5My00Ljk5OS00OS45NjMgMi4yNTdNMTI4LjgzOSAxMTEuMjU2bC0zMi42ODIgMjMuMTggMS43NjcgMS40MThjMS4zMzItMS4wNzUgNTguMDUyLTE4LjM5OCA1OC4wNTItMTguMzk4bDExLjk1OS03LjQ5N2MtOC4wMjQuOTk4LTM5LjA5NiAxLjI5Ny0zOS4wOTYgMS4yOTdNMTU3LjI0MyAxMzkuMjkyYzIzLjIwNiAwIDU3Ljk5My0yMi43MjggNTcuOTkzLTIyLjcyOGwtMTEuMjQ1LTIuMTRjLS41NTYuNTU2LTE4LjEzNC0uNjE2LTE4LjEzNC0uNjE2bC04LjM0NC0yLjMxNy0xOS45MzQgMjIuNzE0LTEuNjIzIDMuOTQyYzEuNDMzLS41ODMgMS4yODcgMS4xNDUgMS4yODcgMS4xNDVNNTkuMjc1IDIyNS4zODRsLS40ODItLjIyMmMtMS4xNC0uOTg0LTIuMDc0LTEuNzktMi42ODQtMi4zMTR6bTE3My42OTYtMTMuNjA4bC03LjE3IDIuMDE5LTMzLjEyNC0uNzE2LTIwLjcyMS0xNi4xMTMtMjUuMDQ1IDYuMjY2LTI4Ljk2OC0yLjUwNy0xNi4yMjIgMTcuNzI1LTMwLjQzNyA5LjA5My0xNS4xOTgtNC43MTItLjc2NS0uNjYgNi44MjIgMTYuNzAzczE1LjQ1IDE2LjU2NiAyNC4wODEgMTguNTE0YzguNjMgMS45NDggMjQuMjItLjE0IDM1LjkxMy0xLjk1IDExLjY5Mi0xLjgxIDIxLjAxOS01Ljk4NiAyNC43NzYtMTIuODA1IDMuNzU4LTYuODIyIDQuMzE1LTguNzcgNC4zMTUtOC43N3MxMS4xMzcgMTUuNzMgMjAuNzQxIDE3LjU0YzkuNjA0IDEuODA5IDM4LjE0LTcuOTM2IDM4LjE0LTcuOTM2czE3LjQwMi00LjczMiAyMC40NjItMTAuNzE4YzMuMDYyLTUuOTg1IDExLjEzNy0yNS42MTIgMTEuMTM3LTI1LjYxMmwtOC43MzcgNC42MzkiLz48cGF0aCBmaWxsPSIjZjJmMTliIiBkPSJNMjYxLjExIDkzLjQ0N2MtLjA3My0uODk1LS4xNzEtMS43OS0uMjgtMi42NzktLjA3OC0uNjMtLjE3OC0xLjI5LS4yODctMS44OTktMi4zOTEtMi4wMTItNS4xMDgtMy44MDEtNy45MzYtNS40MjgtMy4wNjYtMS43OS02LjI3Mi0zLjM5NC05LjU0Ni00Ljg4NC0zLjI1LTEuNTMzLTYuNTg5LTIuOTIxLTkuOTQ4LTQuMjc2LTEuNjc2LS42OC0zLjM2Ni0xLjM0LTUuMDY0LTEuOTY5LTEuNjkyLS42Ni0zLjQtMS4yNzUtNS4xMTMtMS44OTkgMy41OTYuNTk2IDcuMTU1IDEuNDEyIDEwLjY4NyAyLjMyMmExNDQuMTggMTQ0LjE4IDAgMCAxIDYuODUzIDEuOTY5Yy0xNi4xNS00Mi4yMDctNTQuNzYtNjkuNjkzLTk2LjkxNi02OS42OTMtNDIuMTYzIDAtODAuNzcgMjcuNDg2LTk2LjkxNSA2OS42OTMgMi4yNzEtLjcxIDQuNTU3LTEuMzc1IDYuODUtMS45NyAzLjUzNy0uOTA5IDcuMDk3LTEuNzI1IDEwLjY5LTIuMzItMS43MTguNjIzLTMuNDIyIDEuMjM4LTUuMTIgMS44OTgtMS42ODkuNjMtMy4zODEgMS4yOS01LjA2MyAxLjk3LTMuMzYgMS4zNTQtNi42ODggMi43NDItOS45NDcgNC4yNzUtMy4yNjcgMS40OS02LjQ3NiAzLjA5NC05LjU0MSA0Ljg4NC0yLjgyOSAxLjYyNi01LjU0MyAzLjQxNi03Ljk0MyA1LjQyOC0uMS42MS0uMjAyIDEuMjY4LS4yOCAxLjg5OWE2OS41NSA2OS41NSAwIDAgMC0uMjggMi42NzkgNjguNjY0IDY4LjY2NCAwIDAgMC0uMjM2IDUuNDE0Yy0uMDM2IDMuNjE4LjIwOCA3LjIzNS42NjYgMTAuODE0LjQ5NCAzLjU4OSAxLjE1MiA3LjE1NCAyLjEyNyAxMC42MDFhNTcuMDc2IDU3LjA3NiAwIDAgMCAxLjY1MyA1LjA3N2MuMzE2LjgyMy42NiAxLjYzNCAxLjAyIDIuNDIyLjE3OC4zOTIuMzY0Ljc4LjU1IDEuMTUybC4yMjkuNDM3Yy4yNjUuMTM1LjU0NC4yNzIuODEuNGwxLjYwNS43NjdjLjg5NC40MDYgMi4xMzMuOTk0IDMuMTU3IDEuNDUzbC4xNjQtLjE1Mi0yLjk4LTExLjM1Yy42MzItLjE3NCA2LjI5LTEuNjM0IDE2LjA0My0zLjQ5YTUxLjU5NSA1MS41OTUgMCAwIDEtMi4zNjMtLjUwOGMtMi4yMi0uNTUyLTQuNDEyLTEuMjI1LTYuNTMyLTIuMDg1YTI5LjkgMjkuOSAwIDAgMS0zLjA3OS0xLjQ4N2MtLjk4OS0uNTY4LTEuOTYyLTEuMjEtMi43MTYtMi4wNjQgMTAuNzE1IDMuNDk2IDMyLjg1NCAxLjkxMiA1Mi41MzItLjEyMSAxNy45OTktMS44NTUgMzYuMDM5LTMuMDU4IDU0LjE3NC0zLjA5NCAxOC4xMzYuMDM2IDM2LjE4MiAxLjIzOSA1NC4xNzMgMy4wOTQgMTkuNjg4IDIuMDMzIDQxLjgyNyAzLjYxNyA1Mi41NC4xMjEtLjc1Mi44NTMtMS43MjQgMS40OTctMi43MTMgMi4wNjRhMjkuOTk5IDI5Ljk5OSAwIDAgMS0zLjA3OCAxLjQ4N2MtMi4xMjIuODYtNC4zMTIgMS41MzMtNi41MzIgMi4wODUtLjMyOS4wNzktLjY2MS4xNS0uOTkuMjIxIDEwLjY5MyAxLjk4NCAxNi45MTggMy41OTYgMTcuNTg0IDMuNzc1bC0yLjg1MSAxMC44MTNjLjU3My0uMjU4IDEuMTUyLS41MDggMS43Mi0uNzY1bDEuNjAzLS43NjdjLjI2Ni0uMTI5LjUzNy0uMjY1LjgwOS0uNGwuMjIxLS40MzdjLjE5NS0uMzcyLjM4Mi0uNzYuNTU5LTEuMTUyLjM2LS43ODguNzA0LTEuNTk5IDEuMDE5LTIuNDIxYTU2LjMxMyA1Ni4zMTMgMCAwIDAgMS42NTQtNS4wNzhjLjk3NS0zLjQ0NiAxLjYzNC03LjAxMiAyLjEyNy0xMC42MDEuNDYtMy41OC43MDEtNy4xOTcuNjY4LTEwLjgxM2E2Ny44MzEgNjcuODMxIDAgMCAwLS4yMzktNS40MTIiLz48cGF0aCBmaWxsPSIjZTVjOWEzIiBkPSJNMTU1LjcxNiAyNDMuNTQ4YTU4LjEgNTguMSAwIDAgMS00LjI0OC41Yy0uOTEuMDQ0LTEuODcyLjEzNi0yLjc0NS4xMzZsLS4zMjMuMDA3YTc3Ni4xMTUgNzc2LjExNSAwIDAgMCAyLjU1OS01Ljc4NiAxOTcuNjI4IDE5Ny42MjggMCAwIDAgNC43NTcgNS4xNDNNMTU4LjgwMSAyNDYuNjljNC40MDYgNC4zNjMgOS44NjQgNi44NjIgMTUuODcyIDcuMzA2LTEwLjA5MiA0LjA5OS0xOS42MDIgNS42OC0yNi45MjkgNi4xNzMtNy4zMDQuNDktMTQuNzEtLjM3Mi0yMS45NjUtMi4zNjFhMjYuNzc1IDI2Ljc3NSAwIDAgMSAxLjU5LS4yNTJjLjU5Ni0uMDcyIDEzLjYwOC0xLjc3IDE5LjQ3NC0xMC40OWwuNTUuMDEyIDEuNDQtLjAxMmMuOTc1IDAgMS44Ni0uMDggMi43OTItLjExN2E1OC4zNDggNTguMzQ4IDAgMCAwIDYuNTA0LS45MzdjLjIyMy4yMjguNDQ0LjQ1LjY3Mi42NzkiLz48cGF0aCBmaWxsPSIjNWQ2NzYyIiBkPSJNMTcxLjI4NSAxMTYuMDk1Yy0uNDIyLjU1LS44OTQgMS4xNTgtMS4zOTcgMS43OS0yLjU3NyAzLjI1OS02LjE1MiA3LjQyNy0xMC4zOTIgMTEuNTAzYTQ5Mi43OCA0OTIuNzggMCAwIDAtMTUuMjA1LS4yMzZjLTguNjE0IDAtMTYuODc0LjIyOC0yNC43MTYuNjEgMTEuMDgxLTQuNiAyNC4zOTQtOS4wOTEgMzguODEyLTExLjc5IDQuMjEtLjc5NyA4LjUyMS0xLjQzNSAxMi44OTgtMS44NzdNMTA2LjQyOCAxMjEuMDU2Yy0zLjk1NSAyLjc3OS04LjQyMyA2LjMyNS0xMi43NTUgMTAuNjI4YTQ4MC40MTUgNDgwLjQxNSAwIDAgMC0yOC43NTYgMy43NDdjMTIuMjc2LTUuNjQzIDI2LjI4NS0xMC44MzYgNDEuNTExLTE0LjM3NU0yNDEuOTczIDE0My45NTlsLTQuNTEyIDMxLjU3Mi0yMS42MTYgMTUuMTQtNTYuMzc3LTYuNDEtOC40ODctMjcuOTQ4YTEuODQ0IDEuODQ0IDAgMCAwLTEuNDc3LTEuMjk0Yy0yLjA5LS4zMzgtMy45MzctLjUxLTUuNDc3LS41MS0xLjU0NyAwLTMuMzg4LjE3Mi01LjQ4Ny41MWExLjg1OSAxLjg1OSAwIDAgMC0xLjQ3NSAxLjI5NGwtOC4yNzkgMjcuMjY3LTU2LjA2MiAxMi40NzYtMjIuMjE2LTE1LjU2My00LjM3Ny0zNS40MjlhMjY2LjkyIDI2Ni45MiAwIDAgMSAyLjktMS42MTJjMS4zNzYtLjI5NiAyLjkyMi0uNjEgNC42MzQtLjkzOWw0LjEyNiAzMy40MzFjLjA2NC41MjMuMzUyLjk4OC43OCAxLjI5bDE1LjI4NCAxMC43MDlhMS45IDEuOSAwIDAgMCAxLjQ2OC4yODRsNDYuMDkzLTEwLjI1NmMuMTU5LS4wMzYuMzE2LS4wOTIuNDU5LS4xNjZhMS44NSAxLjg1IDAgMCAwIC45MDktMS4xMDJsOC4zLTI3LjMzMWMyLjIyNi0uNTczIDcuOTMtMS45MDUgMTIuOTQxLTEuOTA1IDQuOTk5IDAgMTAuNzA3IDEuMzMyIDEyLjkzNSAxLjkwNWw4LjMgMjcuMzNjLjIxNS43MS44MzIgMS4yMTcgMS41NjggMS4zMDNsNDYuMDkzIDUuMjM2Yy40NDcuMDUuOTAzLS4wNjcgMS4yNy0uMzIybDE1LjI5Mi0xMC43Yy40MTMtLjI5NC42OTMtLjc1NS43NjQtMS4yNjJsNC4wODItMjguNTYxYzMuMDY4LjU5MiA1LjYzMiAxLjEyOCA3LjY0NCAxLjU2M00yNDcuNjY4IDEyNC4xNTlsLTMuOTY4IDE1LjA1M2MtOC4xMTUtMS43OS0yNS45NDEtNS4zLTUwLjIwNS03LjY2MyA3LjkyOC0zLjM4IDE2LTcuNjIgMjMuMzc0LTEyLjkyIDE0LjQzOSAyLjA0IDI1LjA0IDQuMjI2IDMwLjc5OSA1LjUzIi8+PHBhdGggZmlsbD0iI2U0Yzg5NiIgZD0iTTE1My45OTcgMTM0LjI1NmMtMi4yMiAxLjc5OS00LjU2MSAzLjQ4LTYuOTk4IDQuOTVsLTguMTMgNC45MDZjLTUuMDk4LjYyMS05LjUyNCAxLjg4My05Ljc3NCAxLjk1Ni0uMTUuMDQxLS4yOTIuMTA1LS40MjMuMTg3YTEuODczIDEuODczIDAgMCAwLS44MzkgMS4wNThsLTguMjc4IDI3LjI4LTQ0LjI0NyA5Ljg0LTEzLjkzNi05Ljc2MS00LjA1NS0zMi44NDVjNy45MTUtMS40NTQgMTguNS0zLjEzNiAzMS4yMTQtNC41NmE3NS44OSA3NS44OSAwIDAgMC0zLjk0IDUuMTRsLTcuNTcgMTAuODY1IDExLjAyMi03LjM0OGMuMTY0LS4xMTUgNy4xODItNC43MzIgMTguNjY0LTEwLjM0OGE1MDMuMDU3IDUwMy4wNTcgMCAwIDEgNDcuMjktMS4zMnptLTY4Ljg3NiAzNi45OTljMy4xNDMtMS42OTkgNi42OTUtMS40NDcgMTIuMjU0LTEuNDM5LjU5Ni4wMTUgMS4yMS4wMDcgMS44NTMtLjAwNy41NDctLjAwNiAxLjA5Ni0uMDE0IDEuNjc3LS4wMjkgNS43MjgtLjA1NiAxMC40OTIuNDg4IDEwLjQwOS04LjUwOC0uMDg3LTguOTk0LTQuMDgzLTE2LjI2NC05LjgwNi0xNi4yMDYtNS43My4wNDktMTEuMjcyIDcuNDE4LTEwLjkzIDE2LjQwNy4wOTQgMi4zNDIuNDM4IDQuMDMxLjk5IDUuMjUtNC45OTMgMS4yNS02LjM3IDQuMzM4LTYuNDQ3IDQuNTMyTTIzMC42ODcgMTQxLjcybC0zLjk5IDI3LjkyNS0xNC4wNTIgOS44MzktNDQuMTg4LTUuMDIyLTguMjQ0LTI3LjE1YTEuODgxIDEuODgxIDAgMCAwLTEuMjYtMS4yNDVjLS4yNzMtLjA4LTUuNzQ0LTEuNjQtMTEuNTQ1LTIuMTQzbDEuMDYtLjA3Yy45MTYtLjA2NiAxNi4xNTctMS45MzUgMzQuMzU2LTguMjEgMjAuMTUzIDEuNTQ4IDM2LjYxIDQuMDI3IDQ3Ljg2MyA2LjA3NnptLTI4LjI0IDI1Ljg0N2MtLjA1Ni0uMjEzLTEuMjYtMy44MzEtNi41OS0zLjE5Ni42MTUtMS4zMzguODg4LTMuMTQyLjY5NS01LjYxNC0uNzA0LTguOTc0LTUuOTI0LTE2LjEwNy0xMS42NDctMTUuOTA4LTUuNzIyLjIwMy05LjM4OSA3LjY0Mi05LjA3MyAxNi42MzguMzE1IDguOTg3IDUuMTIgOC45MjUgMTAuODQzIDguNzI0IDcuNjkzLS4xNDMgMTEuOTE4LTIuNTA3IDE1Ljc3Mi0uNjQ0Ii8+PHBhdGggZmlsbD0iI2M0YWY5MCIgZD0iTTE1My45OTcgMTM0LjI1NmMtMi4yMiAxLjc5OS00LjU2MSAzLjQ4LTYuOTk4IDQuOTVsLTguMTMgNC45MDZjLTUuMDk4LjYyMS05LjUyNCAxLjg4My05Ljc3NCAxLjk1Ni0uMTUuMDQxLS4yOTIuMTA1LS40MjMuMTg3YTEuODczIDEuODczIDAgMCAwLS44MzkgMS4wNThsLTguMjc4IDI3LjI4LTQ0LjI0NyA5Ljg0LTEzLjkzNi05Ljc2MS00LjA1NS0zMi44NDVjNy45MTUtMS40NTQgMTguNS0zLjEzNiAzMS4yMTQtNC41NmE3NS44OSA3NS44OSAwIDAgMC0zLjk0IDUuMTRsLTcuNTcgMTAuODY1IDExLjAyMi03LjM0OGMuMTY0LS4xMTUgNy4xODItNC43MzIgMTguNjY0LTEwLjM0OGE1MDMuMDU3IDUwMy4wNTcgMCAwIDEgNDcuMjktMS4zMnptLTY4Ljg3NiAzNi45OTljMy4xNDMtMS42OTkgNi42OTUtMS40NDcgMTIuMjU0LTEuNDM5LjU5Ni4wMTUgMS4yMS4wMDcgMS44NTMtLjAwNy41NDctLjAwNiAxLjA5Ni0uMDE0IDEuNjc3LS4wMjkgNS43MjgtLjA1NiAxMC40OTIuNDg4IDEwLjQwOS04LjUwOC0uMDg3LTguOTk0LTQuMDgzLTE2LjI2NC05LjgwNi0xNi4yMDYtNS43My4wNDktMTEuMjcyIDcuNDE4LTEwLjkzIDE2LjQwNy4wOTQgMi4zNDIuNDM4IDQuMDMxLjk5IDUuMjUtNC45OTMgMS4yNS02LjM3IDQuMzM4LTYuNDQ3IDQuNTMyTTIzMC42ODcgMTQxLjcybC0zLjk5IDI3LjkyNS0xNC4wNTIgOS44MzktNDQuMTg4LTUuMDIyLTguMjQ0LTI3LjE1YTEuODgxIDEuODgxIDAgMCAwLTEuMjYtMS4yNDVjLS4yNzMtLjA4LTUuNzQ0LTEuNjQtMTEuNTQ1LTIuMTQzbDEuMDYtLjA3Yy45MTYtLjA2NiAxNi4xNTctMS45MzUgMzQuMzU2LTguMjEgMjAuMTUzIDEuNTQ4IDM2LjYxIDQuMDI3IDQ3Ljg2MyA2LjA3NnptLTI4LjI0IDI1Ljg0N2MtLjA1Ni0uMjEzLTEuMjYtMy44MzEtNi41OS0zLjE5Ni42MTUtMS4zMzguODg4LTMuMTQyLjY5NS01LjYxNC0uNzA0LTguOTc0LTUuOTI0LTE2LjEwNy0xMS42NDctMTUuOTA4LTUuNzIyLjIwMy05LjM4OSA3LjY0Mi05LjA3MyAxNi42MzguMzE1IDguOTg3IDUuMTIgOC45MjUgMTAuODQzIDguNzI0IDcuNjkzLS4xNDMgMTEuOTE4LTIuNTA3IDE1Ljc3Mi0uNjQ0Ii8+PHBhdGggZmlsbD0iI2U1YzlhMyIgZD0iTTI0OS45NzUgMTU0LjAwM2MuNjc3LjU1OCAxLjIxNCAyLjAwNS42MDggOC43NDQtLjc0NiA4LjI1LTQuMjE0IDIyLjczMi02LjM2MiAyNS4wNjYtMi4zNy40NTktNy4zNC0uMDg1LTEwLjM3LS43OTMuNTI0LTIuMDc5LjY3My0zLjA3NSAxLjA5Ni01LjJsNS4zLTMuNzA4Yy40MjItLjI5My43MDEtLjc1NS43NzMtMS4yNTVsMy43MDQtMjUuOTU0YzIuMjQ4IDEuMjE2IDQuNTYxIDIuNTMyIDUuMjUgMy4xTTU0LjU4MyAxODcuODc4Yy4yNjUuOTM4LjU0NCAxLjg3Ni44MzIgMi44LTIuODUyLjgzNy04LjY2IDEuNjQtMTEuMjg3IDEuMTgtMi4xNzctMi4xOTItNi4yMzgtMTcuMjg3LTcuMTI2LTI1LjMwMy0uNzI1LTYuNDk1LS4yMTctNy44OTkuNDQzLTguNDQ2Ljc2Ny0uNjQzIDMuNjM4LTIuMjc3IDYuMTI0LTMuNjA5bDMuMzYgMjcuMjY2Yy4wNjMuNTIzLjM0Mi45ODguNzggMS4yODlsNi44NzQgNC44MjNNMTYxLjc5NiAxODguMjU5bC0uMjAxIDEuNzRzLTYuMTA4IDUuNjYzLTE1Ljk0MiA2LjkzMmMtOS44MzMgMS4yNjYtMTcuNTYtNC43NzYtMTcuNTYtNC43NzYuMzIyIDEuMDUuNzggMy40MjMgMy4wMDcgNS40NDhhNzAuOTY2IDcwLjk2NiAwIDAgMC04LjQxNy0uNTI0Yy0xLjA3MyAwLTIuMTU1LjAzLTMuMjAyLjA4LTYuMDUyLjMxNy0xNC41NjUgOS40NjgtMjAuNTUyIDE4LjY4Ni0yLjkzNy45My0xMi4xMTkgMy44NDQtMjIuNzQ2IDYuOTgzLTkuOTItMTMuNzQ1LTE0Ljc5OC0yNy43OS0xNS4yOTItMjkuMjQzbC4wMDYtLjAwN2MtLjItLjU2LS40MDEtMS4xMi0uNTg4LTEuNjkybDIuNTUgMS43ODV2LjAwN2w2LjMwMiA0LjQxMSAyLjEwNyAxLjQ2OGMuMzE1LjIyMy42ODcuMzM4IDEuMDU5LjMzOC4xMzYgMCAuMjcxLS4wMTUuNDA2LS4wNDFsNTcuOTE0LTEyLjg5NGExLjg0OCAxLjg0OCAwIDAgMCAxLjM2Ny0xLjI2N2w4LjI1OC0yNy4xODZjMS40MjUtLjE5NCAyLjY3Ny0uMjk0IDMuNzUyLS4yOTQgMS4wNjggMCAyLjMyOC4xIDMuNzUzLjI5NGw4LjQ5OSAyNy45OTZjLjIxNi43MDkuODMyIDEuMjI1IDEuNTYxIDEuMzAybDMuOTU5LjQ1NCIvPjxwYXRoIGZpbGw9IiNlNWM5YTMiIGQ9Ik0yMjcuOTAxIDE4Ni43NTVsMS44Ny0xLjMxMmMtLjMxIDEuMjk3LS42NDYgMi41ODYtLjk5NiAzLjg2MS0yLjU5OSA4LjMzLTUuNjY3IDE1LjY5OS05LjA3NCAyMi4yMDgtLjc1My4wNTItMS41NDguMDgxLTIuNC4wODEtMi42MjkgMC01LjMxNC0uMjIyLTguMjg2LS40OTQtNS4xNTgtLjQ3NC0xMy4zNDMtMS40MTEtMTUuOTI4LTEuNzExLTIuMjI3LTEuNzc2LTkuODQ3LTcuODMtMTYuMTg3LTEyLjgyLS4yNS0uMjAxLS40NjQtLjM4OC0uNjczLS41Ni0xLjExNi0uOTQ0LTIuMzg2LTIuMDE3LTQuOTU2LTIuMDE3LTIuMzM1IDAtNS43NDQuODUtMTMuOTg2IDMuMzQ0IDQuMjgzLTMuMjAyIDQuMzExLTcuMzM0IDQuMzExLTcuMzM0bC4yMDEtMS43NCA1NC4zMzEgNi4xNzJhMS44OCAxLjg4IDAgMCAwIDEuMjczLS4zMjFsNS40NTktMy44MjQgNS4wNDEtMy41MzMiLz48cGF0aCBmaWxsPSIjZTlkNTg2IiBkPSJNMTg3LjkxNiA3Mi40NWMuMTY1IDQuODMzLjA0NCAxMy41OTEtMi4yMDcgMjEuNzkzYTEuNzggMS43OCAwIDAgMCAwIC45MzggMzQ1LjczIDM0NS43MyAwIDAgMC04LjU5NC0uNzg4YzMuMjE2LTYuNzM4IDMuOTE3LTEzLjkxNCA0LjA2OS0xNi40NDIgMi40Ny0xLjc1NiA0LjkyOC0zLjg2MiA2LjczMi01LjUwMk0xMDUuOTQxIDc3Ljk1Yy4xNSAyLjUyNy44NTEgOS42ODkgNC4wNjIgMTYuNDIyLTIuODY2LjIyOC01LjczLjQ5My04LjU4OC43OTUuMDc3LS4yOTUuMDg3LS42MSAwLS45MjYtMi4yNDgtOC4xODUtMi4zNjMtMTYuOTUyLTIuMjA2LTIxLjc5MyAxLjgwNSAxLjY0MSA0LjI1NCAzLjc0NyA2LjczMiA1LjUwMSIvPjxwYXRoIGZpbGw9IiMyYTJjMzAiIGQ9Ik0xODQuNDYzIDE1NC4zOTZhMi45MzYgMi45MzYgMCAwIDAgMi44NzItMi45OCAyLjkxNSAyLjkxNSAwIDAgMC0yLjk4LTIuODcgMi45MTggMi45MTggMCAwIDAtMi44NyAyLjk3OCAyLjkyNSAyLjkyNSAwIDAgMCAyLjk3OCAyLjg3MnptMTcuOTg0IDEzLjE3Yy0zLjg1NC0xLjg2LTguMDc5LjUwMy0xNS43NzEuNjQ2LTUuNzIzLjIwMS0xMC41MjguMjY0LTEwLjg0My04LjcyNC0uMzE2LTguOTk2IDMuMzUxLTE2LjQzNCA5LjA3NC0xNi42MzggNS43MjItLjIgMTAuOTQyIDYuOTM0IDExLjY0NiAxNS45MDkuMTk0IDIuNDcyLS4wOCA0LjI3Ni0uNjk0IDUuNjEzIDUuMzI4LS42MzYgNi41MzIgMi45OCA2LjU4OCAzLjE5NSIvPjxwYXRoIGZpbGw9IiNmMWZhZmMiIGQ9Ik0xODQuMzU1IDE0OC41MzVhMi45MjQgMi45MjQgMCAxIDEgLjEwNiA1Ljg0OSAyLjkyNSAyLjkyNSAwIDEgMS0uMTA2LTUuODUiLz48cGF0aCBmaWxsPSIjMmEyYzMwIiBkPSJNMTAyLjQ2NyAxNTYuNTY2YTIuOTI3IDIuOTI3IDAgMSAwLS4xNjUtNS44NTIgMi45MjcgMi45MjcgMCAwIDAgLjE2NSA1Ljg1MnptOC44NDUgNC43MDVjLjA4NCA4Ljk5Ni00LjY3OSA4LjQ1Mi0xMC40MDggOC41MDgtLjU4LjAxNC0xLjEzLjAyMS0xLjY3Ny4wMjktLjY0My4wMTUtMS4yNTkuMDIxLTEuODU0LjAwNy01LjU1Ny0uMDA3LTkuMTEtLjI1OS0xMi4yNTMgMS40MzkuMDc3LS4xOTQgMS40NTMtMy4yODIgNi40NDctNC41MzQtLjU1Mi0xLjIxOS0uODk4LTIuOTA4LS45OS01LjI1LS4zNDItOC45ODcgNS4yLTE2LjM1OCAxMC45My0xNi40MDggNS43MjItLjA1NSA5LjcxOCA3LjIxNiA5LjgwNSAxNi4yMDkiLz48cGF0aCBmaWxsPSIjZjFmYWZjIiBkPSJNMTAyLjMxNSAxNTAuNzE5YTIuOTI3IDIuOTI3IDAgMSAxIC4xNSA1Ljg1MiAyLjkyNyAyLjkyNyAwIDAgMS0uMTUtNS44NTIiLz48cGF0aCBmaWxsPSIjZWJkYjhiIiBkPSJNNjYuMDI3IDEwMS4xNDRsLS42NjUtMS4yNTUtLjAyNy0zLjI5NyAxLjczMy0xOS41OTkgMzAuMDgzLTcuMjg1IDEuODcyIDI1LjI5M2MtMS40NTgtMS45NzctMy42NDItNi40NTMtNC45OTUtMTIuNTk0LS43MjQtMy4yOC0zLjA1LTQuMjE1LTUuNzI2LTQuMjE1LTIuMzM1IDAtNC45MzYuNzEyLTYuOTczIDEuMTk2LTQuMzczIDEuMDQxLTEwLjA5OCAyLjQ5OS0xMS4wMzQgNC43ODgtMS44MTggNC40NDEtMi43MDcgMTYuMDMtMi43MDcgMTYuMDNsLTEuNTYxLjkzOE0yMjEuMzY4IDEwMS4xNDRsLTEuNTYxLS45MzdzLS44ODgtMTEuNTktMi43MDYtMTYuMDMxYy0uOTM3LTIuMjktNi42NjItMy43NDctMTEuMDMzLTQuNzg4LTIuMDM3LS40ODQtNC42NC0xLjE5Ni02Ljk3NS0xLjE5Ni0yLjY3NyAwLTUuMDAyLjkzNS01LjcyNiA0LjIxNS0xLjM1MSA2LjE0MS0zLjUzOSAxMC42MTctNC45OTggMTIuNTk0bDEuODc2LTI1LjI5MyAzMC4wODMgNy4yODUgMS40NzYgMTYuNzA3LS4wNTUgNi43MjMtLjM4MS43MjEiLz48cGF0aCBmaWxsPSIjZWJkYzhjIiBkPSJNMTc0LjMwMSA5Ni42MDRsLTYwLjY0Mi0uMTEyLTMuMTQzLTcuMDc2LTIuMjQ3LTEyLjEyOC00Ljk0Mi0zLjkzLS4xMTMtMjguMjQzIDYuOTYtMjAuNTg0czEuMTQzIDYwLjYyNiAxNS4zMTEgNjAuNjI2aDM2LjgzNmMxNC4xNjggMCAxNC45NjYtNjAuNjUzIDE0Ljk2Ni02MC42NTNsOS4yMTYgMzQtNi42OTggMTkuMTIxLS4zMzggNS4zOTEtMi4zNTkgOC41MzMtMi44MDcgNS4wNTVNMjM1Ljk2NyAxMDcuNDNsLTMuNDMtMS42NzUgMy40MyAxLjY3Nm0tMy40My0xLjY3NmwtMTAuODA0LTMuMjU5LjAxNi0yLjA3My41NTYtMS4wNDgtLjUwMS01LjY3NS4xMDEtMTIuNjQxczIuOTE2IDIwLjkyMiAxMC42MzIgMjQuNjk2Ii8+PHBhdGggZmlsbD0iI2VhZDY4NyIgZD0iTTIyMS43NSAxMDAuNDIzbC4wNTQtNi43MjMuNTAxIDUuNjc1LS41NTYgMS4wNDgiLz48cGF0aCBmaWxsPSIjZWJkYzhjIiBkPSJNNTEuMTQ3IDEwNy40M2wzLjQzLTEuNjc1LTMuNDMgMS42NzZtMy40My0xLjY3NmM3LjcxOC0zLjc3NCAxMC42MzMtMjQuNjk2IDEwLjYzMy0yNC42OTZsLjEyNSAxNS41MzMtLjI0NSAyLjc4My4yNzIuNTE0LjAyIDIuNjA3LTEwLjgwNSAzLjI1OSIvPjxwYXRoIGZpbGw9IiNlYWQ2ODciIGQ9Ik02NS4zNjIgOTkuODlsLS4yNzItLjUxNS4yNDUtMi43ODMuMDI3IDMuMjk3Ii8+PHBhdGggZmlsbD0iIzJhMmMzMCIgZD0iTTk4LjA5IDk1LjUyNGwtLjEzLS4zM2MtMi42MzMtOS41ODItMi41MTktMTkuNjMtMi4yODMtMjQuMjY1bC0yNy4zNTIgNy43NzhjLTEuODQgMTEuOTc2LS45ODEgMjAuNzc3LS43OTYgMjIuMzk2YTE4NC45NyAxODQuOTcgMCAwIDEgNi44NDItMS43MTJjMy43OC0uODM4IDcuNTktMS41MzkgMTEuNDA4LTIuMTg0IDMuODI1LS42MzggNy42NjItMS4xMjQgMTEuNTAxLTEuNTkuMjczLS4wMzYuNTM5LS4wNTYuODEtLjA5M3ptMTEuOTEyLTEuMTUyYy0zLjIxMS02LjczMy0zLjkxMi0xMy44OTYtNC4wNjItMTYuNDIzLTIuNDc3LTEuNzU0LTQuOTI4LTMuODYtNi43MzItNS41LS4xNTkgNC44NDItLjA0MyAxMy42MDggMi4yMDYgMjEuNzk0LjA4Ni4zMTYuMDc3LjYzIDAgLjkyNSAyLjg2LS4zMDMgNS43MjItLjU2NyA4LjU4OC0uNzk2em03NS43MDYtLjEzYzIuMjUtOC4yIDIuMzcyLTE2Ljk2IDIuMjA3LTIxLjc5NC0xLjgwNCAxLjY0LTQuMjYzIDMuNzQ1LTYuNzMyIDUuNS0uMTUyIDIuNTI4LS44NTQgOS43MDQtNC4wNyAxNi40NDMgMi44NjYuMjMgNS43MzEuNDg4IDguNTk1Ljc4OGExLjc3NCAxLjc3NCAwIDAgMSAwLS45Mzh6bTMzLjg3OSA2Ljg2N2MuMTg2LTEuNjA5IDEuMDUyLTEwLjQxMi0uNzg4LTIyLjQwMWwtMjcuMzYtNy43NzdjLjI0NSA0LjYzMy4zNTMgMTQuNjgyLTIuMjc2IDI0LjI2NWwtLjEzNS4zNDRjLjI3LjAyOC41NDQuMDUuODA4LjA4NSA3LjY5Mi44ODIgMTUuMzQ4IDIuMTEyIDIyLjkxOSAzLjc3NCAyLjI4Mi41MyA0LjU2OCAxLjA5NyA2LjgzMiAxLjcxem00LjM5NiAxLjI5MWMzLjY3MyAxLjIwMyA3LjM2OCAyLjQ3NyAxMC43MTQgNC40MzMtMS43OS0uNzA5LTMuNjM4LTEuMjE3LTUuNTAxLTEuNjc2YTkzLjg0NyA5My44NDcgMCAwIDAtNS42MDEtMS4yMzJjLTMuNzYtLjcwOC03LjUzNC0xLjMwOS0xMS4zMzEtMS43NjktMy43ODgtLjQ5My03LjU4My0uOTEtMTEuMzk1LTEuMjMyLTMuODEtLjMyMS03LjYxMi0uNjQ0LTExLjQzLS44NjctMTUuMjYyLS45MzgtMzAuNTY2LTEuMTczLTQ1Ljg4LTEuMTg5LTE1LjMxMS4wMDgtMzAuNjE2LjI5NS00NS44NzkgMS4xOTYtMy44MTYuMjIxLTcuNjIuNTQ1LTExLjQzLjg2OC0zLjgwOS4zMjEtNy42MTMuNzMtMTEuMzk0IDEuMjMtMy43OTYuNDYtNy41NyAxLjA2Mi0xMS4zMyAxLjc3LTEuODc3LjM1Mi0zLjc0Ny43Ni01LjYwOSAxLjIyNS0xLjg1NC40NTktMy43MS45NjctNS41IDEuNjc2IDMuMzQ0LTEuOTU0IDcuMDQtMy4yMzYgMTAuNzItNC40NDEuMzEtLjEuNjIzLS4xODUuOTM4LS4yODVsLS4wNTgtLjIzNmMtLjA2NC0uNDIzLTEuNDI1LTEwLjQ3OS45NDYtMjQuODZhMS43ODIgMS43ODIgMCAwIDEgMS4yODItMS40MzRsMy44OS0xLjEwOGMuODQ1LTMwLjE2NiAxMy4yNy00NC4zNTQgMTMuNjU3LTQ0Ljc5Mi0xMS4xMDEgMTcuODYzLTExIDM5LjA0OC0xMC44MDggNDMuOTgybDI0LjE3LTYuODcuMDU2LS4wMTMuMzAyLS4wNDMuMS0uMDA4Yy4xMjMtLjAwNi4yNi4wMDguMzk2LjAzNmwuMDcuMDIyLjMuMS4xMTQuMDY1LjIzNi4xNS4wNjUuMDQzLjA0My4wNDMuMDcyLjA1OWMuMDE2LjAyMS42NTkuNjU3IDEuNjgzIDEuNjEyLS4yNDMtNy45NjQuMTM2LTMwLjgxMSAxMS4wMTYtNDkuNzQ3LS4yMy42NjQtOC44NjIgMjUuOTA0LTUuODg3IDU0LjE5M2E0NS4zNTEgNDUuMzUxIDAgMCAwIDIuOTcyIDIuMTk5Yy40NzkuMzMuNzczLjg3My43OCAxLjQ1My4wMDguMDk0LjIxNCA5LjExMSA0LjE5NyAxNi43ODIuMDU2LjExNC4xLjIzNi4xMzYuMzU3IDkuOTA1LS42NzMgMTkuODM4LS45NDUgMjkuNzUtLjk1MiA5LjkxNC4wMDcgMTkuODQuMjkzIDI5Ljc0Mi45NzUuMDM2LS4xMy4wOC0uMjU4LjE0Ni0uMzggMy45ODEtNy42NzEgNC4xODktMTYuNjg4IDQuMTg5LTE2Ljc4MmExLjgxNyAxLjgxNyAwIDAgMSAuNzg4LTEuNDUzIDQ4LjUzIDQ4LjUzIDAgMCAwIDIuOTY1LTIuMTk5YzIuOTc5LTI4LjI4OS01LjY1My01My41MjktNS44ODEtNTQuMTkzIDEwLjg3IDE4LjkzNSAxMS4yNTkgNDEuNzgxIDExLjAxNiA0OS43NDdhODMuMzgxIDgzLjM4MSAwIDAgMCAxLjY4MS0xLjYxMmwuMDcxLS4wNTkuMDQ0LS4wNDMuMDY1LS4wNDQuMjM2LS4xNTcuMTA4LS4wNTcuMzE1LS4xMDcuMDY1LS4wMTVjLjEyOC0uMDI4LjI2Ny0uMDQyLjM5NS0uMDM2bC4wOTMuMDA4LjMwOC4wNDMuMDU2LjAxMyAyNC4xNzIgNi44N2MuMTk1LTQuOTM0LjI5NS0yNi4xMi0xMC44MDUtNDMuOTgyLjM4NS40MzggMTIuODEyIDE0LjYyNiAxMy42NSA0NC43OTJsMy44OTUgMS4xMDhhMS43OTggMS43OTggMCAwIDEgMS4yODMgMS40MzRjMi4zNyAxNC4zODEgMS4wMDMgMjQuNDM3Ljk0NCAyNC44NmwtLjA1Ni4yNDJjLjMxOS4wOTQuNjI3LjE4Ni45NDMuMjg3Ii8+PHBhdGggZmlsbD0iIzJhMmMzMCIgZD0iTTE2Ny41NTYgNDMuMTc1VjMwLjEyM2gtNDYuOTY1djEzLjA1Mmg2LjQyMXYtNi42MzJoMTMuMjg1djQwLjNoLTUuNDY2djcuNDc0aDE4LjQ4NnYtNy40NzRoLTUuNDY2di00MC4zaDEzLjI4NXY2LjYzMnptNC44MzUtMTcuODc4djIyLjdIMTU2LjN2LTYuNjMyaC0zLjYyN3YzMC42NDJoNS40NzlWODkuMTRoLTI4LjE0NVY3Mi4wMDdoNS40NTZ2LTMwLjY0aC0zLjYxNXY2LjYzMmgtMTYuMDhWMjUuMjk3aDU2LjYyMyIvPjxwYXRoIGZpbGw9IiNjZDI0NDUiIGQ9Ik0xNjcuNTU2IDMwLjEyMXYxMy4wNTRoLTYuNDIxdi02LjYzMmgtMTMuMjg2djQwLjNoNS40Njd2Ny40NzRoLTE4LjQ4NXYtNy40NzRoNS40NjZ2LTQwLjNoLTEzLjI4NXY2LjYzMmgtNi40MjFWMzAuMTJoNDYuOTY1Ii8+PHBhdGggZmlsbD0iIzVkNjc2MiIgZD0iTTQwLjkyNSAxMjQuMTU5YzIuMzQ2LS41MzIgNS41MTUtMS4yMSA5LjQwMi0xLjk2YTEzOS4xMTggMTM5LjExOCAwIDAgMC04LjI5NiA2LjEyOWwtMS4xMDYtNC4xNyIvPjxwYXRoIGZpbGw9IiNjNGFmOTAiIGQ9Ik0xMjYuODE1IDE4Ni4zNzNzLjY1NiA0LjIyLTUuMjUxIDYuMDI2Yy01LjkwNCAxLjgwNi00My4zMSAxMi45NTUtNDcuNTc2IDEyLjM1LTQuMjY1LS42MDEtMTUuMDkyLTcuODMyLTE1LjA5Mi03LjgzMmwtMi42MjUtOS4zMzggMTYuMDIxIDkuOTkgNTQuNTIzLTExLjE5Nk0xNjAuMzIzIDE4NS41NTZzLS40NzIgNC4yNDMgNS41MDggNS43OTNjNS45NzggMS41NDggNDMuODMzIDExLjA2IDQ4LjA2NiAxMC4yNzIgNC4yMzUtLjc4OCAxNC43MzgtOC40ODEgMTQuNzM4LTguNDgxbDIuMjE3LTkuNDQ1LTE0LjcyNyA4Ljc4NC01NS44MDItNi45MjMiLz48cGF0aCBmaWxsPSIjYzRhZjkwIiBkPSJNMzcuODgzIDE3OC42MDhzNS4xODIgMTAuMzY2IDEzLjU1NCA2Ljc3N2w1Ljk4IDIuMTk0LS41OTcgNC4zODctMTIuNTU5IDEuNTkzLTMuMzg4LTEuOTkyLTIuOTktMTIuOTZNMjUwLjA2OCAxNzUuNzYycy04LjQ3IDEwLjgyLTE2Ljg0MyA3LjIzM2wtMi42OTIgMS43MzYuNTk4IDQuMzg1IDEyLjU1OCAxLjU5NSAzLjM4Ny0xLjk5NCAyLjk5Mi0xMi45NTVNMTE5LjAzOSAyNTcuMjA1czMwLjcwNiAxNS40ODIgNjUuNDc0LTUuNTg0bC0xMS4xNjUtLjc2MXMtMjQuMzYzIDkuNjQzLTQzLjY1IDQuMzEzbC0xMC42NiAyLjAzMiIvPjxwYXRoIGZpbGw9IiMyYTJjMzAiIGQ9Ik01MC4zMjcgMTIyLjE5OWEzMDUuNDY1IDMwNS40NjUgMCAwIDAtOS40MDIgMS45NmwxLjEwNiA0LjE2OWExMzguNTMyIDEzOC41MzIgMCAwIDEgOC4yOTYtNi4xM3ptNS4wODcgNjguNDhhOTEuMDU4IDkxLjA1OCAwIDAgMS0uODI5LTIuODAzbC02Ljg4Mi00LjgxNmExLjg1NCAxLjg1NCAwIDAgMS0uNzgyLTEuMjkybC0zLjM1NC0yNy4yNjVjLTIuNDg2IDEuMzMyLTUuMzU3IDIuOTY2LTYuMTIzIDMuNjA5LS42NjMuNTQ1LTEuMTY3IDEuOTQ3LS40NDggOC40NDMuODkgOC4wMTMgNC45NSAyMy4xMSA3LjEzIDI1LjMwNSAyLjYyNS40NjMgOC40MzctLjM0NCAxMS4yODgtMS4xODF6bTQxLjEzMy03Mi4yNjNjNS4xLTEuNDMgMTAuMzYtMi42NzkgMTUuNzUtMy43MjgtNy43My4yODMtMTUuNDY2LjY0MS0yMy4xOSAxLjA3Ny00LjQ4OC4yNDgtOC45NTQuNTUyLTEzLjQyLjg5LTIuMjM4LjE3Mi00LjQ2LjM1LTYuNjc3LjU5My0uNjM0LjA2MS0xLjI1NS4xMy0xLjg5LjIxMy01LjgyNSAzLjQ4Ni0yOC4xNyAxNy41MTItNDMuNTA4IDM1Ljg1MiAxNC45MDUtMTAuMzU4IDQwLjg3Mi0yNS45MjQgNzIuOTM1LTM0Ljg5N3ptLTIuODc5IDEzLjI2NWM0LjMzNS00LjMgOC44MDctNy44NDggMTIuNzU2LTEwLjYyMi0xNS4yMiAzLjUzNC0yOS4yMyA4LjcyNC00MS41MDQgMTQuMzdhNDgxLjI1OCA0ODEuMjU4IDAgMCAxIDI4Ljc0OC0zLjc0OHptNTguNDE5LTE3LjUyNWMtMy4wOC0uMDQ4LTYuMTY0LS4wNzYtOS4yNDQtLjA4M2gtLjAwN2MtNC41Mi4wMDctOS4wNS4wNTUtMTMuNTg1LjE0NmwtOC4zNTkgMy45NjEtLjExNy4wNjRjLTEuMjU2LjYxMy0xMi4yMzIgNi4xNS0yMi41NTkgMTYuMDI4IDkuMjU3LTQuODY3IDIyLjg2MS0xMS4yMjQgMzguODctMTYuMTUzYTE5Mi4yNDggMTkyLjI0OCAwIDAgMSAxNS0zLjk2M3ptLTUuMDg4IDI1LjA1YzIuNDM2LTEuNDcgNC43NzYtMy4xNTQgNi45OTgtNC45NDlhNTYzLjEyIDU2My4xMiAwIDAgMC05LjcwNC0uMDk2IDUwMS42NSA1MDEuNjUgMCAwIDAtMzcuNTg1IDEuNDE1Yy0xMS40OCA1LjYxMi0xOC41IDEwLjIzLTE4LjY2NCAxMC4zNDdsLTExLjAyNCA3LjM1MSA3LjU3Mi0xMC44NjVhNjkuODMyIDY5LjgzMiAwIDAgMSAzLjk0MS01LjE0MmMtMTIuNzE0IDEuNDIxLTIzLjMwMiAzLjEwNS0zMS4yMTMgNC41NjJsNC4wNSAzMi44NDMgMTMuOTM4IDkuNzYxIDQ0LjI0NS05LjgzNyA4LjI4My0yNy4yODVjLjEzOS0uNDUuNDQxLS44MjguODM2LTEuMDU3LjEzLS4wODUuMjctLjE0Ni40Mi0uMTg3LjI1Ni0uMDcgNC42OC0xLjMzMiA5Ljc4MS0xLjk1NHptNC40NzIgMTA0Ljg0M2MxLjQwOC0uMTEgMi44MjItLjI5IDQuMjQ1LS41MDRhMTg1LjA4NyAxODUuMDg3IDAgMCAxLTQuNzU3LTUuMTQyIDUzMS4wNzIgNTMxLjA3MiAwIDAgMS0yLjU2IDUuNzg1aC4zMjRjLjg3Ny4wMDEgMS44MzctLjA5NSAyLjc0OC0uMTM5em0yMy4yIDkuOTQ4Yy02LjAwNC0uNDQyLTExLjQ2NC0yLjk0LTE1Ljg3MS03LjMwMi0uMjI4LS4yMzQtLjQ0OC0uNDU4LS42Ny0uNjgzLTIuMTMuNDI4LTQuMjkxLjc0NS02LjUwNy45MzgtLjkzMS4wMzUtMS44MTUuMTE3LTIuNzg4LjExN2wtMS40NDQuMDE0LS41NTEtLjAxNGMtNS44NjEgOC43MTgtMTguODc5IDEwLjQxNy0xOS40NzMgMTAuNDkzLS41MzguMDYxLS45NzkuMTM3LTEuNTg4LjI0OCA3LjI1NiAxLjk4OCAxNC42NjEgMi44NSAyMS45NjUgMi4zNiA3LjMyMy0uNDkgMTYuODM2LTIuMDc3IDI2LjkyNy02LjE3em0tNC43ODMtMTM2LjExM2MuNTAzLS42MjguOTcyLTEuMjM1IDEuMzkyLTEuNzg3YTE0OS41NDggMTQ5LjU0OCAwIDAgMC0xMi44OTMgMS44NzhjLTE0LjQxOSAyLjY5OC0yNy43MzUgNy4xODUtMzguODE0IDExLjc4MmE1MTEuMDEgNTExLjAxIDAgMCAxIDI0LjcyLS42MDZjNS4yMTEgMCAxMC4yNzguMDg5IDE1LjIwNi4yMzQgNC4yMzgtNC4wNzQgNy44MTQtOC4yNDIgMTAuMzg5LTExLjUwMXptMzkuODM1LTEuMjM1bC0uMDQyLS4wMTZhNzM1LjQ5OCA3MzUuNDk4IDAgMCAwLTEzLjEwMS0uODY4Yy02LjA3My0uMzQ2LTEyLjE1LS42MzYtMTguMjIzLS44OS0uMzUzLjUyNS0xLjA2OSAxLjU2LTIuMDk4IDIuOTY2LTMuMzA2IDQuNDc0LTkuODY0IDEyLjY4LTE4LjI3MiAxOS42NCAxMS45MDEtMi4xMzQgMzIuNTQ1LTcuNDE0IDUwLjQwNC0xOS44NzQuNDQ4LS4zMTguODktLjY0OCAxLjMzMi0uOTU4em0yMC4wNDUgNjguNzkxbC0xLjg3MiAxLjMxLTUuMDM5IDMuNTM1LTUuNDYgMy44MjRhMS44ODggMS44ODggMCAwIDEtMS4yNzIuMzI0bC01NC4zMjgtNi4xNzctMy45NTQtLjQ1YTEuODUyIDEuODUyIDAgMCAxLTEuNTYyLTEuMzAybC04LjUwMi0yNy45OTdjLTEuNDIyLS4xOTQtMi42ODYtLjI5Mi0zLjc0Ny0uMjkyLTEuMDc5IDAtMi4zMzUuMDk3LTMuNzU2LjI5MmwtOC4yNTYgMjcuMTg5YTEuODQ0IDEuODQ0IDAgMCAxLTEuMzY3IDEuMjYxTDcyLjc0IDE5OS44NTRjLS4xMzcuMDI2LS4yNzUuMDQtLjQwNy4wNC0uMzcyIDAtLjc0NS0uMTExLTEuMDY0LS4zMzhsLTIuMTA0LTEuNDY0LTYuMzAxLTQuNDF2LS4wMTRsLTIuNTQ3LTEuNzhjLjE4LjU3My4zODYgMS4xMzMuNTg4IDEuNjlsLS4wMDguMDA5Yy40OTEgMS40NTYgNS4zNzEgMTUuNDk2IDE1LjI5IDI5LjIzOGExMTY2LjQ0NSAxMTY2LjQ0NSAwIDAgMCAyMi43NDItNi45NzhjNS45ODUtOS4yMjMgMTQuNTAzLTE4LjM3IDIwLjU1Ny0xOC42ODZhNjguMDE4IDY4LjAxOCAwIDAgMSAzLjIwNC0uMDhjMi45NiAwIDUuNzkxLjIxMiA4LjQxMy41MjMtMi4yMjgtMi4wMjMtMi42ODQtNC4zOTctMy4wMDgtNS40NDcgMCAwIDcuNzI0IDYuMDQgMTcuNTYgNC43NzkgOS44MzctMS4yNyAxNS45NDUtNi45MzkgMTUuOTQ1LTYuOTM5cy0uMDI4IDQuMTM2LTQuMzE1IDcuMzM4YzguMjQzLTIuNDkyIDExLjY1Mi0zLjM0OCAxMy45ODYtMy4zNDggMi41NzQgMCAzLjg0NCAxLjA3NyA0Ljk1NiAyLjAyNS4yMTQuMTcyLjQyOS4zNTcuNjc2LjU1OWE0NjI2LjE4NSA0NjI2LjE4NSAwIDAgMSAxNi4xODggMTIuODE4YzIuNTgxLjMwMyAxMC43NjYgMS4yMzUgMTUuOTI0IDEuNzExIDIuOTczLjI2OCA1LjY2LjQ5NiA4LjI4OS40OTYuODUgMCAxLjY0NC0uMDM1IDIuMzk2LS4wODQgMy40MS02LjUwNyA2LjQ3Ni0xMy44ODEgOS4wNzctMjIuMjA0LjM0OC0xLjI4LjY4OC0yLjU3Ljk5MS0zLjg2OHptLTMuMDctMTUuNzkzbDMuOTg5LTI3LjkzYy0xMS4yNTItMi4wNDktMjcuNzA3LTQuNTI2LTQ3Ljg2My02LjA3My0xOC4xOTYgNi4yNzYtMzMuNDM2IDguMTQ0LTM0LjM1NSA4LjIwNmwtMS4wNjIuMDc3YzUuODA0LjQ5OCAxMS4yNzIgMi4wNTggMTEuNTQ2IDIuMTQuNjAzLjE4IDEuMDcyLjY0IDEuMjU5IDEuMjQ0bDguMjQ4IDI3LjE1NSA0NC4xODQgNS4wMTh6bTEwLjc2IDUuODgxbDQuNTEzLTMxLjU2OGEzMjEuMDE3IDMyMS4wMTcgMCAwIDAtNy42NDItMS41NTlsLTQuMDc4IDI4LjU2M2ExLjg4NiAxLjg4NiAwIDAgMS0uNzY3IDEuMjU3bC0xNS4yOTYgMTAuNjk4Yy0uMzYuMjU1LS44MjEuMzczLTEuMjYzLjMyNGwtNDYuMDk2LTUuMjM5YTEuODU1IDEuODU1IDAgMCAxLTEuNTY4LTEuMjk3bC04LjMwMi0yNy4zMzRjLTIuMjI0LS41NzQtNy45MzItMS45MDYtMTIuOTI4LTEuOTA2LTUuMDE5IDAtMTAuNzIyIDEuMzMyLTEyLjk0NSAxLjkwNmwtOC4zMDMgMjcuMzM0YTEuODUgMS44NSAwIDAgMS0xLjM2NyAxLjI2Mkw3NS4zMiAxODguMjI1Yy0uMTQ1LjAzLS4yNy4wNDQtLjQwOC4wNDQtLjM3MiAwLS43NDUtLjExLTEuMDU2LS4zMzNsLTE1LjI5LTEwLjcwNWExLjg2MyAxLjg2MyAwIDAgMS0uNzgtMS4yOTFsLTQuMTItMzMuNDNhMzI5LjM2IDMyOS4zNiAwIDAgMC00LjY0LjkzOGMtLjk3OC41NC0xLjk0NiAxLjA3OS0yLjg5OCAxLjYxOGw0LjM3NSAzNS40MjMgMjIuMjIxIDE1LjU2NyA1Ni4wNjItMTIuNDcyIDguMjc3LTI3LjI2NWMuMjA4LS42ODYuNzgtMS4xOSAxLjQ3Ny0xLjMgMi4wOTktLjMzOCAzLjkzMy0uNTEgNS40ODgtLjUxIDEuNTM3IDAgMy4zODEuMTcyIDUuNDczLjUxLjcwNC4xMSAxLjI3Ni42MTQgMS40NzggMS4zbDguNDg4IDI3Ljk0IDU2LjM3NiA2LjQxMnptNi4yNC0zNi4zMTZsMy45NjktMTUuMDUzYy01Ljc1OC0xLjMwNC0xNi4zNi0zLjQ4Ny0zMC44LTUuNTMxLTcuMzc0IDUuMzAxLTE1LjQ0MyA5LjU0LTIzLjM3NCAxMi45MjEgMjQuMjY2IDIuMzYyIDQyLjA5NCA1Ljg3NSA1MC4yMDQgNy42NjN6bTYuODggMjMuNTNjLjYwOS02LjczNS4wNzgtOC4xODUtLjYwNi04LjczOC0uNjg0LS41NzMtMi45OTYtMS44ODMtNS4yNDctMy4xMDVsLTMuNzA1IDI1Ljk1MWMtLjA3LjUwNS0uMzUzLjk2Mi0uNzczIDEuMjU3bC01LjMwMyAzLjcwOGMtLjQyIDIuMTI0LS41NzIgMy4xMjYtMS4wOSA1LjIwNCAzLjAzMS43MDQgOCAxLjI1IDEwLjM2Ny43OTMgMi4xNS0yLjMzIDUuNjE5LTE2LjgxMyA2LjM1OC0yNS4wN3ptMTUuOTk0LTY0LjA0Yy4xOTUgMy44ODUuMDkgNy43NzctLjM0NCAxMS42NDNhNzMuOTQ5IDczLjk0OSAwIDAgMS0yLjE1OSAxMS40NzQgNjAuMDQyIDYwLjA0MiAwIDAgMS0xLjg3MiA1LjU5NyA1MS4wNiA1MS4wNiAwIDAgMS0xLjE4NiAyLjc2MWMtLjIxNS40NTUtLjQ0Mi45MDQtLjY5OCAxLjM2N2wtLjM3OC42ODNjLS4xMzkuMjQ3LS4yNS40MzQtLjQ2NC43NjVsLS4zOTIuNjEtLjYxNS4zMTVhNDQuNzMgNDQuNzMgMCAwIDEtMS43OS44NzFsLTEuNzMuNzhjLTEuMTYxLjQ5Ni0yLjMyNy45NjUtMy40OTMgMS40MmE4My44OSA4My44OSAwIDAgMC0yLjIxNi44OTlsLTEuOTI2IDcuMzE2Yy0uMDQ4LS4wMTItLjYyOC0uMTYtMS43MS0uNDJsLS4xMDQuNzY1YzIuMTI1IDEuMTEgNi4zMDEgMy4zNjMgNy43MjQgNC41MzcgMi44NjQgMi4zNjcgMy4wNjUgNi4xMTYgMi40MyAxMy4xMjItLjMyNSAzLjU5Ni0xLjUxOCAxMC41OTQtMy4xNzQgMTcuMDIyLTIuODU5IDExLjA2NC00LjM3OCAxMi4zNjQtNi4zMzggMTIuODY2YTE3LjIgMTcuMiAwIDAgMS00LjAxLjUxYy0zLjAyMiAwLTcuMTM4LjA4NC05LjkwNi0uNTg1LS43MSAyLjUxNy0yLjc0IDkuMDgzLTYuNzU3IDE3LjI4My4yMDEtLjA5OC40LS4xOC41OC0uMjc2IDQuOTU2LTIuNjAzIDE0LjQ4MS02Ljc1MyAxNC44ODMtNi45MzJsNy41MjQtMy4yNy0zLjg1NCA3LjI0N2MtLjA4OS4xNTctOC4zNTIgMTUuNjk3LTEzLjQxMiAyNS44NDQtNS4wMjUgMTAuMDUtMTQuNDQ2IDEyLjIzOS0yMC4wODYgMTMuNTM0LS44NS4yMDItMS42NTUuMzg5LTIuMzExLjU2Ny00LjA0NyAxLjE0LTEyLjI0IDMuMDkyLTE5LjQ2NSA0LjgzbC0uMjYzLjA1N2E4NS40MjUgODUuNDI1IDAgMCAxLTE0LjYwNyA3LjIxNWMtMTkuNDI0IDcuMzU3LTM5Ljg5NyA2Ljk0My01OC40NTguMTIyLTMuMDE1LjM4OC02Ljk3OS44NjMtMTIuMjU4IDEuNDYzYTYwLjIzOSA2MC4yMzkgMCAwIDEtNi42NDYuMzg4Yy0xNy42ODYgMC0yNy4wNi04Ljk4MS0zMy45LTE3Ljc3NS03LjMyNC05LjQxNi0xNi4yODMtMjMuMzk0LTE2LjY2My0yMy45OGwtNS4xOTUtOC4xMDIgOC43OCAzLjk0OGM0LjIwMyAxLjg5MSAxNi42OTkgNy42NzYgMjAuMjczIDkuMzMzLjI5LS4wODEuNTc0LS4xNjYuODU3LS4yNDgtNS45NDMtOC40NzYtMTAuODE2LTE4LjE0LTE0LjI2LTI4Ljg0NS0yLjkyNy44ODItNy40MzUgMS41NjYtMTAuOTQyIDEuNTY2LTEuMjgxIDAtMi40MjktLjA5Ni0zLjMxMi0uMzA0LTEuOTYtLjQ0OC00LjE5Ny0yLjMzOC03LjI0MS0xMy4wNi0xLjc2Ny02LjIyNC0zLjA4NS0xMy4wMTgtMy40Ny0xNi41MTYtLjc2LTYuODI4LS42MjItMTAuNDg1IDIuMjE1LTEyLjg0OCAxLjcxLTEuNDI4IDcuNDgyLTQuNDU4IDguNjc2LTUuMDc4bC0uMjU2LTIuMTA3Yy0xOC4zMzMgMTAuNzczLTI5LjMyMSAyMC4yOTMtMjkuNTQzIDIwLjQ4OEwwIDE3OS4wNjlsOS4zNC0xNC43MjljNy4zOTItMTEuNjczIDE1LjkzLTIxLjExIDIzLjc4Ny0yOC4zNzktLjMyNS0uMTMtLjYyOS0uMjYxLS45NDctLjM5MmwtMS43MzItLjc4YTQ3LjI1IDQ3LjI1IDAgMCAxLTEuNzg3LS44N2wtLjYxNC0uMzE2LS4zOTQtLjYxYy0uMjIxLS4zMzItLjMxNy0uNTE3LS40NjItLjc2NWwtLjM4Ny0uNjgzYy0uMjQxLS40NjItLjQ3Ny0uOTEyLS42OS0xLjM2NmE0MS4wNCA0MS4wNCAwIDAgMS0xLjE4Ny0yLjc2MiA1OS42OSA1OS42OSAwIDAgMS0xLjg3Mi01LjU5NyA3Mi45OTMgNzIuOTkzIDAgMCAxLTIuMTYtMTEuNDczIDcyLjg4NSA3Mi44ODUgMCAwIDEtLjM0Ni0xMS42NDRjLjEwNC0xLjk0LjI5MS0zLjg3OS41NTktNS44MDYuMTM5LS45NjYuMjg0LTEuOTMzLjQ3Ny0yLjg5My4yLS45NzkuMzk1LTEuODkuNjkxLTIuOTYxbC4yMDctLjc1Mi41MzgtLjQyM2MzLjA2LTIuNDAzIDYuMzU4LTQuMjE3IDkuNzEyLTUuODI1YTEwNS4xNTcgMTA1LjE1NyAwIDAgMSA4LjQxNS0zLjQ4OGM3LjkyNC0yMS45OTEgMjEuNTUtNDEuNDkxIDM5LjQ1NS01NS4wODJDOTkuMTE2IDcuNDI3IDEyMC44ODUgMCAxNDMuNTYgMGMyMi42NzYgMCA0NC40NDYgNy40MjcgNjIuOTU4IDIxLjQ3NSAxNy45MDYgMTMuNTkgMzEuNTMyIDMzLjA5MiAzOS40NSA1NS4wNzYgMi44NDQgMS4wNDkgNS42NTQgMi4xODggOC40MjIgMy40OTMgMy4zNTMgMS42MDggNi42NTMgMy40MjMgOS43MSA1LjgyNWwuNTM5LjQyMy4yMDguNzUyYy4zMDMgMS4wNy40OTYgMS45ODMuNjkgMi45NjEuMTk0Ljk2LjM0NiAxLjkyNy40NzUgMi44OTQuMjcxIDEuOTI0LjQ2NCAzLjg2Mi41NTkgNS44MDJ6TTUzLjk5OCA3NC4yOGMtMy4zNTQgMS4zNTItNi42ODggMi43NDctOS45NDYgNC4yNzktMy4yNjYgMS40OTItNi40NzUgMy4wOTMtOS41NCA0Ljg4LTIuODI4IDEuNjI5LTUuNTQzIDMuNDE3LTcuOTM5IDUuNDM0LS4xMDIuNjA3LS4xOTggMS4yNy0uMjggMS44OThhNjguMjIgNjguMjIgMCAwIDAtLjI3OCAyLjY3OCA2OS44NzQgNjkuODc0IDAgMCAwLS4yNCA1LjQxMmMtLjAzNSAzLjYxOC4yMTMgNy4yMzUuNjY5IDEwLjgxNi40OTYgMy41OSAxLjE1MiA3LjE1OSAyLjEyNSAxMC42MDMuNDg0IDEuNzI3IDEuMDIzIDMuNDMgMS42NTggNS4wNzIuMzEuODMuNjU2IDEuNjM3IDEuMDE2IDIuNDI0LjE3OC4zOTIuMzY1Ljc4LjU1IDEuMTUybC4yMy40MzVjLjI2OC4xMzguNTQ1LjI3Ni44MDYuNGwxLjYwOC43NjVjLjg5OC40MTUgMi4xMzQgMS4wMDEgMy4xNTUgMS40NTdsLjE2NS0uMTUyLTIuOTc0LTExLjM0OGMuNjI3LS4xNzIgNi4yODktMS42MzYgMTYuMDQyLTMuNDkyYTQ0LjkzNSA0NC45MzUgMCAwIDEtMi4zNjYtLjUwNWMtMi4yMTYtLjU1LTQuNDEyLTEuMjI4LTYuNTMtMi4wODQtMS4wNS0uNDQ4LTIuMDkzLS45MzItMy4wOC0xLjQ5Mi0uOTg4LS41NjctMS45NjEtMS4yMDctMi43MTMtMi4wNjMgMTAuNzEzIDMuNDk5IDMyLjg1IDEuOTExIDUyLjUzLS4xMTcgMTguMDAyLTEuODU3IDM2LjAzOC0zLjA1NyA1NC4xNzEtMy4xIDE4LjEzNC4wNDEgMzYuMTg0IDEuMjQxIDU0LjE3NCAzLjEgMTkuNjkzIDIuMDMgNDEuODMyIDMuNjE3IDUyLjU0MS4xMTctLjc1Mi44NTYtMS43MjQgMS40OTYtMi43MTIgMi4wNjMtLjk4NS41Ni0yLjAzIDEuMDQzLTMuMDc5IDEuNDkyLTIuMTI2Ljg1Ni00LjMxNCAxLjUzMi02LjUzNyAyLjA4NC0uMzI1LjA3NS0uNjU2LjE1Mi0uOTg4LjIyMSAxMC42OTMgMS45ODIgMTYuOTE5IDMuNTk2IDE3LjU4MSAzLjc3NmwtMi44NSAxMC44MWMuNTczLS4yNTYgMS4xNTItLjUwMyAxLjcxNy0uNzY2bDEuNjEtLjc2NWMuMjYtLjEyNS41MzgtLjI2MS44MDctLjRsLjIyMi0uNDM1Yy4xOTItLjM3Mi4zNzgtLjc2LjU1OC0xLjE1Mi4zNi0uNzg4LjcwNC0xLjU5NCAxLjAyMy0yLjQyNGE1NS42MjggNTUuNjI4IDAgMCAwIDEuNjQ4LTUuMDcyYy45NzUtMy40NDQgMS42MzctNy4wMTMgMi4xMjctMTAuNjAyLjQ2MS0zLjU4Mi43MDQtNy4yLjY2OS0xMC44MTZhNzAuMzQgNzAuMzQgMCAwIDAtLjIzNS01LjQxMiA2OC43NjQgNjguNzY0IDAgMCAwLS4yODQtMi42NzljLS4wNzYtLjYyOC0uMTgtMS4yOS0uMjg0LTEuODk3LTIuMzk2LTIuMDE4LTUuMTA4LTMuODA0LTcuOTM4LTUuNDM1LTMuMDY2LTEuNzg3LTYuMjcyLTMuMzg4LTkuNTQ2LTQuODgtMy4yNS0xLjUzMi02LjU5LTIuOTI3LTkuOTQ2LTQuMjc5LTEuNjc5LS42NzctMy4zNzEtMS4zNC01LjA2OC0xLjk2OC0xLjY5LS42NTQtMy40MDMtMS4yNzQtNS4xMTQtMS44OTcgMy41OTUuNTkzIDcuMTU5IDEuNDEzIDEwLjY4NCAyLjMxOSAyLjI5OS41OTQgNC41OTIgMS4yNjQgNi44NTUgMS45NzQtMTYuMTQ3LTQyLjIxLTU0Ljc2LTY5LjY5Ni05Ni45MTMtNjkuNjk2LTQyLjE2MyAwLTgwLjc2OCAyNy40ODYtOTYuOTEyIDY5LjY5NiAyLjI3LS43MSA0LjU1NS0xLjM4IDYuODQ2LTEuOTc0IDMuNTM1LS45MDQgNy4wOTctMS43MjYgMTAuNjkzLTIuMzE5LTEuNzIuNjIxLTMuNDIzIDEuMjQxLTUuMTIyIDEuODk3LTEuNjkuNjI3LTMuMzggMS4yOS01LjA2NiAxLjk2N3ptOTYuMTcgMTU0LjM5OWwyLjEyNSAyLjUzMmMuMDQ4LjA2IDQuNzcgNS42OCAxMC41NDIgMTEuNDAyIDMuODM4IDMuODA0IDguNDc2IDUuNzMgMTMuNzkgNS43MyAxLjgxNSAwIDMuNzIyLS4yMzQgNS42NDctLjY5OCAxLjc4Ny0uNDM0IDMuNzI4LS44OTcgNS43MTYtMS4zNzMgNy4xNzktMS43MTYgMTUuMzEtMy42NjUgMTkuMjUtNC43Ny43OC0uMjIgMS42NTEtLjQyIDIuNTY3LS42MjkgNS4yNDctMS4yMTIgMTIuNDM5LTIuODg0IDE2LjI1LTEwLjUxOCAyLjg2NS01LjczIDYuNzI5LTEzLjE2NiA5LjU5Ni0xOC42MTUtMi40ODQgMS4xNDUtNS4wODggMi4zODctNi45MzggMy4zNi0yLjg1IDEuNDk3LTYuNTg0IDIuMjIzLTExLjQxIDIuMjIzLTIuODcgMC01LjY4OC0uMjQyLTguODA3LS41MTktNi4yMzMtLjU3My0xNi43ODEtMS44MTUtMTYuODktMS44M2wtLjgwNy0uMDg5LS42MzgtLjUxYy0uMDk0LS4wNy05LjMzNy03LjQzNC0xNi44MDgtMTMuMzA4LS4zMDItLjI0OC0uNTc4LS40NzgtLjgyOC0uNjg0LS43ODYtLjY3MS0uNzg2LS42NzEtMS4yNTYtLjY3MS0yLjM5NiAwLTkuMzYgMi4xNi0yNC42MTYgNi44OWwtLjkzNy4yOTctLjkxOS0uMzQ3Yy0uMTA0LS4wMzUtMTAuMTEzLTMuNzQ3LTIyLjEwNy0zLjc0Ny0uOTgyIDAtMS45Ni4wMjYtMi45MTQuMDc1LTEuMjAxLjA2MS03Ljk0NCAzLjI2NC0xNi41NjcgMTYuOTA2bC0uNTU4Ljg3Ni0uOTg4LjMxOGExMDYwIDEwNjAgMCAwIDEtMzAuNzIzIDkuMzRsLTEuMDIxLjI5LS45NjctLjQ0OWMtLjEwMy0uMDQxLTYuMjYxLTIuODk5LTEyLjEyMS01LjU5MiAzLjE5NiA0LjcyMiA3LjI4MyAxMC42MTEgMTAuODc4IDE1LjIzIDYuMjgyIDguMDg5IDE0LjE5OSAxNS41NjUgMjkuMzc5IDE1LjU2NSAxLjkwNCAwIDMuOTI3LS4xMTcgNi4wMDQtLjM1MyAxNS40NDEtMS43NDUgMTkuNDE3LTIuNDUgMjEuNTU3LTIuODIzLjcyNC0uMTIyIDEuMjk4LS4yMjggMi4wMy0uMzE3LjExNy0uMDE1IDEyLjc2MS0xLjY1IDE2LjMwOS05LjYwOSAzLjY1OS04LjE3OCA0LjM5Ny0xMC4xMjYgNC40MjUtMTAuMmwxLjI5MS0zLjQ0NXMuMTYtLjg5Mi40MjMtMS4xN2wuMDA2LjAwOC4wMjYuMDIxYy40MDYuMjkyIDEuMDA5IDEuMjAzIDEuMDA5IDEuMjAzIi8+PC9zdmc+', - ) - // use travis simple icon with color - given({ name: 'travis', color: 'green' }).expect( - 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjOTdjYTAwIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+VHJhdmlzIENJPC90aXRsZT48cGF0aCBkPSJNOS4zMiAxMy4wMjVhLjQ4NS40ODUgMCAxIDEtLjk3IDBjMC0uNDQ2LS4xNjctLjc1OC0uNDA2LS43NTgtLjIzOSAwLS40MDUuMzEyLS40MDUuNzU4YS40ODUuNDg1IDAgMSAxLS45NyAwYzAtMS4xODcuNzEzLTEuNzI4IDEuMzc1LTEuNzI4czEuMzc2LjU0MSAxLjM3NiAxLjcyOHptNi4wMTcuNDg1YS40ODUuNDg1IDAgMCAwIC40ODUtLjQ4NWMwLS40NDYuMTY3LS43NTguNDA1LS43NThzLjQwNS4zMTIuNDA1Ljc1OGEuNDg1LjQ4NSAwIDEgMCAuOTcgMGMwLTEuMTg3LS43MTMtMS43MjgtMS4zNzUtMS43MjhzLTEuMzc1LjU0MS0xLjM3NSAxLjcyOGMwIC4yNjguMjE3LjQ4NS40ODUuNDg1em03Ljk2Ny00LjQ1NGwtLjE5MSAyLjQ1OWEuODAxLjgwMSAwIDAgMS0uMzY3LjYyMy44NTIuODUyIDAgMCAxLS40Ni4xMyAxLjA3IDEuMDcgMCAwIDEtLjM2Ni0uMDY4Yy0uMjcxLS4xMDEtLjU0NC0uMTkyLS44MTctLjI4NWE4Ljk3OCA4Ljk3OCAwIDAgMS0uMDk0IDEuNjE0Yy0uMDQuMjQyLS4wOTIuNDcxLS4xMzguNzA3YS40ODUuNDg1IDAgMCAxLS4wMjQuMTI1IDE5LjQ3MSAxOS40NzEgMCAwIDEtMS4wMzMgMy41MTNsLjAzMy0uMDIuODk3LS41MzdjLjE5My0uMTM3LjU5OS0uMTIyLjgxNS4xYS42NDUuNjQ1IDAgMCAxIC4xNzMuNTc3Ljc0My43NDMgMCAwIDEtLjA1My4xNTljLS4wNjEuMTM1LS4zMTkuNzA2LS44NjYgMS45MDYtLjY3NSAxLjQ4My0yLjA2IDEuNzctMi4xMjEgMS43ODIuMDAxLjAwMS0uOTA3LjIxNC0xLjg3OS40NEMxNS40NTggMjMuNDE5IDEzLjg3IDI0IDEyLjA4NyAyNGMtMS44NCAwLTMuNDQ4LS41OC00Ljc4Ny0xLjcxM2wtMS45MjQtLjQ1Yy0uMDQxLS4wMDgtMS40MjctLjI5NC0yLjEwMy0xLjc3OGwtLjg3LTEuOTE0Yy0uMDA1LS4wMTktLjA1LS4xNTgtLjA1My0uMTc3LS4wMDktLjYyNS42MjEtLjkxNCAxLjAyMy0uNjMybC44NTguNTEyYy4wMDYuMDAzLjA3NC4wNDMuMTcxLjA4NWEyMC40NDMgMjAuNDQzIDAgMCAxLS45ODItMy40NDRjLS4wNjMtLjMxNy0uMTI5LS42My0uMTgzLS45NmE4LjkzNyA4LjkzNyAwIDAgMS0uMDktMS43Yy0uMzU3LjExOC0uNzEzLjI0LTEuMDY2LjM3Mi0uMjkyLjEwOS0uNTkzLjA4Ny0uODI3LS4wNjJhLjgwMi44MDIgMCAwIDEtLjM2Ni0uNjIxTC42OTUgOS4wNTVjLS4wMzYtLjQ3NS4zMDUtLjk2OS43OTQtMS4xNTJsLjMtLjExN2MuMjI1LS4wODkuNTA1LS4xOTguODM3LS4zMThDMy42NSAzLjEyNCA3LjU2NiAwIDEyLjA0MSAwYzQuNTE2IDAgOC40MzggMy4xNTggOS40MzQgNy41NDkuNDcyLjE1My44NDMuMjgxIDEuMDM2LjM1NS40OTIuMTgzLjgzMy42NzcuNzkzIDEuMTUyem0tNC42MTIgOC45NzNjLjM2OS0uODE1LjY3OC0xLjcwOC45My0yLjY3bC0uOTk3LjcxM2EuOTUyLjk1MiAwIDAgMS0uNjU1LjE2NmwtNC40NjctLjQ3YS45Ni45NiAwIDAgMS0uODIxLS42OThsLS41NTgtMS45MjNhMi40ODIgMi40ODIgMCAwIDAtLjI0NCAwbC0uNTYgMS45M2EuOTU1Ljk1NSAwIDAgMS0uODIuNjkxbC00LjQ3MS40NzFhLjk1MS45NTEgMCAwIDEtLjY0Mi0uMTYybC0uNzIzLS41MDNjLjIzMS44ODkuNTA2IDEuNzA4LjgyNCAyLjQ1MS42MDktLjAyOCAxLjIwNy0uMDY5IDEuMjA5LS4wNjkuMDAxIDAgLjQzNC0uMDM5Ljc4OC0uMzMybDEuMDYxLS44ODVjLjE0OC0uMTY1LjY1Mi0uNDY1IDEuMzMtLjI3MS4xOTYuMDU1LjQ5NS4xNDYuODE1LjI0My4wNjIuMDE5LjEyLjA1LjE3LjA5Mi41MzIuNDQ1IDEuODMyLjQ0NSAyLjM2NS4wMDJhLjQ4MS40ODEgMCAwIDEgLjE2OC0uMDkxYy4zMzctLjEwMy42MzEtLjE5Mi44MjMtLjI0Ny42OC0uMTkzIDEuMTgyLjEwOCAxLjM3NC4zMTRsMS4wMTYuODQzYy4zNTMuMjk0Ljc4NS4zMzIuNzg5LjMzMi0uMDAxLjAwMS42NTguMDQ1IDEuMjk2LjA3M3ptLTYuNjA1IDUuMDAxYTYuNDIgNi40MiAwIDAgMCAxLjk0OS0uMzEzYy0uOTMyLS4yMDktMS41NTUtMS4wMTktMS41ODgtMS4wNjJsLS40MDYtLjU0Mi0uNDA3LjU0M2MtLjAzMS4wNDMtLjY0MS44NDItMS41NTggMS4wNi42My4xOTYgMS4yOTUuMzE0IDIuMDEuMzE0em02Ljk0MS00LjAxNmE2My42MjIgNjMuNjIyIDAgMCAxLTEuNzAxLS4wODkgMi41MTkgMi41MTkgMCAwIDEtMS4zMzktLjU1NGwtMS4wNjUtLjg4OGMtLjA1NS0uMDUxLS4xODctLjE1Mi0uNDQyLS4wODMtLjE3Ni4wNS0uNDM2LjEzLS43MTcuMjE2LS44NzguNjU1LTIuNTY3LjY1NS0zLjQ0My0uMDAzYTQzLjY5MyA0My42OTMgMCAwIDAtLjcwOS0uMjEyYy0uMjU4LS4wNzYtLjM4Ni4wMy0uNDExLjA1MmwtMS4wOTcuOTE4YTIuNTIzIDIuNTIzIDAgMCAxLTEuMzQxLjU1M3MtLjg3Mi4wNTktMS41OTQuMDg1aC0uMDAybC0uMTA2LjAwNGEyLjQxIDIuNDEgMCAwIDEtMS4zNDEtLjM0M2wtLjAxOC0uMDEuNDUzLjk5NmMuNDYzIDEuMDE3IDEuMzg5IDEuMjI1IDEuNDI3IDEuMjMyLjAxNC4wMDQgMi43NTQuNjQ2IDMuODIyLjg4OS43ODEuMTc0IDEuNDQ3LS42OTYgMS40NTQtLjcwNWwuNzk1LTEuMDYxYy4xODMtLjI0NS41OTQtLjI0NS43NzYgMGwuNzk2IDEuMDYxYy4wMDcuMDA5LjY4Mi44ODEgMS40NTUuNzA1IDEuMDY3LS4yNDMgMy44MDctLjg4NiAzLjgwNy0uODg2YTIuMTkzIDIuMTkzIDAgMCAwIDEuNDQyLTEuMjM2bC40NTItLjk5My0uMDI2LjAxNWEyLjI3IDIuMjcgMCAwIDEtMS4zMjcuMzM3em0xLjA5Ni03LjQxMmEyOC4yODYgMjguMjg2IDAgMCAwLTE1Ljk5OC0uMDc1IDguMDI1IDguMDI1IDAgMCAwIC4wNjcgMS44NDVjLjA0NS4yNzUuMS41MzUuMTUyLjhsMS41OTEgMS4xMDggNC40NjEtLjQ3Ni42NDItMi4yNDNhLjQ4OC40ODggMCAwIDEgLjM5NS0uMzQ1IDMuODU1IDMuODU1IDAgMCAxIDEuMTM1LjAwMy40ODIuNDgyIDAgMCAxIC4zOTQuMzQ0bC42NTIgMi4yNDUgNC40NjIuNDY4IDEuODY0LTEuMzM2Yy4wMzYtLjE5LjA3OS0uMzc0LjExMS0uNTY4YTcuODkgNy44OSAwIDAgMCAuMDcyLTEuNzd6bTIuMjE0LTIuNjIzYy0uMDA1LS4wMzQtLjA3My0uMTMzLS4xNjUtLjE2N2wtLjAwNC0uMDAxYy0uMjItLjA4My0uNjgtLjI0Mi0xLjI1Ni0uNDIzbC0uMDA3LS4wMDVjLS45NTUtLjI5OS0yLjc3MS0uODIzLTQuMjY3LS45OWEuNDg1LjQ4NSAwIDAgMSAuMTA4LS45NjRjMS4xOTIuMTM0IDIuNTI5LjQ2NiAzLjYzNy43ODdDMTkuMjk4IDMuNTUyIDE1LjkxMy45NyAxMi4wNDEuOTdjLTMuODMyIDAtNy4yMDcgMi41NDktOC4zMTggNi4xNjVhMjAuMjUyIDIwLjI1MiAwIDAgMSAzLjI3LS43MDUuNDg0LjQ4NCAwIDEgMSAuMTIxLjk2MiAxOS4yMzUgMTkuMjM1IDAgMCAwLTMuOTA5Ljg5OWwtLjAwNS4wMDRjLS40MzIuMTQ5LS43ODUuMjg4LTEuMDU2LjM5NGwtLjMxNS4xMjNjLS4wOTQuMDM1LS4xNjIuMTM1LS4xNjcuMTc1bC4xNzcgMi4yNjRhMjkuMzYgMjkuMzYgMCAwIDEgMTAuMTY0LTEuODE3YzMuNDQyIDAgNi44ODEuNjA3IDEwLjE1NyAxLjgybC4xNzgtMi4yNzV6bS04LjUzNC01Ljk4NmgtMy41MzlhLjQ4NS40ODUgMCAwIDAtLjQ4NS40ODV2LjgxMWEuNDg1LjQ4NSAwIDEgMCAuOTcgMHYtLjMyNmguNzQ2djMuMzA4aC0uNTIxYS40ODUuNDg1IDAgMSAwIDAgLjk3aDIuMDYxYS40ODUuNDg1IDAgMSAwIDAtLjk3aC0uNTdWMy45NjNoLjg1M3YuMzI2YS40ODUuNDg1IDAgMSAwIC45NyAwdi0uODExYS40ODUuNDg1IDAgMCAwLS40ODUtLjQ4NXoiLz48L3N2Zz4=', - ) - it('preserves color if light logo on dark background', function () { const logo = prepareNamedLogo({ name: 'javascript' }) const decodedLogo = Buffer.from( @@ -145,7 +118,7 @@ describe('Logo helpers', function () { undefined, ) given('npm', {}).expect( - 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MCA0MCI+PHBhdGggZD0iTTAgMGg0MHY0MEgwVjB6IiBmaWxsPSIjY2IwMDAwIi8+PHBhdGggZmlsbD0iI2ZmZiIgZD0iTTcgN2gyNnYyNmgtN1YxNGgtNnYxOUg3eiIvPjwvc3ZnPg==', + 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJ3aGl0ZXNtb2tlIiByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU+bnBtPC90aXRsZT48cGF0aCBkPSJNMS43NjMgMEMuNzg2IDAgMCAuNzg2IDAgMS43NjN2MjAuNDc0QzAgMjMuMjE0Ljc4NiAyNCAxLjc2MyAyNGgyMC40NzRjLjk3NyAwIDEuNzYzLS43ODYgMS43NjMtMS43NjNWMS43NjNDMjQgLjc4NiAyMy4yMTQgMCAyMi4yMzcgMHpNNS4xMyA1LjMyM2wxMy44MzcuMDE5LS4wMDkgMTMuODM2aC0zLjQ2NGwuMDEtMTAuMzgyaC0zLjQ1NkwxMi4wNCAxOS4xN0g1LjExM3oiLz48L3N2Zz4=', ) }) }) diff --git a/logo/bitcoin.svg b/logo/bitcoin.svg deleted file mode 100644 index dcd28493f3493..0000000000000 --- a/logo/bitcoin.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/logo/dependabot.svg b/logo/dependabot.svg deleted file mode 100644 index 0244208c7a3d5..0000000000000 --- a/logo/dependabot.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/logo/gitlab.svg b/logo/gitlab.svg deleted file mode 100644 index 1d123609f6c1a..0000000000000 --- a/logo/gitlab.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/logo/npm.svg b/logo/npm.svg deleted file mode 100644 index d8270435936c2..0000000000000 --- a/logo/npm.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/logo/paypal.svg b/logo/paypal.svg deleted file mode 100644 index 1e1e4df7f819e..0000000000000 --- a/logo/paypal.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/logo/serverfault.svg b/logo/serverfault.svg deleted file mode 100644 index 3519238dfc885..0000000000000 --- a/logo/serverfault.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/logo/stackexchange.svg b/logo/stackexchange.svg deleted file mode 100644 index a5f409d70650e..0000000000000 --- a/logo/stackexchange.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/logo/superuser.svg b/logo/superuser.svg deleted file mode 100644 index 443f7682d6a31..0000000000000 --- a/logo/superuser.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/logo/telegram.svg b/logo/telegram.svg deleted file mode 100644 index 7765a143fa0ac..0000000000000 --- a/logo/telegram.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/logo/travis.svg b/logo/travis.svg deleted file mode 100644 index bd858287c4768..0000000000000 --- a/logo/travis.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/services/endpoint/endpoint.service.js b/services/endpoint/endpoint.service.js index 1a4b68e7ac793..bffd6fa8fe3f4 100644 --- a/services/endpoint/endpoint.service.js +++ b/services/endpoint/endpoint.service.js @@ -77,8 +77,8 @@ The endpoint badge takes a single required query param: url, which namedLogo - Default: none. One of the named logos supported by Shields - or simple-icons. Can be + Default: none. One of the + simple-icons slugs. Can be overridden by the query string. @@ -90,9 +90,7 @@ The endpoint badge takes a single required query param: url, which logoColor Default: none. Same meaning as the query string. Can be overridden by - the query string. Only works for named logos and Shields logos. If you - override the color of a multicolor Shield logo, the corresponding - named logo will be used and colored. + the query string. Only works for simple-icons logos. diff --git a/services/endpoint/endpoint.tester.js b/services/endpoint/endpoint.tester.js index 858ca792d97ab..c6f5186bdec4d 100644 --- a/services/endpoint/endpoint.tester.js +++ b/services/endpoint/endpoint.tester.js @@ -1,6 +1,6 @@ import zlib from 'zlib' import { expect } from 'chai' -import { getShieldsIcon, getSimpleIcon } from '../../lib/logos.js' +import { getSimpleIcon } from '../../lib/logos.js' import { createServiceTester } from '../tester.js' export const t = await createServiceTester() @@ -63,7 +63,7 @@ t.create('named logo') ) .after((err, res, body) => { expect(err).not.to.be.ok - expect(body).to.include(getShieldsIcon({ name: 'npm' })) + expect(body).to.include(getSimpleIcon({ name: 'npm' })) }) t.create('named logo with color') @@ -83,7 +83,7 @@ t.create('named logo with color') }) const logoSvg = Buffer.from( - getShieldsIcon({ name: 'npm' }).replace('data:image/svg+xml;base64,', ''), + getSimpleIcon({ name: 'npm' }).replace('data:image/svg+xml;base64,', ''), 'base64', ).toString('ascii') @@ -99,7 +99,7 @@ t.create('custom svg logo') ) .after((err, res, body) => { expect(err).not.to.be.ok - expect(body).to.include(getShieldsIcon({ name: 'npm' })) + expect(body).to.include(getSimpleIcon({ name: 'npm' })) }) t.create('logoWidth')