mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-12 18:06:11 +02:00
Compare commits
68 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6b92659512 | |||
| 7e04305d1c | |||
| 87e13543da | |||
| 7a2cbc060f | |||
| f22d73d473 | |||
| e629126d73 | |||
| 9ac635e2e6 | |||
| 1b1b0521f4 | |||
| 41d0f61ee0 | |||
| 9de5d9008b | |||
| 576a9cc6fe | |||
| bd61d08afe | |||
| 4672b78481 | |||
| 36b0fdbcda | |||
| 7626ef6eaa | |||
| 115108b3f1 | |||
| 154f9f462b | |||
| a96a9fc31d | |||
| 23b43244c5 | |||
| 9dfb404a0d | |||
| ff3028c656 | |||
| 2f706ed494 | |||
| 06427ee62b | |||
| fe66eb3df0 | |||
| 6e1ab12399 | |||
| 484e05eae3 | |||
| 5d3fb98072 | |||
| 0c30590088 | |||
| 20cd4ce125 | |||
| 1c7aa89228 | |||
| f270255770 | |||
| 4b62a3c75b | |||
| 1557f0c556 | |||
| ef7f61309f | |||
| f59491b25d | |||
| e3592eb2c3 | |||
| 305776eb94 | |||
| 599e0d393d | |||
| 561574ae94 | |||
| 3dd78422eb | |||
| 5c546ab8e7 | |||
| 3e9274040d | |||
| 630d876e2d | |||
| 1938be86ff | |||
| 0980d5f0ad | |||
| d8c1b3b61b | |||
| 969523ae8a | |||
| 5d960ec744 | |||
| 3b36b8ca57 | |||
| 05f14764e6 | |||
| 3a180b24e3 | |||
| 02ab58e001 | |||
| fd158b41e1 | |||
| 89e0ede12f | |||
| 4d7b2410ef | |||
| c1f6a2f755 | |||
| 9c455c3b0f | |||
| d4ea9dfd21 | |||
| 08071e6e7e | |||
| ec87174f30 | |||
| 835e5b51c9 | |||
| 07c5ef255e | |||
| 476b55c17d | |||
| 4a53cfa312 | |||
| 50ea515476 | |||
| cbd9f72bc8 | |||
| 29eaa35f4c | |||
| 97c89c39d3 |
+1
-1
@@ -1,5 +1,5 @@
|
||||
[codespell]
|
||||
check-filenames =
|
||||
builtin = clear,rare,usage,informal
|
||||
skip = */.git,*/cmake-build-*,*/.idea,*/completions,*/presets,*/screenshots,*/tests,*/3rdparty,*/logo/ascii
|
||||
skip = */.git,*/cmake-build-*,*/.idea,*/completions,*/presets,*/screenshots,*/tests,*/3rdparty,*/logo/ascii,./src/detection/gpu/asahi_drm.h
|
||||
ignore-words-list = iterm,compiletime,unknwn,pengwin,siduction,master,slave,sur,doas,conexant,ags,bu
|
||||
|
||||
+48
-4
@@ -1,12 +1,56 @@
|
||||
# 2.43.0
|
||||
|
||||
Features:
|
||||
* Support physical core count and package count detection on Solaris (CPU, SunOS)
|
||||
* Improve physical core count detection on FreeBSD (CPU, FreeBSD)
|
||||
* Add option to hide unknown GPUs (GPU)
|
||||
* Detect VRAM type of AMD GPUs on Linux (GPU, Linux)
|
||||
* Support playing media detection on macOS 15.4 (#1737, Media, macOS)
|
||||
* Whether it works on newer versions is unknown
|
||||
* Detect player name for Windows UMP apps (Media, Windows)
|
||||
|
||||
Bugfixes:
|
||||
* Fix disk usage detection on 32-bit Linux (#1734, Disk, Linux)
|
||||
* Fix compiling on Asahi Linux (GPU, Linux)
|
||||
* Fix duplicated playback status (Media, Linux)
|
||||
* Don't show 255 in custom format when muted on macOS (#1750, Sound, macOS)
|
||||
* Remove shared memory detection for AMD GPUs, which doesn't work as expected (GPU, Windows)
|
||||
|
||||
Logos:
|
||||
* new AthenaOS
|
||||
* add Hydra Framework
|
||||
|
||||
# 2.42.0
|
||||
|
||||
Changes:
|
||||
* Normalize the module name `Bios` to `BIOS` (#1721)
|
||||
* No configuration file changes are required because fastfetch parses module names case-insensitively.
|
||||
|
||||
Bugfixes:
|
||||
* Disable disk type detection for virtual disks (PhysicalDisk, Linux, #1669)
|
||||
* Fix incorrect CPU temperature reporting (CPU, OpenBSD)
|
||||
* Fix setting `logo.chafa.symbols` in JSON configuration (Logo, #1709)
|
||||
* Fix non-normalized time display (Uptime, #1720)
|
||||
* Miscellaneous minor fixes
|
||||
|
||||
Features:
|
||||
* Add CPU temperature detection support (CPU, SunOS)
|
||||
* Improve CPU frequency detection (CPU, NetBSD)
|
||||
* Add Wi-Fi detection support (Wifi, NetBSD)
|
||||
* Add Webcam detection support (Camera, OpenBSD)
|
||||
* Requires root privileges
|
||||
|
||||
Logos:
|
||||
* Remove GoralixOS logo (#1699)
|
||||
* Add Aurora logo (#1700)
|
||||
* Add Codex Linux logo (#1701)
|
||||
|
||||
# 2.41.0
|
||||
|
||||
Changes:
|
||||
* Due to [the deprecation](https://github.com/actions/runner-images/issues/11101), Linux x86_64 binaries are now built with Ubuntu 22.04 (Glibc 2.35, Debian 12)
|
||||
* You can always build fastfetch yourself on your own. Please don't report bugs related to this change.
|
||||
|
||||
Bugfixes:
|
||||
* Don't detect disk type for virtual disks (PhysicalDisk, Linux, #1669)
|
||||
|
||||
Features:
|
||||
* Support physical core count detection on non-x86 platforms (CPU, Linux / FreeBSD)
|
||||
* Support CPU frequency detection on PPC64 (CPU, FreeBSD)
|
||||
@@ -881,7 +925,7 @@ Bugfixes:
|
||||
* Fix some presets
|
||||
* Better detection for XTerm terminal fonts (#1095, TerminalFont, Linux)
|
||||
* Remove debug output (#1097, Windows)
|
||||
* Fix command line option `--gpu-hide-type` doesn't work (#1098, GPU)
|
||||
* Fix flag `--gpu-hide-type` doesn't work (#1098, GPU)
|
||||
* Fix wrong date on Raspbian 10 (#1108, DateTime, Linux)
|
||||
* Use `brightness` instead of `actuall_brightness` when detecting current brightness level (Brightness, Linux)
|
||||
* Ref: https://bugzilla.kernel.org/show_bug.cgi?id=203905
|
||||
|
||||
+24
-4
@@ -1,7 +1,7 @@
|
||||
cmake_minimum_required(VERSION 3.12.0) # target_link_libraries with OBJECT libs & project homepage url
|
||||
|
||||
project(fastfetch
|
||||
VERSION 2.41.0
|
||||
VERSION 2.43.0
|
||||
LANGUAGES C
|
||||
DESCRIPTION "Fast neofetch-like system information tool"
|
||||
HOMEPAGE_URL "https://github.com/fastfetch-cli/fastfetch"
|
||||
@@ -326,6 +326,11 @@ endif()
|
||||
fastfetch_encode_c_string("${DATATEXT_JSON_HELP}" DATATEXT_JSON_HELP)
|
||||
fastfetch_load_text(src/data/structure.txt DATATEXT_STRUCTURE)
|
||||
|
||||
if(APPLE)
|
||||
# See src/detection/media/media_apple.m
|
||||
fastfetch_load_text(src/data/nowPlaying.scptd DATATEXT_NOWPLAYING)
|
||||
endif()
|
||||
|
||||
configure_file(src/fastfetch_config.h.in fastfetch_config.h @ONLY)
|
||||
configure_file(src/fastfetch_datatext.h.in fastfetch_datatext.h @ONLY)
|
||||
if(APPLE)
|
||||
@@ -342,7 +347,6 @@ foreach(file ${LOGO_FILES})
|
||||
fastfetch_load_text("${file}" content)
|
||||
get_filename_component(file "${file}" NAME_WE)
|
||||
string(TOUPPER "${file}" file)
|
||||
string(REGEX REPLACE "\\$\\{c([0-9]+)\\}" "$\\1" content "${content}")
|
||||
set(LOGO_BUILTIN_H "${LOGO_BUILTIN_H}#define FASTFETCH_DATATEXT_LOGO_${file} ${content}\n")
|
||||
endforeach()
|
||||
file(GENERATE OUTPUT logo_builtin.h CONTENT "${LOGO_BUILTIN_H}")
|
||||
@@ -797,7 +801,7 @@ elseif(NetBSD)
|
||||
src/detection/uptime/uptime_bsd.c
|
||||
src/detection/users/users_linux.c
|
||||
src/detection/wallpaper/wallpaper_linux.c
|
||||
src/detection/wifi/wifi_nosupport.c
|
||||
src/detection/wifi/wifi_nbsd.c
|
||||
src/detection/wm/wm_nosupport.c
|
||||
src/detection/de/de_linux.c
|
||||
src/detection/wmtheme/wmtheme_linux.c
|
||||
@@ -879,7 +883,7 @@ elseif(OpenBSD)
|
||||
src/detection/uptime/uptime_bsd.c
|
||||
src/detection/users/users_obsd.c
|
||||
src/detection/wallpaper/wallpaper_linux.c
|
||||
src/detection/wifi/wifi_nbsd.c
|
||||
src/detection/wifi/wifi_obsd.c
|
||||
src/detection/wm/wm_nosupport.c
|
||||
src/detection/de/de_linux.c
|
||||
src/detection/wmtheme/wmtheme_linux.c
|
||||
@@ -1834,10 +1838,26 @@ if (BUILD_TESTS)
|
||||
PRIVATE libfastfetch
|
||||
)
|
||||
|
||||
add_executable(fastfetch-test-color
|
||||
tests/color.c
|
||||
)
|
||||
target_link_libraries(fastfetch-test-color
|
||||
PRIVATE libfastfetch
|
||||
)
|
||||
|
||||
add_executable(fastfetch-test-duration
|
||||
tests/duration.c
|
||||
)
|
||||
target_link_libraries(fastfetch-test-duration
|
||||
PRIVATE libfastfetch
|
||||
)
|
||||
|
||||
enable_testing()
|
||||
add_test(NAME test-strbuf COMMAND fastfetch-test-strbuf)
|
||||
add_test(NAME test-list COMMAND fastfetch-test-list)
|
||||
add_test(NAME test-format COMMAND fastfetch-test-format)
|
||||
add_test(NAME test-color COMMAND fastfetch-test-color)
|
||||
add_test(NAME test-duration COMMAND fastfetch-test-duration)
|
||||
endif()
|
||||
|
||||
##################
|
||||
|
||||
Vendored
+24
@@ -1,3 +1,27 @@
|
||||
fastfetch (2.42.0) jammy; urgency=medium
|
||||
|
||||
* Update to 2.42.0
|
||||
|
||||
-- Carter Li <zhangsongcui@live.cn> Wed, 30 Apr 2025 14:08:57 +0800
|
||||
|
||||
fastfetch (2.41.0) jammy; urgency=medium
|
||||
|
||||
* Update to 2.41.0
|
||||
|
||||
-- Carter Li <zhangsongcui@live.cn> Wed, 16 Apr 2025 13:42:58 +0800
|
||||
|
||||
fastfetch (2.40.4) jammy; urgency=medium
|
||||
|
||||
* Update to 2.40.4
|
||||
|
||||
-- Carter Li <zhangsongcui@live.cn> Thu, 10 Apr 2025 15:38:21 +0800
|
||||
|
||||
fastfetch (2.40.3) jammy; urgency=medium
|
||||
|
||||
* Update to 2.40.3
|
||||
|
||||
-- Carter Li <zhangsongcui@live.cn> Mon, 07 Apr 2025 09:29:27 +0800
|
||||
|
||||
fastfetch (2.40.0) jammy; urgency=medium
|
||||
|
||||
* Update to 2.40.0
|
||||
|
||||
Vendored
+1
-1
@@ -1 +1 @@
|
||||
fastfetch_2.40.0_source.buildinfo universe/utils optional
|
||||
fastfetch_2.42.0_source.buildinfo universe/utils optional
|
||||
|
||||
@@ -2053,6 +2053,7 @@
|
||||
"enum": [
|
||||
"integrated",
|
||||
"discrete",
|
||||
"unknown",
|
||||
"none"
|
||||
],
|
||||
"default": "none"
|
||||
|
||||
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"home": "https://github.com/ibireme/yyjson",
|
||||
"license": "MIT ( embed in source )",
|
||||
"version": "0.10.0",
|
||||
"version": "0.11.1",
|
||||
"author": "ibireme"
|
||||
}
|
||||
|
||||
Vendored
+2508
-1264
File diff suppressed because it is too large
Load Diff
Vendored
+800
-570
File diff suppressed because it is too large
Load Diff
@@ -177,6 +177,7 @@ void ffOptionParseColorNoClear(const char* value, FFstrbuf* buffer)
|
||||
if (ffCharIsEnglishAlphabet(value[0]))
|
||||
{
|
||||
FF_APPEND_COLOR_CODE_COND(reset_, FF_COLOR_MODE_RESET)
|
||||
else FF_APPEND_COLOR_CODE_COND(bold_, FF_COLOR_MODE_BOLD)
|
||||
else FF_APPEND_COLOR_CODE_COND(bright_, FF_COLOR_MODE_BOLD)
|
||||
else FF_APPEND_COLOR_CODE_COND(dim_, FF_COLOR_MODE_DIM)
|
||||
else FF_APPEND_COLOR_CODE_COND(italic_, FF_COLOR_MODE_ITALIC)
|
||||
@@ -212,6 +213,35 @@ void ffOptionParseColorNoClear(const char* value, FFstrbuf* buffer)
|
||||
exit(479);
|
||||
}
|
||||
}
|
||||
else if (value[0] == '#')
|
||||
{
|
||||
// RGB color
|
||||
++value;
|
||||
char* pend = NULL;
|
||||
uint32_t rgb = (uint32_t) strtoul(value, &pend, 16);
|
||||
if (pend == value) {
|
||||
fprintf(stderr, "Error: invalid RGB color code found: %s\n", value);
|
||||
exit(479);
|
||||
}
|
||||
if (pend - value > 6) {
|
||||
fprintf(stderr, "Error: RGB color code too long: %s\n", value);
|
||||
exit(479);
|
||||
}
|
||||
else if (pend - value == 3) {
|
||||
rgb = ((rgb & 0xF00) >> 8) * 0x110000 +
|
||||
((rgb & 0x0F0) >> 4) * 0x001100 +
|
||||
((rgb & 0x00F) >> 0) * 0x000011;
|
||||
}
|
||||
else if (pend - value != 6) {
|
||||
fprintf(stderr, "Error: invalid RGB color code length: %s\n", value);
|
||||
exit(479);
|
||||
}
|
||||
|
||||
uint32_t r = rgb >> 16, g = (rgb >> 8) & 0xFF, b = rgb & 0xFF;
|
||||
ffStrbufAppendF(buffer, FF_COLOR_FG_RGB "%u;%u;%u", r, g, b);
|
||||
value = pend;
|
||||
continue;
|
||||
}
|
||||
ffStrbufAppendC(buffer, *value);
|
||||
++value;
|
||||
|
||||
|
||||
+15
-8
@@ -190,19 +190,26 @@ void ffParseGTK(FFstrbuf* buffer, const FFstrbuf* gtk2, const FFstrbuf* gtk3, co
|
||||
}
|
||||
}
|
||||
|
||||
void ffParseDuration(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds, FFstrbuf* result)
|
||||
void ffParseDuration(uint64_t totalSeconds, FFstrbuf* result)
|
||||
{
|
||||
if(days == 0 && hours == 0 && minutes == 0)
|
||||
if(totalSeconds < 60)
|
||||
{
|
||||
ffStrbufAppendF(result, "%u seconds", seconds);
|
||||
ffStrbufAppendF(result, "%u second", (unsigned) totalSeconds);
|
||||
if (totalSeconds != 1)
|
||||
ffStrbufAppendC(result, 's');
|
||||
return;
|
||||
}
|
||||
|
||||
if(seconds >= 30)
|
||||
{
|
||||
minutes++;
|
||||
seconds = 0;
|
||||
}
|
||||
uint32_t seconds = (uint32_t) (totalSeconds % 60);
|
||||
totalSeconds /= 60;
|
||||
if (seconds >= 30)
|
||||
totalSeconds++;
|
||||
|
||||
uint32_t minutes = (uint32_t) (totalSeconds % 60);
|
||||
totalSeconds /= 60;
|
||||
uint32_t hours = (uint32_t) (totalSeconds % 24);
|
||||
totalSeconds /= 24;
|
||||
uint32_t days = (uint32_t) totalSeconds;
|
||||
|
||||
if(days > 0)
|
||||
{
|
||||
|
||||
@@ -27,4 +27,4 @@ int8_t ffVersionCompare(const FFVersion* version1, const FFVersion* version2);
|
||||
|
||||
void ffParseSize(uint64_t bytes, FFstrbuf* result);
|
||||
bool ffParseFrequency(uint32_t mhz, FFstrbuf* result);
|
||||
void ffParseDuration(uint32_t days, uint32_t hours, uint32_t minutes, uint32_t seconds, FFstrbuf* result);
|
||||
void ffParseDuration(uint64_t totalSeconds, FFstrbuf* result);
|
||||
|
||||
@@ -100,7 +100,7 @@ void ffPrintFormat(const char* moduleName, uint8_t moduleIndex, const FFModuleAr
|
||||
ffStrbufPutTo(&buffer, stdout);
|
||||
}
|
||||
|
||||
static void printError(const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, FFPrintType printType, const char* message, va_list arguments)
|
||||
void ffPrintError(const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, FFPrintType printType, const char* message, ...)
|
||||
{
|
||||
if(!instance.config.display.showErrors)
|
||||
return;
|
||||
@@ -110,7 +110,10 @@ static void printError(const char* moduleName, uint8_t moduleIndex, const FFModu
|
||||
if(!instance.config.display.pipe)
|
||||
fputs(FASTFETCH_TEXT_MODIFIER_ERROR, stdout);
|
||||
|
||||
va_list arguments;
|
||||
va_start(arguments, message);
|
||||
vprintf(message, arguments);
|
||||
va_end(arguments);
|
||||
|
||||
if(!instance.config.display.pipe)
|
||||
fputs(FASTFETCH_TEXT_MODIFIER_RESET, stdout);
|
||||
@@ -118,14 +121,6 @@ static void printError(const char* moduleName, uint8_t moduleIndex, const FFModu
|
||||
putchar('\n');
|
||||
}
|
||||
|
||||
void ffPrintError(const char* moduleName, uint8_t moduleIndex, const FFModuleArgs* moduleArgs, FFPrintType printType, const char* message, ...)
|
||||
{
|
||||
va_list arguments;
|
||||
va_start(arguments, message);
|
||||
printError(moduleName, moduleIndex, moduleArgs, printType, message, arguments);
|
||||
va_end(arguments);
|
||||
}
|
||||
|
||||
void ffPrintColor(const FFstrbuf* colorValue)
|
||||
{
|
||||
//If the color is not set, this would reset in \033[m, which resets everything.
|
||||
|
||||
+2
-1
@@ -1139,12 +1139,13 @@
|
||||
},
|
||||
{
|
||||
"long": "gpu-hide-type",
|
||||
"desc": "Specify which types of GPUs should not be displayed",
|
||||
"desc": "Specify which types of GPUs should not be displayed (default: all GPUs are shown, regardless of recognition)",
|
||||
"arg": {
|
||||
"type": "enum",
|
||||
"enum": {
|
||||
"integrated": "Hide integrated GPUs",
|
||||
"discrete": "Hide discrete GPUs",
|
||||
"unknown": "Hide unknown (unrecognized) GPUs",
|
||||
"none": "Do not hide any GPUs"
|
||||
},
|
||||
"default": "none"
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
use scripting additions
|
||||
use framework "/System/Library/PrivateFrameworks/MediaRemote.framework"
|
||||
|
||||
set MRNowPlayingRequest to current application's NSClassFromString("MRNowPlayingRequest")
|
||||
|
||||
if MRNowPlayingRequest's localNowPlayingItem() is missing value then
|
||||
return
|
||||
end if
|
||||
|
||||
if MRNowPlayingRequest's localIsPlaying() then
|
||||
set status to "Playing"
|
||||
else
|
||||
set status to "Paused"
|
||||
end if
|
||||
|
||||
set infoDict to MRNowPlayingRequest's localNowPlayingItem()'s nowPlayingInfo()
|
||||
set bundleObj to MRNowPlayingRequest's localNowPlayingPlayerPath()'s client()
|
||||
|
||||
return status & "
|
||||
" & (infoDict's valueForKey:"kMRMediaRemoteNowPlayingInfoTitle" as text) & "
|
||||
" & (infoDict's valueForKey:"kMRMediaRemoteNowPlayingInfoArtist" as text) & "
|
||||
" & (infoDict's valueForKey:"kMRMediaRemoteNowPlayingInfoAlbum" as text) & "
|
||||
" & (bundleObj's bundleIdentifier() as text) & "
|
||||
" & (bundleObj's displayName() as text)
|
||||
@@ -232,7 +232,7 @@ static uint32_t connectedDevices(void)
|
||||
|
||||
#endif
|
||||
|
||||
const char* ffDetectBluetooth(FFBluetoothOptions* options, FF_MAYBE_UNUSED FFlist* devices /* FFBluetoothResult */)
|
||||
const char* ffDetectBluetooth(FF_MAYBE_UNUSED FFBluetoothOptions* options, FF_MAYBE_UNUSED FFlist* devices /* FFBluetoothResult */)
|
||||
{
|
||||
#ifdef FF_HAVE_DBUS
|
||||
int32_t connectedCount = -1;
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
|
||||
#if FF_HAVE_LINUX_VIDEODEV2
|
||||
#include <linux/videodev2.h>
|
||||
#elif __has_include(<sys/videoio.h>) // OpenBSD
|
||||
#include <sys/videoio.h>
|
||||
#define FF_HAVE_LINUX_VIDEODEV2 1
|
||||
#endif
|
||||
|
||||
const char* ffDetectCamera(FFlist* result)
|
||||
@@ -19,7 +22,13 @@ const char* ffDetectCamera(FFlist* result)
|
||||
path[ARRAY_SIZE(path) - 2] = (char) (i + '0');
|
||||
FF_AUTO_CLOSE_FD int fd = open(path, O_RDONLY);
|
||||
if (fd < 0)
|
||||
break;
|
||||
{
|
||||
if (errno == ENOENT)
|
||||
break;
|
||||
if (errno == ENXIO)
|
||||
continue;
|
||||
return "Failed to open /dev/videoN";
|
||||
}
|
||||
|
||||
struct v4l2_capability cap = {};
|
||||
if (ioctl(fd, VIDIOC_QUERYCAP, &cap) < 0 || !(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE))
|
||||
|
||||
@@ -36,7 +36,7 @@ const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
return "sysctlbyname(hw.model) failed";
|
||||
|
||||
cpu->coresLogical = (uint16_t) ffSysctlGetInt("hw.ncpu", 1);
|
||||
cpu->coresPhysical = 0;
|
||||
cpu->coresPhysical = (uint16_t) ffSysctlGetInt("kern.smp.cores", 0);
|
||||
cpu->coresOnline = (uint16_t) ffSysctlGetInt("kern.smp.cpus", cpu->coresLogical);
|
||||
|
||||
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
|
||||
@@ -57,39 +57,8 @@ const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
// </children>
|
||||
// </group>
|
||||
// </groups>
|
||||
char* line = NULL;
|
||||
size_t len = 0;
|
||||
bool inLvl2 = false, threadGroup = false;
|
||||
uint32_t cpuCount = 0;
|
||||
while (ffStrbufGetline(&line, &len, &buffer))
|
||||
{
|
||||
if (!inLvl2)
|
||||
{
|
||||
if (ffStrStartsWith(line, " <group level=\"2\""))
|
||||
{
|
||||
inLvl2 = true;
|
||||
cpuCount = 0;
|
||||
threadGroup = false;
|
||||
}
|
||||
else if (ffStrStartsWith(line, " <group level=\"1\""))
|
||||
cpu->packages++;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ffStrEquals(line, " </group>"))
|
||||
{
|
||||
cpu->coresPhysical += threadGroup ? 1 : cpuCount;
|
||||
inLvl2 = false;
|
||||
}
|
||||
else if (cpuCount == 0 && ffStrStartsWith(line, " <cpu count=\""))
|
||||
cpuCount = (uint32_t) strtoul(line + strlen(" <cpu count=\""), NULL, 10);
|
||||
else if (cpuCount > 0 && ffStrStartsWith(line, " <flags>"))
|
||||
{
|
||||
if (ffStrContains(line, "<flag name=\"THREAD\">THREAD group</flag>"))
|
||||
threadGroup = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (char* p = buffer.chars; (p = strstr(p, "\n </group>\n")); ++p)
|
||||
cpu->packages++;
|
||||
}
|
||||
|
||||
#if FF_HAVE_CPUSET && (__x86_64__ || __i386__)
|
||||
|
||||
@@ -67,6 +67,7 @@ const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
|
||||
uint32_t freq = (uint32_t) ffSysctlGetInt("machdep.cpu.frequency.target", 0);
|
||||
if (freq == 0) freq = (uint32_t) (ffSysctlGetInt64("hw.cpu0.clock_frequency", 0) / 1000000);
|
||||
if (freq == 0) freq = (uint32_t) ffSysctlGetInt("machdep.dmi.processor-frequency", 0);
|
||||
if (freq > cpu->frequencyBase) cpu->frequencyBase = freq;
|
||||
|
||||
cpu->temperature = FF_CPU_TEMP_UNSET;
|
||||
|
||||
@@ -1,10 +1,53 @@
|
||||
#include "cpu.h"
|
||||
#include "common/sysctl.h"
|
||||
#include "util/stringUtils.h"
|
||||
|
||||
#include <errno.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/sensors.h>
|
||||
|
||||
const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
static const char* detectCPUTemp(FFCPUResult* cpu)
|
||||
{
|
||||
int mib[5] = {CTL_HW, HW_SENSORS, 0, SENSOR_TEMP, 0};
|
||||
|
||||
for (mib[2] = 0; mib[2] < 1024; mib[2]++)
|
||||
{
|
||||
struct sensordev sensordev;
|
||||
size_t sdlen = sizeof(struct sensordev);
|
||||
if (sysctl(mib, 3, &sensordev, &sdlen, NULL, 0) < 0)
|
||||
{
|
||||
if (errno == ENOENT)
|
||||
break;
|
||||
if (errno == ENXIO)
|
||||
continue;
|
||||
return "sysctl(sensordev) failed";
|
||||
}
|
||||
|
||||
if (!ffStrStartsWith(sensordev.xname, "cpu"))
|
||||
continue;
|
||||
|
||||
for (mib[4] = 0; mib[4] < sensordev.maxnumt[SENSOR_TEMP]; mib[4]++)
|
||||
{
|
||||
struct sensor sensor;
|
||||
size_t slen = sizeof(struct sensor);
|
||||
if (sysctl(mib, 5, &sensor, &slen, NULL, 0) < 0)
|
||||
{
|
||||
if (errno != ENOENT)
|
||||
return "sysctl(sensor) failed";
|
||||
continue;
|
||||
}
|
||||
if (sensor.flags & SENSOR_FINVALID)
|
||||
continue;
|
||||
|
||||
cpu->temperature = (double)(sensor.value - 273150000) / 1E6;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return "No sensor for CPU temp found";
|
||||
}
|
||||
|
||||
const char *ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
{
|
||||
if (ffSysctlGetString(CTL_HW, HW_MODEL, &cpu->name))
|
||||
return "sysctl(hw.model) failed";
|
||||
@@ -19,13 +62,7 @@ const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
if (cpuspeed > cpu->frequencyBase) cpu->frequencyBase = cpuspeed;
|
||||
|
||||
cpu->temperature = FF_CPU_TEMP_UNSET;
|
||||
if (options->temp)
|
||||
{
|
||||
struct sensor sensors;
|
||||
size_t size = sizeof(sensors);
|
||||
if (sysctl((int[]) {CTL_HW, HW_SENSORS, 0, SENSOR_TEMP, 0}, 5, &sensors, &size, NULL, 0) == 0)
|
||||
cpu->temperature = (double) (sensors.value - 273150000) / 1E6;
|
||||
}
|
||||
if (options->temp) detectCPUTemp(cpu);
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,60 @@
|
||||
#include "cpu.h"
|
||||
#include "common/processing.h"
|
||||
#include "util/stringUtils.h"
|
||||
#include <kstat.h>
|
||||
|
||||
static const char* detectCPUTempByKstat(kstat_ctl_t* kc, FFCPUResult* cpu)
|
||||
{
|
||||
const char* possibleModules[] = {"temperature", "cpu_temp", "acpi_thermal", NULL};
|
||||
|
||||
for (int i = 0; possibleModules[i] != NULL; i++) {
|
||||
kstat_t* ks = kstat_lookup(kc, possibleModules[i], -1, NULL);
|
||||
if (ks && kstat_read(kc, ks, NULL) >= 0) {
|
||||
kstat_named_t* kn = kstat_data_lookup(ks, "temperature");
|
||||
if (kn) {
|
||||
switch (kn->data_type) {
|
||||
case KSTAT_DATA_INT32:
|
||||
cpu->temperature = (float)kn->value.i32;
|
||||
return NULL;
|
||||
case KSTAT_DATA_UINT32:
|
||||
cpu->temperature = (float)kn->value.ui32;
|
||||
return NULL;
|
||||
case KSTAT_DATA_FLOAT:
|
||||
cpu->temperature = kn->value.f;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return "Failed to find CPU temperature using kstat";
|
||||
}
|
||||
|
||||
static const char* detectCPUTempByIpmiTool(FFCPUResult* cpu)
|
||||
{
|
||||
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
|
||||
const char* error = ffProcessAppendStdOut(&buffer, (char* const[]){
|
||||
"ipmitool",
|
||||
"-c",
|
||||
"sdr",
|
||||
"list",
|
||||
NULL
|
||||
});
|
||||
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
char* line = NULL;
|
||||
size_t len = 0;
|
||||
while (ffStrbufGetline(&line, &len, &buffer))
|
||||
{
|
||||
if (sscanf(line, "CPU%*d Temp,%lf,degrees C,ok", &cpu->temperature) == 1)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return "ipmitool sdr list failed to find CPU temperature";
|
||||
}
|
||||
|
||||
static inline void kstatFreeWrap(kstat_ctl_t** pkc)
|
||||
{
|
||||
assert(pkc);
|
||||
@@ -8,7 +62,46 @@ static inline void kstatFreeWrap(kstat_ctl_t** pkc)
|
||||
kstat_close(*pkc);
|
||||
}
|
||||
|
||||
const char* ffDetectCPUImpl(FF_MAYBE_UNUSED const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
static inline uint16_t countTypeId(kstat_ctl_t* kc, const char* type)
|
||||
{
|
||||
uint64_t low = 0, high = 0;
|
||||
for (kstat_t* ksp = kc->kc_chain; ksp; ksp = ksp->ks_next)
|
||||
{
|
||||
if (ffStrStartsWith(ksp->ks_module, "cpu_info"))
|
||||
{
|
||||
if (kstat_read(kc, ksp, NULL) < 0)
|
||||
continue;
|
||||
|
||||
kstat_named_t* stat = kstat_data_lookup(ksp, type);
|
||||
if (!stat)
|
||||
continue;
|
||||
|
||||
uint32_t id = 0;
|
||||
switch (stat->data_type)
|
||||
{
|
||||
#ifdef _INT64_TYPE
|
||||
case KSTAT_DATA_INT64:
|
||||
case KSTAT_DATA_UINT64:
|
||||
id = (uint32_t) stat->value.ui64;
|
||||
break;
|
||||
#endif
|
||||
case KSTAT_DATA_INT32:
|
||||
case KSTAT_DATA_UINT32:
|
||||
id = stat->value.ui32;
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
}
|
||||
if (__builtin_expect(id > 64, false))
|
||||
high |= 1ULL << (id - 64);
|
||||
else
|
||||
low |= 1ULL << id;
|
||||
}
|
||||
}
|
||||
return (uint16_t) (__builtin_popcountll(low) + __builtin_popcountll(high));
|
||||
}
|
||||
|
||||
const char* ffDetectCPUImpl(const FFCPUOptions* options, FFCPUResult* cpu)
|
||||
{
|
||||
__attribute__((__cleanup__(kstatFreeWrap))) kstat_ctl_t* kc = kstat_open();
|
||||
if (!kc)
|
||||
@@ -40,7 +133,16 @@ const char* ffDetectCPUImpl(FF_MAYBE_UNUSED const FFCPUOptions* options, FFCPURe
|
||||
if (ks && kstat_read(kc, ks, NULL) >= 0)
|
||||
{
|
||||
kstat_named_t* kn = kstat_data_lookup(ks, "ncpus");
|
||||
if (kn) cpu->coresLogical = cpu->coresPhysical = cpu->coresOnline = (uint16_t) kn->value.ui32;
|
||||
if (kn) cpu->coresLogical = cpu->coresOnline = (uint16_t) kn->value.ui32;
|
||||
}
|
||||
|
||||
cpu->packages = countTypeId(kc, "chip_id");
|
||||
cpu->coresPhysical = countTypeId(kc, "core_id");
|
||||
|
||||
if (options->temp)
|
||||
{
|
||||
if (detectCPUTempByKstat(kc, cpu) != NULL)
|
||||
detectCPUTempByIpmiTool(cpu);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -22,11 +22,11 @@ static const char* detectThermalTemp(double* result)
|
||||
|
||||
__attribute__((__cleanup__(ffPdhOpenCloseQuery))) HQUERY query = NULL;
|
||||
|
||||
if (PdhOpenQuery(NULL, 0, &query) != ERROR_SUCCESS)
|
||||
if (PdhOpenQueryW(NULL, 0, &query) != ERROR_SUCCESS)
|
||||
return "Failed to open PDH query";
|
||||
|
||||
HCOUNTER counter = NULL;
|
||||
if (PdhAddEnglishCounter(query,
|
||||
if (PdhAddEnglishCounterW(query,
|
||||
L"\\Thermal Zone Information(*)\\Temperature",
|
||||
0,
|
||||
&counter) != ERROR_SUCCESS)
|
||||
|
||||
@@ -240,9 +240,9 @@ static void detectStats(FFDisk* disk)
|
||||
if(statvfs(disk->mountpoint.chars, &fs) != 0)
|
||||
memset(&fs, 0, sizeof(fs)); //Set all values to 0, so our values get initialized to 0 too
|
||||
|
||||
disk->bytesTotal = fs.f_blocks * fs.f_frsize;
|
||||
disk->bytesFree = fs.f_bfree * fs.f_frsize;
|
||||
disk->bytesAvailable = fs.f_bavail * fs.f_frsize;
|
||||
disk->bytesTotal = fs.f_blocks * (uint64_t) fs.f_frsize;
|
||||
disk->bytesFree = fs.f_bfree * (uint64_t) fs.f_frsize;
|
||||
disk->bytesAvailable = fs.f_bavail * (uint64_t) fs.f_frsize;
|
||||
disk->bytesUsed = 0; // To be filled in ./disk.c
|
||||
|
||||
if (fs.f_files >= fs.f_ffree)
|
||||
|
||||
@@ -335,6 +335,7 @@ const char* ffdsConnectXcbRandr(FFDisplayServerResult* result)
|
||||
{
|
||||
FF_LIBRARY_LOAD(xcbRandr, "dlopen libxcb-randr failed", "libxcb-randr" FF_LIBRARY_EXTENSION, 1)
|
||||
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_connect)
|
||||
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_connection_has_error)
|
||||
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_get_setup)
|
||||
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_setup_roots_iterator)
|
||||
FF_LIBRARY_LOAD_SYMBOL_MESSAGE(xcbRandr, xcb_screen_next)
|
||||
@@ -368,8 +369,11 @@ const char* ffdsConnectXcbRandr(FFDisplayServerResult* result)
|
||||
|
||||
|
||||
data.connection = ffxcb_connect(NULL, NULL);
|
||||
if(data.connection == NULL)
|
||||
if(ffxcb_connection_has_error(data.connection) > 0)
|
||||
{
|
||||
ffxcb_disconnect(data.connection);
|
||||
return "xcb_connect() failed";
|
||||
}
|
||||
|
||||
|
||||
data.result = result;
|
||||
|
||||
@@ -20,9 +20,6 @@ extern int ADL2_Adapter_Graphic_Core_Info_Get(ADL_CONTEXT_HANDLE context, int iA
|
||||
// Function to retrieve memory information from the adapter. Version 2
|
||||
extern int ADL2_Adapter_MemoryInfo2_Get(ADL_CONTEXT_HANDLE context, int iAdapterIndex, ADLMemoryInfo2* lpMemoryInfo2);
|
||||
|
||||
// This function retrieves the VRAM usage of given adapter.
|
||||
extern int ADL2_Adapter_VRAMUsage_Get(ADL_CONTEXT_HANDLE context, int iAdapterIndex, int* iVRAMUsageInMB);
|
||||
|
||||
// This function retrieves the Dedicated VRAM usage of given adapter.
|
||||
extern int ADL2_Adapter_DedicatedVRAMUsage_Get(ADL_CONTEXT_HANDLE context, int iAdapterIndex, int* iVRAMUsageInMB);
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -49,7 +49,6 @@ struct FFAdlData {
|
||||
FF_LIBRARY_SYMBOL(ADL2_Adapter_Graphic_Core_Info_Get)
|
||||
FF_LIBRARY_SYMBOL(ADL2_Adapter_MemoryInfo2_Get)
|
||||
FF_LIBRARY_SYMBOL(ADL2_Adapter_DedicatedVRAMUsage_Get)
|
||||
FF_LIBRARY_SYMBOL(ADL2_Adapter_VRAMUsage_Get)
|
||||
FF_LIBRARY_SYMBOL(ADL2_Adapter_ASICFamilyType_Get)
|
||||
FF_LIBRARY_SYMBOL(ADL2_Overdrive_Caps)
|
||||
FF_LIBRARY_SYMBOL(ADL2_OverdriveN_CapabilitiesX2_Get)
|
||||
@@ -91,7 +90,6 @@ const char* ffDetectAmdGpuInfo(const FFGpuDriverCondition* cond, FFGpuDriverResu
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(atiadl, adlData, ADL2_Adapter_Graphic_Core_Info_Get)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(atiadl, adlData, ADL2_Adapter_MemoryInfo2_Get)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(atiadl, adlData, ADL2_Adapter_DedicatedVRAMUsage_Get)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(atiadl, adlData, ADL2_Adapter_VRAMUsage_Get)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(atiadl, adlData, ADL2_Adapter_ASICFamilyType_Get)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(atiadl, adlData, ADL2_Overdrive_Caps)
|
||||
FF_LIBRARY_LOAD_SYMBOL_VAR_MESSAGE(atiadl, adlData, ADL2_OverdriveN_CapabilitiesX2_Get)
|
||||
@@ -188,29 +186,12 @@ const char* ffDetectAmdGpuInfo(const FFGpuDriverCondition* cond, FFGpuDriverResu
|
||||
FF_DEBUG("ADL2_Adapter_DedicatedVRAMUsage_Get returned %s (%d), usage: %d MB",
|
||||
ffAdlStatusToString(status), status, vramUsage);
|
||||
|
||||
if (status == ADL_OK) {
|
||||
if (status == ADL_OK && vramUsage >= 0) {
|
||||
result.memory->used = (uint64_t) vramUsage * 1024 * 1024;
|
||||
FF_DEBUG("Dedicated VRAM usage: %llu bytes (%d MB)", result.memory->used, vramUsage);
|
||||
} else {
|
||||
FF_DEBUG("Failed to get dedicated VRAM usage");
|
||||
}
|
||||
|
||||
if (result.sharedMemory)
|
||||
{
|
||||
vramUsage = 0;
|
||||
status = adlData.ffADL2_Adapter_VRAMUsage_Get(adlData.apiHandle, device->iAdapterIndex, &vramUsage);
|
||||
FF_DEBUG("ADL2_Adapter_VRAMUsage_Get returned %s (%d), usage: %d MB",
|
||||
ffAdlStatusToString(status), status, vramUsage);
|
||||
|
||||
if (status == ADL_OK) {
|
||||
uint64_t totalUsage = (uint64_t) vramUsage * 1024 * 1024;
|
||||
result.sharedMemory->used = totalUsage - result.memory->used;
|
||||
FF_DEBUG("Total VRAM usage: %llu bytes, Shared VRAM usage: %llu bytes (%llu MB)",
|
||||
totalUsage, result.sharedMemory->used, result.sharedMemory->used / (1024 * 1024));
|
||||
} else {
|
||||
FF_DEBUG("Failed to get total VRAM usage");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (result.memoryType)
|
||||
|
||||
@@ -1,91 +0,0 @@
|
||||
#if __aarch64__ && FF_HAVE_DRM
|
||||
|
||||
#include <drm.h>
|
||||
#include <fcntl.h>
|
||||
#include <sys/ioctl.h>
|
||||
|
||||
#if __has_include(<drm/asahi_drm.h>)
|
||||
|
||||
#include <drm/asahi_drm.h>
|
||||
|
||||
#else
|
||||
|
||||
// https://github.com/AsahiLinux/linux/blob/asahi/include/uapi/drm/asahi_drm.h
|
||||
/* SPDX-License-Identifier: MIT */
|
||||
/* Copyright (C) The Asahi Linux Contributors */
|
||||
|
||||
#define DRM_ASAHI_UNSTABLE_UABI_VERSION 10011
|
||||
|
||||
#define DRM_ASAHI_GET_PARAMS 0x00
|
||||
#define DRM_ASAHI_MAX_CLUSTERS 32
|
||||
struct drm_asahi_params_global
|
||||
{
|
||||
__u32 unstable_uabi_version;
|
||||
__u32 pad0;
|
||||
|
||||
__u64 feat_compat;
|
||||
__u64 feat_incompat;
|
||||
|
||||
__u32 gpu_generation;
|
||||
__u32 gpu_variant;
|
||||
__u32 gpu_revision;
|
||||
__u32 chip_id;
|
||||
|
||||
__u32 num_dies;
|
||||
__u32 num_clusters_total;
|
||||
__u32 num_cores_per_cluster;
|
||||
__u32 num_frags_per_cluster;
|
||||
__u32 num_gps_per_cluster;
|
||||
__u32 num_cores_total_active;
|
||||
__u64 core_masks[DRM_ASAHI_MAX_CLUSTERS];
|
||||
|
||||
__u32 vm_page_size;
|
||||
__u32 pad1;
|
||||
__u64 vm_user_start;
|
||||
__u64 vm_user_end;
|
||||
__u64 vm_usc_start;
|
||||
__u64 vm_usc_end;
|
||||
__u64 vm_kernel_min_size;
|
||||
|
||||
__u32 max_syncs_per_submission;
|
||||
__u32 max_commands_per_submission;
|
||||
__u32 max_commands_in_flight;
|
||||
__u32 max_attachments;
|
||||
|
||||
__u32 timer_frequency_hz;
|
||||
__u32 min_frequency_khz;
|
||||
__u32 max_frequency_khz;
|
||||
__u32 max_power_mw;
|
||||
|
||||
__u32 result_render_size;
|
||||
__u32 result_compute_size;
|
||||
|
||||
__u32 firmware_version[4];
|
||||
};
|
||||
|
||||
struct drm_asahi_get_params
|
||||
{
|
||||
/** @extensions: Pointer to the first extension struct, if any */
|
||||
__u64 extensions;
|
||||
|
||||
/** @param: Parameter group to fetch (MBZ) */
|
||||
__u32 param_group;
|
||||
|
||||
/** @pad: MBZ */
|
||||
__u32 pad;
|
||||
|
||||
/** @value: User pointer to write parameter struct */
|
||||
__u64 pointer;
|
||||
|
||||
/** @value: Size of user buffer, max size supported on return */
|
||||
__u64 size;
|
||||
};
|
||||
|
||||
enum
|
||||
{
|
||||
DRM_IOCTL_ASAHI_GET_PARAMS = DRM_IOWR(DRM_COMMAND_BASE + DRM_ASAHI_GET_PARAMS, struct drm_asahi_get_params),
|
||||
};
|
||||
|
||||
#endif // __has_include
|
||||
|
||||
#endif // FF_HAVE_DRM
|
||||
@@ -21,10 +21,16 @@
|
||||
#include <sys/ioctl.h>
|
||||
#endif
|
||||
|
||||
#include "gpu_asahi.h"
|
||||
|
||||
#define FF_STR_INDIR(x) #x
|
||||
#define FF_STR(x) FF_STR_INDIR(x)
|
||||
#if defined(FF_HAVE_DRM) && defined(__aarch64__)
|
||||
// https://github.com/alyssarosenzweig/linux/blob/agx-uapi-v7/include/uapi/drm/asahi_drm.h
|
||||
// Found in kernel-headers-6.14.4-400.asahi.fc42.aarch64
|
||||
#if __has_include(<drm/asahi_drm.h>)
|
||||
#include <drm/asahi_drm.h>
|
||||
#else
|
||||
#include "asahi_drm.h"
|
||||
#endif
|
||||
#define FF_HAVE_DRM_ASAHI 1
|
||||
#endif
|
||||
|
||||
static bool pciDetectDriver(FFstrbuf* result, FFstrbuf* pciDir, FFstrbuf* buffer, FF_MAYBE_UNUSED const char* drmKey)
|
||||
{
|
||||
@@ -140,6 +146,26 @@ static const char* drmDetectAmdSpecific(const FFGPUOptions* options, FFGPUResult
|
||||
gpu->frequency = (uint32_t) (gpuInfo.max_engine_clk / 1000u);
|
||||
gpu->index = FF_GPU_INDEX_UNSET;
|
||||
gpu->type = gpuInfo.ids_flags & AMDGPU_IDS_FLAGS_FUSION ? FF_GPU_TYPE_INTEGRATED : FF_GPU_TYPE_DISCRETE;
|
||||
#define FF_VRAM_CASE(name, value) case value /* AMDGPU_VRAM_TYPE_ ## name */: ffStrbufSetStatic(&gpu->memoryType, #name); break
|
||||
switch (gpuInfo.vram_type)
|
||||
{
|
||||
FF_VRAM_CASE(UNKNOWN, 0);
|
||||
FF_VRAM_CASE(GDDR1, 1);
|
||||
FF_VRAM_CASE(DDR2, 2);
|
||||
FF_VRAM_CASE(GDDR3, 3);
|
||||
FF_VRAM_CASE(GDDR4, 4);
|
||||
FF_VRAM_CASE(GDDR5, 5);
|
||||
FF_VRAM_CASE(HBM, 6);
|
||||
FF_VRAM_CASE(DDR3, 7);
|
||||
FF_VRAM_CASE(DDR4, 8);
|
||||
FF_VRAM_CASE(GDDR6, 9);
|
||||
FF_VRAM_CASE(DDR5, 10);
|
||||
FF_VRAM_CASE(LPDDR4, 11);
|
||||
FF_VRAM_CASE(LPDDR5, 12);
|
||||
default:
|
||||
ffStrbufAppendF(&gpu->memoryType, "Unknown (%u)", gpuInfo.vram_type);
|
||||
break;
|
||||
}
|
||||
|
||||
struct amdgpu_heap_info heapInfo;
|
||||
if (ffamdgpu_query_heap_info(handle, AMDGPU_GEM_DOMAIN_VRAM, 0, &heapInfo) >= 0)
|
||||
@@ -225,6 +251,11 @@ static void pciDetectAmdSpecific(const FFGPUOptions* options, FFGPUResult* gpu,
|
||||
gpu->shared.used = value;
|
||||
}
|
||||
}
|
||||
|
||||
ffStrbufSubstrBefore(pciDir, pciDirLen);
|
||||
ffStrbufAppendS(pciDir, "/gpu_busy_percent");
|
||||
if (ffReadFileBuffer(pciDir->chars, buffer) && (value = ffStrbufToUInt(buffer, 0)))
|
||||
gpu->coreUsage = (double) value;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -590,13 +621,13 @@ static const char* detectPci(const FFGPUOptions* options, FFlist* gpus, FFstrbuf
|
||||
|
||||
#if __aarch64__
|
||||
|
||||
FF_MAYBE_UNUSED static const char* drmDetectAsahiSpecific(FFGPUResult* gpu, const char* name, FFstrbuf* buffer, const char* drmKey)
|
||||
FF_MAYBE_UNUSED static const char* drmDetectAsahiSpecific(FFGPUResult* gpu, const char* name, FF_MAYBE_UNUSED FFstrbuf* buffer, FF_MAYBE_UNUSED const char* drmKey)
|
||||
{
|
||||
if (sscanf(name, "agx-t%lu", &gpu->deviceId) == 1)
|
||||
ffStrbufSetStatic(&gpu->name, ffCPUAppleCodeToName((uint32_t) gpu->deviceId));
|
||||
ffStrbufSetStatic(&gpu->vendor, FF_GPU_VENDOR_NAME_APPLE);
|
||||
|
||||
#if FF_HAVE_DRM
|
||||
#if FF_HAVE_DRM_ASAHI
|
||||
ffStrbufSetS(buffer, "/dev/dri/");
|
||||
ffStrbufAppendS(buffer, drmKey);
|
||||
FF_AUTO_CLOSE_FD int fd = open(buffer->chars, O_RDONLY);
|
||||
@@ -609,38 +640,32 @@ FF_MAYBE_UNUSED static const char* drmDetectAsahiSpecific(FFGPUResult* gpu, cons
|
||||
.size = sizeof(paramsGlobal),
|
||||
}) >= 0)
|
||||
{
|
||||
ffStrbufAppendF(&gpu->driver, " %u", paramsGlobal.unstable_uabi_version);
|
||||
// They removed `unstable_uabi_version` from the struct. Hopefully they won't introduce new ABI changes.
|
||||
gpu->coreCount = (int32_t) (paramsGlobal.num_clusters_total * paramsGlobal.num_cores_per_cluster);
|
||||
gpu->frequency = paramsGlobal.max_frequency_khz / 1000;
|
||||
gpu->deviceId = paramsGlobal.chip_id;
|
||||
|
||||
// FIXME: They will introduce ABI breaking changes. Always check the latest version
|
||||
// https://www.reddit.com/r/AsahiLinux/comments/1ei2qiv/comment/lgm0v5s/
|
||||
if (paramsGlobal.unstable_uabi_version == DRM_ASAHI_UNSTABLE_UABI_VERSION)
|
||||
if (!gpu->name.length)
|
||||
{
|
||||
gpu->coreCount = (int) paramsGlobal.num_cores_total_active;
|
||||
gpu->frequency = paramsGlobal.max_frequency_khz / 1000;
|
||||
gpu->deviceId = paramsGlobal.chip_id;
|
||||
|
||||
if (!gpu->name.length)
|
||||
{
|
||||
const char* variant = " Unknown";
|
||||
switch (paramsGlobal.gpu_variant) {
|
||||
case 'G':
|
||||
variant = "";
|
||||
break;
|
||||
case 'S':
|
||||
variant = " Pro";
|
||||
break;
|
||||
case 'C':
|
||||
variant = " Max";
|
||||
break;
|
||||
case 'D':
|
||||
variant = " Ultra";
|
||||
break;
|
||||
}
|
||||
ffStrbufSetF(&gpu->name, "Apple M%d%s (G%d%c %02X)",
|
||||
paramsGlobal.gpu_generation - 12, variant,
|
||||
paramsGlobal.gpu_generation, paramsGlobal.gpu_variant,
|
||||
paramsGlobal.gpu_revision + 0xA0);
|
||||
const char* variant = " Unknown";
|
||||
switch (paramsGlobal.gpu_variant) {
|
||||
case 'G':
|
||||
variant = "";
|
||||
break;
|
||||
case 'S':
|
||||
variant = " Pro";
|
||||
break;
|
||||
case 'C':
|
||||
variant = " Max";
|
||||
break;
|
||||
case 'D':
|
||||
variant = " Ultra";
|
||||
break;
|
||||
}
|
||||
ffStrbufSetF(&gpu->name, "Apple M%d%s (G%d%c %02X)",
|
||||
paramsGlobal.gpu_generation - 12, variant,
|
||||
paramsGlobal.gpu_generation, paramsGlobal.gpu_variant,
|
||||
paramsGlobal.gpu_revision + 0xA0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
#include "fastfetch.h"
|
||||
#include "detection/media/media.h"
|
||||
#include "common/library.h"
|
||||
#include "common/processing.h"
|
||||
#include "util/apple/cf_helpers.h"
|
||||
#include "util/apple/osascript.h"
|
||||
#include "fastfetch_datatext.h"
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreFoundation/CoreFoundation.h>
|
||||
@@ -13,7 +15,7 @@ extern CFStringRef MRNowPlayingClientGetBundleIdentifier(id clientObj) __attribu
|
||||
extern CFStringRef MRNowPlayingClientGetParentAppBundleIdentifier(id clientObj) __attribute__((weak_import));
|
||||
void MRMediaRemoteGetNowPlayingApplicationIsPlaying(dispatch_queue_t queue, void (^callback)(BOOL playing)) __attribute__((weak_import));
|
||||
|
||||
static const char* getMedia(FFMediaResult* result)
|
||||
static const char* getMediaByMediaRemote(FFMediaResult* result)
|
||||
{
|
||||
#define FF_TEST_FN_EXISTANCE(fn) if (!fn) return "MediaRemote function " #fn " is not available"
|
||||
FF_TEST_FN_EXISTANCE(MRMediaRemoteGetNowPlayingInfo);
|
||||
@@ -79,8 +81,34 @@ static const char* getMedia(FFMediaResult* result)
|
||||
return error;
|
||||
}
|
||||
|
||||
static const char* getMediaByOsascript(FFMediaResult* result)
|
||||
{
|
||||
FF_STRBUF_AUTO_DESTROY buffer = ffStrbufCreate();
|
||||
// The script must be executed by `/usr/bin/osascript`. `ffOsascript` doesn't work here
|
||||
const char* error = ffProcessAppendStdOut(&buffer, (char* const[]) {
|
||||
"/usr/bin/osascript",
|
||||
"-e",
|
||||
FASTFETCH_DATATEXT_NOWPLAYING,
|
||||
nil
|
||||
});
|
||||
if (error) return error;
|
||||
if (buffer.length == 0) return "No media found";
|
||||
|
||||
// status\ntitle\nartist\nalbum\nbundleName\nappName
|
||||
FFstrbuf* const varList[] = { &result->status, &result->song, &result->artist, &result->album, &result->playerId, &result->player };
|
||||
char* line = NULL;
|
||||
size_t len = 0;
|
||||
for (uint32_t i = 0; i < ARRAY_SIZE(varList) && ffStrbufGetline(&line, &len, &buffer); ++i)
|
||||
ffStrbufSetS(varList[i], line);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void ffDetectMediaImpl(FFMediaResult* media)
|
||||
{
|
||||
const char* error = getMedia(media);
|
||||
ffStrbufAppendS(&media->error, error);
|
||||
const char* error;
|
||||
if (@available(macOS 15.4, *))
|
||||
error = getMediaByOsascript(media);
|
||||
else
|
||||
error = getMediaByMediaRemote(media);
|
||||
if (error) ffStrbufAppendS(&media->error, error);
|
||||
}
|
||||
|
||||
@@ -142,6 +142,7 @@ static bool getBusProperties(FFDBusData* data, const char* busName, FFMediaResul
|
||||
ffStrbufClear(&result->artist);
|
||||
ffStrbufClear(&result->album);
|
||||
ffStrbufClear(&result->url);
|
||||
ffStrbufClear(&result->status);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,11 +19,16 @@ static const char* getMedia(FFMediaResult* media)
|
||||
}
|
||||
|
||||
ffStrbufSetWS(&media->playerId, result.playerId);
|
||||
ffStrbufSet(&media->player, &media->playerId);
|
||||
if (ffStrbufEndsWithIgnCaseS(&media->player, ".exe"))
|
||||
ffStrbufSubstrBefore(&media->player, media->player.length - 4);
|
||||
if (result.playerName[0])
|
||||
{
|
||||
ffStrbufSetWS(&media->player, result.playerName);
|
||||
}
|
||||
else
|
||||
ffStrbufSubstrAfterFirstC(&media->player, '!'); // UWP ID
|
||||
{
|
||||
ffStrbufSet(&media->player, &media->playerId);
|
||||
if (ffStrbufEndsWithIgnCaseS(&media->player, ".exe"))
|
||||
ffStrbufSubstrBefore(&media->player, media->player.length - 4);
|
||||
}
|
||||
ffStrbufSetWS(&media->song, result.song);
|
||||
ffStrbufSetWS(&media->artist, result.artist);
|
||||
ffStrbufSetWS(&media->album, result.album);
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <winrt/Windows.Foundation.h>
|
||||
#include <winrt/Windows.Media.Control.h>
|
||||
#include <winrt/Windows.ApplicationModel.h>
|
||||
#include <wchar.h>
|
||||
|
||||
extern "C"
|
||||
@@ -11,6 +12,7 @@ const char* ffWinrtDetectMedia(FFWinrtMediaResult* result)
|
||||
// C++/WinRT requires Windows 8.1+ and C++ runtime (std::string, exceptions and other stuff)
|
||||
// Make it a separate dll in order not to break Windows 7 support
|
||||
using namespace winrt::Windows::Media::Control;
|
||||
using namespace winrt::Windows::ApplicationModel;
|
||||
|
||||
try
|
||||
{
|
||||
@@ -48,6 +50,11 @@ const char* ffWinrtDetectMedia(FFWinrtMediaResult* result)
|
||||
::wcsncpy(result->song, mediaProps.Title().data(), FF_MEDIA_WIN_RESULT_BUFLEN);
|
||||
::wcsncpy(result->artist, mediaProps.Artist().data(), FF_MEDIA_WIN_RESULT_BUFLEN);
|
||||
::wcsncpy(result->album, mediaProps.AlbumTitle().data(), FF_MEDIA_WIN_RESULT_BUFLEN);
|
||||
try
|
||||
{
|
||||
// Only works for UWP apps
|
||||
::wcsncpy(result->playerName, AppInfo::GetFromAppUserModelId(session.SourceAppUserModelId()).DisplayInfo().DisplayName().data(), FF_MEDIA_WIN_RESULT_BUFLEN);
|
||||
} catch (...) { }
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
typedef struct FFWinrtMediaResult
|
||||
{
|
||||
wchar_t playerId[FF_MEDIA_WIN_RESULT_BUFLEN];
|
||||
wchar_t playerName[FF_MEDIA_WIN_RESULT_BUFLEN];
|
||||
wchar_t song[FF_MEDIA_WIN_RESULT_BUFLEN];
|
||||
wchar_t artist[FF_MEDIA_WIN_RESULT_BUFLEN];
|
||||
wchar_t album[FF_MEDIA_WIN_RESULT_BUFLEN];
|
||||
|
||||
@@ -65,6 +65,7 @@ const char* ffDetectPhysicalDisk(FFlist* result, FFPhysicalDiskOptions* options)
|
||||
FFPhysicalDiskResult* device = (FFPhysicalDiskResult*) ffListAdd(result);
|
||||
ffStrbufInitF(&device->devPath, "/dev/%s", provider->lg_name);
|
||||
ffStrbufInitMove(&device->serial, &identifier);
|
||||
ffStrbufTrim(&device->serial, ' ');
|
||||
ffStrbufInit(&device->revision);
|
||||
ffStrbufInit(&device->interconnect);
|
||||
switch (snapIter->device_type & DEVSTAT_TYPE_IF_MASK)
|
||||
|
||||
@@ -106,7 +106,10 @@ static void parsePhysicalDisk(int dfd, const char* devName, FFPhysicalDiskOption
|
||||
else if (strstr(pathSysDeviceReal, "/nvme") != NULL)
|
||||
ffStrbufSetStatic(&device->interconnect, "NVMe");
|
||||
else if (strstr(pathSysDeviceReal, "/virtio") != NULL)
|
||||
{
|
||||
ffStrbufSetStatic(&device->interconnect, "Virtual");
|
||||
isVirtual = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (ffAppendFileBufferRelative(devfd, "transport", &device->interconnect))
|
||||
@@ -150,7 +153,7 @@ static void parsePhysicalDisk(int dfd, const char* devName, FFPhysicalDiskOption
|
||||
{
|
||||
ffStrbufInit(&device->serial);
|
||||
if (ffReadFileBufferRelative(devfd, "serial", &device->serial))
|
||||
ffStrbufTrimRightSpace(&device->serial);
|
||||
ffStrbufTrim(&device->serial, ' ');
|
||||
}
|
||||
|
||||
{
|
||||
|
||||
@@ -94,7 +94,9 @@ const char* ffDetectSound(FFlist* devices /* List of FFSoundDevice */)
|
||||
}, 0, NULL, &dataSize, &active) == kAudioHardwareNoError)
|
||||
device->active = !!active;
|
||||
|
||||
if (!muted)
|
||||
if (muted)
|
||||
device->volume = 0;
|
||||
else
|
||||
{
|
||||
float volume;
|
||||
dataSize = sizeof(volume);
|
||||
|
||||
@@ -69,6 +69,7 @@ static bool getShellVersionBash(FFstrbuf* exe, FFstrbuf* exePath, FFstrbuf* vers
|
||||
if (*path == '\0')
|
||||
path = exe->chars;
|
||||
ffBinaryExtractStrings(path, extractBashVersion, version, (uint32_t) strlen("@(#)Bash version 0.0.0(0) release GNU"));
|
||||
if (version->length > 0) return true;
|
||||
|
||||
if(!getExeVersionRaw(exe, version))
|
||||
return false;
|
||||
|
||||
@@ -17,6 +17,7 @@ const char* ffDetectWifi(FFlist* result)
|
||||
|
||||
FF_AUTO_CLOSE_FD int sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if(sock < 0) {
|
||||
if_freenameindex(infs);
|
||||
return "socket() failed";
|
||||
}
|
||||
|
||||
@@ -82,22 +83,23 @@ const char* ffDetectWifi(FFlist* result)
|
||||
item->conn.channel = curchan.ic_ieee;
|
||||
item->conn.frequency = curchan.ic_freq;
|
||||
|
||||
if (IEEE80211_IS_CHAN_FHSS(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11 (FHSS)");
|
||||
if (IEEE80211_IS_CHAN_A(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11a");
|
||||
if (IEEE80211_IS_CHAN_B(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11b");
|
||||
if (IEEE80211_IS_CHAN_ANYG(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11g");
|
||||
if (IEEE80211_IS_CHAN_HT(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11n (Wi-Fi 4)");
|
||||
if (IEEE80211_IS_CHAN_VHT(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11ac (Wi-Fi 5)");
|
||||
#ifdef IEEE80211_IS_CHAN_HE // for future use
|
||||
if (IEEE80211_IS_CHAN_HE(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11ax (Wi-Fi 6)");
|
||||
else
|
||||
#endif
|
||||
if (IEEE80211_IS_CHAN_VHT(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11ac (Wi-Fi 5)");
|
||||
else if (IEEE80211_IS_CHAN_HT(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11n (Wi-Fi 4)");
|
||||
else if (IEEE80211_IS_CHAN_ANYG(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11g");
|
||||
else if (IEEE80211_IS_CHAN_B(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11b");
|
||||
else if (IEEE80211_IS_CHAN_A(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11a");
|
||||
else if (IEEE80211_IS_CHAN_FHSS(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11 (FHSS)");
|
||||
}
|
||||
|
||||
union {
|
||||
|
||||
+107
-49
@@ -2,12 +2,21 @@
|
||||
#include "common/io/io.h"
|
||||
#include "util/stringUtils.h"
|
||||
|
||||
#define COMPAT_FREEBSD_NET80211 1
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <net/if_media.h>
|
||||
#include <net80211/ieee80211.h>
|
||||
#include <net80211/ieee80211_ioctl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
// ieee80211 header of NetBSD is full of mess. Add compatibility macros from FreeBSD
|
||||
#undef IEEE80211_IS_CHAN_ANYG
|
||||
#define IEEE80211_IS_CHAN_ANYG(x) (IEEE80211_IS_CHAN_PUREG(x) || IEEE80211_IS_CHAN_G(x))
|
||||
#undef IEEE80211_IS_CHAN_HT
|
||||
#define IEEE80211_IS_CHAN_HT(x) (((x)->ic_flags & IEEE80211_CHAN_HT) != 0)
|
||||
#undef IEEE80211_IS_CHAN_VHT
|
||||
#define IEEE80211_IS_CHAN_VHT(x) (((x)->ic_flags & IEEE80211_CHAN_VHT) != 0)
|
||||
|
||||
const char* ffDetectWifi(FFlist* result)
|
||||
{
|
||||
@@ -18,6 +27,7 @@ const char* ffDetectWifi(FFlist* result)
|
||||
|
||||
FF_AUTO_CLOSE_FD int sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if(sock < 0) {
|
||||
if_freenameindex(infs);
|
||||
return "socket() failed";
|
||||
}
|
||||
|
||||
@@ -41,67 +51,115 @@ const char* ffDetectWifi(FFlist* result)
|
||||
item->conn.channel = 0;
|
||||
item->conn.frequency = 0;
|
||||
|
||||
struct ieee80211_nodereq nr = {};
|
||||
strlcpy(nr.nr_ifname, i->if_name, sizeof(nr.nr_ifname));
|
||||
char ssid[IEEE80211_NWID_LEN + 1] = {};
|
||||
struct ieee80211req ireq = {};
|
||||
strlcpy(ireq.i_name, i->if_name, sizeof(ireq.i_name));
|
||||
ireq.i_type = IEEE80211_IOC_SSID;
|
||||
ireq.i_data = ssid;
|
||||
ireq.i_len = sizeof(ssid) - 1;
|
||||
|
||||
struct ifreq ifr = {};
|
||||
strlcpy(ifr.ifr_name, i->if_name, sizeof(ifr.ifr_name));
|
||||
if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {
|
||||
ffStrbufSetStatic(&item->inf.status, "Unknown");
|
||||
} else {
|
||||
ffStrbufSetStatic(&item->inf.status, ifr.ifr_flags & IFF_UP ? "Up" : "Down");
|
||||
}
|
||||
|
||||
if (ioctl(sock, SIOCG80211NODE, &nr) < 0) {
|
||||
ffStrbufSetStatic(&item->conn.status, "Not associated");
|
||||
if (ioctl(sock, SIOCG80211, &ireq) < 0 || ireq.i_len == 0) {
|
||||
struct ifreq ifr;
|
||||
strlcpy(ifr.ifr_name, i->if_name, sizeof(ifr.ifr_name));
|
||||
if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {
|
||||
ffStrbufSetStatic(&item->inf.status, "Unknown");
|
||||
} else {
|
||||
ffStrbufSetStatic(&item->inf.status, ifr.ifr_flags & IFF_UP ? "Up" : "Down");
|
||||
}
|
||||
ffStrbufAppendS(&item->conn.status, "Not associated");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (nr.nr_nwid_len > 0) {
|
||||
ffStrbufSetStatic(&item->conn.status, "Associated");
|
||||
ffStrbufAppendNS(&item->conn.ssid, nr.nr_nwid_len, (char*)nr.nr_nwid);
|
||||
} else {
|
||||
ffStrbufSetStatic(&item->conn.status, "Not associated");
|
||||
continue;
|
||||
ffStrbufSetStatic(&item->inf.status, "Up");
|
||||
ffStrbufSetStatic(&item->conn.status, "Associated");
|
||||
ffStrbufAppendNS(&item->conn.ssid, ireq.i_len, ssid);
|
||||
|
||||
uint8_t bssid[IEEE80211_ADDR_LEN] = {};
|
||||
ireq.i_type = IEEE80211_IOC_BSSID;
|
||||
ireq.i_data = bssid;
|
||||
ireq.i_len = sizeof(bssid);
|
||||
|
||||
if (ioctl(sock, SIOCG80211, &ireq) >= 0) {
|
||||
ffStrbufSetF(&item->conn.bssid, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5]);
|
||||
}
|
||||
|
||||
ffStrbufSetF(&item->conn.bssid, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
nr.nr_bssid[0], nr.nr_bssid[1], nr.nr_bssid[2],
|
||||
nr.nr_bssid[3], nr.nr_bssid[4], nr.nr_bssid[5]);
|
||||
struct ieee80211_channel curchan = {};
|
||||
ireq.i_type = IEEE80211_IOC_CHANNEL;
|
||||
ireq.i_data = &curchan;
|
||||
ireq.i_len = sizeof(curchan);
|
||||
|
||||
item->conn.channel = nr.nr_channel;
|
||||
if (ioctl(sock, SIOCG80211, &ireq) >= 0) {
|
||||
// item->conn.channel = curchan.ic_ieee; // No ic_ieee in NetBSD
|
||||
item->conn.channel = ffWifiFreqToChannel(curchan.ic_freq);
|
||||
item->conn.frequency = curchan.ic_freq;
|
||||
|
||||
if (nr.nr_max_rssi) {
|
||||
item->conn.signalQuality = ((float)nr.nr_rssi / nr.nr_max_rssi) * 100.0;
|
||||
#ifdef IEEE80211_IS_CHAN_HE // for future use
|
||||
if (IEEE80211_IS_CHAN_HE(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11ax (Wi-Fi 6)");
|
||||
else
|
||||
#endif
|
||||
if (IEEE80211_IS_CHAN_VHT(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11ac (Wi-Fi 5)");
|
||||
else if (IEEE80211_IS_CHAN_HT(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11n (Wi-Fi 4)");
|
||||
else if (IEEE80211_IS_CHAN_ANYG(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11g");
|
||||
else if (IEEE80211_IS_CHAN_B(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11b");
|
||||
else if (IEEE80211_IS_CHAN_A(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11a");
|
||||
else if (IEEE80211_IS_CHAN_FHSS(&curchan))
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11 (FHSS)");
|
||||
}
|
||||
|
||||
if (nr.nr_flags & IEEE80211_NODEREQ_HT) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11n (Wi-Fi 4)");
|
||||
} else if (nr.nr_flags & IEEE80211_NODEREQ_VHT) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11ac (Wi-Fi 5)");
|
||||
} else if (nr.nr_chan_flags & IEEE80211_CHANINFO_5GHZ) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11a");
|
||||
} else if (nr.nr_chan_flags & IEEE80211_CHANINFO_2GHZ) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11g");
|
||||
union {
|
||||
struct ieee80211req_sta_req req;
|
||||
uint8_t buf[1024];
|
||||
} stareq = {};
|
||||
memcpy(stareq.req.is_u.macaddr, bssid, sizeof(bssid));
|
||||
ireq.i_type = IEEE80211_IOC_STA_INFO;
|
||||
ireq.i_data = &stareq;
|
||||
ireq.i_len = sizeof(stareq);
|
||||
|
||||
if (ioctl(sock, SIOCG80211, &ireq) >= 0) {
|
||||
struct ieee80211req_sta_info* sta = stareq.req.info;
|
||||
if (sta->isi_len != 0) {
|
||||
int8_t rssi = (int8_t) sta->isi_rssi; // Strangely, `sta->isi_rssi` is unsigned
|
||||
item->conn.signalQuality = (rssi >= -50 ? 100 : rssi <= -100 ? 0 : (rssi + 100) * 2);
|
||||
|
||||
if (sta->isi_txrate) {
|
||||
item->conn.txRate = (double)sta->isi_txrate / 2.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ieee80211_wpaparams wpa = {};
|
||||
strlcpy(wpa.i_name, i->if_name, sizeof(wpa.i_name));
|
||||
|
||||
if (ioctl(sock, SIOCG80211WPAPARMS, &wpa) >= 0 && wpa.i_enabled) {
|
||||
if (wpa.i_protos & IEEE80211_WPA_PROTO_WPA2)
|
||||
ffStrbufSetStatic(&item->conn.security, "WPA2");
|
||||
else if (wpa.i_protos & IEEE80211_WPA_PROTO_WPA1)
|
||||
ireq.i_type = IEEE80211_IOC_AUTHMODE;
|
||||
ireq.i_data = NULL;
|
||||
ireq.i_len = 0;
|
||||
if (ioctl(sock, SIOCG80211, &ireq) >= 0) {
|
||||
switch (ireq.i_val) {
|
||||
case IEEE80211_AUTH_NONE:
|
||||
ffStrbufSetStatic(&item->conn.security, "Insecure");
|
||||
break;
|
||||
case IEEE80211_AUTH_OPEN:
|
||||
ffStrbufSetStatic(&item->conn.security, "Open");
|
||||
break;
|
||||
case IEEE80211_AUTH_SHARED:
|
||||
ffStrbufSetStatic(&item->conn.security, "Shared");
|
||||
break;
|
||||
case IEEE80211_AUTH_8021X:
|
||||
ffStrbufSetStatic(&item->conn.security, "8021X");
|
||||
break;
|
||||
case IEEE80211_AUTH_AUTO:
|
||||
ffStrbufSetStatic(&item->conn.security, "Auto");
|
||||
break;
|
||||
case IEEE80211_AUTH_WPA:
|
||||
ffStrbufSetStatic(&item->conn.security, "WPA");
|
||||
} else {
|
||||
struct ieee80211_nwkey nwkey = {};
|
||||
strlcpy(nwkey.i_name, i->if_name, sizeof(nwkey.i_name));
|
||||
|
||||
if (ioctl(sock, SIOCG80211NWKEY, &nwkey) >= 0) {
|
||||
if (nwkey.i_wepon)
|
||||
ffStrbufSetStatic(&item->conn.security, "WEP");
|
||||
else
|
||||
ffStrbufSetStatic(&item->conn.security, "Open");
|
||||
break;
|
||||
default:
|
||||
ffStrbufSetF(&item->conn.security, "Unknown (%d)", ireq.i_val);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
#include "wifi.h"
|
||||
#include "common/io/io.h"
|
||||
#include "util/stringUtils.h"
|
||||
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <net80211/ieee80211.h>
|
||||
#include <net80211/ieee80211_ioctl.h>
|
||||
#include <unistd.h>
|
||||
|
||||
const char* ffDetectWifi(FFlist* result)
|
||||
{
|
||||
struct if_nameindex* infs = if_nameindex();
|
||||
if(!infs) {
|
||||
return "if_nameindex() failed";
|
||||
}
|
||||
|
||||
FF_AUTO_CLOSE_FD int sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||
if(sock < 0) {
|
||||
return "socket() failed";
|
||||
}
|
||||
|
||||
for(struct if_nameindex* i = infs; !(i->if_index == 0 && i->if_name == NULL); ++i)
|
||||
{
|
||||
if (!ffStrStartsWith(i->if_name, "iwm")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
FFWifiResult* item = (FFWifiResult*) ffListAdd(result);
|
||||
ffStrbufInitS(&item->inf.description, i->if_name);
|
||||
ffStrbufInit(&item->inf.status);
|
||||
ffStrbufInit(&item->conn.status);
|
||||
ffStrbufInit(&item->conn.ssid);
|
||||
ffStrbufInit(&item->conn.bssid);
|
||||
ffStrbufInit(&item->conn.protocol);
|
||||
ffStrbufInit(&item->conn.security);
|
||||
item->conn.signalQuality = 0.0/0.0;
|
||||
item->conn.rxRate = 0.0/0.0;
|
||||
item->conn.txRate = 0.0/0.0;
|
||||
item->conn.channel = 0;
|
||||
item->conn.frequency = 0;
|
||||
|
||||
struct ieee80211_nodereq nr = {};
|
||||
strlcpy(nr.nr_ifname, i->if_name, sizeof(nr.nr_ifname));
|
||||
|
||||
struct ifreq ifr = {};
|
||||
strlcpy(ifr.ifr_name, i->if_name, sizeof(ifr.ifr_name));
|
||||
if (ioctl(sock, SIOCGIFFLAGS, &ifr) < 0) {
|
||||
ffStrbufSetStatic(&item->inf.status, "Unknown");
|
||||
} else {
|
||||
ffStrbufSetStatic(&item->inf.status, ifr.ifr_flags & IFF_UP ? "Up" : "Down");
|
||||
}
|
||||
|
||||
if (ioctl(sock, SIOCG80211NODE, &nr) < 0) {
|
||||
ffStrbufSetStatic(&item->conn.status, "Not associated");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (nr.nr_nwid_len > 0) {
|
||||
ffStrbufSetStatic(&item->conn.status, "Associated");
|
||||
ffStrbufAppendNS(&item->conn.ssid, nr.nr_nwid_len, (char*)nr.nr_nwid);
|
||||
} else {
|
||||
ffStrbufSetStatic(&item->conn.status, "Not associated");
|
||||
continue;
|
||||
}
|
||||
|
||||
ffStrbufSetF(&item->conn.bssid, "%02X:%02X:%02X:%02X:%02X:%02X",
|
||||
nr.nr_bssid[0], nr.nr_bssid[1], nr.nr_bssid[2],
|
||||
nr.nr_bssid[3], nr.nr_bssid[4], nr.nr_bssid[5]);
|
||||
|
||||
item->conn.channel = nr.nr_channel;
|
||||
|
||||
if (nr.nr_max_rssi) {
|
||||
item->conn.signalQuality = ((float)nr.nr_rssi / nr.nr_max_rssi) * 100.0;
|
||||
}
|
||||
|
||||
if (nr.nr_flags & IEEE80211_NODEREQ_HT) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11n (Wi-Fi 4)");
|
||||
} else if (nr.nr_flags & IEEE80211_NODEREQ_VHT) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11ac (Wi-Fi 5)");
|
||||
} else if (nr.nr_chan_flags & IEEE80211_CHANINFO_5GHZ) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11a");
|
||||
} else if (nr.nr_chan_flags & IEEE80211_CHANINFO_2GHZ) {
|
||||
ffStrbufSetStatic(&item->conn.protocol, "802.11g");
|
||||
}
|
||||
|
||||
struct ieee80211_wpaparams wpa = {};
|
||||
strlcpy(wpa.i_name, i->if_name, sizeof(wpa.i_name));
|
||||
|
||||
if (ioctl(sock, SIOCG80211WPAPARMS, &wpa) >= 0 && wpa.i_enabled) {
|
||||
if (wpa.i_protos & IEEE80211_WPA_PROTO_WPA2)
|
||||
ffStrbufSetStatic(&item->conn.security, "WPA2");
|
||||
else if (wpa.i_protos & IEEE80211_WPA_PROTO_WPA1)
|
||||
ffStrbufSetStatic(&item->conn.security, "WPA");
|
||||
} else {
|
||||
struct ieee80211_nwkey nwkey = {};
|
||||
strlcpy(nwkey.i_name, i->if_name, sizeof(nwkey.i_name));
|
||||
|
||||
if (ioctl(sock, SIOCG80211NWKEY, &nwkey) >= 0) {
|
||||
if (nwkey.i_wepon)
|
||||
ffStrbufSetStatic(&item->conn.security, "WEP");
|
||||
else
|
||||
ffStrbufSetStatic(&item->conn.security, "Open");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if_freenameindex(infs);
|
||||
return NULL;
|
||||
}
|
||||
+3
-1
@@ -26,7 +26,9 @@
|
||||
#include "options/general.h"
|
||||
|
||||
#ifdef __has_builtin
|
||||
#if __has_builtin(__builtin_types_compatible_p)
|
||||
#if __has_builtin(__is_array)
|
||||
#define ARRAY_SIZE(x) ({ static_assert(__is_array(__typeof__(x)), "Must be an array"); (uint32_t) (sizeof(x) / sizeof(*(x))); })
|
||||
#elif __has_builtin(__builtin_types_compatible_p)
|
||||
#define ARRAY_SIZE(x) ({ static_assert(!__builtin_types_compatible_p(__typeof__(x), __typeof__(&*(x))), "Must not be a pointer"); (uint32_t) (sizeof(x) / sizeof(*(x))); })
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -2,3 +2,7 @@
|
||||
|
||||
#define FASTFETCH_DATATEXT_JSON_HELP @DATATEXT_JSON_HELP@
|
||||
#define FASTFETCH_DATATEXT_STRUCTURE @DATATEXT_STRUCTURE@
|
||||
|
||||
#ifdef __APPLE__
|
||||
#define FASTFETCH_DATATEXT_NOWPLAYING @DATATEXT_NOWPLAYING@
|
||||
#endif
|
||||
|
||||
+21
-21
@@ -1,21 +1,21 @@
|
||||
${c1}rrrrrraaaaaaaaaaaayyyy
|
||||
${c1}xxrrrrrrrraaaaaaaaaaaayyyyyyyyy
|
||||
${c1}xxxxxrrrrrrrraaaaaaaaaaaayyyyyyy${c3}yyyyy${c2}yyyyyyyyyy
|
||||
${c1}xxxxxxxrrrrrrrraaaaa ${c2}aaaaayyyyyyyyyyyyyyyyyyy
|
||||
${c1}xxxxxx${c3}xxx${c1}rrrrrrrraaaa ${c2}aaaaaaayyyyyyyyyyyyyyyyy
|
||||
${c1}xxxxxx${c3}xxxxxr${c1}rrrrrrraa ${c2}aaaaaaaaay${c3}yyyyyyyyy${c2}yyyy ${c1}yy
|
||||
${c1}xxxxxxx${c3}xxx${c1}xxrrrrrrrra ${c2}aaaaaaaaa${c3}ayyyyyyyyyyyy${c1}yyyyyy
|
||||
${c1}xxxxxxxxxxxxrrrrrrrr ${c2}aaaaaaaaaaa${c3}yyyyyyyyyyyy${c1}yyyyyyy
|
||||
${c1}xxxxxxxxxxxxxrrrrrr ${c2}raaaaaaaaaaaayyy${c3}yyyyyyyy${c1}yyyyyy${c1}yyy
|
||||
${c1}xxxxxxxxxxxxxrrrrr ${c2}rraaaaaaaaaaaayyyyy${c3}yy${c2}yyyyyy ${c1}yyyyyy
|
||||
${c1}xxxxxxxx${c3}xxxx${c1}xrrrrr${c2}rr${c3}raaaaaaa${c2}aaaaayyyyyyyyyy ${c1}yyyyyyyyy
|
||||
${c1}xxxxxxx${c3}xxxx${c1}xxrrrrrrr${c3}raaaaaa${c2}aaaaaayyyyyyy ${c1}yyyyyyyyyyyy
|
||||
${c1}xxxxxxx${c3}xxx${c1}xxxrrrrrrrr${c3}aaaaaa${c2}aaaaaayyyy ${c1}yyyyyyyyyyyyyy
|
||||
${c1}xxxxxxxxxxxxrrrrrrrra ${c2}aaaaaaaaaay ${c1}yyyyyyyyyyyyyyyy
|
||||
${c1}xxxxxxxxxxxrrrrrrr ${c2}aaaaaaaaaaaayyyy${c1}yyyyyyyyyyyyy
|
||||
${c1}xxxxxxx${c3}xxxrr${c1}rrrr ${c2}raaaaaaaaaaaa ${c1}yyyyyyyyyyyyyyy
|
||||
${c1}xxxxxxxxrrrr ${c2}rrraaaaaaaaa ${c1}aayyyyyyyyyyyyyy
|
||||
${c1}xxxxxxrrrrrrr ${c2}aaaaaa ${c1}aaaayyyyyyyyyyyy
|
||||
${c1}xxxrrrrrr ${c2}raaa ${c1}aaaaaaayyyyyyyyy
|
||||
${c1}rrrr ${c2}rr ${c1}aaaaaaaaaayyyyyy
|
||||
${c2}r ${c1}aaaaaaaaaa
|
||||
$1rrrrrraaaaaaaaaaaayyyy
|
||||
$1xxrrrrrrrraaaaaaaaaaaayyyyyyyyy
|
||||
$1xxxxxrrrrrrrraaaaaaaaaaaayyyyyyy$3yyyyy$2yyyyyyyyyy
|
||||
$1xxxxxxxrrrrrrrraaaaa $2aaaaayyyyyyyyyyyyyyyyyyy
|
||||
$1xxxxxx$3xxx$1rrrrrrrraaaa $2aaaaaaayyyyyyyyyyyyyyyyy
|
||||
$1xxxxxx$3xxxxxr$1rrrrrrraa $2aaaaaaaaay$3yyyyyyyyy$2yyyy $1yy
|
||||
$1xxxxxxx$3xxx$1xxrrrrrrrra $2aaaaaaaaa$3ayyyyyyyyyyyy$1yyyyyy
|
||||
$1xxxxxxxxxxxxrrrrrrrr $2aaaaaaaaaaa$3yyyyyyyyyyyy$1yyyyyyy
|
||||
$1xxxxxxxxxxxxxrrrrrr $2raaaaaaaaaaaayyy$3yyyyyyyy$1yyyyyy$1yyy
|
||||
$1xxxxxxxxxxxxxrrrrr $2rraaaaaaaaaaaayyyyy$3yy$2yyyyyy $1yyyyyy
|
||||
$1xxxxxxxx$3xxxx$1xrrrrr$2rr$3raaaaaaa$2aaaaayyyyyyyyyy $1yyyyyyyyy
|
||||
$1xxxxxxx$3xxxx$1xxrrrrrrr$3raaaaaa$2aaaaaayyyyyyy $1yyyyyyyyyyyy
|
||||
$1xxxxxxx$3xxx$1xxxrrrrrrrr$3aaaaaa$2aaaaaayyyy $1yyyyyyyyyyyyyy
|
||||
$1xxxxxxxxxxxxrrrrrrrra $2aaaaaaaaaay $1yyyyyyyyyyyyyyyy
|
||||
$1xxxxxxxxxxxrrrrrrr $2aaaaaaaaaaaayyyy$1yyyyyyyyyyyyy
|
||||
$1xxxxxxx$3xxxrr$1rrrr $2raaaaaaaaaaaa $1yyyyyyyyyyyyyyy
|
||||
$1xxxxxxxxrrrr $2rrraaaaaaaaa $1aayyyyyyyyyyyyyy
|
||||
$1xxxxxxrrrrrrr $2aaaaaa $1aaaayyyyyyyyyyyy
|
||||
$1xxxrrrrrr $2raaa $1aaaaaaayyyyyyyyy
|
||||
$1rrrr $2rr $1aaaaaaaaaayyyyyy
|
||||
$2r $1aaaaaaaaaa
|
||||
+11
-11
@@ -1,16 +1,16 @@
|
||||
${c3} ,-^-___
|
||||
${c3} /\\\///
|
||||
${c2}refined.${c1} /\\\\//
|
||||
${c2}reliable.${c1} /\\\///
|
||||
${c2}ready.${c1} /\\/////\
|
||||
$3 ,-^-___
|
||||
$3 /\\\///
|
||||
$2refined.$1 /\\\\//
|
||||
$2reliable.$1 /\\\///
|
||||
$2ready.$1 /\\/////\
|
||||
__///\\\\/////\
|
||||
${c3} _//////\\\\\\\////
|
||||
${c1} ///////${c3}\\\\\\\\\\//
|
||||
//////${c1}\\\\\/
|
||||
$3 _//////\\\\\\\////
|
||||
$1 ///////$3\\\\\\\\\\//
|
||||
//////$1\\\\\/
|
||||
/////\\\\\/
|
||||
/////${c3}\\\\/
|
||||
/////$3\\\\/
|
||||
/\\///\\\/
|
||||
/\\\/${c1}\\/
|
||||
/\\\/$1\\/
|
||||
/\\\\//
|
||||
//////
|
||||
/// ${c3}\\\\\
|
||||
/// $3\\\\\
|
||||
@@ -1,15 +1,15 @@
|
||||
${c2}.
|
||||
${c1}. ${c2}.{!
|
||||
${c1}.L! ${c2}J@||*
|
||||
${c1}gJJJJL` ${c2}g@FFS"
|
||||
${c1},@FFFJF`${c2}_g@@LLP`
|
||||
${c1}_@FFFFF`${c2}_@@@@@P` ${c4}.
|
||||
${c1}J@@@LLF ${c2}_@@@@@P` ${c4}.J!
|
||||
${c1}g@@@@@" ${c2}_@@@@@P`${c3}. ${c4}.L|||*
|
||||
${c1}g@@@@M" ${c2}"VP`${c3}.L! ${c4}<@JJJJ`
|
||||
${c1}"@N" ${c3}:||||! ${c4}JFFFFS"
|
||||
${c3}.{JJ||F`${c4}_gFFFF@'
|
||||
${c3}.@FJJJF`${c4},@LFFFF`
|
||||
${c3}_@FFFFF ${c4}VLLLP`
|
||||
${c3}J@@LL@" ${c4}`"
|
||||
${c3}V@@"
|
||||
$2.
|
||||
$1. $2.{!
|
||||
$1.L! $2J@||*
|
||||
$1gJJJJL` $2g@FFS"
|
||||
$1,@FFFJF`$2_g@@LLP`
|
||||
$1_@FFFFF`$2_@@@@@P` $4.
|
||||
$1J@@@LLF $2_@@@@@P` $4.J!
|
||||
$1g@@@@@" $2_@@@@@P`$3. $4.L|||*
|
||||
$1g@@@@M" $2"VP`$3.L! $4<@JJJJ`
|
||||
$1"@N" $3:||||! $4JFFFFS"
|
||||
$3.{JJ||F`$4_gFFFF@'
|
||||
$3.@FJJJF`$4,@LFFFF`
|
||||
$3_@FFFFF $4VLLLP`
|
||||
$3J@@LL@" $4`"
|
||||
$3V@@"
|
||||
@@ -1,6 +1,6 @@
|
||||
${c1} /\ /\
|
||||
/${c2}/ ${c1}\ \
|
||||
/${c2}// ${c1}\ \
|
||||
/${c2}// ${c1}\ \
|
||||
${c2}// ${c1}\ \
|
||||
$1 /\ /\
|
||||
/$2/ $1\ \
|
||||
/$2// $1\ \
|
||||
/$2// $1\ \
|
||||
$2// $1\ \
|
||||
\
|
||||
@@ -1,9 +1,9 @@
|
||||
___________
|
||||
/ \
|
||||
/ ${c2}______${c1} \
|
||||
/ ${c2}/ \${c1} \
|
||||
| ${c2}( )${c1} \
|
||||
/ ${c2}\______/${c1} |
|
||||
/ $2______$1 \
|
||||
/ $2/ \$1 \
|
||||
| $2( )$1 \
|
||||
/ $2\______/$1 |
|
||||
| |
|
||||
/ \
|
||||
| |
|
||||
|
||||
+28
-28
@@ -1,28 +1,28 @@
|
||||
${c2}..${c1}
|
||||
${c2}..${c1}
|
||||
${c2}:..${c1}
|
||||
${c2}:+++.${c1}
|
||||
.:::++${c2}++++${c1}+::.
|
||||
.:+######${c2}++++${c1}######+:.
|
||||
.+#########${c2}+++++${c1}##########:.
|
||||
.+##########${c2}+++++++${c1}##${c2}+${c1}#########+.
|
||||
+###########${c2}+++++++++${c1}############:
|
||||
+##########${c2}++++++${c1}#${c2}++++${c1}#${c2}+${c1}###########+
|
||||
+###########${c2}+++++${c1}###${c2}++++${c1}#${c2}+${c1}###########+
|
||||
:##########${c2}+${c1}#${c2}++++${c1}####${c2}++++${c1}#${c2}+${c1}############:
|
||||
###########${c2}+++++${c1}#####${c2}+++++${c1}#${c2}+${c1}###${c2}++${c1}######+
|
||||
.##########${c2}++++++${c1}#####${c2}++++++++++++${c1}#######.
|
||||
.##########${c2}+++++++++++++++++++${c1}###########.
|
||||
#####${c2}++++++++++++++${c1}###${c2}++++++++${c1}#########+
|
||||
:###${c2}++++++++++${c1}#########${c2}+++++++${c1}#########:
|
||||
+######${c2}+++++${c1}##########${c2}++++++++${c1}#######+
|
||||
+####${c2}+++++${c1}###########${c2}+++++++++${c1}#####+
|
||||
:##${c2}++++++${c1}############${c2}++++++++++${c1}##:
|
||||
.${c2}++++++${c1}#############${c2}++++++++++${c1}+.
|
||||
:${c2}++++${c1}###############${c2}+++++++${c1}::
|
||||
.${c2}++. .:+${c1}##############${c2}+++++++${c1}..
|
||||
${c2}.:.${c1} ..::++++++::..:${c2}++++${c1}+.
|
||||
${c2}.${c1} ${c2}.:+++${c1}.
|
||||
${c2}.:${c1}:
|
||||
${c2}..${c1}
|
||||
${c2}..${c1}
|
||||
$2..$1
|
||||
$2..$1
|
||||
$2:..$1
|
||||
$2:+++.$1
|
||||
.:::++$2++++$1+::.
|
||||
.:+######$2++++$1######+:.
|
||||
.+#########$2+++++$1##########:.
|
||||
.+##########$2+++++++$1##$2+$1#########+.
|
||||
+###########$2+++++++++$1############:
|
||||
+##########$2++++++$1#$2++++$1#$2+$1###########+
|
||||
+###########$2+++++$1###$2++++$1#$2+$1###########+
|
||||
:##########$2+$1#$2++++$1####$2++++$1#$2+$1############:
|
||||
###########$2+++++$1#####$2+++++$1#$2+$1###$2++$1######+
|
||||
.##########$2++++++$1#####$2++++++++++++$1#######.
|
||||
.##########$2+++++++++++++++++++$1###########.
|
||||
#####$2++++++++++++++$1###$2++++++++$1#########+
|
||||
:###$2++++++++++$1#########$2+++++++$1#########:
|
||||
+######$2+++++$1##########$2++++++++$1#######+
|
||||
+####$2+++++$1###########$2+++++++++$1#####+
|
||||
:##$2++++++$1############$2++++++++++$1##:
|
||||
.$2++++++$1#############$2++++++++++$1+.
|
||||
:$2++++$1###############$2+++++++$1::
|
||||
.$2++. .:+$1##############$2+++++++$1..
|
||||
$2.:.$1 ..::++++++::..:$2++++$1+.
|
||||
$2.$1 $2.:+++$1.
|
||||
$2.:$1:
|
||||
$2..$1
|
||||
$2..$1
|
||||
+12
-12
@@ -1,19 +1,19 @@
|
||||
${c2} `.-/::/-``
|
||||
$2 `.-/::/-``
|
||||
.-/osssssssso/.
|
||||
:osyysssssssyyys+-
|
||||
`.+yyyysssssssssyyyyy+.
|
||||
`/syyyyyssssssssssyyyyys-`
|
||||
`/yhyyyyysss${c1}++${c2}ssosyyyyhhy/`
|
||||
.ohhhyyyys${c1}o++/+o${c2}so${c1}+${c2}syy${c1}+${c2}shhhho.
|
||||
.shhhhys${c1}oo++//+${c2}sss${c1}+++${c2}yyy${c1}+s${c2}hhhhs.
|
||||
-yhhhhs${c1}+++++++o${c2}ssso${c1}+++${c2}yyy${c1}s+o${c2}hhddy:
|
||||
-yddhhy${c1}o+++++o${c2}syyss${c1}++++${c2}yyy${c1}yooy${c2}hdddy-
|
||||
.yddddhs${c1}o++o${c2}syyyyys${c1}+++++${c2}yyhh${c1}sos${c2}hddddy`
|
||||
`odddddhyosyhyyyyyy${c1}++++++${c2}yhhhyosddddddo
|
||||
.dmdddddhhhhhhhyyyo${c1}+++++${c2}shhhhhohddddmmh.
|
||||
ddmmdddddhhhhhhhso${c1}++++++${c2}yhhhhhhdddddmmdy
|
||||
dmmmdddddddhhhyso${c1}++++++${c2}shhhhhddddddmmmmh
|
||||
-dmmmdddddddhhys${c1}o++++o${c2}shhhhdddddddmmmmd-
|
||||
`/yhyyyyysss$1++$2ssosyyyyhhy/`
|
||||
.ohhhyyyys$1o++/+o$2so$1+$2syy$1+$2shhhho.
|
||||
.shhhhys$1oo++//+$2sss$1+++$2yyy$1+s$2hhhhs.
|
||||
-yhhhhs$1+++++++o$2ssso$1+++$2yyy$1s+o$2hhddy:
|
||||
-yddhhy$1o+++++o$2syyss$1++++$2yyy$1yooy$2hdddy-
|
||||
.yddddhs$1o++o$2syyyyys$1+++++$2yyhh$1sos$2hddddy`
|
||||
`odddddhyosyhyyyyyy$1++++++$2yhhhyosddddddo
|
||||
.dmdddddhhhhhhhyyyo$1+++++$2shhhhhohddddmmh.
|
||||
ddmmdddddhhhhhhhso$1++++++$2yhhhhhhdddddmmdy
|
||||
dmmmdddddddhhhyso$1++++++$2shhhhhddddddmmmmh
|
||||
-dmmmdddddddhhys$1o++++o$2shhhhdddddddmmmmd-
|
||||
.smmmmddddddddhhhhhhhhhdddddddddmmmms.
|
||||
`+ydmmmdddddddddddddddddddmmmmdy/.
|
||||
`.:+ooyyddddddddddddyyso+:.`
|
||||
+17
-17
@@ -1,17 +1,17 @@
|
||||
${c2}__
|
||||
${c2}gpBBBBBBBBBP
|
||||
${c2}_gBBBBBBBBBRP
|
||||
${c2}4BBBBBBBBRP ${c4},_____
|
||||
${c2}`"" ${c4}_g@@@@@@@@@@@@@%g>
|
||||
${c4}__@@@@@@@@@@@@@@@@P" ${c1}___
|
||||
${c4}_g@@@@@@@@@@@@@@@N"` ${c1}_gN@@@@@N^
|
||||
${c4}_w@@@@@@@@@@@@@@@@P" ${c1}_g@@@@@@@P"
|
||||
${c4}_g@@@@@@@@@@@@@@@N"` ${c1}VMNN@NNNM^`
|
||||
${c4}^MMM@@@@@@@@@@@MP" ${c3},ggppww__
|
||||
${c4}`""""" ${c3}_wNNNNNNNNNNNNNNNNNNN
|
||||
${c3}_gBNNNNNNNNNNNNNNNNNP"
|
||||
${c3}_wNNNNNNNNNNNNNNNNNNMP`
|
||||
${c3}_gBNNNNNNNNNNNNNNNNNP"
|
||||
${c3}_wNNNNNNNNNNNNNNNNNNNM^
|
||||
${c3}""Y^^MNNNNNNNNNNNNP`
|
||||
${c3}`"""""""
|
||||
$2__
|
||||
$2gpBBBBBBBBBP
|
||||
$2_gBBBBBBBBBRP
|
||||
$24BBBBBBBBRP $4,_____
|
||||
$2`"" $4_g@@@@@@@@@@@@@%g>
|
||||
$4__@@@@@@@@@@@@@@@@P" $1___
|
||||
$4_g@@@@@@@@@@@@@@@N"` $1_gN@@@@@N^
|
||||
$4_w@@@@@@@@@@@@@@@@P" $1_g@@@@@@@P"
|
||||
$4_g@@@@@@@@@@@@@@@N"` $1VMNN@NNNM^`
|
||||
$4^MMM@@@@@@@@@@@MP" $3,ggppww__
|
||||
$4`""""" $3_wNNNNNNNNNNNNNNNNNNN
|
||||
$3_gBNNNNNNNNNNNNNNNNNP"
|
||||
$3_wNNNNNNNNNNNNNNNNNNMP`
|
||||
$3_gBNNNNNNNNNNNNNNNNNP"
|
||||
$3_wNNNNNNNNNNNNNNNNNNNM^
|
||||
$3""Y^^MNNNNNNNNNNNNP`
|
||||
$3`"""""""
|
||||
@@ -1,18 +1,18 @@
|
||||
${c2} .........
|
||||
$2 .........
|
||||
...................
|
||||
.....................${c1}################${c2}
|
||||
.............. ....${c1}################${c2}
|
||||
.............. ...${c1}################${c2}
|
||||
............. ..${c1}****************${c2}
|
||||
............ . .${c1}****************${c2}
|
||||
........... ... ${c1}................${c2}
|
||||
.......... ..... ${c1}...............${c2}
|
||||
.....................$1################$2
|
||||
.............. ....$1################$2
|
||||
.............. ...$1################$2
|
||||
............. ..$1****************$2
|
||||
............ . .$1****************$2
|
||||
........... ... $1................$2
|
||||
.......... ..... $1...............$2
|
||||
......... ....... ...
|
||||
.${c3}...... ${c2}.
|
||||
${c3}..... .....${c2}.... ${c4}...........
|
||||
${c3}.... ......${c2}. ${c4}...........
|
||||
${c3}... ....... ${c4}...........
|
||||
${c3}................ ${c4}***********
|
||||
${c3}................ ${c4}###########
|
||||
${c3}****************
|
||||
${c3}################
|
||||
.$3...... $2.
|
||||
$3..... .....$2.... $4...........
|
||||
$3.... ......$2. $4...........
|
||||
$3... ....... $4...........
|
||||
$3................ $4***********
|
||||
$3................ $4###########
|
||||
$3****************
|
||||
$3################
|
||||
@@ -1,9 +1,9 @@
|
||||
${c2} _____ ${c1}_____${c2}
|
||||
-' '-${c1}| |${c2}
|
||||
/ ___ ${c1}| |${c2}
|
||||
| / _ \${c1}|_____|${c2}
|
||||
$2 _____ $1_____$2
|
||||
-' '-$1| |$2
|
||||
/ ___ $1| |$2
|
||||
| / _ \$1|_____|$2
|
||||
' / /_\ \
|
||||
\ / _____ \${c4}___
|
||||
${c3}|${c2}/_/ ${c3}| ${c4}| |
|
||||
${c3}| | ${c4}|___|
|
||||
${c3}|_____|
|
||||
\ / _____ \$4___
|
||||
$3|$2/_/ $3| $4| |
|
||||
$3| | $4|___|
|
||||
$3|_____|
|
||||
+10
-10
@@ -2,15 +2,15 @@
|
||||
_=(SDGJT=_
|
||||
_GTDJHGGFCVS)
|
||||
,GTDJGGDTDFBGX0
|
||||
${c1} JDJDIJHRORVFSBSVL${c2}-=+=,_
|
||||
${c1} IJFDUFHJNXIXCDXDSV,${c2} "DEBL
|
||||
${c1} [LKDSDJTDU=OUSCSBFLD.${c2} '?ZWX,
|
||||
${c1} ,LMDSDSWH' `DCBOSI${c2} DRDS],
|
||||
${c1} SDDFDFH' !YEWD,${c2} )HDROD
|
||||
${c1} !KMDOCG &GSU|${c2}\_GFHRGO\'
|
||||
${c1} HKLSGP'${c2} __${c1}\TKM0${c2}\GHRBV)'
|
||||
${c1}JSNRVW'${c2} __+MNAEC${c1}\IOI,${c2}\BN'
|
||||
${c1}HELK['${c2} __,=OFFXCBGHC${c1}\FD)
|
||||
${c1}?KGHE ${c2}\_-#DASDFLSV='${c1} 'EF
|
||||
$1 JDJDIJHRORVFSBSVL$2-=+=,_
|
||||
$1 IJFDUFHJNXIXCDXDSV,$2 "DEBL
|
||||
$1 [LKDSDJTDU=OUSCSBFLD.$2 '?ZWX,
|
||||
$1 ,LMDSDSWH' `DCBOSI$2 DRDS],
|
||||
$1 SDDFDFH' !YEWD,$2 )HDROD
|
||||
$1 !KMDOCG &GSU|$2\_GFHRGO\'
|
||||
$1 HKLSGP'$2 __$1\TKM0$2\GHRBV)'
|
||||
$1JSNRVW'$2 __+MNAEC$1\IOI,$2\BN'
|
||||
$1HELK['$2 __,=OFFXCBGHC$1\FD)
|
||||
$1?KGHE $2\_-#DASDFLSV='$1 'EF
|
||||
'EHTI !H
|
||||
`0F' '!
|
||||
@@ -1,20 +1,20 @@
|
||||
${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢰⡆${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢠⣿⣿⡄${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢀⣾⣿⣿⣿⡀${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c4}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣼⣿⣿⣿⣿⣷⡀${c4}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c5}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣼⣿⣿⣿⣿⣿⣿⣷${c5}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c6}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢼⣿⣿⣿⣿⣿⣿⣿⣿⣧${c6}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣰⣤⣈⠻⢿⣿⣿⣿⣿⣿⣿⣧${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣰⣿⣿⣿⣿⣮⣿⣿⣿⣿⣿⣿⣿⣧${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧${c3}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c4}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧${c4}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c5}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧${c5}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c6}⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣼⣿⣿⣿⣿⣿⡿⣿⣿⡟${c6}⠄⠄${c1}⠸⣿⣿⡿⣿⣿⣿⣿⣿⣷⡀${c6}⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
${c1}⠄⠄⠄⠄⠄⠄⠄⠄${c1}⣼⣿⣿⣿⣿⣿⡏${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠈⣿⣿⣿⣿⣿⣷⡀${c1}⠄⠄⠄⠄⠄⠄⠄
|
||||
${c2}⠄⠄⠄⠄⠄⠄${c1}⢀⣼⣿⣿⣿⣿⣿⣿⡗${c2}⠄⠄⠄${c1}⢀⣠⣤⣀⠄⠄⠄${c1}⠸⣿⣿⣿⣿⣿⣿⣷⡀${c2}⠄⠄⠄⠄⠄⠄
|
||||
${c3}⠄⠄⠄⠄⠄${c1}⢀⣾⣿⣿⣿⣿⣿⡏⠁${c3}⠄⠄⠄${c1}⢠⣿⣿⣿⣿⡇${c3}⠄⠄⠄⠄${c1}⢙⣿⣿⣻⠿⣿⣷⡀${c3}⠄⠄⠄⠄⠄
|
||||
${c4}⠄⠄⠄⠄${c1}⢀⣾⣿⣿⣿⣿⣿⣿⣷⣤⡀${c4}⠄⠄⠄${c1}⠻⣿⣿⡿⠃${c4}⠄⠄⠄${c1}⢀⣼⣿⣿⣿⣿⣦⣌⠙⠄${c4}⠄⠄⠄⠄
|
||||
${c5}⠄⠄⠄${c1}⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏${c5}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⢿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀${c5}⠄⠄⠄
|
||||
${c6}⠄⠄${c1}⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁${c6}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄${c6}⠄⠄
|
||||
${c1}⠄${c1}⣠⣿⣿⣿⣿⠿⠛⠋⠁${c1}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠉⠙⠻⢿⣿⣿⣿⣿⣆${c1}⠄
|
||||
${c1}⡰⠟⠛⠉⠁${c2}⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄${c1}⠉⠙⠛⠿⢆
|
||||
$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢰⡆$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢠⣿⣿⡄$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢀⣾⣿⣿⣿⡀$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣷⡀$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⣿⣷$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$6⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢼⣿⣿⣿⣿⣿⣿⣿⣿⣧$6⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣤⣈⠻⢿⣿⣿⣿⣿⣿⣿⣧$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣿⣿⣿⣿⣮⣿⣿⣿⣿⣿⣿⣿⣧$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧$3⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣰⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧$4⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$6⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⡿⣿⣿⡟$6⠄⠄$1⠸⣿⣿⡿⣿⣿⣿⣿⣿⣷⡀$6⠄⠄⠄⠄⠄⠄⠄⠄
|
||||
$1⠄⠄⠄⠄⠄⠄⠄⠄$1⣼⣿⣿⣿⣿⣿⡏$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠈⣿⣿⣿⣿⣿⣷⡀$1⠄⠄⠄⠄⠄⠄⠄
|
||||
$2⠄⠄⠄⠄⠄⠄$1⢀⣼⣿⣿⣿⣿⣿⣿⡗$2⠄⠄⠄$1⢀⣠⣤⣀⠄⠄⠄$1⠸⣿⣿⣿⣿⣿⣿⣷⡀$2⠄⠄⠄⠄⠄⠄
|
||||
$3⠄⠄⠄⠄⠄$1⢀⣾⣿⣿⣿⣿⣿⡏⠁$3⠄⠄⠄$1⢠⣿⣿⣿⣿⡇$3⠄⠄⠄⠄$1⢙⣿⣿⣻⠿⣿⣷⡀$3⠄⠄⠄⠄⠄
|
||||
$4⠄⠄⠄⠄$1⢀⣾⣿⣿⣿⣿⣿⣿⣷⣤⡀$4⠄⠄⠄$1⠻⣿⣿⡿⠃$4⠄⠄⠄$1⢀⣼⣿⣿⣿⣿⣦⣌⠙⠄$4⠄⠄⠄⠄
|
||||
$5⠄⠄⠄$1⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⠏$5⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⢿⣿⣿⣿⣿⣿⣿⣿⣿⣦⡀$5⠄⠄⠄
|
||||
$6⠄⠄$1⢠⣿⣿⣿⣿⣿⣿⣿⡿⠟⠋⠁$6⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠙⠻⣿⣿⣿⣿⣿⣿⣿⣿⡄$6⠄⠄
|
||||
$1⠄$1⣠⣿⣿⣿⣿⠿⠛⠋⠁$1⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠉⠙⠻⢿⣿⣿⣿⣿⣆$1⠄
|
||||
$1⡰⠟⠛⠉⠁$2⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄⠄$1⠉⠙⠛⠿⢆
|
||||
@@ -1,17 +1,17 @@
|
||||
${c1} *
|
||||
$1 *
|
||||
**.
|
||||
****
|
||||
******
|
||||
*******
|
||||
** *******
|
||||
**** *******
|
||||
${c1}****${c2}_____${c1}***${c2}/${c1}*
|
||||
***${c2}/${c1}*******${c2}//${c1}***
|
||||
**${c2}/${c1}********${c2}///${c1}*${c2}/${c1}**
|
||||
**${c2}/${c1}*******${c2}////${c1}***${c2}/${c1}**
|
||||
**${c2}/${c1}****${c2}//////.,${c1}****${c2}/${c1}**
|
||||
***${c2}/${c1}*****${c2}/////////${c1}**${c2}/${c1}***
|
||||
****${c2}/${c1}**** ${c2}/////${c1}***${c2}/${c1}****
|
||||
******${c2}/${c1}*** ${c2}//// ${c1}**${c2}/${c1}******
|
||||
********${c2}/${c1}* ${c2}/// ${c1}*${c2}/${c1}********
|
||||
,****** ${c2}// ______ / ${c1}******,
|
||||
$1****$2_____$1***$2/$1*
|
||||
***$2/$1*******$2//$1***
|
||||
**$2/$1********$2///$1*$2/$1**
|
||||
**$2/$1*******$2////$1***$2/$1**
|
||||
**$2/$1****$2//////.,$1****$2/$1**
|
||||
***$2/$1*****$2/////////$1**$2/$1***
|
||||
****$2/$1**** $2/////$1***$2/$1****
|
||||
******$2/$1*** $2//// $1**$2/$1******
|
||||
********$2/$1* $2/// $1*$2/$1********
|
||||
,****** $2// ______ / $1******,
|
||||
@@ -6,6 +6,6 @@
|
||||
ooooo ooooo
|
||||
ooooo ooooo
|
||||
ooooo ooooo
|
||||
ooooo ${c2}<oooooooo>${c1}
|
||||
ooooo ${c2}<oooooo>${c1}
|
||||
ooooo ${c2}<oooo>
|
||||
ooooo $2<oooooooo>$1
|
||||
ooooo $2<oooooo>$1
|
||||
ooooo $2<oooo>
|
||||
+15
-15
@@ -1,15 +1,15 @@
|
||||
${c1} `oyyy/${c2}-yyyyyy+
|
||||
${c1} -syyyy/${c2}-yyyyyy+
|
||||
${c1} .syyyyy/${c2}-yyyyyy+
|
||||
${c1} :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} `/ :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} .+s :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} .oys :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} -oyys :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} :syyys :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} /syyyys :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} +yyyyyys :yyyyyy/${c2}-yyyyyy+
|
||||
${c1} .oyyyyyyo. :yyyyyy/${c2}-yyyyyy+ ---------
|
||||
${c1} .syyyyyy+` :yyyyyy/${c2}-yyyyy+-+syyyyyyyy
|
||||
${c1} -syyyyyy/ :yyyyyy/${c2}-yyys:.syyyyyyyyyy
|
||||
${c1}:syyyyyy/ :yyyyyy/${c2}-yyo.:syyyyyyyyyyy
|
||||
$1 `oyyy/$2-yyyyyy+
|
||||
$1 -syyyy/$2-yyyyyy+
|
||||
$1 .syyyyy/$2-yyyyyy+
|
||||
$1 :yyyyyy/$2-yyyyyy+
|
||||
$1 `/ :yyyyyy/$2-yyyyyy+
|
||||
$1 .+s :yyyyyy/$2-yyyyyy+
|
||||
$1 .oys :yyyyyy/$2-yyyyyy+
|
||||
$1 -oyys :yyyyyy/$2-yyyyyy+
|
||||
$1 :syyys :yyyyyy/$2-yyyyyy+
|
||||
$1 /syyyys :yyyyyy/$2-yyyyyy+
|
||||
$1 +yyyyyys :yyyyyy/$2-yyyyyy+
|
||||
$1 .oyyyyyyo. :yyyyyy/$2-yyyyyy+ ---------
|
||||
$1 .syyyyyy+` :yyyyyy/$2-yyyyy+-+syyyyyyyy
|
||||
$1 -syyyyyy/ :yyyyyy/$2-yyys:.syyyyyyyyyy
|
||||
$1:syyyyyy/ :yyyyyy/$2-yyo.:syyyyyyyyyyy
|
||||
@@ -1,17 +1,17 @@
|
||||
${c1} ***
|
||||
${c1} *****
|
||||
${c1} **********
|
||||
${c1} ***************
|
||||
${c1} *///****////****////.
|
||||
${c2} (/////// /////// ///////(
|
||||
${c2} /(((((//* //, //((((((.
|
||||
${c2} ((((((((((( ((( ((((((((
|
||||
${c2} *((((((((((((((((((((((( ((((((((
|
||||
${c3} (((((#(((((((#((((( ((#(((((
|
||||
${c3} (#(#(#####(#(#, ####(#(#
|
||||
${c3} ######### ########
|
||||
${c3} /######## ########
|
||||
${c4} #######%#######
|
||||
${c4} (#%%%%%%%#
|
||||
${c4} %%%%%
|
||||
${c4} %%%
|
||||
$1 ***
|
||||
$1 *****
|
||||
$1 **********
|
||||
$1 ***************
|
||||
$1 *///****////****////.
|
||||
$2 (/////// /////// ///////(
|
||||
$2 /(((((//* //, //((((((.
|
||||
$2 ((((((((((( ((( ((((((((
|
||||
$2 *((((((((((((((((((((((( ((((((((
|
||||
$3 (((((#(((((((#((((( ((#(((((
|
||||
$3 (#(#(#####(#(#, ####(#(#
|
||||
$3 ######### ########
|
||||
$3 /######## ########
|
||||
$4 #######%#######
|
||||
$4 (#%%%%%%%#
|
||||
$4 %%%%%
|
||||
$4 %%%
|
||||
@@ -1,22 +1,22 @@
|
||||
AA
|
||||
AaaA
|
||||
Aa${c2}/\${c1}aA
|
||||
${c1} Aa${c2}/${c1}aa${c2}\${c1}aA
|
||||
${c1} Aa${c2}/${c1}aAAa${c2}\${c1}aA
|
||||
${c1} aA${c2}/${c1}aaAAaa${c2}\${c1}Aa
|
||||
${c1} aA${c2}/${c1}aaAAAAaa${c2}\${c1}Aa
|
||||
${c1} aaaaaaAAAAa${c2}/${c1}aaAAAAAAaa${c2}\${c1}aAAAAaaaaa
|
||||
${c1}aAAa${c2}-----${c1}aaaaaAAAAAAAAAAaaaaa${c2}-----${c1}aAAa
|
||||
${c1} aAA${c2}\ ${c1}aAAAAAAAAAAAAAAAAAAAAAAa${c2} /${c1}AAa
|
||||
${c1} aAa${c2}\${c1}aAAA${c2}\${c1}AAAA${c2}\${c1}AAAA${c2}\${c1}AAA${c2}\${c1}AAa${c2}/${c1}aAa
|
||||
${c1} aAa${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\${c1}AA${c2}\\/${c1}aAa
|
||||
${c1} aAA${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\${c1}Aa${c2}/${c1}AAa
|
||||
${c1} aA${c2}\${c1}aA${c2}\\${c1}AAA${c2}\\${c1}AAA${c2}\\/${c1}Aa
|
||||
${c1} aA${c2}/${c1}AA${c2}\\\${c1}AA${c2}\\\${c1}AA${c2}\\\${c1}Aa
|
||||
${c1} aA${c2}/\${c1}AAa${c2}\\\${c1}Aa${c2}\\\${c1}Aa${c2}\\\${c1}Aa
|
||||
${c1} aA${c2}/\\${c1}AAa${c2}\\/\${c1}a${c2}\\\${c1}Aa${c2}\\${c1}Aa
|
||||
${c1} aA${c2}/${c1}a${c2}\\\${c1}Aa${c2}\/${c1}AA${c2}\\\\\${c1}Aa${c2}\\${c1}Aa
|
||||
${c1} aA${c2}/${c1}aA${c2}\\/${c1}aAa aAa${c2}\\\${c1}Aa${c2}\${c1}Aa
|
||||
${c1} aA${c2}/\${c1}A${c2}\/${c1}Aa aA${c2}\\${c1}A${c2}\\${c1}Aa
|
||||
${c1} A${c2}|/${c1}aaAa aAaa${c2}\|${c1}A
|
||||
${c1} aAaa aaAa
|
||||
Aa$2/\$1aA
|
||||
$1 Aa$2/$1aa$2\$1aA
|
||||
$1 Aa$2/$1aAAa$2\$1aA
|
||||
$1 aA$2/$1aaAAaa$2\$1Aa
|
||||
$1 aA$2/$1aaAAAAaa$2\$1Aa
|
||||
$1 aaaaaaAAAAa$2/$1aaAAAAAAaa$2\$1aAAAAaaaaa
|
||||
$1aAAa$2-----$1aaaaaAAAAAAAAAAaaaaa$2-----$1aAAa
|
||||
$1 aAA$2\ $1aAAAAAAAAAAAAAAAAAAAAAAa$2 /$1AAa
|
||||
$1 aAa$2\$1aAAA$2\$1AAAA$2\$1AAAA$2\$1AAA$2\$1AAa$2/$1aAa
|
||||
$1 aAa$2\$1aA$2\\$1AAA$2\\$1AAA$2\\$1AA$2\\/$1aAa
|
||||
$1 aAA$2\$1aA$2\\$1AAA$2\\$1AAA$2\\$1Aa$2/$1AAa
|
||||
$1 aA$2\$1aA$2\\$1AAA$2\\$1AAA$2\\/$1Aa
|
||||
$1 aA$2/$1AA$2\\\$1AA$2\\\$1AA$2\\\$1Aa
|
||||
$1 aA$2/\$1AAa$2\\\$1Aa$2\\\$1Aa$2\\\$1Aa
|
||||
$1 aA$2/\\$1AAa$2\\/\$1a$2\\\$1Aa$2\\$1Aa
|
||||
$1 aA$2/$1a$2\\\$1Aa$2\/$1AA$2\\\\\$1Aa$2\\$1Aa
|
||||
$1 aA$2/$1aA$2\\/$1aAa aAa$2\\\$1Aa$2\$1Aa
|
||||
$1 aA$2/\$1A$2\/$1Aa aA$2\\$1A$2\\$1Aa
|
||||
$1 A$2|/$1aaAa aAaa$2\|$1A
|
||||
$1 aAaa aaAa
|
||||
@@ -1,24 +0,0 @@
|
||||
${c1} . ..
|
||||
${c1} :####: ####.
|
||||
${c1} .################
|
||||
${c1} :##################
|
||||
${c1}.###################.
|
||||
${c1}######## #######
|
||||
${c1}####### ${c2}####${c1} #####
|
||||
${c1}:#######. ####
|
||||
${c1} ######### ${c2}#${c1} ## #
|
||||
${c1} ####### ${c2}##${c1} ####
|
||||
${c1}######## ${c2}####${c1} #######
|
||||
${c1}######## ${c2}#####${c1} ########
|
||||
${c1}######## ${c2}#######${c1} #######
|
||||
${c1} ####### ${c2}########${c1} #######
|
||||
${c1} ######## ${c2}#########${c1} ######
|
||||
${c1} ######## ${c2}#########${c1} #####
|
||||
${c1} ####### ${c2}#########${c1} ####
|
||||
${c1} ####### ${c2}#########${c1} ##
|
||||
${c1} ####### ${c2}########${c1} ##
|
||||
${c1} ###### ${c2}########${c1} #
|
||||
${c1} ### ${c2}#######${c1}
|
||||
${c1} ${c2}######${c1}
|
||||
${c1} ${c2}####${c1}
|
||||
${c1} ${c2}##${c1}
|
||||
@@ -0,0 +1,29 @@
|
||||
u.
|
||||
..:Y
|
||||
.Y..1
|
||||
..::i::.. .br7S.
|
||||
.::::...::::. 5dDr:
|
||||
..:::.. .:i::.. Y7:
|
||||
..:::::.. ..::::.
|
||||
...:i:i:i:.. $2... $1:.:..:i:::...
|
||||
::i:. $2.USL Yr $1..i::.
|
||||
.:::. $2:K :u. $1.::.
|
||||
:... $2jB. .:vUi: 77 KB: $1..::
|
||||
...: $2iBR vP::5X5PgSKXvLjS. iBB $1.::.
|
||||
:i:: $2BBQr jgDIuj1UuJjXbbi 2BBP $1:::;
|
||||
'i:: $2sQBg: i2S55121XSSU. YBQZ: $1.:::
|
||||
r::: $2r:JgBMu. Q :BqEqZEB: Q :qBBK7i: $1:i:i
|
||||
.rir. $2IBqPDgQBDr P rB :q 1QBRgEqgB $1.::i.
|
||||
:i:i $2:JsXPDDRQQPBL P qQXBQRDDPIYY $1rir:
|
||||
:iii $25qvLUDDMgMgBB5 :DBQZRgMDdJ7Ygi $1iir:
|
||||
iri: $2MBRgdZZggQgRBMIBQQRRggdZdMBBr $1riri
|
||||
irii $2IBQgdZbDDRRRgQgQQMZDdZdgBB. $1iiri
|
||||
i7rr $2.BBQZZbEEMQQDBQMEZdDDBBP $1.rir:
|
||||
:7ir. $27BBQMDMQSbB5ZBggQBBQ. $1ivr7.
|
||||
:r7r. $27BBBB:rBbQ.1BBBM. $1:r7vi
|
||||
::rLrr. $2.b:rBQ7QB uU. $1:7vLi.
|
||||
.BB .iLYv: $1idL B1 $1:r77r.
|
||||
LBB :vrvvr rvu7r:
|
||||
ZB. ':7v177Lsvurr:'
|
||||
.d2 ''::r:''
|
||||
:'
|
||||
@@ -0,0 +1,24 @@
|
||||
. ..
|
||||
$1 :####: ####.
|
||||
$1 .################
|
||||
$1 :##################
|
||||
$1.###################.
|
||||
$1######## #######
|
||||
$1####### $2####$1 #####
|
||||
$1:#######. ####
|
||||
$1 ######### $2#$1 ## #
|
||||
$1 ####### $2##$1 ####
|
||||
$1######## $2####$1 #######
|
||||
$1######## $2#####$1 ########
|
||||
$1######## $2#######$1 #######
|
||||
$1 ####### $2########$1 #######
|
||||
$1 ######## $2#########$1 ######
|
||||
$1 ######## $2#########$1 #####
|
||||
$1 ####### $2#########$1 ####
|
||||
$1 ####### $2#########$1 ##
|
||||
$1 ####### $2########$1 ##
|
||||
$1 ###### $2########$1 #
|
||||
$1 ### $2#######$1
|
||||
$1 $2######$1
|
||||
$1 $2####$1
|
||||
$1 $2##$1
|
||||
@@ -0,0 +1,28 @@
|
||||
+++++++++
|
||||
+++++$4+$1++++++$4+$1++
|
||||
++++++$4+$1+++ +++++++++++
|
||||
+++++++++++ $2+$1 +++++$4+$1+++++
|
||||
++++++$4+$1++++ $4+++$1 +++++++++++
|
||||
++++++++++$4 + +++++ ++ $2+++++$4+$2++++
|
||||
+++$4+$1++++$4 + + + +++++++ + + $2+++++$4+$2++
|
||||
++++++$4 $2+$4 +++ +++++++++ +++ $2++++++++
|
||||
+++$4+$1++$4 + +++++ +++++ +
|
||||
++++++$4 $2+$4 +++++ +++++ +++++
|
||||
++$4+$2+++$4 + +++++ ++++++ ++++++++++
|
||||
++++++$4 +++++ +++++ + +++++++++++++++++++
|
||||
++++++$4 + +++++ + +++++++++++++++
|
||||
+++$4++$2+$4 ++++++ +++++++++++++
|
||||
++++++$4 + ++++++ +++++++++++++ $2+++ $4++
|
||||
++++++$4 ++++++++++++++++ $2++$4+$2+ $4++ $1+
|
||||
++++++$4 ++++++++++++++ $3+ $2++++
|
||||
++++++$4 +++++++++++ + $4+ $3++++++
|
||||
++$4+$3+++$4 ++++++++++ +++ $3+++++++++++++
|
||||
+++++ $4+++++++++ + $3+++++++++++++
|
||||
+++ $4++++++++ $2++$4 + $3++++++++++++++ ++++
|
||||
++ $4++++++++ $3+ ++++++++++++++ +++++++
|
||||
$4++++++ $2+ $3+++++++++++++ +++++++$2++
|
||||
$4++++ $3+++++++++++++ ++++++$2+++
|
||||
+++++++++++ ++++++$2+++
|
||||
+++++ ++++++$2+++
|
||||
++++++$2++
|
||||
+++++
|
||||
+17
-17
@@ -1,17 +1,17 @@
|
||||
${c1} ////. ${c2} (((((
|
||||
${c1}//////// ${c2} @((((((((
|
||||
${c1}//////// ${c2} @((((((((
|
||||
${c1}//////// /////// ${c2} ((((((( @((((((((
|
||||
${c1}//////// ///////// ${c2} ((((((((( @((((((((
|
||||
${c1}//////// ///////// ${c2} ((((((((( @((((((((
|
||||
${c1}//////// ///////// ////// ${c2} (((((( ((((((((( @((((((((
|
||||
${c1}//////// ///////// //////// ${c2} (((((((( ((((((((( @((((((((
|
||||
${c1}//////// ///////// //////// ${c2} (((((((( ((((((((( @((((((((
|
||||
${c1}//////// ///////// //////// ${c2} ((((((( ((((((((( @((((((((
|
||||
${c1}//////// ///////// /// ${c2} ( ((((((((( @((((((((
|
||||
${c1}//////// ///////// ${c2} ((((((((( @((((((((
|
||||
${c1}//////// ///////// ${c2} &(((((((( @((((((((
|
||||
${c1}//////// ////// ${c2} @(((( @((((((((
|
||||
${c1}//////// ${c2} @((((((((
|
||||
${c1}//////// ${c2} @((((((((
|
||||
${c1} ///// ${c2} (((((
|
||||
$1 ////. $2 (((((
|
||||
$1//////// $2 @((((((((
|
||||
$1//////// $2 @((((((((
|
||||
$1//////// /////// $2 ((((((( @((((((((
|
||||
$1//////// ///////// $2 ((((((((( @((((((((
|
||||
$1//////// ///////// $2 ((((((((( @((((((((
|
||||
$1//////// ///////// ////// $2 (((((( ((((((((( @((((((((
|
||||
$1//////// ///////// //////// $2 (((((((( ((((((((( @((((((((
|
||||
$1//////// ///////// //////// $2 (((((((( ((((((((( @((((((((
|
||||
$1//////// ///////// //////// $2 ((((((( ((((((((( @((((((((
|
||||
$1//////// ///////// /// $2 ( ((((((((( @((((((((
|
||||
$1//////// ///////// $2 ((((((((( @((((((((
|
||||
$1//////// ///////// $2 &(((((((( @((((((((
|
||||
$1//////// ////// $2 @(((( @((((((((
|
||||
$1//////// $2 @((((((((
|
||||
$1//////// $2 @((((((((
|
||||
$1 ///// $2 (((((
|
||||
@@ -5,14 +5,14 @@
|
||||
: xMMMMMW. kMMMMNc lW.
|
||||
:x NMMMMMO ,MMMM0. 'l
|
||||
Xx "lkk" kMMMX .okx,
|
||||
${c2}.MX .cc;. .xXKx. KMMM: .OMMMMMl
|
||||
$2.MX .cc;. .xXKx. KMMM: .OMMMMMl
|
||||
:MM' 'KMMMMWK: 0MMMMk xMMM. lWMMMMMMM'
|
||||
cMMN:;xMMMMk::MMO oMMMMX .XMM. .KMMMWOOMMMd
|
||||
'MMMMMMMMN, NMMx OMMMMl .kM0OMMMMk. ;MMd
|
||||
xMMMMMMd .MMMW :NMMMd .ckKKx' KMc
|
||||
dWMNd. oMMMN lkNMX, oM.
|
||||
;. ;MMMMx "MM:. cO
|
||||
${c3} .X. oMMMMW. l.
|
||||
$3 .X. oMMMMW. l.
|
||||
dMk:..;xWMMMMW,
|
||||
kMMMMMMMMMMX.
|
||||
:XMMMMMMK:
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
${c3} 00
|
||||
$3 00
|
||||
11
|
||||
====${c1}
|
||||
.${c3}//${c1}
|
||||
`o${c3}//${c1}:
|
||||
`+o${c3}//${c1}o:
|
||||
`+oo${c3}//${c1}oo:
|
||||
-+oo${c3}//${c1}oo+:
|
||||
`/:-:+${c3}//${c1}ooo+:
|
||||
`/+++++${c3}//${c1}+++++:
|
||||
`/++++++${c3}//${c1}++++++:
|
||||
`/+++o${c2}ooo${c3}//${c2}ooo${c1}oooo/`
|
||||
${c2} ${c1}./${c2}ooosssso${c3}//${c2}osssssso${c1}+`
|
||||
${c2} .oossssso-`${c3}//${c1}`/ossssss+`
|
||||
-osssssso. ${c3}//${c1} :ssssssso.
|
||||
:osssssss/ ${c3}//${c1} osssso+++.
|
||||
/ossssssss/ ${c3}//${c1} +ssssooo/-
|
||||
`/ossssso+/:- ${c3}//${c1} -:/+osssso+-
|
||||
`+sso+:-` ${c3}//${c1} `.-/+oso:
|
||||
`++:. ${c3}//${c1} `-/+/
|
||||
.` ${c3}/${c1} `/
|
||||
====$1
|
||||
.$3//$1
|
||||
`o$3//$1:
|
||||
`+o$3//$1o:
|
||||
`+oo$3//$1oo:
|
||||
-+oo$3//$1oo+:
|
||||
`/:-:+$3//$1ooo+:
|
||||
`/+++++$3//$1+++++:
|
||||
`/++++++$3//$1++++++:
|
||||
`/+++o$2ooo$3//$2ooo$1oooo/`
|
||||
$2 $1./$2ooosssso$3//$2osssssso$1+`
|
||||
$2 .oossssso-`$3//$1`/ossssss+`
|
||||
-osssssso. $3//$1 :ssssssso.
|
||||
:osssssss/ $3//$1 osssso+++.
|
||||
/ossssssss/ $3//$1 +ssssooo/-
|
||||
`/ossssso+/:- $3//$1 -:/+osssso+-
|
||||
`+sso+:-` $3//$1 `.-/+oso:
|
||||
`++:. $3//$1 `-/+/
|
||||
.` $3/$1 `/
|
||||
@@ -1,7 +1,7 @@
|
||||
${c3} ........
|
||||
$3 ........
|
||||
.,»╔╗╗╬▄▄╫█▀▓▄▄╬╗╗g≈,.
|
||||
,j╗╬╣▓▓███████▌;»╙▀▀▀▀█▄▄╗j,
|
||||
.≈╗╬▓██▀▀▀▀▀╠╙░░»»;:`${c2}``>${c1}▄ ${c3}▐ ▓╫╗⌂,
|
||||
.≈╗╬▓██▀▀▀▀▀╠╙░░»»;:`$2``>$1▄ $3▐ ▓╫╗⌂,
|
||||
.j╬▓█▀▒░░░░░░░░░»»»;:```` ╙▀█▌╬░,
|
||||
;╗▓█▄▄███████▀░░»»»»;```` ╓▄▄█▄▄φ ██▌Ñ>.
|
||||
.j╣█████▀▀░░░░░░░░»»╓▄▄¿``▄███████/▄████▓╬U.
|
||||
|
||||
+17
-17
@@ -1,17 +1,17 @@
|
||||
${c2} `./ohdNMMMMNmho+.` ${c1} .+oo:`
|
||||
${c2} -smMMMMMMMMMMMMMMMMmy-` ${c1}`yyyyy+
|
||||
${c2} `:dMMMMMMMMMMMMMMMMMMMMMMd/` ${c1}`yyyyys
|
||||
${c2} .hMMMMMMMNmhso/++symNMMMMMMMh- ${c1}`yyyyys
|
||||
${c2} -mMMMMMMms-` -omMMMMMMN-${c1}.yyyyys
|
||||
${c2}.mMMMMMMy. .yMMMMMMm:${c1}yyyyys
|
||||
${c2}sMMMMMMy `sMMMMMMh${c1}yyyyys
|
||||
${c2}NMMMMMN: .NMMMMMN${c1}yyyyys
|
||||
${c2}MMMMMMm. NMMMMMN${c1}yyyyys
|
||||
${c2}hMMMMMM+ /MMMMMMN${c1}yyyyys
|
||||
${c2}:NMMMMMN: :mMMMMMM+${c1}yyyyys
|
||||
${c2} oMMMMMMNs- .sNMMMMMMs.${c1}yyyyys
|
||||
${c2} +MMMMMMMNho:.` `.:ohNMMMMMMNo ${c1}`yyyyys
|
||||
${c2} -hMMMMMMMMNNNmmNNNMMMMMMMMh- ${c1}`yyyyys
|
||||
${c2} :yNMMMMMMMMMMMMMMMMMMNy:` ${c1}`yyyyys
|
||||
${c2} .:sdNMMMMMMMMMMNds/. ${c1}`yyyyyo
|
||||
${c2} `.:/++++/:.` ${c1}:oys+.
|
||||
$2 `./ohdNMMMMNmho+.` $1 .+oo:`
|
||||
$2 -smMMMMMMMMMMMMMMMMmy-` $1`yyyyy+
|
||||
$2 `:dMMMMMMMMMMMMMMMMMMMMMMd/` $1`yyyyys
|
||||
$2 .hMMMMMMMNmhso/++symNMMMMMMMh- $1`yyyyys
|
||||
$2 -mMMMMMMms-` -omMMMMMMN-$1.yyyyys
|
||||
$2.mMMMMMMy. .yMMMMMMm:$1yyyyys
|
||||
$2sMMMMMMy `sMMMMMMh$1yyyyys
|
||||
$2NMMMMMN: .NMMMMMN$1yyyyys
|
||||
$2MMMMMMm. NMMMMMN$1yyyyys
|
||||
$2hMMMMMM+ /MMMMMMN$1yyyyys
|
||||
$2:NMMMMMN: :mMMMMMM+$1yyyyys
|
||||
$2 oMMMMMMNs- .sNMMMMMMs.$1yyyyys
|
||||
$2 +MMMMMMMNho:.` `.:ohNMMMMMMNo $1`yyyyys
|
||||
$2 -hMMMMMMMMNNNmmNNNMMMMMMMMh- $1`yyyyys
|
||||
$2 :yNMMMMMMMMMMMMMMMMMMNy:` $1`yyyyys
|
||||
$2 .:sdNMMMMMMMMMMNds/. $1`yyyyyo
|
||||
$2 `.:/++++/:.` $1:oys+.
|
||||
@@ -2,18 +2,18 @@
|
||||
oMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
oMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
oMMMMMMMMMMMMMMMMMMMMMMMMM
|
||||
-+++++++++++++++++++++++mM${c2}
|
||||
```````````````````````..${c1}dM${c2}
|
||||
```````````````````````....${c1}dM${c2}
|
||||
```````````````````````......${c1}dM${c2}
|
||||
```````````````````````........${c1}dM${c2}
|
||||
```````````````````````..........${c1}dM${c2}
|
||||
```````````````````````............${c1}dM${c2}
|
||||
.::::::::::::::::::::::-..............${c1}dM${c2}
|
||||
`-+yyyyyyyyyyyyyyyyyyyo............${c1}+mMM${c2}
|
||||
-+yyyyyyyyyyyyyyyyo..........${c1}+mMMMM${c2}
|
||||
./syyyyyyyyyyyyo........${c1}+mMMMMMM${c2}
|
||||
./oyyyyyyyyyo......${c1}+mMMMMMMMM${c2}
|
||||
omdyyyyyyo....${c1}+mMMMMMMMMMM${c2}
|
||||
${c1}oMMM${c2}mdhyyo..${c1}+mMMMMMMMMMMMM
|
||||
oNNNNNNm${c2}dso${c1}mMMMMMMMMMMMMMM
|
||||
-+++++++++++++++++++++++mM$2
|
||||
```````````````````````..$1dM$2
|
||||
```````````````````````....$1dM$2
|
||||
```````````````````````......$1dM$2
|
||||
```````````````````````........$1dM$2
|
||||
```````````````````````..........$1dM$2
|
||||
```````````````````````............$1dM$2
|
||||
.::::::::::::::::::::::-..............$1dM$2
|
||||
`-+yyyyyyyyyyyyyyyyyyyo............$1+mMM$2
|
||||
-+yyyyyyyyyyyyyyyyo..........$1+mMMMM$2
|
||||
./syyyyyyyyyyyyo........$1+mMMMMMM$2
|
||||
./oyyyyyyyyyo......$1+mMMMMMMMM$2
|
||||
omdyyyyyyo....$1+mMMMMMMMMMM$2
|
||||
$1oMMM$2mdhyyo..$1+mMMMMMMMMMMMM
|
||||
oNNNNNNm$2dso$1mMMMMMMMMMMMMMM
|
||||
+18
-18
@@ -1,18 +1,18 @@
|
||||
${c1}| ${c2},,mmKKKKKKKKWm,,
|
||||
${c1}' ${c2},aKKP${c1}LL**********|L*${c2}TKp,
|
||||
${c1}t ${c2}aKP${c1}L**``` ```**L${c2}*Kp
|
||||
IX${c1}EL${c3}L,wwww, ${c1}``*||${c2}Kp
|
||||
,#P${c1}L|${c3}KKKpPP@IPPTKmw, ${c1}`*||${c2}K
|
||||
,K${c1}LL*${c3}{KKKKKKPPb$KPhpKKPKp ${c1}`||${c2}K
|
||||
#${c1}PL ${c3}!KKKKKKPhKPPP$KKEhKKKKp ${c1}`||${c2}K
|
||||
!H${c1}L* ${c3}1KKKKKKKphKbPKKKKKK$KKp ${c1}`|I${c2}W
|
||||
$$$${c1}bL ${c3}KKKKKKKKBQKhKbKKKKKKKK ${c1}|I${c2}N
|
||||
$$$${c1}bL ${c3}!KKKKKKKKKKNKKKKKKKPP` ${c1}|I${c2}b
|
||||
TH${c1}L* ${c3}TKKKKKK##KKKN@KKKK^ ${c1}|I${c2}M
|
||||
K@${c1}L ${c3}*KKKKKKKKKKKEKE5 ${c1}||${c2}K
|
||||
`NL${c1}L ${c3}`KKKKKKKKKK"```|L ${c1}||${c2}#P
|
||||
`K@${c1}LL ${c3}`"**"` ${c1}'. :||${c2}#P
|
||||
Yp${c1}LL ${c1}' |L${c2}$M`
|
||||
`Tp${c1}pLL, ,|||${c2}p'L
|
||||
"Kpp${c1}LL++,., ,,|||$$$${c2}#K* ${c1}'.
|
||||
${c2}`"MKWpppppppp#KM"` ${c1}`h,
|
||||
$1| $2,,mmKKKKKKKKWm,,
|
||||
$1' $2,aKKP$1LL**********|L*$2TKp,
|
||||
$1t $2aKP$1L**``` ```**L$2*Kp
|
||||
IX$1EL$3L,wwww, $1``*||$2Kp
|
||||
,#P$1L|$3KKKpPP@IPPTKmw, $1`*||$2K
|
||||
,K$1LL*$3{KKKKKKPPb$KPhpKKPKp $1`||$2K
|
||||
#$1PL $3!KKKKKKPhKPPP$KKEhKKKKp $1`||$2K
|
||||
!H$1L* $31KKKKKKKphKbPKKKKKK$KKp $1`|I$2W
|
||||
$$$$1bL $3KKKKKKKKBQKhKbKKKKKKKK $1|I$2N
|
||||
$$$$1bL $3!KKKKKKKKKKNKKKKKKKPP` $1|I$2b
|
||||
TH$1L* $3TKKKKKK##KKKN@KKKK^ $1|I$2M
|
||||
K@$1L $3*KKKKKKKKKKKEKE5 $1||$2K
|
||||
`NL$1L $3`KKKKKKKKKK"```|L $1||$2#P
|
||||
`K@$1LL $3`"**"` $1'. :||$2#P
|
||||
Yp$1LL $1' |L$2$M`
|
||||
`Tp$1pLL, ,|||$2p'L
|
||||
"Kpp$1LL++,., ,,|||$$$$2#K* $1'.
|
||||
$2`"MKWpppppppp#KM"` $1`h,
|
||||
+12
-12
@@ -1,15 +1,15 @@
|
||||
${c2} ,####,
|
||||
${c2}#######, ${c2},#####,
|
||||
${c2}#####',# ${c2}'######
|
||||
${c2}''###'${c3}';,,,'${c2}###'
|
||||
${c3} ,; ''''
|
||||
${c3} ;;; ${c2},#####,
|
||||
${c3} ;;;' ,,;${c2};;###
|
||||
${c3} ';;;;''${c2}'####'
|
||||
${c3} ;;;
|
||||
${c3} ,.;;';'',,,
|
||||
${c3} ' '
|
||||
${c1} #
|
||||
$2 ,####,
|
||||
$2#######, $2,#####,
|
||||
$2#####',# $2'######
|
||||
$2''###'$3';,,,'$2###'
|
||||
$3 ,; ''''
|
||||
$3 ;;; $2,#####,
|
||||
$3 ;;;' ,,;$2;;###
|
||||
$3 ';;;;''$2'####'
|
||||
$3 ;;;
|
||||
$3 ,.;;';'',,,
|
||||
$3 ' '
|
||||
$1 #
|
||||
# O
|
||||
##, ,##,',##, ,## ,#, ,
|
||||
# # # # #''# #,, # # #
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
......
|
||||
,,+++++++,.
|
||||
.,,,....,,,${c2}+**+,,.${c1}
|
||||
............,${c2}++++,,,${c1}
|
||||
.,,,....,,,$2+**+,,.$1
|
||||
............,$2++++,,,$1
|
||||
...............
|
||||
......,,,........
|
||||
.....+*#####+,,,*+.
|
||||
@@ -15,6 +15,6 @@
|
||||
..... ..+##***#################*.
|
||||
.,.*#*****##############*.
|
||||
..,,*********#####****+.
|
||||
${c2}.,++*****+++${c1}*****************${c2}+++++,.${c1}
|
||||
${c2},++++++**+++++${c1}***********${c2}+++++++++,${c1}
|
||||
${c2}.,,,,++++,.. .,,,,,.....,+++,.,,${c1}
|
||||
$2.,++*****+++$1*****************$2+++++,.$1
|
||||
$2,++++++**+++++$1***********$2+++++++++,$1
|
||||
$2.,,,,++++,.. .,,,,,.....,+++,.,,$1
|
||||
+13
-13
@@ -1,18 +1,18 @@
|
||||
.-/-.
|
||||
////////.
|
||||
////////${c2}y+${c1}//.
|
||||
////////${c2}mMN${c1}/////.
|
||||
////////${c2}mMN+${c1}////////.
|
||||
////////$2y+$1//.
|
||||
////////$2mMN$1/////.
|
||||
////////$2mMN+$1////////.
|
||||
////////////////////////.
|
||||
/////////+${c2}shhddhyo${c1}+////////.
|
||||
////////${c2}ymMNmdhhdmNNdo${c1}///////.
|
||||
///////+${c2}mMms${c1}////////${c2}hNMh${c1}///////.
|
||||
///////${c2}NMm+${c1}//////////${c2}sMMh${c1}///////
|
||||
//////${c2}oMMNmmmmmmmmmmmmMMm${c1}///////
|
||||
//////${c2}+MMmssssssssssssss+${c1}///////
|
||||
`//////${c2}yMMy${c1}////////////////////
|
||||
`//////${c2}smMNhso++oydNm${c1}////////
|
||||
`///////${c2}ohmNMMMNNdy+${c1}///////
|
||||
`//////////${c2}++${c1}//////////
|
||||
/////////+$2shhddhyo$1+////////.
|
||||
////////$2ymMNmdhhdmNNdo$1///////.
|
||||
///////+$2mMms$1////////$2hNMh$1///////.
|
||||
///////$2NMm+$1//////////$2sMMh$1///////
|
||||
//////$2oMMNmmmmmmmmmmmmMMm$1///////
|
||||
//////$2+MMmssssssssssssss+$1///////
|
||||
`//////$2yMMy$1////////////////////
|
||||
`//////$2smMNhso++oydNm$1////////
|
||||
`///////$2ohmNMMMNNdy+$1///////
|
||||
`//////////$2++$1//////////
|
||||
`////////////////.
|
||||
-////////-
|
||||
@@ -1,18 +1,18 @@
|
||||
${c3}ddddddddddddddc ${c1},cc:
|
||||
${c3}ddddddddddddddc ${c1},cc:
|
||||
${c3}ddddddddddddddd ${c1},cc:
|
||||
${c3}ddddddddddddl:' ${c1},cc:
|
||||
${c3}dddddddddl' ${c1}..;cc:
|
||||
${c3}dddddddo. ${c1},:cccccc:
|
||||
${c3}ddddddl ${c1},ccc:'''''
|
||||
${c3}dddddo. ${c1};ccc. ............
|
||||
$3ddddddddddddddc $1,cc:
|
||||
$3ddddddddddddddc $1,cc:
|
||||
$3ddddddddddddddd $1,cc:
|
||||
$3ddddddddddddl:' $1,cc:
|
||||
$3dddddddddl' $1..;cc:
|
||||
$3dddddddo. $1,:cccccc:
|
||||
$3ddddddl $1,ccc:'''''
|
||||
$3dddddo. $1;ccc. ............
|
||||
.ccc. cccccccccccc
|
||||
${c2}...... ${c1}.ccc. .ccc'''''''''
|
||||
${c2}OOOOOk. ${c1};ccc. .ccc; ......
|
||||
${c2}OOOOOOd ${c1}'ccc:,....,:ccc' ${c4}coooooo
|
||||
${c2}OOOOOOOx. ${c1}':cccccccc:' ${c4}.looooooo
|
||||
${c2}OOOOOOOOOd, ${c1}`'''` ${c4}.coooooooo
|
||||
${c2}OOOOOOOOOOOOdc,. ${c4}..,coooooooooooo
|
||||
${c2}OOOOOOOOOOOOOOOO' ${c4}.oooooooooooooooo
|
||||
${c2}OOOOOOOOOOOOOOOO' ${c4}.oooooooooooooooo
|
||||
${c2}OOOOOOOOOOOOOOOO' ${c4}.oooooooooooooooo
|
||||
$2...... $1.ccc. .ccc'''''''''
|
||||
$2OOOOOk. $1;ccc. .ccc; ......
|
||||
$2OOOOOOd $1'ccc:,....,:ccc' $4coooooo
|
||||
$2OOOOOOOx. $1':cccccccc:' $4.looooooo
|
||||
$2OOOOOOOOOd, $1`'''` $4.coooooooo
|
||||
$2OOOOOOOOOOOOdc,. $4..,coooooooooooo
|
||||
$2OOOOOOOOOOOOOOOO' $4.oooooooooooooooo
|
||||
$2OOOOOOOOOOOOOOOO' $4.oooooooooooooooo
|
||||
$2OOOOOOOOOOOOOOOO' $4.oooooooooooooooo
|
||||
+15
-15
@@ -1,18 +1,18 @@
|
||||
${c2} .,:loool:,.
|
||||
$2 .,:loool:,.
|
||||
.,coooooooooooooc,.
|
||||
.,lllllllllllllllllllll,.
|
||||
;ccccccccccccccccccccccccc;
|
||||
${c1} '${c2}ccccccccccccccccccccccccccccc.
|
||||
${c1} ,oo${c2}c::::::::okO${c5}000${c3}0OOkkkkkkkkkkk:
|
||||
${c1}.ooool${c2};;;;:x${c5}K0${c4}kxxxxxk${c5}0X${c3}K0000000000.
|
||||
${c1}:oooool${c2};,;O${c5}K${c4}ddddddddddd${c5}KX${c3}000000000d
|
||||
${c1}lllllool${c2};l${c5}N${c4}dllllllllllld${c5}N${c3}K000000000
|
||||
${c1}lllllllll${c2}o${c5}M${c4}dccccccccccco${c5}W${c3}K000000000
|
||||
${c1};cllllllllX${c5}X${c4}c:::::::::c${c5}0X${c3}000000000d
|
||||
${c1}.ccccllllllO${c5}Nk${c4}c;,,,;cx${c5}KK${c3}0000000000.
|
||||
${c1} .cccccclllllxOO${c5}OOO${c1}Okx${c3}O0000000000;
|
||||
${c1} .:ccccccccllllllllo${c3}O0000000OOO,
|
||||
${c1} ,:ccccccccclllcd${c3}0000OOOOOOl.
|
||||
${c1} '::ccccccccc${c3}dOOOOOOOkx:.
|
||||
${c1} ..,::cccc${c3}xOOOkkko;.
|
||||
${c1} ..,:${c3}dOkxl:.
|
||||
$1 '$2ccccccccccccccccccccccccccccc.
|
||||
$1 ,oo$2c::::::::okO$5000$30OOkkkkkkkkkkk:
|
||||
$1.ooool$2;;;;:x$5K0$4kxxxxxk$50X$3K0000000000.
|
||||
$1:oooool$2;,;O$5K$4ddddddddddd$5KX$3000000000d
|
||||
$1lllllool$2;l$5N$4dllllllllllld$5N$3K000000000
|
||||
$1lllllllll$2o$5M$4dccccccccccco$5W$3K000000000
|
||||
$1;cllllllllX$5X$4c:::::::::c$50X$3000000000d
|
||||
$1.ccccllllllO$5Nk$4c;,,,;cx$5KK$30000000000.
|
||||
$1 .cccccclllllxOO$5OOO$1Okx$3O0000000000;
|
||||
$1 .:ccccccccllllllllo$3O0000000OOO,
|
||||
$1 ,:ccccccccclllcd$30000OOOOOOl.
|
||||
$1 '::ccccccccc$3dOOOOOOOkx:.
|
||||
$1 ..,::cccc$3xOOOkkko;.
|
||||
$1 ..,:$3dOkxl:.
|
||||
@@ -3,18 +3,18 @@
|
||||
BBBBBBBBBBBBBBB
|
||||
BBBBBBBBBBBBBBBBBBBB
|
||||
BBBBBBBBBBB BBB
|
||||
BBBBBBBB${c2}YYYYY
|
||||
${c1} BBBBBBBB${c2}YYYYYY
|
||||
${c1} BBBBBBBB${c2}YYYYYYY
|
||||
${c1} BBBBBBBBB${c2}YYYYY${c3}W
|
||||
${c4} GG${c1}BBBBBBBY${c2}YYYY${c3}WWW
|
||||
${c4} GGG${c1}BBBBBBB${c2}YY${c3}WWWWWWWW
|
||||
${c4} GGGGGG${c1}BBBBBB${c3}WWWWWWWW
|
||||
${c4} GGGGGGGG${c1}BBBB${c3}WWWWWWWW
|
||||
${c4}GGGGGGGGGGG${c1}BBB${c3}WWWWWWW
|
||||
${c4}GGGGGGGGGGGGG${c1}B${c3}WWWWWW
|
||||
${c4}GGGGGGGG${c3}WWWWWWWWWWW
|
||||
${c4}GG${c3}WWWWWWWWWWWWWWWW
|
||||
BBBBBBBB$2YYYYY
|
||||
$1 BBBBBBBB$2YYYYYY
|
||||
$1 BBBBBBBB$2YYYYYYY
|
||||
$1 BBBBBBBBB$2YYYYY$3W
|
||||
$4 GG$1BBBBBBBY$2YYYY$3WWW
|
||||
$4 GGG$1BBBBBBB$2YY$3WWWWWWWW
|
||||
$4 GGGGGG$1BBBBBB$3WWWWWWWW
|
||||
$4 GGGGGGGG$1BBBB$3WWWWWWWW
|
||||
$4GGGGGGGGGGG$1BBB$3WWWWWWW
|
||||
$4GGGGGGGGGGGGG$1B$3WWWWWW
|
||||
$4GGGGGGGG$3WWWWWWWWWWW
|
||||
$4GG$3WWWWWWWWWWWWWWWW
|
||||
WWWWWWWWWWWWWWWW
|
||||
WWWWWWWWWW
|
||||
WWW
|
||||
@@ -7,8 +7,8 @@
|
||||
`oNMMMNo` `sNMMMMMMNs` `oNMMMNo`
|
||||
`oNMMMMMMMNo` `oNMMNs` `oNMMMMMMMNo`
|
||||
oNMMMMMMMMMMMNo` `sy` `oNMMMMMMMMMMMNo
|
||||
`sNMMMMMMMMMMMMNo.${c2}oNNs${c1}.oNMMMMMMMMMMMMNs`
|
||||
`oNMMMMMMMMMMMMNs.${c2}oNNs${c1}.oNMMMMMMMMMMMMNo`
|
||||
`sNMMMMMMMMMMMMNo.$2oNNs$1.oNMMMMMMMMMMMMNs`
|
||||
`oNMMMMMMMMMMMMNs.$2oNNs$1.oNMMMMMMMMMMMMNo`
|
||||
oNMMMMMMMMMMMNs` `sy` `oNMMMMMMMMMMMNo
|
||||
`oNMMMMMMMNs` `oNMMNo` `oNMMMMMMMNs`
|
||||
`oNMMMNs` `sNMMMMMMNs` `oNMMMNs`
|
||||
|
||||
+14
-14
@@ -1,16 +1,16 @@
|
||||
${c1} ///
|
||||
${c1} ,//////////////
|
||||
${c1} ///////////////////////////////
|
||||
${c1} ///////////////${c5}***********${c1}//////
|
||||
////${c5}***********************${c1}/////
|
||||
/////${c5}***********************${c1}////
|
||||
//////${c5},,,,,,,,,,,,,,,,,,,,,,${c1}///
|
||||
//////${c5},,,,,,,,,,,,,,,,,,,,,,,,,${c1}/////
|
||||
/////${c5},,,,,,,,,,,,,,,,,,,,,,,,,,,,${c1}/////
|
||||
${c4} *****${c3},,,,,,,,,,,,,,,,,,,,,,,,,,,,,${c4}*****
|
||||
******${c3},,,,,,,,,,,,,,,,,,,,,,,,,,,,${c4}*****
|
||||
*******${c3},,,,,,,,,,,,,,,,,,,,,,,,,${c4}******
|
||||
*******${c3}......................${c4}*******
|
||||
******${c3}....${c4}***********************
|
||||
$1 ///
|
||||
$1 ,//////////////
|
||||
$1 ///////////////////////////////
|
||||
$1 ///////////////$5***********$1//////
|
||||
////$5***********************$1/////
|
||||
/////$5***********************$1////
|
||||
//////$5,,,,,,,,,,,,,,,,,,,,,,$1///
|
||||
//////$5,,,,,,,,,,,,,,,,,,,,,,,,,$1/////
|
||||
/////$5,,,,,,,,,,,,,,,,,,,,,,,,,,,,$1/////
|
||||
$4 *****$3,,,,,,,,,,,,,,,,,,,,,,,,,,,,,$4*****
|
||||
******$3,,,,,,,,,,,,,,,,,,,,,,,,,,,,$4*****
|
||||
*******$3,,,,,,,,,,,,,,,,,,,,,,,,,$4******
|
||||
*******$3......................$4*******
|
||||
******$3....$4***********************
|
||||
****************************
|
||||
*****
|
||||
@@ -0,0 +1,12 @@
|
||||
^"^"^". `"^"""`
|
||||
";;;;;:. `;;;;;;.
|
||||
^;":;:;: .;,,;:;:
|
||||
.'`",, '":::. ^;'';;;;, .:: ,;;;:
|
||||
';;;;:":::::' ^;` `;;;;" ::. ,;;;:
|
||||
";:;:. ^;` ^;;;;^ ,;. ,;;;:
|
||||
";;;: ^;` ";;;;^ ";' ,;;;:
|
||||
";;;: ^;` ,;;;;`^;` ,;;;:
|
||||
";;;: ^;` ,;;;;;^ ,;;;:
|
||||
";:;: ^;` .:;:;" ,;:;:
|
||||
,;;;;. ";" .:;, :;;;;.
|
||||
."""""` ^"^ '" ."""""`
|
||||
+17
-17
@@ -1,17 +1,17 @@
|
||||
${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}.+.
|
||||
${c1}`oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+${c3}:++.
|
||||
${c2}/o${c1}+oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy/${c3}oo++.
|
||||
${c2}/y+${c1}syyyyyyyyyyyyyyyyyyyyyyyyyyyyy${c3}+ooo++.
|
||||
${c2}/hy+${c1}oyyyhhhhhhhhhhhhhhyyyyyyyyy${c3}+oo+++++.
|
||||
${c2}/hhh+${c1}shhhhhdddddhhhhhhhyyyyyyy${c3}+oo++++++.
|
||||
${c2}/hhdd+${c1}oddddddddddddhhhhhyyyys${c3}+oo+++++++.
|
||||
${c2}/hhddd+${c1}odmmmdddddddhhhhyyyy${c3}+ooo++++++++.
|
||||
${c2}/hhdddmo${c1}odmmmdddddhhhhhyyy${c3}+oooo++++++++.
|
||||
${c2}/hdddmmms${c1}/dmdddddhhhhyyys${c3}+oooo+++++++++.
|
||||
${c2}/hddddmmmy${c1}/hdddhhhhyyyyo${c3}+oooo++++++++++:
|
||||
${c2}/hhdddmmmmy${c1}:yhhhhyyyyy+${c3}+oooo+++++++++++:
|
||||
${c2}/hhddddddddy${c1}-syyyyyys+${c3}ooooo++++++++++++:
|
||||
${c2}/hhhddddddddy${c1}-+yyyy+${c3}/ooooo+++++++++++++:
|
||||
${c2}/hhhhhdddddhhy${c1}./yo:${c3}+oooooo+++++++++++++/
|
||||
${c2}/hhhhhhhhhhhhhy${c1}:-.${c3}+sooooo+++++++++++///:
|
||||
${c2}:sssssssssssso++${c1}${c3}`:/:--------.````````
|
||||
$1syyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+$3.+.
|
||||
$1`oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy+$3:++.
|
||||
$2/o$1+oyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy/$3oo++.
|
||||
$2/y+$1syyyyyyyyyyyyyyyyyyyyyyyyyyyyy$3+ooo++.
|
||||
$2/hy+$1oyyyhhhhhhhhhhhhhhyyyyyyyyy$3+oo+++++.
|
||||
$2/hhh+$1shhhhhdddddhhhhhhhyyyyyyy$3+oo++++++.
|
||||
$2/hhdd+$1oddddddddddddhhhhhyyyys$3+oo+++++++.
|
||||
$2/hhddd+$1odmmmdddddddhhhhyyyy$3+ooo++++++++.
|
||||
$2/hhdddmo$1odmmmdddddhhhhhyyy$3+oooo++++++++.
|
||||
$2/hdddmmms$1/dmdddddhhhhyyys$3+oooo+++++++++.
|
||||
$2/hddddmmmy$1/hdddhhhhyyyyo$3+oooo++++++++++:
|
||||
$2/hhdddmmmmy$1:yhhhhyyyyy+$3+oooo+++++++++++:
|
||||
$2/hhddddddddy$1-syyyyyys+$3ooooo++++++++++++:
|
||||
$2/hhhddddddddy$1-+yyyy+$3/ooooo+++++++++++++:
|
||||
$2/hhhhhdddddhhy$1./yo:$3+oooooo+++++++++++++/
|
||||
$2/hhhhhhhhhhhhhy$1:-.$3+sooooo+++++++++++///:
|
||||
$2:sssssssssssso++$1$3`:/:--------.````````
|
||||
@@ -1,7 +1,7 @@
|
||||
___
|
||||
(${c3}.· ${c1}|
|
||||
(${c2}<> ${c1}|
|
||||
/ ${c3}__ ${c1}\
|
||||
( ${c3}/ \ ${c1}/|
|
||||
${c2}_${c1}/\ ${c3}__)${c1}/${c2}_${c1})
|
||||
${c2}\/${c1}-____${c2}\/
|
||||
($3.· $1|
|
||||
($2<> $1|
|
||||
/ $3__ $1\
|
||||
( $3/ \ $1/|
|
||||
$2_$1/\ $3__)$1/$2_$1)
|
||||
$2\/$1-____$2\/
|
||||
+18
-18
@@ -1,20 +1,20 @@
|
||||
`.-://++++++//:-.`
|
||||
`:/+//${c2}::--------${c1}:://+/:`
|
||||
-++/:${c2}----..........----${c1}:/++-
|
||||
.++:${c2}---...........-......---${c1}:++.
|
||||
/+:${c2}---....-::/:/--//:::-....---${c1}:+/
|
||||
`++:${c2}--.....:---::/--/::---:.....--${c1}:++`
|
||||
/+:${c2}--.....--.--::::-/::--.--.....--${c1}:+/
|
||||
-o:${c2}--.......-:::://--/:::::-.......--${c1}:o-
|
||||
/+:${c2}--...-:-::---:::..:::---:--:-...--${c1}:+/
|
||||
o/:${c2}-...-:.:.-/:::......::/:.--.:-...-${c1}:/o
|
||||
o/${c2}--...::-:/::/:-......-::::::-/-...-${c1}:/o
|
||||
/+:${c2}--..-/:/:::--:::..:::--::////-..--${c1}:+/
|
||||
-o:${c2}--...----::/:::/--/:::::-----...--${c1}:o-
|
||||
/+:${c2}--....://:::.:/--/:.::://:....--${c1}:+/
|
||||
`++:${c2}--...-:::.--.:..:.--.:/:-...--${c1}:++`
|
||||
/+:${c2}---....----:-..-:----....---${c1}:+/
|
||||
.++:${c2}---..................---${c1}:++.
|
||||
-/+/:${c2}----..........----${c1}:/+/-
|
||||
`:/+//${c2}::--------:::${c1}/+/:`
|
||||
`:/+//$2::--------$1:://+/:`
|
||||
-++/:$2----..........----$1:/++-
|
||||
.++:$2---...........-......---$1:++.
|
||||
/+:$2---....-::/:/--//:::-....---$1:+/
|
||||
`++:$2--.....:---::/--/::---:.....--$1:++`
|
||||
/+:$2--.....--.--::::-/::--.--.....--$1:+/
|
||||
-o:$2--.......-:::://--/:::::-.......--$1:o-
|
||||
/+:$2--...-:-::---:::..:::---:--:-...--$1:+/
|
||||
o/:$2-...-:.:.-/:::......::/:.--.:-...-$1:/o
|
||||
o/$2--...::-:/::/:-......-::::::-/-...-$1:/o
|
||||
/+:$2--..-/:/:::--:::..:::--::////-..--$1:+/
|
||||
-o:$2--...----::/:::/--/:::::-----...--$1:o-
|
||||
/+:$2--....://:::.:/--/:.::://:....--$1:+/
|
||||
`++:$2--...-:::.--.:..:.--.:/:-...--$1:++`
|
||||
/+:$2---....----:-..-:----....---$1:+/
|
||||
.++:$2---..................---$1:++.
|
||||
-/+/:$2----..........----$1:/+/-
|
||||
`:/+//$2::--------:::$1/+/:`
|
||||
`.-://++++++//:-.`
|
||||
@@ -3,7 +3,7 @@ _ _wwMMM@M^^^^MMMMww_
|
||||
M0w_ _wMMM~~ ~~MMm_
|
||||
~MMy _ww0M~ ~MMy
|
||||
~MMMM~ o "MM
|
||||
${c3} jw0M~~MMMw_ _wMM'
|
||||
$3 jw0M~~MMMw_ _wMM'
|
||||
wMM~ ~~MMmw__ __w0M~
|
||||
~ ~~MM0MmwwwwwwwwwMMM~
|
||||
~~~~^^~~~
|
||||
+11
-11
@@ -1,14 +1,14 @@
|
||||
${c3}1ua${c2}
|
||||
${c3}MMM1ua${c2}
|
||||
${c1}MM${c2}EE ${c3} MMMMM1uazE${c2}
|
||||
${c1}MM ${c2}EEEE ${c3}M1MM1uazzEn ${c2}EEEE MME
|
||||
EEEEE ${c3}MMM uazEno ${c2}EEEE
|
||||
EEEEE${c1}MMMMMMEno~; ${c2}EE E${c2}
|
||||
EE ${c1}MMMMMMMM~;;E ${c2}MMMMM M ${c2}
|
||||
E ${c1}MMMMMMMMM ${c2} E E ${c2}
|
||||
${c1}MMMMMMMMMMM
|
||||
${c1}MMMMMMMMM ${c2}EE ${c1}
|
||||
MM1MMMM ${c2}EEE ${c1}
|
||||
$31ua$2
|
||||
$3MMM1ua$2
|
||||
$1MM$2EE $3 MMMMM1uazE$2
|
||||
$1MM $2EEEE $3M1MM1uazzEn $2EEEE MME
|
||||
EEEEE $3MMM uazEno $2EEEE
|
||||
EEEEE$1MMMMMMEno~; $2EE E$2
|
||||
EE $1MMMMMMMM~;;E $2MMMMM M $2
|
||||
E $1MMMMMMMMM $2 E E $2
|
||||
$1MMMMMMMMMMM
|
||||
$1MMMMMMMMM $2EE $1
|
||||
MM1MMMM $2EEE $1
|
||||
MMMMM
|
||||
MMM
|
||||
M
|
||||
+10
-10
@@ -1,14 +1,14 @@
|
||||
${c3} !M$EEEEEEEEEEEP
|
||||
$3 !M$EEEEEEEEEEEP
|
||||
.MMMMM000000Nr.
|
||||
${c3}&MMMMMM${c2}MMMMMMMMMMMMM9
|
||||
${c3}~MMM${c1}MMMM${c2}MMMMMMMMMMMMC
|
||||
${c1}" ${c3}M${c1}MMMMMMM${c2}MMMMMMMMMMs
|
||||
${c1}iM${c2}MMM&&${c1}MMMMMMMM${c2}MMMMMMMMs
|
||||
${c1}BMMM${c2}MMMMM${c1}MMMMMMM${c2}MMMMMM${c3}"
|
||||
${c1}9MMMMM${c2}MMMMMMM${c1}MMMM${c2}MMMM${c3}MMMf-
|
||||
${c2}sMMMMMMMM${c1}MM${c2}M${c3}MMMMMMMMM3_
|
||||
${c2}+ffffffff${c1}P${c3}MMMMMMMMMMMM0
|
||||
${c2}CMMMMMMMMMMM
|
||||
$3&MMMMMM$2MMMMMMMMMMMMM9
|
||||
$3~MMM$1MMMM$2MMMMMMMMMMMMC
|
||||
$1" $3M$1MMMMMMM$2MMMMMMMMMMs
|
||||
$1iM$2MMM&&$1MMMMMMMM$2MMMMMMMMs
|
||||
$1BMMM$2MMMMM$1MMMMMMM$2MMMMMM$3"
|
||||
$19MMMMM$2MMMMMMM$1MMMM$2MMMM$3MMMf-
|
||||
$2sMMMMMMMM$1MM$2M$3MMMMMMMMM3_
|
||||
$2+ffffffff$1P$3MMMMMMMMMMMM0
|
||||
$2CMMMMMMMMMMM
|
||||
}MMMMMMMMM
|
||||
~MMMMMMM
|
||||
"RMMMM
|
||||
|
||||
+20
-20
@@ -1,20 +1,20 @@
|
||||
${c3}⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠋⡆⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡆⢀⣤⢛⠛⣠⣿⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⣿⠟⣡⠊⣠⣾⣿⠃⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣯⣿⠀⠊⣤⣿⣿⣿⠃⣴⣧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡟⣠⣶⣿⣿⣿⢋⣤⠿⠛⠉⢁⣭⣽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c4} ⠀⠀⠀⠀⠀⠀ ⠀⣠⠖⡭⢉⣿⣯⣿⣯⣿⣿⣿⣟⣧⠛⢉⣤⣶⣾⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c5}⠀⠀⠀⠀⠀⠀⠀⠀⣴⣫⠓⢱⣯⣿⢿⠋⠛⢛⠟⠯⠶⢟⣿⣯⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c2}⠀⠀⠀⠀⠀⠀⢀⡮⢁⣴⣿⣿⣿⠖⣠⠐⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠛⠛⠛⢿⣶⣄⠀⠀⠀⠀⠀⠀⠀
|
||||
${c3}⠀⠀⠀⠀⢀⣤⣷⣿⣿⠿⢛⣭⠒⠉⠀⠀⠀⣀⣀⣄⣤⣤⣴⣶⣶⣶⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c1}⠀⢀⣶⠏⠟⠝⠉⢀⣤⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c6}⢴⣯⣤⣶⣿⣿⣿⣿⣿⡿⣿⣯⠉⠉⠉⠉⠀⠀⠀⠈⣿⡀⣟⣿⣿⢿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c5}⠀⠀⠀⠉⠛⣿⣧⠀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠃⣿⣿⣯⣿⣦⡀⠀⠉⠻⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c3}⠀⠀⠀⠀⠀⠀⠉⢿⣮⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠀⣯⠉⠉⠛⢿⣿⣷⣄⠀⠈⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c2}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⠀⠀⠀⠀⠀⠀⠀⢀⢡⠃⣾⣿⣿⣦⠀⠀⠀⠙⢿⣿⣤⠀⠙⣄⠀⠀⠀⠀⠀⠀⠀
|
||||
${c6}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢋⡟⢠⣿⣿⣿⠋⢿⣄⠀⠀⠀⠈⡄⠙⣶⣈⡄⠀⠀⠀⠀⠀⠀
|
||||
${c1}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⢲⣿⠀⣾⣿⣿⠁⠀⠀⠉⢷⡀⠀⠀⣇⠀⠀⠈⠻⡀⠀⠀⠀⠀⠀
|
||||
${c4}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⣀⣿⡏⠀⣿⡿⠀⠀⠀⠀⠀⠀⠙⣦⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c3}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠿⣧⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣮⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
${c5}⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠀⠀⠀⠀⠀⠀
|
||||
$3⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠢⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⠋⡆⢹⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$5⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡆⢀⣤⢛⠛⣠⣿⠀⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$6⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣶⣿⠟⣡⠊⣠⣾⣿⠃⣠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⣯⣿⠀⠊⣤⣿⣿⣿⠃⣴⣧⣄⣀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣤⣶⣿⣿⡟⣠⣶⣿⣿⣿⢋⣤⠿⠛⠉⢁⣭⣽⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$4 ⠀⠀⠀⠀⠀⠀ ⠀⣠⠖⡭⢉⣿⣯⣿⣯⣿⣿⣿⣟⣧⠛⢉⣤⣶⣾⣿⣿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$5⠀⠀⠀⠀⠀⠀⠀⠀⣴⣫⠓⢱⣯⣿⢿⠋⠛⢛⠟⠯⠶⢟⣿⣯⣿⣿⣿⣿⣿⣿⣦⣄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$2⠀⠀⠀⠀⠀⠀⢀⡮⢁⣴⣿⣿⣿⠖⣠⠐⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠉⠛⠛⠛⢿⣶⣄⠀⠀⠀⠀⠀⠀⠀
|
||||
$3⠀⠀⠀⠀⢀⣤⣷⣿⣿⠿⢛⣭⠒⠉⠀⠀⠀⣀⣀⣄⣤⣤⣴⣶⣶⣶⣿⣿⣿⣿⣿⠿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$1⠀⢀⣶⠏⠟⠝⠉⢀⣤⣿⣿⣶⣾⣿⣿⣿⣿⣿⣿⣟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$6⢴⣯⣤⣶⣿⣿⣿⣿⣿⡿⣿⣯⠉⠉⠉⠉⠀⠀⠀⠈⣿⡀⣟⣿⣿⢿⣿⣿⣿⣿⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$5⠀⠀⠀⠉⠛⣿⣧⠀⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⠃⣿⣿⣯⣿⣦⡀⠀⠉⠻⣿⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$3⠀⠀⠀⠀⠀⠀⠉⢿⣮⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⣼⣿⠀⣯⠉⠉⠛⢿⣿⣷⣄⠀⠈⢻⣆⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$2⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠢⠀⠀⠀⠀⠀⠀⠀⢀⢡⠃⣾⣿⣿⣦⠀⠀⠀⠙⢿⣿⣤⠀⠙⣄⠀⠀⠀⠀⠀⠀⠀
|
||||
$6⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⢋⡟⢠⣿⣿⣿⠋⢿⣄⠀⠀⠀⠈⡄⠙⣶⣈⡄⠀⠀⠀⠀⠀⠀
|
||||
$1⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠐⠚⢲⣿⠀⣾⣿⣿⠁⠀⠀⠉⢷⡀⠀⠀⣇⠀⠀⠈⠻⡀⠀⠀⠀⠀⠀
|
||||
$4⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢢⣀⣿⡏⠀⣿⡿⠀⠀⠀⠀⠀⠀⠙⣦⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$3⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⠿⣧⣾⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⣮⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
|
||||
$5⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠛⠀⠀⠀⠀⠀⠀
|
||||
@@ -1,18 +1,18 @@
|
||||
:=+******+- -+******+=:
|
||||
=#-::-::::-=#:-#=-::::-::-#=
|
||||
:%-::--==-::-%%-::-==--::-%:
|
||||
+#-:::::=+++${c2}@@${c1}+++=-::::-#=
|
||||
:#+-::::=%${c2}@@@@@${c1}=::::-+#:
|
||||
=@%##%${c2}@@@@@@@@${c1}%##%@=
|
||||
${c2} .#@@@@@@@@@@@@@@@@@@@@#.
|
||||
+#-:::::=+++$2@@$1+++=-::::-#=
|
||||
:#+-::::=%$2@@@@@$1=::::-+#:
|
||||
=@%##%$2@@@@@@@@$1%##%@=
|
||||
$2 .#@@@@@@@@@@@@@@@@@@@@#.
|
||||
%@@@@@@@@@@@@@@@@@@@@@@%
|
||||
-@@@@@@@@@@@@@@@@@@@@@@@@:
|
||||
.#@@@@@@@@@@%%%%%@@@@@@@@@@@#.
|
||||
#@@@${c1}+-=*#%${c2}%%%%%%%%%${c1}%%#+--#${c2}@@@#
|
||||
%@@%${c1}*. .:${c2}=*%%%%*${c1}=: .#${c2}@@@%
|
||||
:%@@@${c1}#+=-:${c2}:-*%%%%+::${c1}:-=+%${c2}@@@%:
|
||||
:@@@@%@%%%%@${c1}#${c2}#${c1}#${c2}%@%%%%@%@@@@.
|
||||
+@@@@@@@@@${c1}%${c2}=*+${c1}%${c2}@%@@@@@@@@+
|
||||
#@@@$1+-=*#%$2%%%%%%%%%$1%%#+--#$2@@@#
|
||||
%@@%$1*. .:$2=*%%%%*$1=: .#$2@@@%
|
||||
:%@@@$1#+=-:$2:-*%%%%+::$1:-=+%$2@@@%:
|
||||
:@@@@%@%%%%@$1#$2#$1#$2%@%%%%@%@@@@.
|
||||
+@@@@@@@@@$1%$2=*+$1%$2@%@@@@@@@@+
|
||||
#@@@@@@@@@@@@@@@@@@@@@@#
|
||||
-#@@@@@@@@@@@@@@@@@@#-
|
||||
-*%@@@@@@@@@@%*-
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
${c2},--, ${c1}| ${c2},--,
|
||||
${c2}| `-, ${c1},^, ${c2},-' |
|
||||
${c2} `, `-, ${c3}(/ \) ${c2},-' ,'
|
||||
${c2} `-, `-,${c1}/ \${c2},-' ,-'
|
||||
${c2} `------${c1}( )${c2}------'
|
||||
${c2} ,----------${c1}( )${c2}----------,
|
||||
${c2} | _,-${c1}( )${c2}-,_ |
|
||||
${c2} `-,__,-' ${c1}\ /${c2} `-,__,-'
|
||||
${c1} | |
|
||||
$2,--, $1| $2,--,
|
||||
$2| `-, $1,^, $2,-' |
|
||||
$2 `, `-, $3(/ \) $2,-' ,'
|
||||
$2 `-, `-,$1/ \$2,-' ,-'
|
||||
$2 `------$1( )$2------'
|
||||
$2 ,----------$1( )$2----------,
|
||||
$2 | _,-$1( )$2-,_ |
|
||||
$2 `-,__,-' $1\ /$2 `-,__,-'
|
||||
$1 | |
|
||||
| |
|
||||
| |
|
||||
| |
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
.-.
|
||||
${c3} ()${c1}I${c3}()
|
||||
${c1} "==.__:-:__.=="
|
||||
$3 ()$1I$3()
|
||||
$1 "==.__:-:__.=="
|
||||
"==.__/~|~\__.=="
|
||||
"==._( Y )_.=="
|
||||
${c2}.-'~~""~=--...,__${c1}\/|\/${c2}__,...--=~""~~'-.
|
||||
( ..=${c1}\=${c1}/${c2}=.. )
|
||||
`'-. ,.-"`;${c1}/=\${c2};"-.,_ .-'`
|
||||
`~"-=-~` .-~` ${c1}|=|${c2} `~-. `~-=-"~`
|
||||
.-~` /${c1}|=|${c2}\ `~-.
|
||||
.~` / ${c1}|=|${c2} \ `~.
|
||||
.-~` .' ${c1}|=|${c2} `. `~-.
|
||||
(` _,.-="` ${c1} |=|${c2} `"=-.,_ `)
|
||||
`~"~"` ${c1} |=|${c2} `"~"~`
|
||||
${c1} /=\
|
||||
$2.-'~~""~=--...,__$1\/|\/$2__,...--=~""~~'-.
|
||||
( ..=$1\=$1/$2=.. )
|
||||
`'-. ,.-"`;$1/=\$2;"-.,_ .-'`
|
||||
`~"-=-~` .-~` $1|=|$2 `~-. `~-=-"~`
|
||||
.-~` /$1|=|$2\ `~-.
|
||||
.~` / $1|=|$2 \ `~.
|
||||
.-~` .' $1|=|$2 `. `~-.
|
||||
(` _,.-="` $1 |=|$2 `"=-.,_ `)
|
||||
`~"~"` $1 |=|$2 `"~"~`
|
||||
$1 /=\
|
||||
\=/
|
||||
^
|
||||
@@ -1,7 +1,7 @@
|
||||
${c2} ,${c1}_${c2},
|
||||
('-_${c1}|${c2}_-')
|
||||
>--${c1}|${c2}--<
|
||||
(_-'${c1}|${c2}'-_)
|
||||
${c1}|
|
||||
$2 ,$1_$2,
|
||||
('-_$1|$2_-')
|
||||
>--$1|$2--<
|
||||
(_-'$1|$2'-_)
|
||||
$1|
|
||||
|
|
||||
|
|
||||
@@ -1,14 +1,14 @@
|
||||
${c2} _,met$$$$$$$$$$gg.
|
||||
$2 _,met$$$$$$$$$$gg.
|
||||
,g$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$P.
|
||||
,$$$$P' `$$$$$$.
|
||||
',$$$$P ,ggs. `$$$$b:
|
||||
`d$$$$' ,$$P"' ${c1}.${c2} $$$$$$
|
||||
$$$$P d$$' ${c1},${c2} $$$$P
|
||||
$$$$: $$$$. ${c1}-${c2} ,d$$$$'
|
||||
`d$$$$' ,$$P"' $1.$2 $$$$$$
|
||||
$$$$P d$$' $1,$2 $$$$P
|
||||
$$$$: $$$$. $1-$2 ,d$$$$'
|
||||
$$$$; Y$$b._ _,d$$P'
|
||||
Y$$$$. ${c1}`.${c2}`"Y$$$$$$$$P"'
|
||||
${c2} `$$$$b ${c1}"-.__
|
||||
${c2} `Y$$$$
|
||||
Y$$$$. $1`.$2`"Y$$$$$$$$P"'
|
||||
$2 `$$$$b $1"-.__
|
||||
$2 `Y$$$$
|
||||
`Y$$$$.
|
||||
`$$$$b.
|
||||
`Y$$$$b.
|
||||
|
||||
+17
-17
@@ -1,17 +1,17 @@
|
||||
*@${c2},,&(%%%..%*.
|
||||
${c1}(@${c2}&%/##############((/${c1}*,
|
||||
${c2}@${c1}@&${c2}#########${c1}*..../${c2}########%${c1}*..
|
||||
${c2}@${c1}&${c2}#%%%%%. ${c3},.${c1},${c2}%%%%%%.
|
||||
/%${c2}(%%%%. ${c1}(${c2}%%%%#.
|
||||
/${c1}*${c2}%%##,. .,%%###,
|
||||
,####. ,${c1}*${c2}#%${c1}#${c3}/,(/ ${c2}/${c1}#${c2}###,
|
||||
((###/ ,,##########${c1}(${c3}/(# ${c2}%####,
|
||||
%#(((${c1}. .${c1}./${c2}((((((((((((((${c1}(${c2}#/${c3}*.. ${c3}*.${c2}(((${c1}/
|
||||
${c2}%#///${c1}. ${c3}***${c2}.*/////////////
|
||||
${c3}#${c2}#////* ${c3}***${c2}.*/////.
|
||||
${c3}(${c2}(***** ${c3}***
|
||||
${c2},*****..
|
||||
..${c1}*${c2}*****.. *${c1}%${c2}/****.
|
||||
.,,*******,${c3},,../##(${c2}%&${c1}&${c2}#******${c1},${c2}.
|
||||
,*${c1},${c2},,,,,,,,,,,,,,,,,,,${c1},${c2}..
|
||||
*//${c1}/,,${c2},,,,,,,${c1},..${c2}
|
||||
*@$2,,&(%%%..%*.
|
||||
$1(@$2&%/##############((/$1*,
|
||||
$2@$1@&$2#########$1*..../$2########%$1*..
|
||||
$2@$1&$2#%%%%%. $3,.$1,$2%%%%%%.
|
||||
/%$2(%%%%. $1($2%%%%#.
|
||||
/$1*$2%%##,. .,%%###,
|
||||
,####. ,$1*$2#%$1#$3/,(/ $2/$1#$2###,
|
||||
((###/ ,,##########$1($3/(# $2%####,
|
||||
%#((($1. .$1./$2(((((((((((((($1($2#/$3*.. $3*.$2((($1/
|
||||
$2%#///$1. $3***$2.*/////////////
|
||||
$3#$2#////* $3***$2.*/////.
|
||||
$3($2(***** $3***
|
||||
$2,*****..
|
||||
..$1*$2*****.. *$1%$2/****.
|
||||
.,,*******,$3,,../##($2%&$1&$2#******$1,$2.
|
||||
,*$1,$2,,,,,,,,,,,,,,,,,,,$1,$2..
|
||||
*//$1/,,$2,,,,,,,$1,..$2
|
||||
@@ -1,7 +1,7 @@
|
||||
/${c2}o${c3}.
|
||||
${c1} /${c2}sssso${c3}-
|
||||
${c1} /${c2}ossssssso${c3}:
|
||||
${c1} /${c2}ssssssssssso${c3}+
|
||||
${c1} /${c2}ssssssssssssssso${c3}+
|
||||
${c1}//${c2}osssssssssssssso${c3}+-
|
||||
/$2o$3.
|
||||
$1 /$2sssso$3-
|
||||
$1 /$2ossssssso$3:
|
||||
$1 /$2ssssssssssso$3+
|
||||
$1 /$2ssssssssssssssso$3+
|
||||
$1//$2osssssssssssssso$3+-
|
||||
`+++++++++++++++-`
|
||||
@@ -3,15 +3,15 @@
|
||||
-WWWWWWWWWWWWWWWWWWw-
|
||||
\WWWWWWWWWWWWWWWWWWW-
|
||||
_Ww `WWWWWWWWWWWWWWWWWWWw
|
||||
-W${c2}E${c1}Www -WWWWWWWWW-
|
||||
_WW${c2}U${c1}WWWW- _WWWWWWWW
|
||||
_WW${c2}R${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW-
|
||||
wWW${c2}O${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
|
||||
WWW${c2}L${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw
|
||||
WWW${c2}I${c1}WWWWWWWWWWWWWWWWWWWWWWWWWWWWww-
|
||||
wWW${c2}N${c1}WWWWw
|
||||
WW${c2}U${c1}WWWWWWw
|
||||
wW${c2}X${c1}WWWWWWWWww
|
||||
-W$2E$1Www -WWWWWWWWW-
|
||||
_WW$2U$1WWWW- _WWWWWWWW
|
||||
_WW$2R$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWW-
|
||||
wWW$2O$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
|
||||
WWW$2L$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWw
|
||||
WWW$2I$1WWWWWWWWWWWWWWWWWWWWWWWWWWWWww-
|
||||
wWW$2N$1WWWWw
|
||||
WW$2U$1WWWWWWw
|
||||
wW$2X$1WWWWWWWWww
|
||||
wWWWWWWWWWWWWWWWw
|
||||
wWWWWWWWWWWWWWWWw
|
||||
WWWWWWWWWWWWWw
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
${c2} #####%%%
|
||||
${c2} ##%%${c3}////${c2}%%%%%${c3}///
|
||||
${c2} #%%%%${c3}////((((////${c2}%
|
||||
${c1} *@@@@@@@${c3}/${c5},,,${c3}/////${c5},,,${c2}%${c1}@@@@@@@
|
||||
.@@@@@@@@@@@${c3}////////${c2}%%%${c1}@@@@@@@@@@@@
|
||||
@@@${c4}...${c1}@@@@@@${c3}////${c2}%%${c3}////${c1}@@@@@@@@@@@@@@@@
|
||||
$2 #####%%%
|
||||
$2 ##%%$3////$2%%%%%$3///
|
||||
$2 #%%%%$3////((((////$2%
|
||||
$1 *@@@@@@@$3/$5,,,$3/////$5,,,$2%$1@@@@@@@
|
||||
.@@@@@@@@@@@$3////////$2%%%$1@@@@@@@@@@@@
|
||||
@@@$4...$1@@@@@@$3////$2%%$3////$1@@@@@@@@@@@@@@@@
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
.....
|
||||
.';:cccccccc:;'.
|
||||
':ccccclc${c3}lllllllll${c1}cc:.
|
||||
.;cccccccc${c3}lllllllllllllll${c1}c,
|
||||
;clllccccc${c3}llllllllllllllllll${c1}c,
|
||||
.cllclccccc${c3}lllll${c2}lll${c3}llllllllllll${c1}c:
|
||||
ccclclcccc${c3}cllll${c2}kWMMNKk${c3}llllllllll${c1}c:
|
||||
:ccclclcccc${c3}llll${c2}oWMMMMMMWO${c3}lllllllll${c1}c,
|
||||
.ccllllllccc${c3}clll${c2}OMMMMMMMMM0${c3}lllllllll${c1}c
|
||||
.lllllclcccc${c3}llll${c2}KMMMMMMMMMMo${c3}llllllll${c1}c.
|
||||
.lllllllcccc${c3}clll${c2}KMMMMMMMMN0${c3}lllllllll${c1}c.
|
||||
.cclllllcccc${c3}lllld${c2}xkkxxdo${c3}llllllllllc${c1}lc
|
||||
:cccllllllcccc${c3}lllccllllcclccc${c1}cccccc;
|
||||
.ccclllllllcccccccc${c3}lll${c1}ccccclccccccc
|
||||
':ccccclc$3lllllllll$1cc:.
|
||||
.;cccccccc$3lllllllllllllll$1c,
|
||||
;clllccccc$3llllllllllllllllll$1c,
|
||||
.cllclccccc$3lllll$2lll$3llllllllllll$1c:
|
||||
ccclclcccc$3cllll$2kWMMNKk$3llllllllll$1c:
|
||||
:ccclclcccc$3llll$2oWMMMMMMWO$3lllllllll$1c,
|
||||
.ccllllllccc$3clll$2OMMMMMMMMM0$3lllllllll$1c
|
||||
.lllllclcccc$3llll$2KMMMMMMMMMMo$3llllllll$1c.
|
||||
.lllllllcccc$3clll$2KMMMMMMMMN0$3lllllllll$1c.
|
||||
.cclllllcccc$3lllld$2xkkxxdo$3llllllllllc$1lc
|
||||
:cccllllllcccc$3lllccllllcclccc$1cccccc;
|
||||
.ccclllllllcccccccc$3lll$1ccccclccccccc
|
||||
.cllllllllllclcccclccclccllllcllc
|
||||
:cllllllllccclcllllllllllllcc;
|
||||
.cccccccccccccclcccccccccc:.
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
+############################;
|
||||
:#############.**,#############,
|
||||
*###########+ +###########+
|
||||
?########## ${c3}Finnix${c1} ##########*
|
||||
?########## $3Finnix$1 ##########*
|
||||
*###########, ,###########+
|
||||
:#############%..%#############,
|
||||
*############################+
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
++osoooooooooooosssssssssssssyyo+++++++o:
|
||||
-o+ssoooooooooooosssssssssssssyyo+++++++s`
|
||||
o++ssoooooo++++++++++++++sssyyyyo++++++o:
|
||||
:o++ssoooooo${c2}/-------------${c1}+syyyyyo+++++oo
|
||||
`o+++ssoooooo${c2}/-----${c1}+++++ooosyyyyyyo++++os:
|
||||
/o+++ssoooooo${c2}/-----${c1}ooooooosyyyyyyyo+oooss
|
||||
.o++++ssooooos${c2}/------------${c1}syyyyyyhsosssy-
|
||||
++++++ssooooss${c2}/-----${c1}+++++ooyyhhhhhdssssso
|
||||
-s+++++syssssss${c2}/-----${c1}yyhhhhhhhhhhhddssssy.
|
||||
sooooooyhyyyyyh${c2}/-----${c1}hhhhhhhhhhhddddyssy+
|
||||
:o++ssoooooo$2/-------------$1+syyyyyo+++++oo
|
||||
`o+++ssoooooo$2/-----$1+++++ooosyyyyyyo++++os:
|
||||
/o+++ssoooooo$2/-----$1ooooooosyyyyyyyo+oooss
|
||||
.o++++ssooooos$2/------------$1syyyyyyhsosssy-
|
||||
++++++ssooooss$2/-----$1+++++ooyyhhhhhdssssso
|
||||
-s+++++syssssss$2/-----$1yyhhhhhhhhhhhddssssy.
|
||||
sooooooyhyyyyyh$2/-----$1hhhhhhhhhhhddddyssy+
|
||||
:yooooooyhyyyhhhyyyyyyhhhhhhhhhhdddddyssy`
|
||||
yoooooooyhyyhhhhhhhhhhhhhhhhhhhddddddysy/
|
||||
-ysooooooydhhhhhhhhhhhddddddddddddddddssy
|
||||
|
||||
@@ -4,13 +4,13 @@ yyysoooooooooooooooooooooooooooo+/::::::
|
||||
yyyyyoooooooooooooooooooooooo+/:::::::::
|
||||
yyyyyysoooooooooooooooooo++/::::::::::::
|
||||
yyyyyyysoooooooooooooo++/:::::::::::::::
|
||||
yyyyyyyyysoooooo${c2}sydddys${c1}+/:::::::::::::::
|
||||
yyyyyyyyyysooo${c2}smMMMMMMMNd${c1}+::::::::::::::
|
||||
yyyyyyyyyyyyo${c2}sMMMMMMMMMMMN${c1}/:::::::::::::
|
||||
yyyyyyyyyyyyy${c2}dMMMMMMMMMMMM${c1}o//:::::::::::
|
||||
yyyyyyyyyyyyy${c2}hMMMMMMMMMMMm${c1}--//::::::::::
|
||||
yyyyyyyyyyyyyy${c2}hmMMMMMMMNy${c1}:..-://::::::::
|
||||
yyyyyyyyyyyyyyy${c2}yyhhyys+:${c1}......://:::::::
|
||||
yyyyyyyyysoooooo$2sydddys$1+/:::::::::::::::
|
||||
yyyyyyyyyysooo$2smMMMMMMMNd$1+::::::::::::::
|
||||
yyyyyyyyyyyyo$2sMMMMMMMMMMMN$1/:::::::::::::
|
||||
yyyyyyyyyyyyy$2dMMMMMMMMMMMM$1o//:::::::::::
|
||||
yyyyyyyyyyyyy$2hMMMMMMMMMMMm$1--//::::::::::
|
||||
yyyyyyyyyyyyyy$2hmMMMMMMMNy$1:..-://::::::::
|
||||
yyyyyyyyyyyyyyy$2yyhhyys+:$1......://:::::::
|
||||
yyyyyyyyyyyyyyys+:--...........-///:::::
|
||||
yyyyyyyyyyyys+:--................://::::
|
||||
yyyyyyyyyo+:-.....................-//:::
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user