forked from mCaptcha/website
246 lines
20 KiB
HTML
246 lines
20 KiB
HTML
<!doctype html>
|
|
<html lang="en-US">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<link rel="preload" as="font" href="/fonts/vendor/jost/jost-v4-latin-regular.woff2" type="font/woff2" crossorigin>
|
|
<link rel="preload" as="font" href="/fonts/vendor/jost/jost-v4-latin-700.woff2" type="font/woff2" crossorigin>
|
|
<link rel="stylesheet" href="/main.4492eacff4110697cd6162326bce4ee59e92315bf9acc357594066968669326dc80b75b1a39e6cea81c4f8898bd1d294fcc657a9cb61baed14c7dee6f9e2b2d6.css" integrity="sha512-RJLqz/QRBpfNYWIya85O5Z6SMVv5rMNXWUBmloZpMm3IC3Wxo55s6oHE+ImL0dKU/MZXqcthuu0Ux97m+eKy1g==" crossorigin="anonymous">
|
|
<noscript><style>img.lazyload { display: none; }</style></noscript>
|
|
<meta name="robots" content="index, follow">
|
|
<meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
|
|
<meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
|
|
<title>December, 2021: Monthly Report - mCaptcha</title>
|
|
<meta name="description" content="New features, improved accessibility and software integrations">
|
|
<link rel="canonical" href="/blog/december-2021-monthly-report/">
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:image" content="/blog/december-2021-monthly-report/icon.png">
|
|
<meta name="twitter:title" content="December, 2021: Monthly Report">
|
|
<meta name="twitter:description" content="New features, improved accessibility and software integrations">
|
|
|
|
<meta name="twitter:site" content="@">
|
|
<meta name="twitter:creator" content="@">
|
|
|
|
<meta property="og:title" content="December, 2021: Monthly Report">
|
|
<meta property="og:description" content="New features, improved accessibility and software integrations">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:url" content="/blog/december-2021-monthly-report/">
|
|
<meta property="og:image" content="/blog/december-2021-monthly-report/icon.png">
|
|
<meta property="article:published_time" content="2021-12-23T00:00:00+00:00">
|
|
<meta property="article:modified_time" content="2023-02-13T18:00:02+05:30">
|
|
<meta property="og:site_name" content="mCaptcha">
|
|
|
|
<meta property="article:publisher" content="https://www.facebook.com/">
|
|
<meta property="article:author" content="https://www.facebook.com/">
|
|
<meta property="og:locale" content="en_US">
|
|
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "http://schema.org",
|
|
"@type": "BreadcrumbList",
|
|
"itemListElement": [{
|
|
"@type": "ListItem",
|
|
"position": 1 ,
|
|
"name": "Home",
|
|
"item": "\/"
|
|
},{
|
|
"@type": "ListItem",
|
|
"position": 2 ,
|
|
"name": "Blogdecember 2021 Monthly Report",
|
|
"item": "\/blogdecember-2021-monthly-report\/"
|
|
}]
|
|
}
|
|
</script>
|
|
|
|
<meta name="theme-color" content="#fff">
|
|
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
|
|
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
|
|
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
|
|
<link rel="manifest" href="/site.webmanifest">
|
|
|
|
</head>
|
|
<body class="blog single">
|
|
|
|
|
|
<div class="header-bar fixed-top"></div>
|
|
<header class="navbar fixed-top navbar-expand-md navbar-light">
|
|
<div class="container">
|
|
<input class="menu-btn order-0" type="checkbox" id="menu-btn">
|
|
<label class="menu-icon d-md-none" for="menu-btn"><span class="navicon"></span></label>
|
|
<a class="navbar-brand order-1 order-md-0 me-auto" href="/">mCaptcha</a>
|
|
<button id="mode" class="btn btn-link order-2 order-md-4" type="button" aria-label="Toggle mode">
|
|
<span class="toggle-dark"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-moon"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg></span>
|
|
<span class="toggle-light"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sun"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg></span>
|
|
</button>
|
|
<ul class="navbar-nav social-nav order-3 order-md-5">
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="https://github.com/mCaptcha"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-github"><path d="M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22"></path></svg><span class="ms-2 visually-hidden">GitHub</span></a>
|
|
</li>
|
|
</ul>
|
|
<div class="collapse navbar-collapse order-4 order-md-1">
|
|
<ul class="navbar-nav main-nav me-auto order-5 order-md-2"><li class="nav-item active">
|
|
<a class="nav-link" href="/blog/">Blog</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/community/">Community</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/contact/">Contact</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/about/">About</a>
|
|
</li>
|
|
<li class="nav-item">
|
|
<a class="nav-link" href="/docs/introduction/installing-captcha/">Docs</a>
|
|
</li>
|
|
</ul>
|
|
<div class="break order-6 d-md-none"></div>
|
|
<form class="navbar-form flex-grow-1 order-7 order-md-3">
|
|
<input id="userinput" class="form-control is-search" type="search" placeholder="Search docs..." aria-label="Search docs..." autocomplete="off">
|
|
<div id="suggestions" class="shadow bg-white rounded"></div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="wrap container" role="document">
|
|
<div class="content">
|
|
|
|
<div class="row flex-xl-nowrap">
|
|
<nav class="docs-toc d-none d-xl-block col-xl-3" aria-label="Secondary navigation">
|
|
<div class="page-links">
|
|
<h3>On this page</h3>
|
|
<nav id="TableOfContents">
|
|
<ul>
|
|
<li><a href="#1-full-librejs-compliance">1. Full LibreJS Compliance</a></li>
|
|
<li><a href="#2-javascript-polyfill">2. JavaScript PolyFill</a></li>
|
|
<li><a href="#3-integration-libraries-for-vanilla-js-react-and-svelte">3. Integration libraries for Vanilla JS, React and Svelte:</a></li>
|
|
</ul>
|
|
</nav>
|
|
</div>
|
|
|
|
</nav>
|
|
<main class="docs-content col-lg-11 col-xl-9 mx-xl-auto">
|
|
|
|
<article>
|
|
<div class="blog-header">
|
|
<h1>December, 2021: Monthly Report</h1>
|
|
<p><small>Posted December 23, 2021 by <a class="stretched-link position-relative" href="/contributors/aravinth-manivannan/">Aravinth Manivannan</a> ‐ <strong>2 min read</strong></small><p>
|
|
<p><small>Last Edited February 13, 2023</small><p>
|
|
|
|
</div>
|
|
<p class="lead">We are mCaptcha. We build kickass CAPTCHA systems that give (DDoS) attackers a run for their money. And we do all of this without tracking your users. Oh and did I mention our UX is great?</p>
|
|
<p>Hello and welcome to the first edition of the monthly report!</p>
|
|
<p>I believe free software like mCaptcha is critical to a healthy internet
|
|
but being a one-person show, there’s hardly any accountability in the
|
|
way software is built. I hope, through monthly reports, I can explain
|
|
the logic and intentions behind decisions taken in the development
|
|
process.</p>
|
|
<p>This month, the following things were accomplished:</p>
|
|
<h2 id="1-full-librejs-compliance">1. Full LibreJS Compliance</h2>
|
|
<p>The CAPTCHA widget and the admin dashboard are 100% LibreJS compliant!</p>
|
|
<figure>
|
|
<img class="img-fluid lazyload blur-up" data-sizes="auto" src="/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_20x0_resize_q75_box.jpg" data-srcset="/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_500x0_resize_q75_box.jpg 500w" width="915" height="908" alt="Screenshot of mCaptcha admin dashboard with GNU LibreJS extension's report in frame.LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the AGPL license.">
|
|
<noscript><img class="img-fluid" sizes="100vw" srcset="/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-dashboard_hu856cef05000f9a4e09e1cd208f2ef170_101197_500x0_resize_q75_box.jpg 500w" src="/blog/december-2021-monthly-report/librejs-dashboard.jpg" width="915" height="908" alt="Screenshot of mCaptcha admin dashboard with GNU LibreJS extension's report in frame.LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the AGPL license."></noscript>
|
|
<figcaption class="figure-caption">LibreJS report of the dashboard webpage</figcaption>
|
|
</figure>
|
|
<figure>
|
|
<img class="img-fluid lazyload blur-up" data-sizes="auto" src="/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_20x0_resize_q75_box.jpg" data-srcset="/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_500x0_resize_q75_box.jpg 500w" width="904" height="913" alt="Screenshot of mCaptcha client-side widget(I'm-not-a-robot widget) with GNU LibreJS extension's report in frame. LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the X11(aka MIT license). It should also detect the Apache licensing but I probably botched it up.">
|
|
<noscript><img class="img-fluid" sizes="100vw" srcset="/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/librejs-widget_hu9a63940a47bb530d2d35b12edf31107a_83817_500x0_resize_q75_box.jpg 500w" src="/blog/december-2021-monthly-report/librejs-widget.jpg" width="904" height="913" alt="Screenshot of mCaptcha client-side widget(I'm-not-a-robot widget) with GNU LibreJS extension's report in frame. LibreJS reports that all scripts in this webpage are accepted(and hence free software) and are licensed under the X11(aka MIT license). It should also detect the Apache licensing but I probably botched it up."></noscript>
|
|
<figcaption class="figure-caption">LibreJS report of the CAPTCHA widget webpage</figcaption>
|
|
</figure>
|
|
<h2 id="2-javascript-polyfill">2. JavaScript PolyFill</h2>
|
|
<p>mCaptcha relied on a WebAssembly(WASM) port of the proof-of-work
|
|
algorithm used in mCaptcha. This meanth browsers without WASM support
|
|
couldn’t process CAPTCHAs. This month, <a href="https://github.com/mCaptcha/pow_sha256-polyfill">a pure JavaScript(TypeScript,
|
|
technically) implementation
|
|
</a> was released to
|
|
overcome this limitation.</p>
|
|
<h2 id="3-integration-libraries-for-vanilla-js-react-and-svelte">3. Integration libraries for Vanilla JS, React and Svelte:</h2>
|
|
<p>To make migration from existing CAPTCHA deployments to mCaptha,
|
|
integration libraries for <a href="https://www.npmjs.com/package/@mcaptcha/vanilla-glue">Vanilla
|
|
JS</a>, <a href="https://www.npmjs.com/package/@mcaptcha/react-glue">React
|
|
Js</a> and
|
|
<a href="https://www.npmjs.com/package/@mcaptcha/svelte-glue">Svelte</a> with
|
|
similar APIs very similar to that of Google’s reCAPTCHA and Cloudflare’s
|
|
hCaptcha.</p>
|
|
<ul>
|
|
<li>Source code: <a href="https://github.com/mCaptcha/glue">mCaptcha/glue</a></li>
|
|
</ul>
|
|
<h1 id="4-beginner-friendly-captcha-configuration-options">4. Beginner friendly CAPTCHA configuration options.</h1>
|
|
<p>The original configuration panel offers a comprehensive but daunting
|
|
task for folks that are justgetting started with mCaptcha.</p>
|
|
<figure>
|
|
<img class="img-fluid lazyload blur-up" data-sizes="auto" src="/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_20x0_resize_q75_box.jpg" data-srcset="/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_500x0_resize_q75_box.jpg 500w" width="819" height="741" alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with advance configuration options">
|
|
<noscript><img class="img-fluid" sizes="100vw" srcset="/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-advanced-config_hu83b247380bbc427ee7cad0c8f4eadaf3_44711_500x0_resize_q75_box.jpg 500w" src="/blog/december-2021-monthly-report/captcha-advanced-config.jpg" width="819" height="741" alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with advance configuration options"></noscript>
|
|
<figcaption class="figure-caption">CAPTCHA creation with advance configuration options</figcaption>
|
|
</figure>
|
|
<p>A new CAPTCHA creation format is rolled out which generates a
|
|
configuration from familiar metrics like average, peak and traffic that
|
|
took the user’s website down.</p>
|
|
<figure>
|
|
<img class="img-fluid lazyload blur-up" data-sizes="auto" src="/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_20x0_resize_q75_box.jpg" data-srcset="/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_500x0_resize_q75_box.jpg 500w" width="776" height="556" alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with easy configuration options">
|
|
<noscript><img class="img-fluid" sizes="100vw" srcset="/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_900x0_resize_q75_box.jpg 900w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_800x0_resize_q75_box.jpg 800w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_700x0_resize_q75_box.jpg 700w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_600x0_resize_q75_box.jpg 600w,/blog/december-2021-monthly-report/captcha-easy-config_hue77a6c4a0bac5cb1e9727416c4edcb91_41711_500x0_resize_q75_box.jpg 500w" src="/blog/december-2021-monthly-report/captcha-easy-config.jpg" width="776" height="556" alt="Screenshot of mCaptcha admin dashboard CAPTCHA creation form with easy configuration options"></noscript>
|
|
<figcaption class="figure-caption">CAPTCHA creation with easy configuration options</figcaption>
|
|
</figure>
|
|
<p>Of course, the advance option is available and can always be swished to
|
|
at any moment!</p>
|
|
|
|
</article>
|
|
<div class="docs-navigation d-flex justify-content-between">
|
|
|
|
<a href="/blog/may-2022-monthly-report/">
|
|
<div class="card my-1">
|
|
<div class="card-body py-2">
|
|
← May, 2022: Monthly Report
|
|
</div>
|
|
</div>
|
|
</a>
|
|
<a class="ms-auto" href="/blog/survey/">
|
|
<div class="card my-1">
|
|
<div class="card-body py-2">
|
|
Survey →
|
|
</div>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
|
|
<p class="edit-page"><a href="https://github.com/mCaptcha/website/blob/master/content/blog/12-21-monthly-report/index.md"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>Edit this page on GitHub</a></p>
|
|
|
|
</main>
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<footer class="footer text-muted">
|
|
<div class="container">
|
|
<div class="row">
|
|
<div class="col-lg-8 order-last order-lg-first">
|
|
<ul class="list-inline">
|
|
<li class="list-inline-item">Powered by <a href="https://gohugo.io/">Hugo</a>, and <a href="https://getdoks.org/">Doks</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="col-lg-8 order-first order-lg-last text-lg-end">
|
|
<ul class="list-inline">
|
|
<li class="list-inline-item"><a href="/about/">About</a></li>
|
|
<li class="list-inline-item"><a href="/donate">Donate</a></li>
|
|
<li class="list-inline-item"><a href="/privacy-policy/">Privacy</a></li>
|
|
<li class="list-inline-item"><a href="/security">Security</a></li>
|
|
<li class="list-inline-item"><a href="https://stats.uptimerobot.com/GK7VLFJnBl">Status</a></li>
|
|
<li class="list-inline-item"><a href="/support/">Support</a></li>
|
|
<li class="list-inline-item"><a href="/thanks">Thanks</a></li>
|
|
<li class="list-inline-item"><a href="/tos">ToS</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
|
|
<script src="/main.min.fc14a6a9dceb7093b6984e33583a45c79e3c960959d75df6b62753b4d1c63a97d25af2b0ca924ed12675f1de34f3fce9ec81668f2d3bee114b9b6357dd2e92cd.js" integrity="sha512-/BSmqdzrcJO2mE4zWDpFx548lglZ1132tidTtNHGOpfSWvKwypJO0SZ18d408/zp7IFmjy077hFLm2NX3S6SzQ==" crossorigin="anonymous" defer></script>
|
|
<script src="/index.min.f24b6e33dac74771476dda67fe905af998983abef17f74f74d71228ac8f40f87af8b15bcd9f0da775c90a41395c3d153fb0067cc75ff642c520b3607340014c0.js" integrity="sha512-8ktuM9rHR3FHbdpn/pBa+ZiYOr7xf3T3TXEiisj0D4evixW82fDad1yQpBOVw9FT+wBnzHX/ZCxSCzYHNAAUwA==" crossorigin="anonymous" defer></script>
|
|
|
|
</body>
|
|
</html>
|