The best articles by Ciro Santilli Updated +Created
These are the best articles ever authored by Ciro Santilli, most of them in the format of Stack Overflow answers.
Ciro posts update about new articles on his Twitter accounts.
A chronological list of all articles is also kept at: Section "Updates".
Some random generally less technical in-tree essays will be present at: Section "Essays by Ciro Santilli".
async (JavaScript) Updated +Created
async is all present in JavaScript for two reasons:
CIA 2010 covert communication websites Updated +Created
This article is about covert agent communication channel websites used by the CIA in many countries from the late 2000s until the early 2010s, when they were uncovered by counter intelligence of the targeted countries circa 2011-2013. This discovery led to the imprisonment and execution of several assets in Iran and China, and subsequent shutdown of the channel.
https://raw.githubusercontent.com/cirosantilli/media/master/CIA_Star_Wars_website_promo.jpg
Video 1.
How I found a Star Wars website made by the CIA by Ciro Santilli
. Source. Slightly edited VOD of the talk Aratu Week 2024 Talk by Ciro Santilli: My Best Random Projects.
The existence of such websites was first reported in November 2018 by Yahoo News: www.yahoo.com/video/cias-communications-suffered-catastrophic-compromise-started-iran-090018710.html.
Previous whispers had been heard in 2017 but without clear mention of websites: www.nytimes.com/2017/05/20/world/asia/china-cia-spies-espionage.html:
Some were convinced that a mole within the C.I.A. had betrayed the United States. Others believed that the Chinese had hacked the covert system the C.I.A. used to communicate with its foreign sources. Years later, that debate remains unresolved.
[...]
From the final weeks of 2010 through the end of 2012, [...] the Chinese killed at least a dozen of the C.I.A.’s sources. [...] One was shot in front of his colleagues in the courtyard of a government building — a message to others who might have been working for the C.I.A.
https://raw.githubusercontent.com/cirosantilli/media/master/Yahoo_CIA_website_article.png
Then in September 2022 a few specific websites were finally reported by Reuters: www.reuters.com/investigates/special-report/usa-spies-iran/, henceforth known only as "the Reuters article" in this article.
Figure 2.
Reuters reconstruction of what the applet would have looked like
. Source.
Figure 3.
Inspecting the Reuters article HTML source code
. Source. The Reuters article only gave one URL explicitly: iraniangoals.com. But most others could be found by inspecting the HTML of the screenshots provided, except for the Carson website.
Ciro Santilli heard about the 2018 article at around 2020 while studying for his China campaign because the websites had been used to take down the Chinese CIA network in China. He even asked on Quora: www.quora.com/What-were-some-examples-of-the-websites-that-the-CIA-used-around-2010-as-a-communication-mechanism-for-its-spies-in-China-and-Iran-but-were-later-found-and-used-to-take-down-their-spy-networks but there were no publicly known domains at the time to serve as a starting point. Chris, Electrical Engineer and former Avionics Tech in the US Navy, even replied suggesting that obviously the CIA is so competent that it would never ever have its sites leaked like that:
Seriously a dumb question.
So when Ciro Santilli heard about the 2022 article almost a year after publication, and being a half-arsed web developer himself, he knew he had to try and find some of the domains himself using the newly available information! It was an irresistible real-life capture the flag. The thing is, everyone who has ever developed a website knows that its attack surface is about the size of Texas, and the potential for fingerprinting is off the charts with so many bits and pieces sticking out. Chris, get fucked.
Figure 4.
"Seriously a dumb question" Quora answer by Chris from the US Navy
. Source.
In particular, it is fun to have such a clear and visible to anyone examples of the USA spying on its own allies in the form of Wayback Machine archives.
Given that it was reported that there were "more than 350" such websites, it would be really cool if we could uncover more of those websites ourselves beyond the 9 domains reported by Reuters!
This article documents the list of extremely likely candidates Ciro has found so far, mostly using:
more details on methods also follow. It is still far from the 885 websites reported by citizenlabs, so there must be key techniques missing. But the fact that there are no Google Search hits for the domains or IPs (except in bulk e.g. in expired domain trackers) indicates that these might not have been previously clearly publicly disclosed.
If anyone can find others, or has better techniques: Section "How to contact Ciro Santilli". The techniques used so far have been very heuristic, and that added to the limited amount of data makes it almost certain that several IP ranges have been missed. There are two types of contributions that would be possible:
Perhaps the current heuristically obtained data can serve as a good starting for a more data-oriented search that will eventually find a valuable fingerprint which brings the entire network out.
Disclaimer: the network fell in 2013, followed by fully public disclosures in 2018 and 2022, so we believe it is now more than safe for the public to know what can still be uncovered about the events that took place. The main author's political bias is strongly pro-democracy and anti-dictatorship.
May this list serve as a tribute to those who spent their days making, using, and uncovering these websites under the shadows.
If you want to go into one of the best OSINT CTFs of your life, stop reading now and see how many Web Archives you can find starting only from the Reuters article as Ciro did. Some guidelines:
  • there was no ultra-clean fingerprint found yet. Some intuitive and somewhat guessy data analysis was needed. But when you clean the data correctly and make good guesses, many hits follow, it feels so good
  • nothing was paid for data. But using cybercafe Wifi's for a few extra IPs may help.
Figure 5.
viewdns.info activegameinfo.com domain to IP
. Source.
Figure 6.
viewdns.info aroundthemiddleeast.com IP to domain
. Source.
Figure 7. . Source. This source provided valuable historical domain to IP data. It was likely extracted with an illegal botnet. Data excerpt from the CSVs:
amazon.com,2012-02-01T21:33:36,72.21.194.1
amazon.com,2012-02-01T21:33:36,72.21.211.176
amazon.com,2013-10-02T19:03:39,72.21.194.212
amazon.com,2013-10-02T19:03:39,72.21.215.232
amazon.com.au,2012-02-10T08:03:38,207.171.166.22
amazon.com.au,2012-02-10T08:03:38,72.21.206.80
google.com,2012-01-28T05:33:40,74.125.159.103
google.com,2012-01-28T05:33:40,74.125.159.104
google.com,2013-10-02T19:02:35,74.125.239.41
google.com,2013-10-02T19:02:35,74.125.239.46
Figure 8.
The four communication mechanisms used by the CIA websites
. Java Applets, Adobe Flash, JavaScript and HTTPS
Figure 9.
Expired domain names by day 2011
. Source. The scraping of expired domain trackers to Github was one of the positive outcomes of this project.
Video 2.
Compromised Comms by Darknet Diaries (2023)
Source.
It was the YouTube suggestion for this video that made Ciro Santilli aware of the Reuters article almost one year after its publication, which kickstarted his research on the topic.
Full podcast transcript: darknetdiaries.com/transcript/75/
Communication mechanism Updated +Created
There are four main types of communication mechanisms found:
  • There is also one known instance where a .zip extension was used! web.archive.org/web/20131101104829*/http://plugged-into-news.net/weatherbug.zip as:
    <applet codebase="/web/20101229222144oe_/http://plugged-into-news.net/" archive="/web/20101229222144oe_/http://plugged-into-news.net/weatherbug.zip"
    JAR is the most common comms, and one of the most distinctive, making it a great fingerprint.
    Several of the JAR files are named something like either:
    • meter.jar
    • bandwidth.jar
    • speed.jar
    as if to pose as Internet speed testing tools? The wonderful subtleties of the late 2000s Internet are a bit over our heads.
    All JARs are directly under root, not in subdirectories, and the basename usually consist of one word, though sometimes two camel cased.
  • JavaScript file. There are two subtypes:
    • JavaScript with SHAs. Rare. Likely older. Way more fingerprintable.
    • JavaScript without SHAs. They have all been obfuscated slightly different and compressed. But the file sizes are all very similar from 8kB to 10kB, and they all look similar, so visually it is very easy to detect a match with good likelyhood.
  • Adobe Flash swf file. In all instances found so far, the name of the SWF matches the name of the second level domain exactly, e.g.:
    http://tee-shot.net/tee-shot.swf
    While this is somewhat of a fingerprint, it is worth noting that is was a relatively commonly used pattern. But it is also the rarest of the mechanisms. This is a at a dissonance with the rest of the web, which circa 2010 already had way more SWF than JAR apparently.
  • CGI comms
These have short single word names with some meaning linked to their website.
Because the communication mechanisms are so crucial, they tend to be less varied, and serve as very good fingerprints. It is not ludicrous, e.g. identical files, but one look at a few and you will know the others.
feedsdemexicoyelmundo.com JavaScript reverse engineering Updated +Created
The JavaScript of each website appears to be quite small and similarly sized. They are all minimized, but have reordered things around a bit.
First we have to know that the Wayback Machine adds some stuff before and after the original code. The actual code there starts at:
ap={fg:['MSXML2.XMLHTTP
and ends in:
ck++;};return fu;};
We can use a JavaScript beautifier such as beautifier.io/ to be abe to better read the code.
It is worth noting that there's a lot of <script> tags inline as well, which seem to matter.
Further analysis would be needed.
Gathering key points from the articles Updated +Created
citizenlab.ca/2022/09/statement-on-the-fatal-flaws-found-in-a-defunct-cia-covert-communications-system/ did an investigation and found 885 such websites, but decided not to disclose the list or methods:
Using only a single website, as well as publicly available material such as historical internet scanning results and the Internet Archive's Wayback Machine, we identified a network of 885 websites and have high confidence that the United States (US) Central Intelligence Agency (CIA) used these sites for covert communication.
The websites included similar Java, JavaScript, Adobe Flash, and CGI artifacts that implemented or apparently loaded covert communications apps. In addition, blocks of sequential IP addresses registered to apparently fictitious US companies were used to host some of the websites. All of these flaws would have facilitated discovery by hostile parties.
The websites, which purported to be news, weather, sports, healthcare, and other legitimate websites, appeared to be localized to at least 29 languages and geared towards at least 36 countries.
The question is which website. E.g. at citizenlab.ca/2021/07/hooking-candiru-another-mercenary-spyware-vendor-comes-into-focus/ they used data from Censys.
Another critical excerpt is:
The bulk of the websites that we discovered were active at various periods between 2004 and 2013. We do not believe that the CIA has recently used this communications infrastructure. Nevertheless, a subset of the websites are linked to individuals who may be former and possibly still active intelligence community employees or assets:
  • Several are currently abroad
  • Another left mainland China in the time frame of the Chinese crackdown
  • Another was subsequently employed by the US State Department
  • Another now works at a foreign intelligence contractor
Given that we cannot rule out ongoing risks to CIA employees or assets, we are not publishing full technical details regarding our process of mapping out the network at this time. As a first step, we intend to conduct a limited disclosure to US Government oversight bodies.
This basically implies that they must have found some communication layer level identifier, e.g. IP registration, domain name registration, or certificate because it is impossible to believe that real agent names would have been present on the website content itself!
The websites were used from at least as early as August 2008, as per Gholamreza Hosseini's account, and the system was only shutdown in 2013 apparently. citizenlab.ca/2022/09/statement-on-the-fatal-flaws-found-in-a-defunct-cia-covert-communications-system/ however claims that they were used since as early as 2004.
Notably, so as to be less suspicious the websites are often in the language of the country for which they were intended, so we can often guess which country they were intended for!
iraniangoals.com JavaScript reverse engineering Updated +Created
Notably, the password is hardcoded and its hash is stored in the JavaScript itself. The result is then submitted back via a POST request to /cgi-bin/goal.cgi.
TODO: how is the SHA calculated? Appears to be manual.
Reverse engineering Updated +Created
In this section we document the outcomes of more detailed inspection of both the communication mechanisms (JavaScript, JAR, swf) and HTML that might help to better fingerprint the websites.
The Reuters websites Updated +Created
The Reuters article directly reported only two domains in writing:
But by looking at the URLs of the screenshots they provided from other websites we can easily uncover all others that had screenshots, except for the Johnny Carson one, which is just generically named. E.g. the image for the Chinese one is www.reuters.com/investigates/special-report/assets/usa-spies-iran/screencap-activegaminginfo.com.jpg?v=192516290922 which leads us to domain activegaminginfo.com.
Also none of those extra ones have any Google hits except for huge domain dumps such has Expired domain trackers, so maybe this counts as little bit of novel public research.
The full list of domains from screenshots is:
This brings up to 8 known domain names with Wayback Machine archives, plus the yet unidentified Johnny Carlson one, see also: Section "Searching for Carson", which is also almost certainly is on Wayback Machine somewhere given that they have a screenshot of it.
Closing questions as off-topic Updated +Created
There's no point.
The question remains there, but people lose the ability to help the asker.
Reputation is meaningless regardless, since JavaScript gurus will always have 1000x more readers than low level junkies.
The deeper problem: the existence of multiple separate websites instead of just using the tags on a single website.
Interesting AtomSea & EMBII uploads Updated +Created
tx e3e37ed5c1de2631c147bd39429e42ff634e95b7d72423bc32d6c6b9d8eef8ee (2014-07-01):
For my first official Journal entry I've decided to archive some old poetry. Here are a few of the computational poems I've created using cyphers.
Figure 1.
Shiemaa&Vincent.jpg
. Source.
Message:
"Even if we tried to do it on purpose, never would have we succeeded." My beloved Vincent.
TODO identify Shiemaa and Vincent.
Figure 2.
BikeLady.jpg
. Source. Bike Lady by Allen Lee Vandever. tx 2c4b9497af8c0c0eb9383357b40c3de33dba0b4f481099a32719f2b9036da8e7, block 319927 (2014-09-10)
Figure 3.
Arecibo_message.svg
. Source.
An "artificially" colored visualization of the Arecibo message ripped from Wikipedia: en.wikipedia.org/wiki/File:Arecibo_message.svg (with attribution).
The cool thing about this image is that it highlights the striking parallels between the encoding of the Arecibo message with crypto graffiti, because in both cases people were creating undocumented new ways of communicating with strangers on a new medium in those early blockchain days.
The associated message contains the Arecibo message as ASCII 0's and 1's. When properly cut at the newlines, they draw the message as ASCII art, as the original Arecibo encoding intends, here's a version with the 0's replaced by spaces to make it more readabale:
      1 1 1 1
  1 1     1 1       1
1   1   1   1  1 11  1
1 1 1 1 1 1 1 1  1  1

            11
          11 1
          11 1
          1 1 1
          11111

11    111   11    11
1             11  1
11 1   11   11    11 1
11111 11111 11111 11111

    1                 1

    1                 1
11111             11111

11    11    111   11
1       1         1
11 1    11   111  11 1
11111 11111 11111 11111

    1      11         1
          11
    1     11          1
11111     11      11111
          11
  1        1        1
    1      11       1
    11    11      1
      11   1    11
          11  11
      11   1    11
    11    11      1
    1      1        1
  1       11        1
  1        11        1
  1         1       1
  1       1       1
    1            11
    11        11
  1   111 1 11
  1       1
  1     11111
  1    1 111 1  1 11 11
      1  111  1  111111
1 111    111     11 111
          1 1     111 11
  1      1 1     111111
  1      1 1     11
  1     11 11

  111     1
  111 1 1   1 1 1 1 1 1
  111         1 1 1 1
              1 1
        11111
      111111111
    111       111
    11           11
  11 1         1 11
  11  11       11  11
  1   1 1     1 1   1
  1   1  1   1  1   1
      1   1 1   1
      1    1    1
      1         1
        1  1 1
  1111  11111 1  1111
Figure 4.
He sleeps in a temple.jpg
. TODO identify. Novel work by EMBII? TODO we need a geocacher to find it, some city in North America no doubt. tx 460ed23bea89176cdfe18e13fce51ad5386ad8e3e1f7d6f5b4711b3be97b0502, block 360565 (2015-06-12)
Figure 5.
PIA17563.jpg
. Source.
Associated message:
NASA: A purple nebula, in honor of #Prince, who passed away today. Image: Crab #Nebula, as Seen by Herschel and #Hubble Image credit: ESA/Herschel/PACS/MESS Key Programme Supernova Remnant Team; #NASA, ESA and Allison Loll/Jeff Hester (Arizona State University) #PIA17563
Figure 6.
Dr_Craig_Wright.jpg
. Source.
The image is present e.g. at: www.kitguru.net/channel/jon-martindale/australian-man-claims-he-is-satoshi-nakamoto-bitcoin-creator/ It was inscribed about two months after Craig publicly claimed that he is Satoshi.
This is a relatively unusual AtomSea & EMBII upload as it does not have the common toplevel transaction, everything, text + image fits into a single transaction. This is perhaps why the image is relatively low resolution to have a smaller size.
Figure 7.
YellowRobot.jpg
. Source.
Photography by EMBII, original art by TODO.
The associated message reads:
Chiharu and I found this little yellow robot while exploring Chicago. It will be covered by tar or eventually removed but this tribute will remain. N 41.880778 E -87.629210
This is one of Ciro's favorite AtomSea & EMBII uploads. This is the cutest thing ever, and perfectly encapsules the "medium as an artform" approach to blockchain art. More Chiharu stalking at: ILoveYouMore.jpg.
At twitter.com/EMBII4U/status/1615389973343268871 EMBII announced that he would be giving off shares of that image on a Bitcoin-based NFT sale system he's making called Sup!?, and in December 2023 gave some shares to Ciro Santilli. Amen.
Other possibly novel EMBII street photography:
Audio:
Ordinal ASCII art inscription Updated +Created
This is a quick overiew of ASCII art ordinal inscriptions.
It was obtained by casually scrolling down the list of the largest text ordinal inscription on less until patience ran out.
Some of them are dedicated ASCII art inscriptions, others are just small highlights to other more important text like code.
Although tere is some element of commercialism in some those inscriptions, a bit like what is rampant in the images, some of them are honestly just cool and possibly novel.
Ordinal ruleset inscription collections:
  • Humongous surfers. These are very large ASCII arts, by far the largest on the chain. Being so large allows for shades of gray to be encoded on the average luminosith of individual letters:
  • Michael Jackson Unicode art. Uses Unicode Braille characters. Marked "First Onchain Collection" and "Legends @ BTC" . Pretty cool design, the textures are quite cool and suggest glittering flying seat. Though if those ever sell, someone is going to get sued to Hell by MJ's estate!
    • 1/12 tx 7e6c5f8ebb41604c79f2af60bb7af623c42b32afe4d7571ba81d7b9b44d33a2d
    • 2/12 tx 8ac99472b865d01f8724ba23b6f79ca56d30b44fae0eb509984237b722b812c3
    • 5/12 tx 74c94ceba91cf59de2740bcfa5bc2fdb3ea0d4499e73a12100ed365d25ae9061
    • 7/12 tx 0360a10e67365ab8cc4e32f199c71cabf4fb6a08ca9773dd1d13d7f7936dcf99
    • 8/12 tx 4814880f931db8aa59e1c2aba2c227e83d928d297cbe91978458b6d83e38ddfc
    • 9/12 tx 909228c88176b65f5705ade5fa059030d4c646cacd171737af03ac965047fa82
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠀⡀⠀⠄⠀⠀⠄⠀⠠⠀⠀⠂⠀⠄⠂⣀⠄⠂⠠⠐⠀⡀⠂⠐⠠⠈⠄⠂⠡⠐⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⡈⠄⡃⠌⡐⠡⡈⠄⡁⢂⠡⠐⠀⢂⠀⠂⠀⠄⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠂⠈⠀⠀⠄⠀⢀⠠⠐⠀⠠⠐⠀⠀⢁⢠⣼⣶⡶⠛⠛⢋⠀⠂⠁⠄⠈⣄⣦⣁⣂⠡⢀⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⠄⠡⠈⢄⠡⢐⡈⠔⡈⠤⠑⡀⠆⡐⢀⠂⠌⡐⠀⠄⠂⠁⠠⠀⠀⠀⠂⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠄⠀⠁⠀⡀⠀⠂⠀⠐⠀⠠⠀⠠⠀⠀⢀⠂⠀⠄⠈⣠⣶⣿⣏⠖⠂⠁⡐⢀⠠⢁⠈⠄⣱⢏⡲⢭⡛⠿⠷⠶⢥⣈⠄⠡⠈⠄⠡⢈⠐⠡⢈⠐⠡⠈⠄⠡⠈⠄⡁⢂⠌⠄⡒⠌⡐⠡⢃⠌⡐⢀⠂⠌⡐⠠⢈⠀⠂⡁⢀⠂⠁⡀⠐⠈⠀⠀⢀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⢀⠀⠈⠀⡀⠄⠀⠄⠐⠈⠀⠀⠄⠂⣰⣿⣿⠫⠁⠀⠂⢱⠀⡀⠀⢀⡈⠼⣇⢯⡒⠥⢚⠡⠀⠀⠀⠈⠑⠶⣥⣈⠔⡈⠄⣁⠂⠌⠄⠡⢈⠂⢡⠈⡐⠄⠌⡒⢨⠐⡡⠑⡌⠰⠈⠤⢈⠐⠠⠁⠄⠂⡁⠠⠀⡀⠂⠀⠄⠐⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠠⠀⠀⠀⠂⠀⠈⠀⠀⠠⠀⠀⠠⠀⠀⡀⠠⠀⠂⠁⠚⠄⡆⢸⣿⡟⡃⠄⡂⠁⠠⠈⠳⣶⣄⡠⣸⡝⢶⢢⡑⠊⠄⡑⢢⡀⠀⠀⠀⠀⠉⠿⡆⠐⡈⠄⡈⠔⡈⠐⠂⢌⠀⠆⡐⠨⠐⠤⢁⠆⢡⠑⡈⠅⡑⠂⡄⠊⠄⠡⢈⠐⢀⠂⢁⠀⠂⠁⡀⠂⠀⠄⠀⠠⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠐⠀⠁⢀⠀⠄⠐⢀⠠⢀⠐⡀⠦⠐⡀⠀⠁⠄⠋⠉⠴⢁⠈⡙⠇⠀⠂⠁⠈⠛⢿⣷⡿⣜⢢⠙⠄⠂⠀⠠⠙⠦⠀⠀⠀⠠⠀⠄⢃⡐⡐⠠⠂⠄⢃⢁⠂⠌⡐⠠⣁⠩⠐⡌⠰⡁⢎⠰⡁⠆⢡⠀⠅⣈⠐⠠⠈⠄⢂⠠⠀⢁⠀⠄⠐⠀⠠⠐⠀⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠠⠀⠐⠀⡀⠄⠡⠈⠐⠂⢈⠂⠑⠐⠨⡀⠀⠀⠉⠁⠈⠀⠀⠠⠐⠀⠘⡄⠂⢀⠐⠈⢠⣀⠀⠀⠀⠉⠻⢿⣷⣭⡄⠀⠀⠀⢀⠀⠀⠀⠁⠀⠌⡐⢢⣾⣿⣷⡇⠌⣀⠂⠌⡐⠠⠡⠄⢂⠱⢈⠆⠱⣈⠒⠤⢉⠄⢊⡐⠠⠈⠄⠡⢈⠠⠀⠌⢀⠠⠀⠂⠀⠄⠀⠄⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⡀⠀⠈⢀⠠⠀⠄⠀⠀⠁⠀⠁⡀⡀⠀⡄⠀⢈⠁⠆⠀⡁⠀⡌⢆⠟⠛⠃⠀⠀⠀⢀⠐⢀⠀⠙⠻⣿⣶⣄⠀⠀⠀⠐⠈⢀⠐⠠⠄⣩⣿⣿⣿⠩⠐⠠⢈⡐⠠⠑⡠⠉⡄⠢⣁⠊⢅⠢⡉⢆⠡⢊⠤⠐⠡⠈⠄⡁⢂⠐⢈⠠⠀⡀⠂⠁⠠⠀⠂⢀⠀⠠⠐⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠁⠀⠀⠐⢈⠀⠀⠂⠀⠄⠀⢠⠀⡀⠀⠀⠐⠂⢁⢀⠐⠠⠀⠄⠀⠈⢀⠀⠄⠐⠤⠑⢈⠈⠄⠚⠧⠀⠡⠀⢀⠀⠄⠀⠀⢀⠈⡙⢿⣻⣤⡀⠂⠈⠀⠌⡐⠐⡀⢋⠉⢃⠰⠉⢄⠡⠠⠑⡠⢁⠒⡈⠔⡠⢉⠢⠑⡌⢢⠑⡌⠄⢃⠌⡐⢂⠐⠠⠈⠄⠂⠐⡀⠄⠁⠠⠐⠀⡀⠠⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠠⠀⠀⢀⠀⠈⠀⠀⠀⠄⠀⠀⡀⠀⢀⠀⠀⠆⠠⠈⠀⠀⠀⠠⠀⢊⠴⢂⠡⢀⠠⠐⡈⠔⡈⠀⠀⠠⠐⣀⠁⠄⠀⠀⠈⠐⠀⠠⢀⡐⡈⠄⡁⠯⣽⣆⠀⠁⢂⡐⠡⠴⠋⠀⢀⠂⡉⠄⢂⡁⠆⡁⢂⠂⡅⠢⢑⠢⢁⠣⡘⢄⠣⡐⢉⠄⢂⡐⠠⠈⠄⠡⢈⠀⠡⠀⡐⠈⢀⠐⠀⢀⠀⠄⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠠⠀⠀⠀⠂⠁⢀⠠⠀⢀⠈⠀⠀⠂⠄⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⠒⣡⠒⠡⠒⠠⠄⠀⠠⠀⠀⠄⣬⠃⠀⠠⠁⠀⠄⡁⢦⠼⣰⣥⠖⠀⡀⠙⠳⡀⠀⢆⢁⠂⠡⠐⠤⢈⠐⡈⠤⠐⡐⡈⠄⢒⡀⠣⠌⡰⠁⢆⠱⡈⠆⡑⢨⠈⠤⠀⡅⠈⠄⡁⠂⠌⠐⡀⠄⠂⠀⠄⠈⠀⢀⠠⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⡀⠁⠀⢀⠀⠀⠡⠀⡐⠀⠈⡀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠂⠀⠁⠀⠀⠀⠀⢠⣈⡇⠀⠠⠐⠠⢁⠢⣉⠆⡉⠴⣁⣈⡙⠜⠃⠄⡁⢂⠘⠆⣈⠡⠀⠐⢂⠡⠐⢂⠡⢐⠠⠉⡄⠰⢁⠊⠔⣉⠢⡑⢌⢂⠱⡀⢊⠄⡡⠠⢁⠂⠄⠡⠈⠄⠐⡀⠌⠀⠂⢀⠁⠀⢀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⡀⠁⠀⠈⠀⢀⠀⠐⠀⠀⡀⠀⠡⢀⠑⡀⠠⠁⠈⡀⠂⡀⠐⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠒⣠⣽⣿⠃⠀⠁⢂⠱⣂⠑⡌⡐⣍⢲⣀⡉⠉⠀⠁⠂⠴⡲⣌⠐⡀⠆⠀⠈⡄⢂⡉⠄⢊⠄⠂⠥⠐⣁⠊⢌⠒⡠⢃⠜⡠⢊⠤⢑⠠⠒⠠⢁⠂⠌⠠⠁⠌⡀⠡⢀⠐⠈⠀⠄⢀⠈⠀⠀⡀⠀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⠀⠀⠠⠐⠀⠀⢀⠠⠐⠀⠀⠀⠄⠠⠐⠠⠠⠁⠀⠰⢀⠑⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠈⢠⡜⣽⣿⣯⢡⠀⠈⠠⠑⠤⢣⠐⠱⠌⢧⡍⠁⠀⠀⠈⠀⠀⠉⣏⠓⡐⢈⠀⢁⠰⢀⠂⠜⠠⡈⠜⠠⡁⢂⠅⡊⠤⠑⡌⢢⠑⡌⢢⠁⠆⡡⠑⡠⠈⡄⠡⢈⠐⢀⠂⠄⠂⢁⠀⠂⠀⡀⠄⠁⠀⡀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠂⠁⠀⠀⠄⠈⠀⠀⠐⠈⠀⠀⠀⠄⠂⠀⡀⠀⠠⠀⠡⠈⠠⠐⠀⠠⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⡘⡼⢻⣿⣲⢣⠎⡰⠀⠁⡈⠀⠄⠂⠠⠀⠀⠀⠀⠀⠁⡀⠀⠁⠀⠤⢃⠙⣆⠀⠀⣂⠡⠘⡈⠔⡐⠌⠡⡐⢡⠘⡠⢊⡑⢌⠢⡑⢌⠢⡑⡈⠤⠑⠠⡁⠄⡁⠂⠌⡀⠂⠄⠡⢀⣄⣂⣡⣤⣴⡶⠀⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⡀⠀⠄⠀⠀⠂⠀⠐⠀⢀⠈⠀⠀⠀⠄⠀⠐⠀⠀⠄⠀⡀⠁⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡌⡐⣸⢱⢻⣿⠇⢣⠘⢄⠓⡲⠄⠢⠐⡁⢂⠁⠀⢀⠀⠄⠀⠀⢀⠈⠀⢈⠀⠣⢮⠀⠀⡤⠈⢅⠒⠠⡁⢊⠡⠐⢂⠢⢑⠂⡌⢢⠑⡌⢢⠑⠤⠑⡈⠆⠡⠐⡀⢂⠁⠂⠄⣡⣾⣿⣿⣿⣟⣯⣛⣃⣀⣐⣀⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⡀⠐⠀⠀⠐⠈⠀⠀⠠⠈⠀⠀⠐⠀⠈⢀⠠⠐⠀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠄⠀⠀⡔⢠⠁⣼⡃⡎⣿⡘⡄⠣⠌⢂⠡⡌⠆⠡⠐⠠⢈⠀⠀⠀⠀⠀⠂⠀⠀⠀⠀⠂⠡⢀⠀⠀⡷⢫⡄⠌⡡⠐⣁⢂⠩⠠⢑⡈⢆⡘⢄⠣⡘⠤⣉⠢⢑⠠⢁⢊⠐⡐⢠⢌⣴⣾⣿⠿⣩⢝⠲⠌⣻⣿⣟⣟⣿⣿⡿⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⡀⠀⢀⠀⠁⠀⠀⢀⠈⠀⠀⠂⠈⠀⠀⠂⠁⢀⠀⠁⠀⡀⠄⠂⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠂⠔⡁⠄⢺⣿⣿⢿⣿⢦⡁⢎⡴⢋⠔⡨⢐⠡⡘⠠⠀⠀⠀⠁⠀⠀⠀⠀⠄⠂⡔⣀⠠⠀⠀⣐⢧⠾⡶⢥⢒⠠⢂⠡⢁⠂⡌⠰⢈⠢⡑⢌⠒⡄⢃⠢⢁⢂⢂⡜⡘⣜⢾⣿⣿⣥⣘⠠⢈⠐⠠⢙⣿⣻⣯⣵⣿⠁⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠁⠀⢀⠀⠁⠀⠂⠁⠠⠐⠀⡀⢀⠈⠀⡀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠄⠂⠀⠌⣸⣿⣧⣏⣮⢳⡼⢏⡘⢤⠚⢠⠃⠰⣁⠂⡁⠀⠁⠀⠀⠐⠀⠀⠀⠤⠉⠀⠁⠀⠀⢋⠌⠐⡀⣊⣾⡷⣾⠤⣁⠒⣀⠣⢈⠔⡁⢎⡰⣈⡦⡵⠎⠎⠲⢀⠁⠀⠌⠡⢋⡾⠵⢾⣤⣎⣰⢀⡆⡱⣾⠘⠀⢀⠀⠀⡀⠀⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠐⠀⠀⠂⠀⠀⡀⠈⠀⡀⠀⠁⠀⠂⠀⠄⠀⡀⠀⠠⠐⠀⠠⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢂⠁⠂⡍⣿⣿⣷⣯⡟⠱⡈⠜⡠⢉⠦⢁⢣⠦⣥⠀⠀⡀⠐⠀⠀⠀⠀⠄⠀⠠⠀⠁⠀⠀⠠⢀⠡⢐⠩⣴⣧⣍⣦⢰⡶⣤⡻⣵⢞⡻⢟⡋⣍⠒⢍⠒⡌⠐⠀⢠⠈⢀⠀⠡⠼⠀⡀⢀⠀⠉⠉⠈⠁⠀⡀⠠⠀⢀⠀⠀⠀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠠⠀⠀⢀⠀⠠⠀⠀⠐⠀⠀⡀⠁⠐⠀⠠⠀⠂⠀⠐⠀⠠⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠄⢊⠱⣘⠼⣿⣿⣟⡰⢃⠬⣑⠢⢍⢂⠡⣎⠝⡂⠅⠀⠀⠀⡀⠀⠂⠀⠀⠠⢁⠂⠈⠀⠀⠁⡬⠖⠨⢀⠻⠿⠛⣈⠤⠑⠡⠼⡐⢆⡉⠌⡑⠌⠐⡀⠠⠀⢂⡁⢖⣈⠤⢜⠒⡁⠐⢀⠀⠄⠈⡀⠁⠠⠁⠀⡀⠄⠀⠀⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠠⠀⠀⠀⠀⠂⢀⠀⠁⠀⠐⠀⠈⠀⠐⠀⠁⡀⠂⠁⡀⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⢈⠐⡌⢢⠌⡻⢿⣯⣟⠶⣉⠖⡡⢊⠐⡊⣑⢨⣰⡼⢃⠀⠀⠁⠀⡀⠀⠀⠄⠀⠌⠐⠈⠆⠀⠘⢂⠄⠁⠄⠂⠄⡡⠀⢠⠛⢄⠓⡀⠒⠠⠐⠠⡁⠆⡰⢀⠬⣁⠆⣑⠚⡘⠠⠀⠄⡁⠄⠂⠐⡀⠠⠀⢁⠀⠂⢀⠀⠐⠀⢀⠀⠀⠐⠈⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⡀⠀⠄⠂⠁⠀⡀⠀⠈⢀⠠⠈⠀⠁⠠⠈⢀⠀⠄⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠂⠀⠀⠀⢀⠂⡘⢄⠫⣖⠱⢚⠟⠿⢷⣯⣶⠯⢞⡵⣮⢗⠳⣌⠣⠄⠂⠀⠂⠐⠀⠀⡀⠈⡐⠠⠈⠀⠀⢀⠂⠄⢨⠀⠆⠸⠄⠐⠠⢁⠂⠡⠤⠁⠆⡡⣒⠀⢒⠧⠂⠕⡈⠐⡀⠂⠄⠡⠈⠄⠐⠠⠁⢂⠀⠐⢀⠠⠀⠂⠀⠀⠂⠈⠀⠀⠄⠀⠀⠀⠠⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠠⠀⠀⢀⠀⠀⠄⠐⠀⠀⡀⠁⠀⡀⠄⠈⠀⠄⠐⠀⠠⠀⠐⠀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠢⢌⡌⠰⣈⠛⣦⣭⣩⣍⡴⣰⠚⣭⣞⠳⢎⡳⣌⠡⠂⠀⠠⠈⠀⡐⠀⠀⠀⠄⠡⠈⠄⠀⢀⠋⠆⡖⠨⢂⠁⡐⣈⠣⢄⡈⠔⣤⢩⠰⠥⢂⠋⠌⡐⡉⢐⠠⠁⠄⠡⠈⠄⠡⠈⠄⠁⠂⠄⠂⢁⠠⠀⠐⡀⠁⠐⠀⠁⡀⠂⠀⡀⠂⠀⢀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⠀⢀⠀⠂⠀⠁⠀⠠⠁⠀⠀⠂⠁⠀⠂⠈⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢂⠡⠀⠃⠂⣀⠳⣌⠳⣄⣃⠓⡌⢎⢥⣿⠳⣌⡛⡬⡕⡎⡔⢁⠀⠁⠀⠄⠀⠄⠀⠈⠄⠡⠈⠄⠀⠠⢈⡐⢀⠆⣀⠒⠠⢂⠡⢒⡘⢡⠐⡄⢃⠒⢄⠣⠘⡄⡘⣀⠂⢡⠈⢂⠡⠈⠄⠡⠈⠄⡁⠂⠌⡀⠐⢈⠀⠄⠈⡀⠌⠀⠀⠄⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠁⠀⢀⠀⠀⡀⠈⠀⠐⠀⡀⠈⠀⠐⠈⠀⠄⠁⡀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⡀⠀⠄⢀⠰⢠⢉⠳⣧⢘⠻⣷⣾⣾⣞⣣⡝⢦⣙⠶⡝⣞⡴⢂⠀⠀⠂⠀⠠⡀⠀⠀⠌⠠⢁⠂⠀⠠⢁⠰⢈⠐⠠⡈⢁⠢⢁⠂⠤⢁⠊⠤⢁⠊⡐⠌⡡⠐⠄⡐⠈⡄⠌⡀⢂⠡⠈⠄⡁⠂⠄⡁⢂⠐⢈⠠⠀⢂⠀⠄⠀⠐⠀⡀⠄⠈⠀⠀⠀⠀⠀⢀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠈⠀⠀⠄⠀⡀⠁⠀⠂⠀⠄⠁⠠⠈⠀⠄⠂⠠⠀⢂⠠⠀⠁⠀⠠⠀⡁⠀⠌⢀⠡⠐⡀⠰⠀⢈⠢⡑⢎⠤⡙⡞⣧⣙⠶⣦⣍⣛⣏⡽⣣⢮⣝⠾⣱⢊⢆⠠⠈⠀⡀⠁⠀⠀⠀⠌⡐⢀⠂⠀⠐⠠⠒⢠⢁⠒⠠⡁⢂⠢⠉⡔⠨⡐⠡⠌⡐⢌⠰⢠⠉⠤⢁⠒⡀⠂⠔⡀⢂⠁⠂⠄⡁⢂⠐⠠⢈⠠⠀⢂⠀⠄⠂⠈⠀⢀⠀⠀⠀⠀⡀⠀⠁⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠁⠀⠀⠁⠀⠠⠀⢀⠀⠁⡀⠈⠀⠐⠀⠠⠁⠀⠄⠁⠠⠀⢀⠐⠀⡀⠀⠠⠀⠄⠂⠌⠀⠀⠀⡁⠠⠂⠀⢧⡙⣦⢡⠹⣌⡻⢶⣅⠻⠿⣿⣿⣷⣯⣜⣣⢧⣋⣦⠁⠄⠀⡀⠠⠀⠈⢀⠢⠐⡀⠂⠀⠈⠡⠘⡀⠂⠌⠡⠠⢁⠂⡑⠠⢃⠰⢁⠊⠔⡈⠔⠂⡅⠒⣀⠂⡐⢁⠂⡐⠠⢈⠐⠠⠐⠀⠂⡁⠄⠀⠂⠀⠄⠂⢀⠂⠁⠀⠀⡀⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⢀⠀⠂⠁⠀⢀⠀⠠⠀⢀⠀⠁⡀⠂⠀⠄⠁⠠⠈⢀⠐⠀⡀⠂⠠⢀⠀⠀⠀⡀⠀⠄⠀⠀⠀⠄⠀⠀⢳⡍⣖⢫⠖⣤⡙⢳⣽⣻⢷⣦⣝⣻⠿⣿⣿⡻⢿⣿⣿⢶⠀⠀⡀⠐⠀⢀⠂⠡⢀⠡⠀⠀⡁⠆⠡⢈⠐⠡⢁⠂⢌⠠⠑⡈⠔⣁⠊⠤⢑⠨⠑⠄⡃⠄⠒⣀⠂⡐⠠⢁⠂⡈⠐⢈⠀⡁⠠⠐⠈⢀⠁⠠⠈⠀⠠⠀⠈⠀⠀⠀⠀⡀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⡀⠀⠈⠀⢀⠀⠄⠀⠀⠄⠀⡀⠁⠠⠈⢀⠐⢀⠀⠂⠀⠄⢁⠠⢀⠀⠀⠀⡐⠀⢂⠑⠨⠀⠀⠠⢸⣾⣾⣿⣿⣷⣯⣷⢦⣙⠿⣾⣶⣾⠿⢶⣶⣽⣳⣦⡴⣠⢂⠀⠀⡀⠀⠀⠌⡐⢀⠂⠀⠀⡐⠈⠄⠡⡈⠔⠠⢁⠂⠌⢡⠈⠆⡄⠣⡈⠆⡡⢉⠢⢁⢊⠡⢀⠂⠄⡁⢂⠐⡀⠁⢂⠠⠀⠐⠀⡁⠠⠀⠂⠀⡁⠀⠀⠂⠁⢀⠀⠁⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠠⠐⠀⠀⠀⠂⠁⠀⠠⠀⠈⢀⠠⠀⠀⠄⠁⠠⠀⢀⠂⠀⠌⠀⡐⠀⠄⠀⢂⠀⠀⠀⠈⠀⠨⠀⠀⠐⠀⠀⣿⣿⣿⣻⡿⠿⠿⠿⡿⣿⢿⡿⡾⢿⡿⠿⢿⣻⠭⠙⠁⠁⢀⠀⠄⠀⠀⠂⡐⠠⢈⠀⠀⡐⠉⠤⢁⡐⢈⡐⠄⠊⢌⠠⠘⡠⠌⡐⢡⠘⡄⢃⠜⢠⠂⣂⠡⢈⠐⡀⢂⠐⠠⠁⠠⠐⢈⠀⠐⠀⠠⠐⠈⢀⠀⠈⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⡀⠐⠀⠀⠂⠀⠐⠈⠀⠀⠄⠁⠠⠈⢀⠐⠀⡐⠈⢀⠐⠀⡐⠈⠐⡀⠐⠀⠀⠈⠀⠂⠀⠀⠂⠀⡀⠈⠛⠿⠵⠀⠀⠀⠀⠀⠀⠀⠀⠀⡀⠀⣀⠠⢀⠠⠀⠐⠈⠀⠀⠠⠀⠀⠀⠄⡁⢂⠀⠀⠄⢃⠰⢀⠰⢀⠐⡈⠔⠂⠌⣁⠢⠘⣀⠃⡌⠰⣁⠊⡄⢃⠄⢂⠂⡐⢀⠂⠌⡀⢁⠂⢈⠀⠠⠁⠐⠀⠠⠈⢀⠠⠈⠀⠀⠄⠀⠂⠁⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⢀⠀⠀⠀⠀⠂⠀⠈⢀⠀⠈⢀⠠⠈⢀⠐⠀⠐⠀⠠⠐⠀⡀⠂⠠⠀⠁⠄⠂⠁⡐⠀⠀⠀⡀⠁⠀⠀⢀⠀⠀⠀⡀⠀⠀⠀⠐⠀⠀⠂⠈⠀⠀⡠⢌⠣⣍⢢⡁⠀⠀⠀⠐⠀⠀⡐⠈⠠⠐⠠⠀⠀⠌⡀⠆⡈⠐⠠⢈⠐⡈⠔⠡⡀⠆⢡⠐⠌⡐⠡⢄⠃⡌⢂⠌⠄⠒⡀⠂⠌⠠⠐⠀⠄⠂⡀⠁⠄⠈⢀⠐⠀⡀⠀⢀⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⢀⠀⠀⠀⡀⠈⠀⡀⠈⠀⡀⠀⠈⠀⡀⠐⠀⠠⠈⢀⠈⢀⠐⠀⠠⠀⠁⠄⠁⢂⠈⠄⠀⠂⠌⢠⠀⠀⠀⠠⠀⠀⠈⢀⠀⠀⠀⠀⡀⠀⠀⠀⠀⠈⠀⠀⠉⠆⢁⠒⠀⢀⠈⠀⠀⠠⠀⠀⠠⠀⡁⢂⠀⠀⢂⠁⠢⢈⡐⢁⠂⠰⠐⡈⠰⢀⠊⢄⡘⢠⠡⠑⣂⠱⡐⠌⠰⢈⠐⠠⠁⠌⠠⢁⠈⠄⠂⢀⠂⠀⠁⡀⠀⠂⠀⠄⠀⠀⠀⠀⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠀⠀⢀⠠⠀⠀⡀⠁⠀⡀⠁⢀⠀⠐⠈⠀⠐⠀⡀⠂⢀⠈⠀⠌⠀⠄⢁⠠⠀⠂⠁⠄⠂⡀⠌⠁⠲⢄⣠⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠀⠄⠈⠀⢀⠐⠠⠀⠀⠂⠌⡁⢂⠐⠠⡈⢁⢂⠁⡒⢈⠐⢂⠰⢀⢊⠡⡐⠰⢈⠌⣁⠂⠌⠠⠁⠌⡐⠠⢈⠀⠌⡀⠠⠁⡀⠄⠐⠈⠀⡀⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⢀⠀⠁⠀⠀⠁⠀⠀⠠⠀⢀⠀⠁⡀⠀⠂⢀⠈⢀⠈⠀⠄⠀⠂⢀⠠⠁⠐⠈⢀⠠⠀⠂⢁⠈⠠⠐⠀⠄⠡⠀⢂⠀⠠⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠀⠀⢀⠂⠐⠀⢁⠀⠠⢁⠂⣀⡈⠐⡀⠂⠌⡐⠠⢁⠂⢡⠐⡈⠰⢈⡐⠌⠄⢢⠑⠨⠄⢒⠠⠌⡀⠃⠌⡐⠠⠁⢂⠈⠄⠠⠐⠀⡀⠄⠂⠈⢀⠀⠀⠄⠈⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⠀⠀⠂⠈⠀⠐⠀⠠⠀⠀⠄⠀⠐⠀⡀⠠⠀⠠⠈⠀⠄⠁⡀⠠⠀⢁⠈⠀⠄⠂⢁⠠⠀⢁⠠⠁⡈⢀⠂⠠⠈⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠠⠀⠊⠄⢠⠀⠀⠁⠄⠀⠀⠈⠡⢀⢁⠢⢀⠁⠂⠌⡀⠂⠤⢁⠂⠰⠈⢌⡀⠎⣁⠊⢄⠒⠠⠁⠌⡐⠠⠁⠌⡀⢂⠠⠁⠄⠂⠀⠄⠂⠁⡀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠠⠀⠈⠀⢀⠠⠐⠀⠠⠀⠐⠀⡀⠈⠀⠄⠀⠄⠀⡁⠀⠂⢀⠂⢀⠐⠀⠄⠐⠈⡀⠐⠠⠐⠈⠠⠀⡁⠄⢀⠂⠁⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠠⠁⠌⠄⠀⠠⢁⠂⠀⠀⠀⡁⠂⠄⠂⠄⠌⡈⠐⠠⢁⠂⠤⢈⡁⠎⢠⠐⡈⠤⠘⡠⢈⠡⠌⡐⠠⠁⠌⡐⠠⠀⢂⠐⢀⠂⠁⡀⠂⠁⠀⠄⠀⡀⠁⠀⠄⠂⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⠀⠀⠀⢀⠠⠀⠀⠀⠄⠀⠐⠀⡀⠄⠐⠀⡀⠂⠀⠂⠀⠄⠁⠠⠀⠂⠠⠈⡀⠌⠀⡐⠈⡀⠂⢁⠂⡁⠄⠂⠄⠂⡈⠄⠠⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠀⠀⠀⠀⠈⠀⠀⠐⠀⠀⠄⠁⠄⠂⠄⠀⠂⠄⠡⢈⠐⡈⠐⠠⢉⠐⠠⢈⡐⠄⡐⠨⠄⢂⠅⠢⡑⢠⠁⠢⠐⠠⠁⠌⡐⢀⠂⡁⢂⠈⠠⠐⠀⠄⠂⠁⡀⠂⠀⢀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
      ⡀⠠⠀⠀⠀⠀⠐⠀⡀⠈⠀⠄⠀⠄⠂⠀⠄⠀⡁⠠⠁⠠⠈⠀⠄⢁⠀⠂⠠⠀⡁⠄⠂⠄⠡⠀⠂⠄⢂⠁⢂⠁⠄⠂⡁⠐⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠁⠀⠀⠀⠀⠈⠀⠀⠠⠀⠂⠀⠠⠈⡐⢈⠀⠀⠈⠄⡁⢂⠐⠠⢉⠐⠠⡈⠄⠡⠐⡐⡈⠔⡈⢄⠊⡡⢐⠡⠌⢡⠈⠡⢈⠐⡀⢂⠐⠠⢀⠂⠁⠄⡁⠄⠂⠁⡀⠄⠁⡀⠀⠐⠀⠁⠀⠀⠂⠀⠀
           Michael Jackson * First Onchain Collection 9/12 * Legends @ BTC⠀⠀⠀⠀
    • 10/12 tx 74f2b9b61d2d79bf0f3ba1f13088fb1c56cf308202afd508b6b88fe4e8b99c74
  • Pepe the Frog themed collections:
ANSI art. These can only be viewed on a terminal:
ASCII porn:
Misc:
  • tx 9089c4fac49593628e1334bbfe94080819bdac67eac18c9ffece5a2bc235a380: wizard taking a shower
  • tx fdf9b82e3177c5404f8251ad26460788fc8b29cc4cbd4951ea5e8438dcce9631: and tx 2031b40ccb3944822be709c9a41f38e10ddf13c577b3f2c4d2046ac73020f6f9 middle finger Unicode art. Both marked "THE MIDDLE 1/15".
  • tx ed3bd1a0cd8a18743acfd7162649a43b69f25a540fbfe6a2352a612ebfb381e6: JavaScript that generates a demoscene ASCII art animation that looks like a rotating thing
  • tx 78240e4691c7f75311a03125567f1e44fc0049db611f0ac554f04f8790e28e24: cute cartoon dog giving wearing a headband and giving thumbs up. The Chinese subtitle reads:
    买海豹胆小鬼
    which Google Translate translates as:
    A coward who buys seals
    TODO context. Sample hit at: twitter.com/0xTenkito/status/1612939684816031746
  • tx 3a474f540c1917817fba51d2f9fd647887c8c3cd9687eb8d34ab6787c9e8a7fa: ASCII art of mysterious man typing on his laptop. Satoshi comes to mind. The man's hat contains the following Korean characters;
    진실로같이가요
    which Google Translate translates as:
    Let’s go together truly
  • tx 18b7728f32ff27d410e57e289bca7b8c2bdf7c30a1c572a41acc1a8ff576b6ab: "I Want you BTC Maxis, Ordinal Army Enlist Now"
  • tx 2fc46b52e3ab7a1053c4c65a4dc3af6bb7e51eb15cb988294af3a203ad254eed: contains an ASCII art of an Iron Man-like mask with text:
    Did you know that within ASCII art an encrypted msg can be inside? All you need to do is decode it. Hence a pictureworthsthousandwords.
    But hopefully/presumably the author meant Steganography and not encryption right? Code "Your free GrrCon ticket" comes to mind.
  • tx 6d1d99ed05a152d59fdef4eb26a4a07a4f81dcd945249639af272504b4e70d27: Bitcoin whitepaper as Markdown, but with some great Unicode art rendition of the diagrams!
          ┌─────────────────────┐               ┌─────────────────────┐              ┌─────────────────────┐
          │                     │               │                     │              │                     │
          │    Transaction      │               │    Transaction      │              │    Transaction      │
          │                     │               │                     │              │                     │
          │   ┌─────────────┐   │               │   ┌─────────────┐   │              │   ┌─────────────┐   │
          │   │ Owner 1's   │   │               │   │ Owner 2's   │   │              │   │ Owner 3's   │   │
          │   │ Public Key  │   │               │   │ Public Key  │   │              │   │ Public Key  │   │
          │   └───────┬─────┘   │               │   └───────┬─────┘   │              │   └───────┬─────┘   │
          │           │    .    │               │           │    .    │              │           │         │
    ──────┼─────────┐ │    .    ├───────────────┼─────────┐ │    .    ├──────────────┼─────────┐ │         │
          │         │ │    .    │               │         │ │    .    │              │         │ │         │
          │      ┌──▼─▼──┐ .    │               │      ┌──▼─▼──┐ .    │              │      ┌──▼─▼──┐      │
          │      │ Hash  │ .    │               │      │ Hash  │ .    │              │      │ Hash  │      │
          │      └───┬───┘ .    │    Verify     │      └───┬───┘ .    │    Verify    │      └───┬───┘      │
          │          │     ............................    │     ...........................    │          │
          │          │          │               │     │    │          │              │     │    │          │
          │   ┌──────▼──────┐   │               │   ┌─▼────▼──────┐   │              │   ┌─▼────▼──────┐   │
          │   │ Owner 0's   │   │      Sign     │   │ Owner 1's   │   │      Sign    │   │ Owner 2's   │   │
          │   │ Signature   │   │      ...........─►│ Signature   │   │     ...........─►│ Signature   │   │
          │   └─────────────┘   │      .        │   └─────────────┘   │     .        │   └─────────────┘   │
          │                     │      .        │                     │     .        │                     │
          └─────────────────────┘      .        └─────────────────────┘     .        └─────────────────────┘
                                       .                                    .
              ┌─────────────┐          .            ┌─────────────┐         .            ┌─────────────┐
              │ Owner 1's   │...........            │ Owner 2's   │..........            │ Owner 3's   │
              │ Private Key │                       │ Private Key │                      │ Private Key │
              └─────────────┘                       └─────────────┘                      └─────────────┘
  • tx e643b2a25b6df9c1d5b0fad7168677a71b96544707efab16f0cf0266981cbe53: "Dear Luke Dashjr, here’s why I want to join the @TaprootWizards"
  • tx 6987171da8a07b365686f3ec25ccc08f731943eecbbebed0c9b0df63b58d69fe: classical painting of a nude female model marked "By Johnny Dollar J$"
  • tx 8ae6534ba41e305fedf068696111d5445e90c48cbd18081503e831399f1a11fb: HTML of monkey face with bow tie and pink cheeks. Cute! The HTML code is also arranged in a monkey like pattern.
  • tx d6c60f0efc9f3155712775c2a0f4e1d805f000fc50763c440cb575f252de371d: also seen at: www.h17n.art/: HTML with the busts of a few people who strongly criticized Bitcoin: Warren Buffet, "Paul Krugman", "Christine Lagarde" and "Peter Schiff":
    HYPERBITCOINIZATION
    A collection of 17 text inscriptions blessed by the most diligent bitcoin evangelists
                                                     ., ..,     ,
                                             ,..,  *,.  ,***/,..,/...,.
                                             ,.//(////*/#((//(##%#*   .  . .
                                        ,.**&&&&&%#%#%%%%%%###%%%%(//*,.  .         .
                                  ..**/%&@&%&&@&@&@&@@&&&%%%%#%%&%%####/   ...
                           .,,.,(//(&&&&&&&&&&&&&@@&&%#%&(%%##%#%##%%%#((#(*  .,
                           /*(*(%&&&&&&&&&&&&@@@&@&&%%%%%%##((########(#((/(//,. *
                      .  .,(((%&@&&&@&&&&&&&&&&&@&&&%%#%####%##(((((((#(###((/*****.../   .
                     .,,(%&&&&&&&&&&@@@@@@@@&&&%%#%######(#%#(#(###(((((#((#(#(((//##//*,,, .
                  ,, %%&%&&&&@&&@&@&%#@########%##(((((((#((((#(((#((((((#(#####(//(##(#((// *..
                  ,.(%&&&&&&&@&&&&%&%%%%&&%&%%%%%%%&&&%%%%%%%%########((#######(#((/(((#%(#(((*.
               *  **%&&&&&&&&%%@%%&&&&&&&&&&&&&&&&&&&&&%%%%%%%%##%##############(#(/##((####(((/,.
              *  .#&&%&&%@&&%&&&&&&&&&&&&&&&&&&&&&&%%%%%%%%%#%%%%%#######((#####%#(//(((#((##((/((,
              , .%&%&&%&&%%&&@&&&&&@&&&&&&&&&&&&&&&&%%%%%%%%##%%%##(####(##(#(##%(((*(((###(#(/((/((#,
              .,&%%&%&%##&&@&&&&&&&&&&&&%&&&&&&&&@&&&&%%%%%%%%#######(####(((####/#/(/(#(((##(/(((((#(/*
              .#%#%&&&#&&&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%#%%%%#######(#####(((##(#(/%/(//(#///(((/(((((((/.
              *(#%&&%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%#%%#####(##((#((((((((####(/((/((##/((((//(/((((/*
              ,###%%##%%&&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%#########(#(((((((((((((%##(///*/((#/(#/((/(///(/**.
              */#%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&%&%#%%#%#########(#(#((((/((//(//#(#(/((/*//(((#(/*,,****
               *##%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&%%%%%%%#%%########((((((((///(##%(((#/(##,*(/#//((/****,...
                *(#%%%&&%&&&&&&&&&&&&&&&&&&&%%%&%%%%%#%#%#%%%#%###(/(((/(//(((/%(((/(////*/**//*****,***,
                 ,#&&%%&%%&&&%&&&&&&&&&&%&%%%%%%#%%%%&%&&%&&%%%%###(((/////((###(%(/*/*,/,*,,,******,,,*
                *.&%&&&&&&%%%%%%%%%%%%%%#&%%%%&%&&%%%%%&&#####((##((((////(/###%(#//.**,***//,....,*.
                *%&%&&&&&&&&&%#%##%####(%%%&%&&&&%%(#(%%###(#((((/(////(((((/**..,,,**,**,,..,,,,,,*
                **///(%%&%#%####((#%%#(/((#/(,/(**//**,/%**///(#(/((/**,*.*%((//*/*/,***,,,,,***,,*/
           *,///*/((/**,*,**#%/*,/%&&##/**,***,,,*//((((((///.*..*.,.*(////*//*//**(***,,**////***(*
          *./*  ..##(*,,,,,  ,,*///##*,*/*,.,*,,,,.**..  .,..*,*/*#((///////////(******,,. .*****//
           ((..   (((###((###(//,*(#(/*/*//*//(//(((((((#####(#,/%#((///////////******//,,.,,***/*
            .*..  %%%&%%%%%%####,%&@&%#,/*###(##((###%%%%###%#%./#((//(//******/*****////,**//((/.
             .#,..%%%%%%%%####%%%&&&%%#(*,/#%%%%%%%#####%%%%&&%.#((///////***********////,**/((*,
               ,@,#%%%%%%&&&%%%&&&&&%#####(*(#%&&&&&&&&&&&%&%/#///////***************/*/**/(/*./,
                 ((,/(%%###/*/%&&&&%%##(##%%%%//#%#((##/#//////(((((////****************,,,***(/
                 .#%%%&&&&%%(%&&&&&&%##(#%##%((#%&%%%&&&&%%%%###((((////*********///***(/////((
                  #%%&%&%%%#%&&&&@&%%%###%%##(#(*,//###%#######((((//////****//*///****(//((#(,
                  ,###%%#(//%%%%%%%#(//(((///**,./(//*/(((((((((//////**/*****/********.//((/*
                   /((((/*,.///(///*,,.     ..,*((##((/**//////***,,,,**************,,.,,,,*/
                    ////*,.,(##(/*,,    .,*///(##(((//////(***,,,,..,*////******,,,,,,,,,,////.
                     ((**,,,*/(((((//**///((((((((//////******/*,//(//(///****,,,,,,,,,,*////*,.
                      (#####((//*/((((((((((////*/*,,,,,,,**//##(((////(/*,,,,,,,,,,,,,//////*...
                       (#%%%%#(##/*/(///***,,,,..  .,,**/**/#%%##(///*///*,,,,,,,,,,,*///////,,*.
                        .##%%##%#%###(//////#%#(###(/////(#%#%##(///**//*,,,,,,,,,,,////((//***       .. ....
                          (###%##((#####(#(((((((/*////##%%#(##(///*,*//,,,,,,,,,,*/////((////      . ..  .. . ....
                           (##%%%((((#(((/(((/((((//(((#(%##(#(/***,*//,,,,,,,,,**/////(///(.     . .........   .. ....
                     .......,#%&%#((((((#/(((#(((//###%%((#(/((*,,,***,,,,,,.,****///////(/        .......... .............
                  .,...,......(%%%%%#%%%%%%%####%%#%%%###(//**,.,,*,,,,,,,,,****///////((  .. ... .......... ..............
                .............../%%%#%##%######%###%###////,,,,...,.,,,,,.**,**/////((((.   . ............... ..............
              ...........,,......############(##(#(/****,,,...,.,,,,,,,*,,,**////((//*    ................. ...............
             ......................((#((((/////***,,,,.,,.,.,,,,,,,,,,,.,,*///((///* ..................... ................
            .............................,*,,,,,,,,,,,,,,,,*,,. .,,,,,,,*/((((/***   ......................................
           ............................  .#&%%%%%%#/,.,,... .,,,,,,,**/((#((/**/,........................ .................
           ............................ .(&&&%%%###(*,**/*,,,,,,***/((###(*////.......................... .................
          ............................../&&&#*  .  .    ////////(((##%#/////(........................... ...........,......
         ............................. ,#,,,,,/ /,  .,  ,##(####%%%#(((/*/#/............................ ...,..............
         ............................ *#****..#, /*. (*, (%%%%##((((///#%(.............................. ..................
        ............................./%&///*...#*.*(/ .*/.##(((((((#%%&&................,.............. ...................
        ............................/%@@@#*..,..     .   , ((((##%%&&&,....................... .   .............,..........
       ...........................,/%@@@@%/,..,.  ,. .  *#%%#%%&&&&&%......................  ........................,.....
       ..........................,/%&@@#* .#((.....* ,(%&&&&&&@@@@@...............................,................. ......
      ..........................,/#&@@*./#,..(/*.*. ,%@@@@@&&&@@@(......,.,...,....,...........,..,........................
     .....................,....,/#&&@(*...&(*,...,#(*&@@@@@@@@@@...................,..............,.......,................
     .........................,/#%&@*##(#.,,...%(*..(@@@@@@@@&.....,............. ...,.............................,.......
    .........................,/#%&@%.#*/*..,#%...(*,%@@@@@&&#.,................. . ............... ........................
    Figure 5. . Source. Off-chain reference image for the ASCII art.
Small art as part of an ad for something like a collection or service:
CSS flex Updated +Created
  • css/flex.html: illustrates basic flex usage, including:
  • flex-grow: if there's space left, this determines how much extra space will be given to each.
  • flex-basis: the size the items want to be. But if there isnt' enough space, this can be cut up.
    Note that the minimal space required by children of the flex children cannot be necessarily cut up, and might lead things to overflow out of the container.
  • flex-shrink: if there's space missing, this determines how much extra space will be removed from each flex-basis
Other examples include:
That example calculates and displays the final widths via JavaScript, making it easier to understand the calculations being done.
@cirosantilli/_file/react/react/ref-click-counter.html Updated +Created
Dummy example of using a React ref This example is useless and to the end user seems functionally equivalent to react/hello.html.
It does however serve as a good example of what react does that is useful: it provides a "clear" separation between state and render code (which becomes once again much less clear in React function components.
Notably, this example is insane because at:
<button onClick={() => {
  elem.innerHTML = (parseInt(elem.innerHTML) + 1).toString()
we are extracing state from some random HTML string rather than having a clean JavaScript variable containing that value.
In this case we managed to get away with it, but this is in general not easy/possible.
@cirosantilli/_file/webpack/webpack/template Updated +Created
webpack/template contains a reasonable starter template.
This will produce, under dist/ the following minimized files:
You can also run this test with the development server on localhost:9000:
npm start
which uses unminimized outptus, and automatically push reloads the page whenever you change any of the input files!