Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

aternos.org: detection #13144

Open
6 tasks done
sportshead opened this issue May 9, 2022 · 44 comments
Open
6 tasks done

aternos.org: detection #13144

sportshead opened this issue May 9, 2022 · 44 comments

Comments

@sportshead
Copy link

Prerequisites

I tried to reproduce the issue when...

  • uBO is the only extension
  • uBO with default lists/settings
  • using a new, unmodified browser profile

URL(s) where the issue occurs

https://aternos.org/server

Describe the issue

See #12987 #12895 #12314 #12299 and others. aternos.org is still detecting adblockers and showing a "you are using an adblocker screen". The screen only shows after around 500ms (estimate) from page load and the normal page content can be seen before it shows.

Screenshot(s)

No response

Notes

Digging through it seems that the script tag with a base64 url is the culprit. I've tried blocking it with acs scriptlet but I don't really know how it works. The script tag is the last script tag when I view source.

I also found that it uses MutationObserver in order to check for detection bypass. I think somehow breaking MutationObserver functionality with prototype pollution may work, however, I do not know how to accomplish that with uBO. Alternatively, the Continue with adblocker anyway button could perhaps be pressed and time somehow sped up? It checks Date.now() with setInterval every 200 ms, which could be a way to break it.

Configuration

uBlock Origin: 1.42.4
Firefox: 101
filterset (summary): 
  network: 96443
  cosmetic: 106230
  scriptlet: 21002
  html: 653
listset (total-discarded, last updated): 
  added: 
    https://raw.githubusercontent.com/Spam404/lists/master/adblock-list.txt: 7253-4, 1d.19h.47m
    fanboy-annoyance: 70820-290, 2d.22h.18m
    ublock-annoyances: 4394-4, 3d.22h.44m
  default: 
    user-filters: 21-0, never
    ublock-filters: 31558-30, 3d.22h.46m
    ublock-badware: 4148-3, 3d.22h.45m
    ublock-privacy: 218-0, 11d.24m
    ublock-abuse: 75-0, 11d.25m
    ublock-unbreak: 1789-0, 3d.22h.49m
    easylist: 66414-599, 3d.22h.48m
    easyprivacy: 26943-578, 3d.22h.47m
    urlhaus-1: 8474-0, 19h.27m
    plowe-0: 3679-4, 3d.22h.50m
    ublock-quick-fixes: 213-0, 19h.28m
filterset (user): [array of 21 redacted]
trustedset: 
  added: [array of 206 redacted]
hostRuleset: 
  added: [array of 499 redacted]
modifiedUserSettings: 
  advancedUserEnabled: true
modifiedHiddenSettings: [none]
supportStats: 
  allReadyAfter: 1100 ms (selfie)
  maxAssetCacheWait: 627 ms
stephenhawk8054 added a commit that referenced this issue May 9, 2022
@stephenhawk8054
Copy link
Member

Currently it's not possible to terminate the detection. Also if you mean pressing the button automatically, you might need to do with a userscript as uBO has not implemented adding vanilla script yet.

@JobcenterTycoon JobcenterTycoon added the ongoing ongoing issue label May 9, 2022
@JobcenterTycoon
Copy link
Contributor

Also if the overlay get blocked the complete body get removed

@mapx- mapx- mentioned this issue May 18, 2022
8 tasks
@JobcenterTycoon JobcenterTycoon changed the title aternos.org still broken aternos.org: detection May 18, 2022
@ghost
Copy link

ghost commented May 19, 2022

Could someone take a look at the cosmetic filtering?

@mapx- mapx- mentioned this issue May 22, 2022
8 tasks
@MasterKia MasterKia mentioned this issue Aug 7, 2022
6 tasks
@avstoyanov
Copy link

the site detects when the element in the top and side bar containing the exaroton ads is modified. Something else also breaks it but I can't tell what since I can't tell what the difference is in the logger

@ghost
Copy link

ghost commented Jan 18, 2023

https://hakorr.github.io/Userscripts/Aternos/AntiAntiAdblock/course/ gives a whole page how aternos detection works. At the buttom of the page he gives a link to https://hakorr.github.io/Userscripts/Aternos/AntiAntiAdblock giving you a userscript for it. It worked for me and I hope that for other people using aternos who are willing to use userscripts it works too

@oddmario
Copy link

Those work but only for Firefox

aternos.org##^script:has-text(_0x3d86bb)
aternos.org##^script:has-text(_0x575ee4)
aternos.org##^span[ykkrac="vDgUnYT"]
aternos.org##[class="header-link-exaroton"]

However they can't work on Chromium-based browsers (at least for now) as stated @ https://github.com/gorhill/uBlock/wiki/Inline-script-tag-filtering

Not supported in Chromium-based browser.

  • Starring the related Chromium issue may help motivate Chromium devs to implement support.
  • Falling back on wholesale blocking of all inline script tags may work.[1]

@mapx-
Copy link
Contributor

mapx- commented Jun 11, 2023

in the last uBO for chrome you can test

aternos.org##+js(rmnt, script, _0x3d86bb)

@oddmario
Copy link

oddmario commented Jun 11, 2023

There we go then :)

aternos.org##^script:has-text(_0x3d86bb)
aternos.org##^script:has-text(_0x575ee4)
aternos.org##+js(rmnt, script, _0x3d86bb)
aternos.org##+js(rmnt, script, _0x575ee4)
aternos.org##^span[ykkrac="vDgUnYT"]
aternos.org##[class="header-link-exaroton"]

just tested it and it's blocking the ads on their site perfectly

I can make a PR for this, not sure which category it's supposed to go with though

@JobcenterTycoon
Copy link
Contributor

Its unstable and doesn’t work, i just get a blank screen.

@oddmario
Copy link

oddmario commented Jun 11, 2023

To make it a bit more stable, we can probably change how I hardcoded the exact variable names and make it look for the prefix _0x of the obfuscation instead

aternos.org##^script:has-text(_0x)
aternos.org##+js(rmnt, script, _0x)
aternos.org##[class="header-link-exaroton"]

If anything else causes any sort of instability then it might be because rmnt takes action once the DOMContentLoaded is fired? Unsure if there's a way to make it run bit earlier than that.

And as for the blank screen, I am not getting any blank screens here, maybe it's caused as a result of interference with another filter(s)?

@JobcenterTycoon
Copy link
Contributor

The inline scripts need to be executed or the start button and other buttons like the logout button stops working. I tried filter like

aternos.org##body > span[style]:remove()
aternos.org##+js(rpnt, script, body)

But the start button is still broken.

@mapx-
Copy link
Contributor

mapx- commented Jun 18, 2023

@JobcenterTycoon what about

aternos.org##+js(nosiif, , 100)

@JobcenterTycoon
Copy link
Contributor

Same result.

@oddmario
Copy link

oddmario commented Jun 18, 2023

When I came up with the filters in my above comment it worked, looks like they made a change to how their button clicks work (probably made it a part of their anti adblock)

Can we change the value returned by a JavaScript function on a site using uBlock? If that's possible I will proceed with updating my filters to reverse their patch

UPDATE: I got it. Try:

aternos.org##^script:has-text(_0x)
aternos.org##+js(rmnt, script, _0x)
aternos.org##[class="header-link-exaroton"]
aternos.org##[style*="z-index: 10123;"]:style(display: none !important)
aternos.org##+js(set, aia, trueFunc)

@JobcenterTycoon
Copy link
Contributor

Okey, the filter you posted doesn’t work for me because i still get anti adblock but based on it i have working filter now:

aternos.org##^script:has-text(doubleclick)
!#if !cap_html_filtering
aternos.org##+js(rmnt, script, doubleclick)
!#endif
aternos.org##+js(rpnt, script, body)
aternos.org##+js(set, aia, trueFunc)
aternos.org##body > span[style]:remove()

Logout? Working.
Start? Working.

Can you confirm?

@oddmario
Copy link

Okey, the filter you posted doesn’t work for me because i still get anti adblock but based on it i have working filter now:

aternos.org##^script:has-text(doubleclick)
!#if !cap_html_filtering
aternos.org##+js(rmnt, script, doubleclick)
!#endif
aternos.org##+js(rpnt, script, body)
aternos.org##+js(set, aia, trueFunc)
aternos.org##body > span[style]:remove()

Logout? Working. Start? Working.

Can you confirm?

Both my filters and yours work for me. You can also completely remove their Exaroton banner using

aternos.org##[class="header-link-exaroton"]

@JobcenterTycoon
Copy link
Contributor

JobcenterTycoon commented Jun 18, 2023

Sure. The final filter (counters also old exception filter):

filter
aternos.org##^script:has-text(doubleclick)
!#if !cap_html_filtering
aternos.org##+js(rmnt, script, doubleclick)
!#endif
aternos.org##+js(rpnt, script, body)
aternos.org##+js(set, aia, trueFunc)
aternos.org##body > span[style]:remove()
@@||hb.vntsm.com/v2/live/$xhr,domain=aternos.org,badfilter
@@||tlx.3lift.com/header/auction?$xhr,domain=aternos.org,badfilter
@@||fastlane.rubiconproject.com/a/api/fastlane.json?$xhr,domain=aternos.org,badfilter
@@||bidder.criteo.com/cdb?$xhr,domain=aternos.org,badfilter
@@||hbopenbid.pubmatic.com/translator?source=prebid-client$xhr,domain=aternos.org,badfilter
@@||mp.4dex.io/prebid$xhr,domain=aternos.org,badfilter
@@||prg.smartadserver.com/prebid/v1$xhr,domain=aternos.org,badfilter
@@||venatusmedia-d.openx.net/w/1.0/arj$xhr,domain=aternos.org,badfilter
@@||adx.adform.net/adx/openrtb$xhr,domain=aternos.org,badfilter
@@||htlb.casalemedia.com/cygnus?s=$xhr,domain=aternos.org,badfilter
@@||prebid.a-mo.net/a/c$xhr,domain=aternos.org,badfilter
@@||vntsm.com/*/ad-manager.min.js$script,domain=aternos.org,badfilter
@@||hb.vntsm.io/content.html$xhr,domain=aternos.org,badfilter
@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=aternos.org,badfilter
aternos.org#@#.header-link-exaroton-link:style(pointer-events: none !important; max-height: 0.01235px !important; padding: 0px !important;)
aternos.org#@#.sidebar:style(width: 1.74px !important; padding: 0px !important;)
aternos.org#@#.ad-dfp:style(min-height: 0.0037px !important; height: 0.0037px !important;)
aternos.org##.header-link-exaroton
aternos.org##.sidebar
aternos.org##.ad-dfp
aternos.org###placement-takeover

Edit: The filter are obsolete

@YuriFernandes150
Copy link

YuriFernandes150 commented Jul 11, 2023

Sure. The final filter (counters also old exception filter):

filter

aternos.org##^script:has-text(doubleclick)
!#if !cap_html_filtering
aternos.org##+js(rmnt, script, doubleclick)
!#endif
aternos.org##+js(rpnt, script, body)
aternos.org##+js(set, aia, trueFunc)
aternos.org##body > span[style]:remove()
@@||hb.vntsm.com/v2/live/$xhr,domain=aternos.org,badfilter
@@||tlx.3lift.com/header/auction?$xhr,domain=aternos.org,badfilter
@@||fastlane.rubiconproject.com/a/api/fastlane.json?$xhr,domain=aternos.org,badfilter
@@||bidder.criteo.com/cdb?$xhr,domain=aternos.org,badfilter
@@||hbopenbid.pubmatic.com/translator?source=prebid-client$xhr,domain=aternos.org,badfilter
@@||mp.4dex.io/prebid$xhr,domain=aternos.org,badfilter
@@||prg.smartadserver.com/prebid/v1$xhr,domain=aternos.org,badfilter
@@||venatusmedia-d.openx.net/w/1.0/arj$xhr,domain=aternos.org,badfilter
@@||adx.adform.net/adx/openrtb$xhr,domain=aternos.org,badfilter
@@||htlb.casalemedia.com/cygnus?s=$xhr,domain=aternos.org,badfilter
@@||prebid.a-mo.net/a/c$xhr,domain=aternos.org,badfilter
@@||vntsm.com/*/ad-manager.min.js$script,domain=aternos.org,badfilter
@@||hb.vntsm.io/content.html$xhr,domain=aternos.org,badfilter
@@||securepubads.g.doubleclick.net/tag/js/gpt.js$script,domain=aternos.org,badfilter
aternos.org#@#.header-link-exaroton-link:style(pointer-events: none !important; max-height: 0.01235px !important; padding: 0px !important;)
aternos.org#@#.sidebar:style(width: 1.74px !important; padding: 0px !important;)
aternos.org#@#.ad-dfp:style(min-height: 0.0037px !important; height: 0.0037px !important;)
aternos.org##.header-link-exaroton
aternos.org##.sidebar
aternos.org##.ad-dfp
aternos.org###placement-takeover

Hello! I have the same issue with aternos, and the above filter did not work for me...

I just get a blank white screen.

Browser: MS Edge

@RokeJulianLockhart

This comment was marked as off-topic.

@BigCitrusFruit
Copy link

As of a couple days ago, Aternos' anti-adblock annoyances are no longer solved by activating "Block large media elements on this site." Also, there are new "ads" hard-coded to appear, all for the same product. As for the annoyance, its still the same big red screen "please don't use an adblocker" then you have to push a button to continue and wait 3 seconds. It's quite frustrating, but Aternos runs so many ad's its better to deal with that screen than all their ads.

@Oqarshi
Copy link

Oqarshi commented Mar 31, 2024

this tampermonkey script works. The buttons work too. You will still need to use ublock origin to block the ads this just blocks the annoying big red screen that says it detects adblock

Userscript
// Userscript created with https://hakorr.github.io/Userscripts/Aternos/AntiAntiAdblock/
// ==UserScript==
// @name        [Aternos] AntiAntiAdblock
// @namespace   none
// @match       https://aternos.org/*
// @grant       none
// @version     1.0
// @author      HKR
// @description Removes all the adblock reminders.
// @require     https://greasyfork.org/scripts/21927-arrive-js/code/arrivejs.js
// @require     https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.js
// @run-at      document-start
// ==/UserScript==

// @run-at      document-start

(() => {
    'use strict';

    const observerCallback = (mutationsList) => {
        for (let mutationRecord of mutationsList) {
            for (let node of mutationRecord.addedNodes) {
                if (node.tagName !== 'SCRIPT') continue;

                 /* Example keywords: 
                 - 'data:text/javascript;base64
                 - 'base64'
                 - 'jquery' */

                if (node.src.includes('data:text/javascript;base64') 
                    || node.outerHTML.includes('data:text/javascript;base64') 
                    || node.innerHTML.includes('data:text/javascript;base64')) {
                    // Remove the element
                    node.remove();
                }
            };
        };
    };

    const mutObvsr = new MutationObserver(observerCallback);
    mutObvsr.observe(document, { childList: true, subtree: true });
})();

function removeLayer() {
	Array.from(document.querySelectorAll("[style]")).forEach(elem => {
		//Change the top: 0 to some attribute the fullscreen red Anti-Adblock has, then it works
		if(elem.getAttribute("style").includes("top: 0")) {
			//What to do with the element, feel free to modify
			elem.innerHTML = ""; 
			elem.style += "display: none"; 
		}
	});
}

window.onload = function() { removeLayer() } 

// @require     https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.js

$(document).ready(function () {
    //Added from the "Continue with adblocker anyway" button's function
    $(".body, .header").each(function () {
        this.style.setProperty("display", "");
        this.style.setProperty("height", "");
    });
    //Added from the "Continue with adblocker anyway" button's function
    $("#start").each(function () {
        this._ready = true;
    });
    $("#userdropdown-toggle").click(function (e) {
        if ($(window).width() <= 1e3) {
        e.preventDefault();
        $(".userdropdown").slideToggle(100);
        }
    });
    $(".logout").click(function () {
        aget("/panel/ajax/account/logout.php", function () {
        location.href = "/go/";
        });
    });
    $(".navigation-toggle").click(function () {
        var cookieValue = 0;
        if ($(".navigation").hasClass("toggled")) {
        $(".navigation").removeClass("toggled");
        } else {
        $(".navigation").addClass("toggled");
        cookieValue = 1;
        }
        document.cookie = COOKIE_PREFIX + "_NAVIGATION_TOGGLED=" + cookieValue + ";path=/;max-age=31536000";
    });
    $(".friend-access-count-dropdown").click(function () {
        var dropdown = $(".friend-access-dropdown");
        if (dropdown.css("display") === "none") {
        dropdown.slideDown(100);
        $(".friend-access-count-dropdown i").fa("fas", "fa-caret-up");
        } else {
        dropdown.slideUp(100);
        $(".friend-access-count-dropdown i").fa("fas", "fa-caret-down");
        }
    });
    $(".js-friends-access").click(friendAccess);
    $(".js-friends-leave").click(friendLeave);
    $(".hamburger").click(function () {
        if ($(".navigation").css("left") == "-200px") {
        $(".navigation").animate({left: "0px"});
        } else {
        $(".navigation").animate({left: "-200px"});
        }
    });
});

@B1ack3ye
Copy link

this tampermonkey script works. The buttons work too

Userscript

Everything is working fine on my end. Great job!

@Texabot1
Copy link

I copied the script into tampermonkey and have ublock origin but when I use aternos, it doesn't do anything when I press the start server button. Did I mess up somewhere? or did aternos just cuck the tampermonkey script 2 weeks into it being made?

@Oqarshi
Copy link

Oqarshi commented Apr 17, 2024

I copied the script into tampermonkey and have ublock origin but when I use aternos, it doesn't do anything when I press the start server button. Did I mess up somewhere? or did aternos just cuck the tampermonkey script 2 weeks into it being made?

Looks like aternos changed the way their start button functions I can't check rn I'm busy sorry 😕
i might have to obfuscate the code to prevent patches.

@Oqarshi
Copy link

Oqarshi commented Apr 18, 2024

I copied the script into tampermonkey and have ublock origin but when I use aternos, it doesn't do anything when I press the start server button. Did I mess up somewhere? or did aternos just cuck the tampermonkey script 2 weeks into it being made?

Hey i recently found out that DvilMuck is actively developing a userscript to bypass Aternos' antiadblock detection.

The code is obfuscated to prevent patches so please use at your own risk but im like 99% sure its safe

https://gist.github.com/DvilMuck/f2b14f3f65e8f22974d781277158f82a

@GhostIsBeHere
Copy link

GhostIsBeHere commented May 13, 2024

If you disable Cosmetic Filtering, the AntiAdblock won't get triggered. If you then combine it with this userstyle I made then it will look identical to a full adblock :]

@055110
Copy link

055110 commented Jul 26, 2024

Hey, can someone add "can't fix" label to this?

@JobcenterTycoon
Copy link
Contributor

I get no anti adblock

@JobcenterTycoon JobcenterTycoon removed the ongoing ongoing issue label Jul 26, 2024
@055110
Copy link

055110 commented Jul 27, 2024

I get no anti adblock

Unfortunately, on default settings this isn't true:
librewolf_laFsQVqCFi

@stephenhawk8054
Copy link
Member

@055110 If you are using Librewolf, it sets uBO's default settings different to uBO's itself, and Librewolf also enables "Enhanced Tracking Protection" in Strict mode by default. Test again in a new Firefox' profile with uBO's default settings. Remember to update the filter lists before testing.

@055110
Copy link

055110 commented Jul 28, 2024

@stephenhawk8054

I didn't want to bother installing Firefox again, so I just loaded a virtual browser using https://browser.lol. I installed the uBO, logged into my account and it worked! The only issue was that the server tutorial leftover was still there, but other than that it works. I don't know how to fix it on Librewolf.

The image won't embed for some reason. :/

@055110
Copy link

055110 commented Sep 11, 2024

Now that I think about it, there needs to be a "fixable with userscript" label.

@JobcenterTycoon
Copy link
Contributor

Works fine for me but when i close such issues the devs freaking out again.

@055110
Copy link

055110 commented Sep 11, 2024

Works fine for me but when i close such issues the devs freaking out again.

Still blocks. I tried resetting to defaults

@055110
Copy link

055110 commented Sep 13, 2024

I believe this issue should be closed and labeled as cant fix or UserScript, because it's apparently not possible to block the antiadblock script without breaking the rest of the site.

@FoxyLoon
Copy link

FoxyLoon commented Sep 30, 2024

@stephenhawk8054
I discovered that aternos only detects ublock origin when specific elements of the page are blocked

If this has been reported before, I apologize as I don't follow these posts.

In this case, by blocking the element below (in the right area of the image), aternos detects the adblock. But if this element is not blocked, the "message in red" does not appear.

Screenshot

@HelloIamarandomperson
Copy link

So is the solution just not blocking the sidebar? That sounds too easy.

@FoxyLoon
Copy link

FoxyLoon commented Oct 19, 2024

Yes, that was the case a few days ago. If that element wasn't blocked, their anti-adblock wouldn't detect it. Unfortunately now it doesn't work anymore, they must have fixed that.

However, this proves a few things to me:

  • First, it's possible that Aternos uses some “bait element” that is easily blocked/detected by ublock, and the fact that this “bait element” is blocked causes their anti-adblock to act. This explains why they can easily detect an adblock (or an anti-anti-adblock) and ALWAYS create some way to patch the problem, since they can only change that “bait element” to another one.

  • Secondly, beware that Aternos keeps an eye on these places (although that's a bit obvious, if you think about it). This method worked perfectly for months and now, all of a sudden, it doesn't work anymore. It's also too much of a coincidence that this method no longer works just after it was reported. On the one hand I was curious if this was the case and I now have the proof. So I don't recommend posting/reporting Aternos-related content here from now on - it should be in a closed environment with only select trustworthy people... I don't know what would be the best way to handle this situation for this case.

  • Third, and finally, maybe it would be a good idea to try to create new ways to get around different types of adblocker detectors (I won't give any examples because I don't want to give ideas to people I shouldn't) (or probably this is already happening and I'm not aware of it, sorry). I know that what I'm saying is difficult to do and the idea of trying to create something new is something that needs a lot of time, a lot of testing and a lot of tweaking, but with all due respect, the work done to this day by the devs is something that is priceless - without these people the internet would be impossible to use. So, in the future, I believe there may still be some way to improve the possibility of blocking unwanted content more effectively, or to put it another way, I believe that we can constantly improve the effectiveness of blocking unwanted content in the future

I wish I could contribute more or in some way, but unfortunately I can't afford it these days, either in monetary terms or in code contributions. I just hope we can win “this war”, because if not, it will be impossible to use the Internet in the future, and I'm not just talking about Aternos...

@HelloIamarandomperson
Copy link

That's fair, but if it makes you feel better, the Devilmuck userscript solution does work still, seems to update it enough for any changes Alternos makes. For the bait element, yeah that's pretty much how most of these work, the only relief part I get is that most of these bait things don't actually show any ads, so a really dumb solution would just be stripping the adblocker down which is kinda funny.

Not worth my time though since the user scripts works. For a time I was able to get away with using a anti paywall extension to do it too, they seemed to have fixed that one not too long ago.

Its also funny because Alternos spamming so many ads that it physically lags my computer is the only reason I'm doing this in the first place, if they just had like a calm down mode I wouldn't go through this length to bypass it and I would stand a few ads.

Still think this issue should be closed and listed as "userscript" or something like that, its not like Ublock orgin is gonna add the future to change websites code enough to make a bypass anymore, and alternos can use really any blocked ad site as bait.

@FoxyLoon
Copy link

FoxyLoon commented Oct 19, 2024

Yes, that's my problem with advertising too. There's so much advertising spam on the site that you can't use it without waiting a long time for the browser to respond.

There are also too many advertising-related elements spread across the different pages that the only space that matters for connecting to the server or accessing the different areas is absurdly small and disproportionate. Using adblock is like being able to breathe fresh air again after months of being “confined to the same space”

I liked it when things were simpler and not a mishmash of information that 90% of me doesn't use, doesn't matter, only slows down the loading speed and is literally visual pollution. The more crap like this is added to the site, the more the end user is likely to use adblockers or even stop using the site.

@mapx- mapx- mentioned this issue Oct 27, 2024
11 tasks
@MasterKia MasterKia mentioned this issue Dec 6, 2024
11 tasks
@MasterKia MasterKia mentioned this issue Dec 21, 2024
11 tasks
@Robinhlb
Copy link

I made a little video here showing how to block Using Devil Mucks Tamper monkey script and clean up the site.
its just a bit simpler instead of reading through the entire Post.

https://youtu.be/FnJZvChyw6w?si=yDGCq9aqS_7m9T3e

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests