i @ n
i @ nn
L L i dn
L i n n@d
D H L n ni@ n
D D H d ii n
W D D @ @Li d n
W D i iHL n @ n
3 W i iDH n i dn
N 3 L LDD n d i @n
m N 3 H WD n n @ L id
S m N n DW n d i H i@
n S m n D D3 d @ i D Li
nM 3 S n d W WN3 @ i L D Hi
dH 3 M n @ mN i i H W DL
@f n H M d i 3 3Sm i L D DH
iY n n f H @ i N N L H D 3 W
ik d n Y f i L m mM H D W N D
LK @ d k Y i H S SHM D D m n3W
PAN iBfX @ K k L D fH D W n 3 S nN
AAA vC/I i n K H PANkiBM MYf W n N dm3
AAj c2TbP NkiBfX n D AAAAAXvC nHkY 3 d PANPAN fXSN
Q5As7rioA AXvPANki fXPANkiBfXAAjPc2TbPA NkiBfX 3PAN PANAAAAAAX NkiBfX
vC/IIBQjA jPcAAAX /IAAAXvC/IQ5As7rioAAA AXPANkiBfX AAA AAAAAjAAj AXvC/I
c2TbqJADQ As7AAjPc TbAAjPc2TbvC/IIBQjAAj jPAAAXvC/IIAAj AAjQ5AQ5A AjPc2Tb
7rioR7wAv /IIQ5As7 ioQ5As7rioc2TbqJADQ5A AAAAjPc2TbHQ5A 5AvC/vC/ 5As7rio
LcAAAjPcc TbqvC/II QjvC/IIBQj7rioR7wAvC/ /AQ5As7rio0vC/I C/c2Tc2T C/IIBQj
ANEQ5As77r oRc2Tbq Dc2TbqJADBwAF5As7c2T TQvC/IIBQj/c2Tb 2T7ri7ri 2TbqJAD
AAXvC/IIBQ 487rioR7 A7rioR7wAvgHPj7+B7PA BfX2TbqJADE7rio rioR7wAQ 7rioR7wA
AjPc2TbqJA CBb+7yL 0zjt2SQO8uQyjPv+BzAA C/IrioR7wAEfFtb7rioR7wAA u8c4SLcC
5As7rioR7wAF6irKLfX /gsR0BwAFuoJ/X1/h8AAjP 2TbioR7wAkzt9QAO97rioR7w kC5xzye
HPj7+BntA H41i34AAD+AuEiC+8I3D7eFv TMwQ5As rioIIBgRGRAHGhoX9/QHBxLt Lu+Qz5A
yjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDuvC/ IBQjxCQz76ff2AO7sDPbdwiIO5/gc3CTkA
J/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HvEd4w3i3+3A4ZzQgRDt4fA
AOLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W+PU7rioR7wAF7xYA+/UT7wjtDgD1CwjtBQLyFiLcr
CAANkiBfX4Ag4O7wAiyCfTIvICBRHvAANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0g
AAAAXvC/IIBQj48iTe7Rz4HOcAHPj76AAXvC/IIBQj48iTe7Rz4HOcAHP 76vgk+B/FAj7QAPgzA
AAAjPc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQExMAD
EQ5As7rioR7wAF6irKLfX1/gsR0BwAF5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCt
EEQLeLe3tC/If 8gTJOr+5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCQd4O5wIk7+3
MMAveAu8c9fITAgjWM+f4HPj7+BntABH41i34AAD+AuEiC+8I3D7eFvXTMwgA5wUZyD7WLdkZH7E
AAAsAAAjZNuQLBdYIDgIfyjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDu8c4SLc7xkW5AX+HNM
33O0cCNwWEeQZ4QX+AhzKJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxkC5xzy9RPq9RkAAOo
MDB6AAAAAAAAAAAAMDAAAAAAAABoujh+d/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoWO7wAiy/
AAAAADBGMDAwegAAdgAAAAAAAAAAAAAAADBAICBsVGQAPIxYIIBgRGRAMY48iTe7z
AAB AAAA AA++n45PXz6A8M7eTxCQz76ffM mm. mm. KCBb+7T
AAA NNNNNNNN AAAA NNNNNNNN AA3h/ZJ/Ic3BEL8vIW9f4cC+HM 6A8 6A8 F6irKL4
AAA N:::::::N RgA N::::::N GMLc0W+PUk5+0t6gIF7xYA+/UM 3BE 3BE 41i34AL
MDB N::::::::N Ri N::::::N +dANkiBfX4Ag4O7wAiyCfTIvIM 5+0 5+0 FBfX+Cy
AAA N:::::::::N V N::::::N AAAAXvC/IIBQj48iTe7Rz4HOcM Ag4 Ag4 t5yfn6g
AAB N::::::::::N N::::::N AAAjPc2TbqJADKCBb+7yL70zjM4fX4A4cC+HvEdARjBGM
AAA N:::::::::::N N::::::N 6A5As7rioR7wAF6irKLfX1/gsRMdPMMBoujh+D
AAA N:::::::N::::N N::::::N AAHPj7+BntABH41i34AAD+AuEiM .mmmm MMAAAAAAU
MEY N::::::N N::::N N::::::N ouyjPv+BzIJ/gFBfX+CAsC+OEfM MPR9AkAL
OH5 N::::::N N::::N:::::::N AAJ/X1/h8A5yTt5yfn6jPqykztM 6A6A8 MfYIIBgRz
AAA N::::::N N:::::::::::N /uAuEi3x1eTz8PPR9AkA++Ds8xM 3B3BE MgTxCQz7A
AAA N::::::N N::::::::::N DB+OEfsVGQAPIxYIIBgRGRAHGhM 5+5+0 MMIW9f4cw
MTA N::::::N A N:::::::::N ++ykztXz6A8M7eTxCQz76ff2AOdasdgAg4dMffIF7xYAA
AAB N::::::N Aa N::::::::N 3hIvICIc3BEL8vIW9f4cC+HvEdMMMM4AiyCfTA
AGi N::::::N AAA N:::::::N LcHOcAUk5+0t6gIF7xYA+/UT7wM .mmm. MKTe7Rz4A
AAA N::::::N MAAA N::::::N AN0zjtX4Ag4O7wAiyCfTIvICBRM 4fX4A4cC+HvEdL7A
AAA NNNNNNNN dMAAA NNNNNNN AA/gsRIIBQj48iTe7Rz4HOcAHPM MMM M4rKLfX1w
RjA AdMDA AjAuEibqJADKCBb+7yL70zjt2SM. MMM .MF34AAD+4
fnYAAABGMEYwMDEAAdgAAAAAAAAAAAA5A+OEfoR7wAF6irKLfX1/gsR0BMM. .MMtX+CAsCA
AAA A AAAHPykztntABH41i34AAD+AuEiC+4fX4A4cC+HvEd++Ds8A
AAA UUUUUUUU Y UUUUUUUU RjAyjykztzIJ/gFBfX+CAsC+OEfFtMMPMBRGRAHGx
MTc U::::::U A U::::::U fnYJ/C+Hv8A5yTt5yfn6jPqykzt9QM .mmmm MA76ff2AA
AEY U::::::U A U::::::U AAAAA+/UTH52AAAARjBGMDAxMUEAAM PcC+HvEA
aLo UU:::::U E U:::::UU AAAAAIvICAAAAABoujh+dgAAAEYwRM 6A6A8 MYA+/UT7A
AAAA U:::::U Y U:::::U xMUQAAHOcAAAAAAAAAAAAAAAAaLo4fM 3B3BE MTeTz8PPA
AAAA U:::::D o D:::::U A/uLM30zjteTz8PPR9AkA++Ds8xEU9M 5+5+0 MIQAPIxYG
MDAx U:::::D A D:::::U ADBAIC/gsRQAPIxYIIBgRGRAHGhoX9MMBAgAg4MMMIA8M7eT+
dgAA U:::::D A D:::::U A++n45AuEiA8M7eTxCQz76ff2AO7sDMMABEL8vIA
AAAA U:::::D A D:::::U A3h/ZJ+OEfBEL8vIW9f4cC+HvEd4w3Mmmmmm .MT+0t6gIA
AAAA U:::::D D:::::U GLc0W+ykzt+0t6gIF7xYA+/UT7wjtDMMfMP .MddfffL7Eye
NwAA U:::::D D:::::U +ANkiBYA+/g4O7wAiyCfTIvICBRHvAMsP .MMdasdKLfX1AA
RjBG U::::::U U::::::U AAAXvCfTIvQj48iTe7Rz4HOcAHPj76M .MMaadada4AAD+Bo
ujh+ U:::::::UUU:::::::U AAjPc2z4HOADKCBb+7yL70zjt2SQO8M MX+CAsCAA
AAAA UU:::::::::::::UU y5As7rL70zwAF6irKLfX1/gsR0BwAF4fX4A4cC+HvEd+Ds8AA
AAAAds UU:::::::::UU LAHPj7+X1/gBH41i34AAD+AuEiC+8I3D7eF MwUARGRAHGyw
MDEzasd UUUUUUUUU dasdyjPv+cAHP/gFBfX+CAsC+OEfFtb7Ig7e+ MSLc76ff2A72
AAAARjBGMA A/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8v MxzCcC+HvE7A
A0NABoujh+dgAAAEYwRjAwMDBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+y MAAAA+/UT7LA
TARAA VAAAA++n45PXz6A8M7eTxCQz76ff2AO7sDPbdwiIO5/ MjAweTz8PPA3
AouA LLLLLLLLLLL wMTN3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3+3A4ZzQ MnY4QAPIxYCG
GAAE L:::::::::L AAABLc0W+PUk5+0t6gIF7xYA+/UT7wjtDgD1Cw4fX4A4cC+HvEdM7eT66
AAAH L:::::::::L AAGiANkiBfX4Ag/uLM3P3x1eTz8PPR9AkA++Ds8MYBEL8vIG/
AwMA LL:::::::LL AAAAAAXvC/IIBQDBAICBsVGQAPIxYIIBgRGRAHGM mmmm. +0t6gI+z
j2AAA L:::::L AAAAAjPc2TbqJA++n45PXz6A8M7eTxCQz76ff2AM 8M7eTx MAAAAAAT
nAATQ L:::::L WAhcC5As7rioR7w3h/ZJ/Ic3BEL8vIW9f4cC+HvEM EL8vIW MPR9AkA4
AAAAB L:::::L CMwI0HPj7+BntABLc0W+PUk5+0t6gIF7xYA+/UT7M 0t6gIF MYIIBgRL
A1AGi L:::::L PAlACyjPv+BzIJ/ANkiBfX4Ag4O7wAiyCfTIvICBM 4O7wAi MTxCQz7y
zGMAA L:::::L CbAJtJ/X1/h8A5yAAXvC/IIBQj48iTe7Rz4HOcA4fX4j48iTevEdW9f4cg
E6OAA L:::::L aAAAAAAAAAAAAAAAjPc2TbqJADKCBb+7yL70zjtMMMIF7xYAM
LAAjA L:::::L adas Vi5As7rioR7wAF6irKLfX1/gsRMM mommomoMAiyCfTD
AAAnY L:::::L LLLLLL AHPj7+BntABH41i34AAD+AuEiM MMBMTe7Rz4U
AwMA LL:::::::LLLLLLLLL:::::L AyjPv+BzIJ/gFBfX+CAsC+OEfMM 4fX4A4cC+HvEd7L
DAAA L::::::::::::::::::::::L ADgD1CwjtBQLyFiLcAjPqDgD1MM 4fX4A4cC+HvEd1A
gAAT L::::::::::::::::::::::L YkA++Ds8xEU9uUOGxoAAAkA++MM .M34AAD+o
AAAE LLLLLLLLLLLLLLLLLLLLLLLL AgRGRAHGhoX9/QHBxLAxNgRGR4fX4A4cC+HvEd+CAsCL
AAAL AAz76ff2AO7sDPbdwiIAAAz76ffMMPYMMA++Ds8I
QwRABoujh+dgAAAEYwRjAwMTM0AAAAAA/4cC+HvEd4w3i3+3A4kA+4cC+HM .mmm. MRGRAHG4
ATIAA VADgD1CwjtBQLyFiLcAUT7wDgD1CwjtBQLyFiLcAM MM M M76ff2Aj
MABA LLLLLLLLLLL wkA++Ds8xEU9uUOGxoICBRkA++Ds8xEU9uUOGxoM M MM McC+HvEH
dGiE L:::::::::L AgRGRAHGhoX9/QHBxLcAHPgRGRAHGhoX9/QHBxLM. MMM .MAGhoX7/
AAAH L:::::::::L Az76ff2AO7sDPbdwiIjt2Sz76ff2AO6A8PbdwiIMMb dMMeAO7sPr
AAAA LL:::::::LL A4cC+HvEd4w3i3+3A4fX4A4cC+HvEd3BEi3+3A4fX4A4cC+HvEdEd4wY0
MjAAA L:::::L AYA+/UT7wjtDgD1Cwj/IIBYA+/UT7w5+0gD1CwjMBPYMM87wjtTz
RnYTQ L:::::L WAfTIvICBRHvAPsf3hHTbqJfTIvICBRAg4Psf3hHM .mmm. MEBRHvIA
uAAAB L:::::L CMz4HOcAHPj76vgk+B/ioR7z4HOcAHPj76vgk+B/M MM M M0HPj7IC
AAAGi L:::::L PAL70zjt2SQO8uQw3irBntAL70zjt2SQO8uQw3irM M MM Mg2SQOUZ
AzUAA L:::::L CbAJtAm4CbwAAAyjPv+BzIJ/gFBfX+CAsC+OEfFtM. MMM .M8+CAsLc
MEYAA L:::::L aAAAAAAAAAAAAA/uLM3P3x1eTz8PPR9AkA++Ds8xMMb dMBY/QHBx+
ALojA L:::::L adas VDBAICBs4fX4A4cC+HvEdGRAHG4fX4A4cC+HvEdQ/QHBx
AAAnY L:::::L LLLLLL ++n45PXz6A8M7eTxCQz76ffAOMMPbPbdwig
AAAA LL:::::::LLLLLLLLL:::::L 3h/ZJ/Ic3BEL8vIW9f4cC+HEd mmmm. i3i3+3rA
ADAA L::::::::::::::::::::::L Lc0W+PUk5+0t6gIF7xYA+/U7wM .1C1Cwjwt
MgAT L::::::::::::::::::::::L ANkiBfX4Ag4O7wAiyCfTIvIBRM MMMb.Y+D+Ds8x2
OAAE LLLLLLLLLLLLLLLLLLLLLLLL AAXvC/IIBQj48iTe7Rz4HOcHPM MMMM RARAHGrh
AAAL AAjPc2TbqJADKCBb+7yL70zj2SM .ffff2AO4
/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8vYUCA/+6irKLfX1/gsR0B4fX4A4cC+HvEd+HvEd
DBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+yLu+Qz51i34AAH76iLeGRy0xYIIBgRGR/U/UT7w
++n45PXz6A8M7eTxCQz76ff2AO7sDPbdwiIO5/gc3CTk/+X+CA/FAj7QAPgzeTxCQz76fvIvICBR
3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3+3A4ZzQgRDt4fz5fn6jPqykzt9QAO9R/IKgDZCOcOcAHP
Lc0W+PUk5+0t6gIF7xYA+/UT7wjtDgD1CwjtBQLyFiLcPPR9H76iLeGRy0xYIIBgRGRAHzjzjt2S
ANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0xYII/FAj7QAPgzeTxCQz76ff2BfBfX+C
AAXvC/IIBQj48iTe7Rz4HOcAHPj76vgk+B/FAj7QAPgzeTxCQz76ff2AO7sDPbdwiIO5/8P8PPR9
AjPc2TbqJADKCBb+7yL70zjt2SQO8uQ/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8vIxIxYII
5As7rioR7wAF6irKLfX1/gsR0BwAFuoDBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+yLu+Qz5W
3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3AAXvC/IIBQj48iTe7Rz4HOcAHPj76vgk+B/FAj7QAPgzA
Lc0W+PUk5+0t6gIF7xYA+/UT7wjtDgDAjPc2TbqJADKCBb+7yL70zjt2SQO8uQw3ir40yfQExMAA
ANkiBfX4Ag4O7wAiyCfTIvICBRHvAPs5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCC
AAAAXvC/IIBQj48iTe7Rz4HOcAHPj76AAXvC/IIBQj48iTe7Rz4HOcAHP 76vgk+B/FAj7QAPgzA
CAANkiBfX4Ag4O7wAiyCfTIvICBRHvAANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0g
AOLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W+PU7rioR7wAF7xYA+/UT7wjtDgD1CwjtBQLyFiLcr
J/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HvEd4w3i3+3A4ZzQgRDt4fA
yjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDuvC/ IBQjxCQz76ff2AO7sDPbdwiIO5/gc3CTkA
HPj7+BntA H41i34AAD+AuEiC+8I3D7eFv TMwQ5As rioIIBgRGRAHGhoX9/QHBxLt Lu+Qz5A
5As7rioR7wAF6irKLfX /gsR0BwAFuoJ/X1/h8AAjP 2TbioR7wAkzt9QAO97rioR7w kC5xzye
AjPc2TbqJA CBb+7yL 0zjt2SQO8uQyjPv+BzAA C/IrioR7wAEfFtb7rioR7wAA u8c4SLcC
AAXvC/IIBQ 487rioR7 A7rioR7wAvgHPj7+B7PA BfX2TbqJADE7rio rioR7wAQ 7rioR7wA
ANEQ5As77r oRc2Tbq Dc2TbqJADBwAF5As7c2T TQvC/IIBQj/c2Tb 2T7ri7ri 2TbqJAD
LcAAAjPcc TbqvC/II QjvC/IIBQj7rioR7wAvC/ /AQ5As7rio0vC/I C/c2Tc2T C/IIBQj
7rioR7wAv /IIQ5As7 ioQ5As7rioc2TbqJADQ5A AAAAjPc2TbHQ5A 5AvC/vC/ 5As7rio
c2TbqJADQ As7AAjPc TbAAjPc2TbvC/IIBQjAAj jPAAAXvC/IIAAj AAjQ5AQ5A AjPc2Tb
vC/IIBQjA jPcAAAX /IAAAXvC/IQ5As7rioAAA AXPANkiBfX AAA AAAAAjAAj AXvC/I
Q5As7rioA AXvPANki fXPANkiBfXAAjPc2TbPA NkiBfX 3PAN PANAAAAAAX NkiBfX
AAj c2TbP NkiBfX n D AAAAAXvC nHkY 3 d PANPAN fXSN
AAA vC/I i n K H PANkiBM MYf W n N dm3
PAN iBfX @ K k L D fH D W n 3 S nN
LK @ d k Y i H S SHM D D m n3W
ik d n Y f i L m mM H D W N D
iY n n f H @ i N N L H D 3 W
@f n H M d i 3 3Sm i L D DH
dH 3 M n @ mN i i H W DL
nM 3 S n s d W WN3 @ i L D Hi
n S m n D D3 d @ i D Li
S m N n DW n d i H i@
m N 3 j H WD n n @ L id
N n 3 L LDD r n d i @n
3 t W i iDH o n i dn
W D u r i iHL n @ n
W o D D @ @Li a d d n
D D H d ii m n
D H L n ni@ n h t
L i n n@d n
L L i dn s i
i @ nn
i @ n
NULL mag. issue x00B
xindex
EdITORIAL xedit
NeWS xnews
LiNKS xlinks
Muzic! yes, muzic! xmusic
ArTICLES
// the new that is old xa01
// bbs evolution xa02
// box86 xa03
// melody maker xa04
// new coding groups xa05
// the lightgun phenomenon xa06
// online track music xa07
// door front ends xa08
// 8it typography xa09
// windows xp - source code leak xa10
// pre-matrix era? xa11
// from the past - failed retro computers xa12
// dos warez? xa13
// linux cli media players xa14
// bassoon tracker xa15
// ctf contest - bottomless abyss bbs // stack fault xa16
TuTORS
// home micro cls xt01
// ansi 2 html xt02
// install caprice32 - amstrad emulator xt03
// strip ansi // python3 xt04
// strip mci // python3 xt05
// wrap line // python3 xt06
// find base id // python3 xt07
// convert ansi file to mci codes // python2.7 xt08
// get yes/no/cancel // python3 xt09
// get files via http - synchronet - bash // by deepthaw xt10
// darkness 2 - modding xt11
// second reality demo - full code xt12
// ansi in bash xt13
// ansi transparency xt14
// spinners // mpy xt15
// progress bar while scanning - mystic // mpy xt16
// lets beep - c/pascal source code xt17
// get a full bbs on your smartphone // meatlotion xt18
AbOUT xabout
CrEDITS xcredits
TrACK DaTA xtrack
A FEW WORDS FROM THE
xedit
its december 2020 and if you are still reading this, yes... we are
alive! what a year, what a decade, what a century... things seem to
spiraling down... but... who cares! even if the whole world burns, we
will still BBSing!!!
so here we are again in another issue of NULL mag. again in another
format, different style. the theme this time, is just plain text-zine.
very oldskool style, like some old mags, like PHRACK! so, no ansi this
time, but still i hope the result is rewarding.
it was a slow process to complete this issue and at first, it seemed
that it would take much longer to finish it. i dont know how, but the
last weeks, things changed and speed up. almost 50 of the mag, was
added in the last few weeks before the release. the happy thing is
that, other people also contributed to this issue and it seems, that
more and more wanna help.
as you will see, this time, i proffered to add more articles/tutors and
keep it simple, than writing less and larger documents. i dont know if
this is ok with you. drop a netmail and tell me your opinion.
for this issue, we have a variety of subjects. retro stuff, bbsing, dos
stuff, linux, ansi, nostalgic things and more. also the code area has a
lot of stuff! i am sure you will find plenty of code to use in your
projects and help you start your own mods.
as always, there is also some music to hear you have to use your
fingers, to finally listen the music, but as a reward, i made a small
competition about it. read more below. and as we speak for competitions,
read about the new ctf, stack fault is preparing for this december.
the whole purpose of this issue, was to catch the vibe of old text-zines,
from the past and remember things. you dont have to know coding or
making ansi graphics. a simple text editor and a lot of willing to do
something, are enough!
so... enjoy reading... have some good times and enjoy the holidays!
xnews
apam released MagiTerm 1.0.91, this is a test build, so no linux
rpms/debs. It has improved colour support for 256/24bit colour.
Previously only one colour change per escape sequence was supported,
now its multiple so you can change the background foreground in the
same escape sequence.
g00r00 made available version A47 of Mystic BBS, which contains some big
changes, like the removal of the FIDOPOLL utility and that now MPY can
use both Python 2.7 and Python3+!!!
i have the filling that less ansi packs, are gonna published this year
and almost every one, is being delayed, mostly because of this covid
fuck up. thats the nice thing on not applying any dead-lines : thats
why NULL will stay always on whenever-this-issue-is-ready schedule :
hahaha
Meatlotion, managed to install a full BBS system on a smartphone
OnePlus 6T. you can connect at this address to test it:
pimpbbs.erb.pw:18023
the full tutorial on how you can do the same thing, is below in the
tutor section. no need to buy a raspberry
someone offers a way, for BBSes to have a dialup connection! more info
on these links: taken from fsxnet
The hardware hes using can be found here - https://bit.ly/3kInvel
The thread explaining how its set up is here - https://bit.ly/32Qn2Av
And the thread asking for BBS to submit interest to join up can be found
at https://bit.ly/3nyOg6J
DOSBOX developer, promised a new version called PURE, which will have,
many new stuff. the thing is, that a lot of people/users, complained
for a long time now, for new features, thats also a reason for the
many forks, DOSBOX has. better late than sorry...
jp jack phlash the programmer behind the DOOR game, Darkness, left
a comment, implying that a new version 2.1 is on the way...
if you are interested in restoring commodore home computers, then make
sure to pay a visit at https://retrorewind.ca/. you will find parts and
software to restore your old C64/128 computer. even the site it self,
has an amiga-ish commodore style, with a clean retro look in greyish
colors. oh... i almost forgot... this is a business endeavor of a well
known member of the bbs scene, Netsurge. i only hope that he will also
accept orders from a bbs : hahahaha
apam began writing a new bbs software. you can find more info on the
facebook page https://www.facebook.com/groups/talismanbbs/ and also
visit a bbs at telnet://talismanbbs.com:11892/
i released VOTELINER mod. another oneliners mod, with some twist as
always, you can find it at fsx, sci, dore and Another Droid BBS.
also i made available an idea of using a sprite engine, for displaying
graphics and also in a relative to the screen dimensions way. check
for the xq-sprteng.zip file in the usual places
xlinks
retro gaming, assembly and cheat codes!!!! oh yeah!!!
https://www.youtube.com/watch?v8LnwsYL7Apk
virus hoaxes of the early internet - nostalgia nerd
https://www.youtube.com/watch?vBFi6g0pEo
this is the video to a very much disputed video of the 8bit guy
https://www.youtube.com/watch?vWh2OCBZpzZ8
...and this is his, unlisted, response video, to all accusations.
https://youtu.be/SYopBjwhF1M
root42 channel - dos programming with turbo c
a very interesting channel, specially on old-skool dos demo
programming
https://www.youtube.com/channel/UCPjFaUZBUDzdJTIEdyGjIQ
Paul Witte and Herb Flower, creators of Thieves Guild
https://breakintochat.com/blog/2020/09/15/paul-witte-and-herb-flower-
creators-of-thieves-guild/
8bitboyz! a very good retro-computing site... must see.
https://8bitboyz.com/
MDK: The Complete History
https://www.youtube.com/watch?v7BwOaddPOQY
its 2020 and the fight still goes on... SNES vs MEGADRIVE!
https://youtu.be/0sBQXhF2mEI
the story behind Sunset riders... if you havent played it, make sure
to play it
https://youtu.be/xpAWSNXtyHM
making a concert with five very old computers... this is madness!!!
https://www.newscientist.com/video/2245700-how-an-artist-made-a-concert-
from-five-40-year-old-commodore-computers/
Vespertino!!! amstrad in all its glory! holy fucks...
https://www.youtube.com/watch?vsyHewDu5lc
https://www.youtube.com/watch?vYAcd47eUZF4
Star Wars, The Mandalorian, in 8Bits!!! i need more of this!!!!!!!!
https://www.youtube.com/watch?veoUsbydHJKA
a very good video on how to setup a Wimodem
https://youtu.be/-6QoKVTSWaw
Using a 1930 Teletype as a Linux Terminal
https://www.youtube.com/watch?v2XLZ4Z8LpEE
Dune - The Grandfather of Real-Time Strategy... and more...
https://www.youtube.com/watch?vHOemQuy2JUc
NEOGEO flash card? 600?
https://www.youtube.com/watch?vpY-jEQb1Q0
Five new games for AMSTRAD
https://www.youtube.com/watch?vVqwYYWBYL2Q
xmusic
so, because its a text ezine this time, you thought that there was no
muzic? ha! :p
at the end of the file there is a track, encoded in BASE64. decode it,
listen to it and if you email me, the filename written in the data/info
inside the track it self, you gain a copy of my new announcement board
script. you can have a look at Another Droid BBS to see it.
each and everyone, that answers correct, will earn the script!
last time only one guy, decoded the included file! which is unacceptable!
so this time, i hope ill force you, to get your butts off the chair and
learn something, even if its just a simple base64 decode thing! :p
xa01
by coincidence, i was searching info about raspberry 4. i wanted one to
have it as a dedicated pc, to replace my old pc. after all, i dont need
too much processor power. the thing is, that in almost all reviews, i read
that the rpi4 is not a 100 replacement of a standard pc and each article
had different excuses. for others, it was the sdcard, for others that it
doesnt has a shutdown button, not much processor power etc.
and suddenly the raspberry 400 appears, out of nowhere! a keyboard that is
a pc... what it reminds you? perhaps an amiga? an amstrad? an atari? and
suddenly the rpi4 that couldnt replace a standard pc, now became a
complete pc system !!! wtf?! because its built in a keyboard, now
everything is all right? how could it be?
its not that i dont like the idea, the opposite, i love it, cause i grew
up with an amstrad and i love this form factor. i also, built a similar
system, with a rpi 0w and i really like it. its just weird, that in just a
day, the whole scene changed their opinion about the rpi4 and now became a
pc replacement. miracles, marketing does... :
about the rpi400... its awesome, not because its something new, but
exactly because its something old! something that i had in my youth and i
have nostalgia for it. the small form factor and the all in one idea of
the system, is very neat. you can have a very clean desk/office, with
just your rpi400 and your monitor lamers use mouse :p , which is
something apple users had for a long time ago... but it seems that either
we run out of new ideas, or old stuff become modern again. thats how
fashion worked and it seems that technology becomes a bit like that.
i guess that in the next years to come, more retro ideas, will become new
products, which is not bad. for me its more of a proof, that for a long
time, we lost too many good things of the old times, that now are coming
back. time will tell...
xa02
again?
the new a47 version of mystic bbs, brings some major changes, which have to
do with the resolutions supported by it. in the whats new text file,
reports resolutions up to 160x60 chars. also as i am reading in echonets a
whole new discussion opened, about new features for mystic bbs, that have
to do with screen/resolution stuff more colors, more fonts, more codepages
etc.
i really like that new features are added into mystic and the development
is still going, but my question is is that whats missing from it?. let
me explain my self.
first of all the new resolutions are not something entirely new... older
bbs software supported it, as long with other formats. but as the bbs scene
diminished, so are they. and after a long time, we have the bbs scene as it
is now, which uses entirely the 80x25 res. with only a few exceptions, for
systems like C64 or other 8bit computers of the past, but those use
resolutions that are less than 80x25.
and the thing is, that even if we only use this one resolution, mystic or
other bbs software, doesnt get the support of the ansi-art scene. where
are the themes? the logos? the flyers? etc. and now, suddenly, because
mystic supports 160x60, this will change? i dont think so. for sure it
will get some new stuff into the scene, for a small period of time, because
of all the hype and exciteness but then it will probably blow off.
its not the resolution that keeps back the bbs scene. its the appetite
of users/modders to write new stuff and help the scene in general. if a bbs
software has 100 features and brings a thousand more, nothing will change,
if the rest of the scene dont use them and support the scene in general.
you can see many new bbses using the default theme, that comes with the
software installed and nothing more. if sysops dont customize even the
default theme, how will they customize the theme for other resolutions?
so... am i against the new stuff mystic a47 brings? for sure not! but i am
very skeptical, on how many will use it and if, in the end, will be just
another feature. its not that i am against g00r00 or other bbs developers,
its that i am filling sorry, because of their hard efforts, that in the
end, remain unused, by the scene.
xa03
- emulate a x86 system to arm systems
box86 https://github.com/ptitSeb/box86 is something like an emulator that
give us the ability to run x86 applications, into arm systems like RPis.
the great thing about, is that its doing so, without kneeling the
system down. box86, uses the all ready installed arm libraries and
translates them into the x86 architecture. this way, it uses less
resources of the system. you can watch a video from NovaSpirit Tech, who
installed and used the Zoom software under a RPi.
so, whats x86 has to do with us the bbs community. well i think that it
expands the library of software we can use on our rpis, specifically for
bbs, retro stuff. programs that could run under a x86 linux machine and
didnt have a version for an rpi, now can easily run. perhaps if someone
can manage to compile x86 under termux android, we could also use android
smartphones, for bbsing and more the possibilities are endless. let me
know if you think something useful of this.
xa04
in my search for making some ansi music, for testing the ansi music function
in blocker v2.0, i bumped into this cool dos program, called Melody Maker.
you can find it at:
http://www.johndaileysoftware.com/products/productivity/melodymaker/
..along with other cool utilities and programs. the thing with Melody Maker
MM, is that it has a very nice UI, with very cool ansi images and also it
is very simple in use. almost straight forward you can write some tunes.
dont expect to be a musician though : if you are into this retro stuff,
give it a try.
xa05
lately i am seing some coding groups, being created and publishing mods,
mainly for Mystic BBS. for sure this is a good thing, as the scene is in
lack of coders, in generally. Mystic is drawing all the attention and
unfortunately, other bbs software is being neglected. hope this will change
in the future.
the other thing, is that those groups, it doesnt seem to be a group of
people, but instead some individual programmer/coder, who decided to
publish mods, by his own. dont misunderstand me, i am not saying this as a
bad thing. i am only mentioning it, as a fact, cause now days, coding
groups are extinct. even one or two, that seem to be alive, they dont
publish mods and if they do so, its more of a one mans job, than a group
thing.
well.. we have to, some how, organize things : with this rate, in the near
future, there will be no coders, nor new mods/scripts :
a big shoutout to dpr, rcs, opicron for their efforts!!! keep it up!
xa06
well... the name of this phenomenon is mine... so all rights reserved :p
what is the light-gun phenomenon LGP for short? if you are following the
retro gaming scene, at youtube, you should probably have seen videos
popping up, about a new light-gun Sinden, that can be used in flat/lcd
screens. the project started as a crowdfunding project, went very well and
now new-tech light guns are produced.
but what about LGP? have you ever played a light-gun game, specially in the
arcades? when you were young? for some of us, was the first experience,
grabbing a gun and shooting stuff! oh yeah! we are not all from the USA you
know :p so, light-gun games are something else, very fun to play,
specially with friends in co-op mode point blank . but after the arcade
market crashed and the old crt monitors, vanished... you couldnt be able
to play these games any more.
so, a jump in technology happened. crt monitors have been replaced from
other type of technology, but the light-gun technology didnt catch up,
until now!!! in 2020! one or two generations of kids, didnt have the
ability to play such fun games and never knew the filling of that
experience. even if the technology of games, did evolve... something left
back, have been forgotten and almost lost. if it wasnt the efforts of one
man, who made the Sinden LG, perhaps light-guns would be just be a note,
in some type of retro-books about the arcade machines era... who knows.
the LGP is a true/real example of technology fun technology being lost,
because of the rapid development of technology in other areas or for other
economical reasons. its a petty, that todays 10-13 old year kids, cant
have the fun, we did when we were in that age. and for sure, if you give a
kid a light-gun and let it play Terminator, Point Blank, Time Crisis and
more. a technology so fun, that would be a great loss for the whole gaming
scene.
xa07
I know there are some web radios offering mod/track music online, but there
is another option, with a very large selection of tracks. MODArchive has a
function to play a random track file:
https://modarchive.org/index.php?requestviewplayerqueryrandom
In this webpage, has a checkbox that says Automatically play random tune
when finished. If you check that, it will always play tracks endlessly. The
weird thing of this, is that you never know, what it will play... from the
shitiest track to the most awesome!
Visit the page and let it play... you will definitely find some nice tracks
and get addicted!
xa08
i bumped to this blog post, about DOOR front-ends. its something i have
never experienced, as my local bbses i used, didnt support the games or
perhaps i didnt had the interest to do so.
never the less, its a very nice idea and for sure, upgrades the level of
game experience. if you also dont know about the subject do read the blog
post below.
https://breakintochat.com/blog/2020/09/09/a-different-way-to-play-front-ends/
also make sure to follow the links in the blog post, as they have useful,
information on how to setup some of these front ends.
xa09
OK... this is really awesome! finding articles about the typography used in
old retro-computers, is something that leaves you, with your mouth open! :O
https://damieng.com/blog/2011/02/20/typography-in-8-bits-system-fonts
you should definitely visit the page and read it carefully. if you never
learned anything about typography, after reading this article, you will learn
a lot. you will notice details, in the fonts, that perhaps you never noticed
or you thought, its just the way it is... which system had the best font and
which, the worst etc. it is also a nice way to download some truetype fonts
my favorite, is of course the AMSTRAD CPC line, font. whats yours?
xa10
if you havent heard the news, the complete source code of windows xp has
been leaked into the internet. actually some guy managed to compile it, only
to prove that is the actual code.
so the code, for one of the best OSes out there, with very big significance
for the bbs scene, i could say, is out there. could someone use it, for the
benefit of the scene? windows xp, i believe is a link to two eras, that can
combine the old with the new, so it would be a big achievement to use it,
for retro-systems in general.
perhaps the code, could give some light, to other areas or windows OSes, like
7,8 or 10, on how to use it, to run our retro-software. or just use it as a
standalone os for retro use only. for example, it would be great, if we could
strip down all none necessary code/software inside xp and make a very light
version of it, that would have 100 compatibility with old DOS programs,
newer DOS 32bit programs, windows 95, windows 98 programs etc.
i am not sure, if this is possible or someone has the appetite to do so,
but never the less, having the source code, in our hands is something that
we should make value from it.
xa11
i guess you all have seen the Matrix movies. one thing that is obvious in
these movies, is that even that the humans are hunted down, by the machines,
they still use them... they didnt tell oh the machines are bad, lets use
rocks.
i think this is a very good vision of the future, on not to go beyond a point
in technological evolution. some red lines, are never to be crossed! and i
fear that we are closing in one of these red lines.
its obvious that this covid-shit-storm is bringing vast changes in our
lives. the biggest, is that we are going into a full-digital era, where
almost every aspect of our lives, is being done, through digital means.
school, work, amusement, love, shopping... everything digital!
we are also hearing about the 4th industrial revolution and the changes it
brings, with people loosing their jobs, only to be replaced from a digital
employ, an AI, a machine. everybody is talking about the revolution, AIs will
bring to our lives, but no one seems to talk about the dangers of it. and i
mean the real dangers, not just hacked accounts or loosing jobs. right now,
the term AI is being used in a wrong way, cause in practice, it translates
into using software to do difficult stuff, by using sensors. its more a
fuzzy-logic thing, than a real intelligence, that thinks for it self.
but we are not very far, from making a real intelligence, it may seem so,
but break-throughs in technology, come suddenly or just by accident. so we
cant exclude the possibility, that someday, suddenly or not the first real
AI may appear. from there, the possibilities are endless, but for sure, we
will be in a totally new era.
i dont want to be the weird guy, with tin foil in his head. i as you, have
grown in the dawn of computer technology and we have seen how things went.
otherwise, you wouldnt be back to bbses :p people ignore the signs of a
big-brother in their pockets, have no interest on learning about real
internet security or how to properly use a computer. so they are open to
hacks, account stealing, loosing money from their ebank accounts and more.
humanity in its whole, is not ready for this 4th industrial revolution and
perhaps we will never be. after so many years, we havent solved even basic
problems of ours and we are still at war between us. going full digital,
relying on an AI, is like giving a monkey, a gun. so, i guess, boundaries,
must be set, but i believe no one will do so.
we are in a technological vortex, that everything new is accepted without
second thoughts and this will probably will be out biggest mistake. only time
will tell.
xa12
Computers that Failed
found on the hell bound hackers newsletter
http://web.textfiles.com/ezines/HBH/hbh05.txt
a review on old, failed, home computers, from an old text-zine...
...fu youtube!
Computers that Failed by fuser
So right now youre sitting in front of your personal computer, and I
believe that you love every single bit of it, right? Well, all computers
will break down someday in the future, it might even be happening now as
we speak.
The beauty with modern-day computers is that almost all problems can be
identified, fixed and prevented in the future. Were much luckier than
those that began to use computers around 25-30 years back. While easier
to learn and use compared to mainframes, personal computers back then are
pretty daunting to the newcomer as they are confronted with a blinking
cursor and no one knows what will happen if they keyed in the wrong
command.
Despite that, many people persevered and have fond memories about the old
days. Notice that the computers they usually mention are the Apple II,
Commodore 64, ZX Spectrum, BBC Micro, TRS-80, Amstrad CPC for the 8-bits,
followed by Commodore Amiga, Atari ST, Macintosh, IBM PC for those that
actually used it back then for the 16-bits.
Why are these computers so famous? The main reasons include the large
commercial software library available, the ease of learning, as well as
the availability of books, magazines, documentation and user groups to
help assist the newcomer, and fierce competition also means that users can
get the best computer at a low price.
The most important reason, however, is that it simply worked out of the
box. No funny wiring or configuration needed, just set it up, turn it on
and you can play Castle Wolfenstein it originally came out on II before
id decided to make a sequel.
This article is about computers that failed to even work properly, while
some worked to an extent, before going up in flames like a Ford Pinto,
while others worked magnificently, only to be hampered by bad management,
terrible marketing or just plain bad luck.
Lets begin, shall we?
----Apple III----
Like any good movie, there is bound to be a sequel so bad that almost all
fans refuse to even acknowledge its existence, like Godfather 2 or the
next two Matrix movies. Apple III is Apples sequel to the best-selling,
much-loved Apple II.
The Apple III was basically an enhanced version and designated successor
for the Apple II, since they really didnt believe Apple IIs popularity
would last long. It was designed for business use, being fully compatible
with already available Apple II software, which means that people can
simply load up AppleWriter and VisiCalc and work.
The computer was released to so much fanfare, that Apple even rented
Disneyland for a day and bands were commissioned to play in the Apple
IIIs honor, that I think it makes all computer releases till this day
look modest in comparison.
But like all spoiled kids who we regularly see on My Super Sweet 16, it
doesnt take long before people realise that it is problematic to the
core. Firstly is the fact that after two months of its release, there were
only three programs available for it, one is a mail management program
written by Apple employee Mark Markkula, with no new programs expected for
the next six months, it did, however, include a new BASIC interpreter
called Apple III Business Basic which I think absolutely no-one used.
Another issue is that the system software and hardware were very buggy,
the most notable being that the machine will crash if you use the Save
command. Try to imagine that for a second. Sounds very counter-productive
to me, a computer that crashes if you try to save your work.
And about the hardware? Apple III can lay claim to having a unique
problem, which in turn merits its own, even more unique solution. You see,
firstly, Steve Jobs had decreed that the computer shall not have fans nor
air vents, since they were noisy and inelegant You have to admit he has
a point. So, in order to get rid of heat, the base of Apple III was made
out of cast iron with the power supply was stored in a different
compartment separate from the logic board.
Yet, people have alleged that the motherboard got so hot that it warped,
causing chips to pop out of their sockets causing problems, where the
screen would display garbled data, or that floppy disks would come out
melted. Dan Kotke, one of Apples first employees disovered how to
temporarily fix the problem, although even he discovered it by accident,
as he lifted the machine up a few inches and then slammed it down on his
desk in frustration, and lo and behold, it worked.
So, Apples official solution was to lift it up around 3 inches and then
drop it to a desk to reset the chips. As if that wasnt enough, the
built-in real-time clock stopped working after several hours of use, and
the Apple II Plus emulation didnt always work properly.And to make the
deal even worse, the computer was priced at 4,340 to 7,800 US, which
costs more than other business-oriented computers.
In the end, Apple had to replace the first 14,000 Apple III machines, free
of charge. The customers who had bought them were given brand new
machines, with new circuit boards. These did not constitute a new model
and it was deemed warranty service. However for new customers in late
1981, Apple reintroduced a newly revised system, with twice as much
memory 256K RAM,which sold for a much lower introductory price of
3,495. The public responded with a resounding meh, and around the same
time, IBM introduced its own IBM PC, which sold pretty well, but the III
went around for a while until April 1984, three months after the release
of the Macintosh.
----Apple Lisa----
The Lisa is the first personal computer available for the public, and like
the III, it is also business oriented, but unlike the III, its here not
because it was a technical failure but rather, a commercial one.
Lisa has a spot in computing history as the first computer with a GUI sold
to the public. Although Xerox Star was the first computer that uses a GUI,
Xerox management for some reason decided not to pursue computers and
concentrate on business appliances, which is quite a shame since the
modern personal computer is derived from the Star.
Another misconception is that the Macintosh is a direct descendent of
Lisa, and this misconception may arise due to the fact that the GUI looks
almost the same and the short period between the release of both Lisa and
Macintosh. Lisa was actually pretty powerful for its time, with advanced
features such as protected memory, virtual memory, multitasking, a
sophisticated hard-disk based OS, a built-in screensaver theyre a luxury
back then and advanced calculator with a paper tape, Reverse Polish
Notation I have no idea why this is included, support up to 2MB of RAM,
expansion slots, numeric keypad, data correction protection schemes such
as block sparing, non-physical file names with the ability to have
multiple documents with the same name, and a larger higher resolution
display. Paired with an Apple Dot-Matrix printer, the documents produced
are much more superior compared to those produced by other systems at that
time.
These features werw pretty powerful for a personal computer at the time,
and since the OS organizes files in hierarchical directories, it justified
the need to buy a hard disk for the computer. The Lisa also has two main
user modes, the first being the Lisa Office System and the Workshop. The
Office System is the GUI environment for end users with seven supplied
applications: LisaWrite, LisaCalc, LisaDraw, LisaGraph, LisaProject,
LisaList and LisaTerminal. The Workshop, on the other hand is a program
development environment which is almost text-based even though it uses a
GUI text editor.
So, the computer is basically the computer to own if you are looking for a
robust, easy-to-use computer for business purposes. So why was it a
failure? Firstly, Apple didnt put much effort into marketing it since
they believed that the reputation will spread amongst businesses who will
then purchase it, and it also didnt help that the computers
introductionary price was 9995, which is a huge sum of money.
And since IBM, which already has a good background in selling computers
for business began manufacturing the IBM PC, it didnt take long for
managers to order IBM PCs which help introduce most people to computers -
albeit in an ugly and inelegant way. That doesnt mean Lisa was completely
forgotten, and one of its biggest users was NASA, which uses LisaProject
for project management, and it is estimated that more people actually use
a Lisa than the number of Lisas sold, which means that some companies
might buy one or two Lisas for any given purpose.
How big of a failure was it? Well, its like making the third installment
of a famous film, like matrix revolutions where its so bad that it
makes the prequel look good in contrast. So Lisa is officially Apples
biggest commercial failure since the Apple III fiasco of 1980, and its a
good thing they learnt from these mistakes and launched the Macintosh in
1984.
----Coleco Adam----
Do you know what Coleco used to work on before getting into the videogame
and computer manufacturing business?
It originally manufactured shoe leather, and then moved to making plastic
products, and later they sold off its leather division before CEO Arnold
Greenberg decided to enter the video game business in 1976, making it the
oddest company trying to cash in on the video game boom, and suprisingly
enough they were quite successful in this area before moving on handheld
electronic games, and in 1982, they released their famous ColecoVision,
which also proved to be quite popular, but at the same time introduced a
line of cartridges for the Atari 2600 and ColecoVision before going down
due to the Video Game crash of 1983.
It became clear around this time that people have decided that video game
consoles were being supplanted by home computers, and this is where our
story begins.
Adam seems to have a bright future ahead, since it was derived and
compatible with the software and accessories made for the ColecoVision, so
that means from the very beginning, it already has a large software and
hardware base to be used for the system. And to sweeten the deal, the
robust CP/M Operating System was available as an option, this is at a
time when youre usually pretty much stuck with the OS that came with your
computer, that makes it one hell of a deal.
For 725 1983 value, the system consists of a computer with 64KB RAM,
Tape Drive, Letter-Quality Printer, and Buck Rogers: Planet Of Zoom game
bundled into it. In comparison, a C64 which is around 200 comes to around
the same price after the purchase of a printer, disk drive, and software.
For those that think 725 is too expensive and already own a ColecoVision,
theres a cheaper version of Adam which is plugged into the ColecoVision,
fulfilling Colecos commitment that ColecoVision owners would one day be
able to upgrade their console into a complete computer system.
The Adam received many good reviews, and some of the key points include
the quality of the keyboard and printer, and that it also offered
competitive sound and graphics. It also possesses a good BASIC
interpreter, called SmartBASIC, which is largely compatible with Applesoft
BASIC a BASIC interpreter made by Microsoft for the Apple II, and since
many computer books and magazines at that time provide type-in programs
for Apple II, that makes it easy for the user to simply type it in without
having to modify the code.
Sounds like a pretty sweet deal, right?
Unfortunately for the early Adam adopter, it also has a large number of
frustrating technical issues, ranging from retarded to fucked up.
For starters, the Adam generates a surge of electromagnetic energy on
startup, which can erase the contents of both tapes in and near the tape
drive. And according to the instruction manual, you have to put the tape
in the drive BEFORE you turn the computer on, so it didnt take long for
people to have stacks of blank tapes which they could do nothing about it.
It is said that the manual was printed before the problem was known
Speaking of tapes, there were reports that initial shipments to customers
included a high rate of defective tapes, some said up to 50, and if you
ever try to eject it while it was still moving, you end up destroying the
drive as there was no eject lock-out mechanism, as the tape moved at an
extremely high speed.
And they also decided to use the printer to to supply power to the entire
Adam system, and if your printer is either failed or went missing, that
computer will end up as a paperweight instead. Another equally dumb
decision they made was not to store the BASIC permanently in ROM, and
instead the ROM features a built-in electronic writer and word processor,
SmartWriter seriously, isnt one of them more than enough? as well as
the Elementary Operating System EOS OS kernel and the 8K OS-7
ColecoVision OS. The BASIC interpreter was instead stored on tape, and
since using tapes on the computer is a bit like Russian Roulette with a
fully loaded gun, you can see why this is a bad decision.
Due to these problems, people decided not to spend their money on buying
an Adam, and it proved to be costly for Coleco themselves. They lost 35
million in the fourth quarter of 1984, and they decided to blame the
manuals since it did not offer the first-time user adequate assistance
which is a lame argument since they were the ones who wrote it in the
first place. And just like the Apple III, Adam was reintroduced with a
new instruction manual, sold at a lower price, along with a 500 college
scholarship per unit for use by a young child, paid when the child gets to
college, and despite these incentives, people just decided that theyd
rather get an home computer that didnt screw up too much, and it only
sold around 100,000 units before being discontinued in 1985. To make
matters even worse, the Adam weakened Coleco as much of the money it had
made from Cabbage Patch Kids was devoted to the Adam, and the company soon
filed for bankruptcy in 1988.
----Oric-1----
The home computer boom in the UK also sees another batch of contenders,
all wanting to be the dominant computer in the UK, and hopefully, Europe.
The best-selling computer in the UK is its own Sinclair ZX Spectrum,
although it faces competition by Commodore 64, Amstrad CPC and BBC Micro.
The reason why the Spectrum was so popular is that the computer was sold
at an amazingly low price, and has color and sound, and it proved to be so
popular that there were eight different models made, each more powerful
than the last, and the introduction of the Spectrum led to a boom of
software and hardware manufacturing in the UK, and it even earned Clive
Sinclair a knighthood for services to British industry.
The Oric-1 was one computer designed to beat the Spectrum in its own game,
and it had the potential to do so, since the company that manufactured it,
Tangerine Computer Systems later renamed Oric Products International are
not newcomers, in fact, they had some sucess with the Microtan 65, a kit
computer based on the 6502 processor, complete with a 3U form factor,
small amounts of RAM, a video character generator and UHF modulator for it
to be used with a TV, and a simple latch for entering hex data from a
keypad.
With the success of the ZX Spectrum, they decided to venture into the home
computer market and this is where they changed the company name, and
created a computer called the Oric-1.
The computer was designed to use the 6502 processor, which means that
software written for the Microtan can be ported over. For the systems
specs, they decided to look at the Spectrum and identify its weaknesses.
Firstly, instead of using a rubber chiclet keyboard like the Spectrum, it
featured 57 plastic keys that moved individually, and although it isnt
classified as a proper keyboard ie the desktop keyboard we use
nowadays it was durable and friendly on the fingers.
For BASIC, they decided to use Microsoft BASIC, although it was extended
in-house with Orics own commands mainly for games, increasing its size
from 8 to 10K. As for output, the Oric featured the industry-standard
Centronics printer interface, which means that a user can simply plug in
any printer, a luxury unavailable for Spectrum users. It also includes a
RGB socket along with a RF modulator, allowing the user to connect it to
either a television or a monitor.
As for sound and graphics, it proved to be much better than the Spectrum,
and in the sound stakes it was much more superior as it used the AY-3-9810
sound chip, which is much more robust compared to the Spectrums barely
audible sound chip, and there is a number of sound commands resident in
Orics BASIC which gives the user a fairly good grip over the sound chip,
with custom sounds such as Zap, Shoot, Explode, etc it makes the perfect
accompanient to those wanting to make their own arcade-style games.
And just like the Spectrum, the Oric features two screen modes, a standard
text mode and a high-res graphics mode, with eight basic colors available
in both modes, with a screen resolution around 240x224 pixels, which in
text mode equated to 40x28 character grid. Unfortunately, the pixels
couldnt be colored individually, color clash issues like the Spectrum,
although it is less noticable. The Oric has a unique feature in graphics,
where it uses serial attributes, so only one memory area was needed for
screen graphics, unlike the Spectrum which requires two.
This feature proved to be extremely useful as it reduced memory usage and
at the same time increases the speed of graphics could be displayed on
screen, making it perfect for arcade-style games.
It even adopted the same marketing strategy as the Spectrum, with both 16
and 48K versions available, and seeking to topple the competition, they
priced the 16K version around 99.95 pounds, 25 pounds cheaper than the
Spectrum equivalent, with the 48K version retailing around 169.95 pounds,
5 pounds cheaper than the 48K Spectrum, along with the promises of a disk
drive, a four-color printer, and a Oric modem whic allow users to access
Prestel content.
So with the potential, why wasnt the Oric-1 successful the way it should
be?
The reason was that the Oric-1 was plagued with problems since day one,
initially, there was a strong interest in the product, with over 30,000
pre-orders received prior to the official launch in January 1983, but
Oric failed to supply them on time due to manufacturing problems,
particularly the delayed delivery of ROM and RAM chips.
And when the machines were available around March, Orics mail order
department struggled to work through the backlog, and to make matters
even worse, the 16K version was delayed even further when a last minute
revision of the circuit board pushed it to May, and it was priced at
129.95 pounds, 30 pounds higher than the original price.
When the machines were readily available, another issue arose: The lack
of commercial software, even though after software publishers such as
Ocean, IJK and Durell pledged their support for the machine, along with
the companys own software arm, Tansoft. The software was there, however,
retailers were sending thousands of them back, reporting that the tapes
were faulty. Oric blamed Cosma Sales, their chosen tape duplicator
company, and Cosma pointed back at Oric, alleging that the Oric-1s tape
loading system was faulty, and it was mentioned in several magazines that
had trouble loading games. Not to mention the fact that the ROM chip
itself is faulty, and that Oric BASIC is also plagued with bugs.
Sinclair then cut the prices of the 16 and 48K version of the Spectrum
down to 99.95 and 129.95 pounds respectively, forcing Oric to drop its
own prices to compete with their closest competitor, and things were
starting to improve as the color printer was revealed, at around 169.95
pounds, and that Christmas was approaching, however, what can only be
described as an act of God happened: In October, a fire destroyed the
factory where the Oric-1 was built, and so they had lost on the Christmas
period, even after manufacturing continued in another factory.
All is not lost, however, as compared to the computers I mentioned
earlier, it sold quite well, with 160,000 units sold in the UK and 50,000
units sold in France, where it was the top-selling machine of the year.
Still, I couldnt shake off the feeling that god is a Spectrum fanboy,
especially the fire incident.
----Jupiter Ace----
Jupiter Ace was another home computer that sought a place in the UK
computer market, the Jupiter Ace wins for me at least for having the
most childlish name for a computer anyone can think of. The two men
responsible for the computer, interestingly enough, had been on the design
team for the ZX Spectrum, where one of them, Richard Altwasser, did some
development work for the ZX 81 the predecessor to the Spectrum and
Spectrums hardware design, while the second one, Steven Vickers, adapted
and expanded the 4K ZX 80 the predecessor to the ZX 81 ROM to the 8K ZX
81 ROM, and wrote most of the ROM for the Spectrum, so these two men know
a lot about home computers.
Due to the similarities in size, cost and form factor, it is often
compared to the ZX 81, although it was designed internally. It uses the
Z80 processor, and unlike the ZX 81 which uses 75 of it just to render
graphics, the Ace uses it fully for running programs, and has a dedicated
video memory of 2KB, leaving 1K of memory free for user programming.
It also uses rubber keys like the Spectrum and its predecessors, and as
for audio, it was CPU controlled with programmable frequency and duration,
and audio output was done through a small built-in speaker, and it
requires a television for display, which was in black and white only.
Lets just say that this computer isnt really appealing to begin with,
especially with only 4KB of memory, when other computers came with 16KB as
minimum, and that you also need to buy an additional 16KB RAM-extension
which doubled its price. Predictably enough, most people were turned off
by the b/w display since almost all home computers marketed at the time
had color graphics, and it also didnt help with the fact that the case
was fragile.
But the biggest disadvantage is that they decided to abandon BASIC as
default programming language for the computer. There are several good
reasons for this, firstly, while BASIC is good for beginners, it uses
unstructured programming which means that the user doesnt learn much,
secondly, while good for simple games and applications, it was difficult
to write good and large programs in that language, and thirdly, it varies
from platform to platform, where a game written in Applesoft BASIC will
not run on a Commodore 64, for example.
However, instead of using something more educational, such as Pascal,
which was small, efficient and encourages good programming habits using
structured programming and data structuring, they decided to use another
language, FORTH. FORTH has many advantages, namely it can be adapted to
home computers with small memory and low-speed processors, allowed control
structures to be nested to any level, limited only by available memory.
The disadvantage of FORTH? Im not going to tell you, but rather, lets
take a look at these code samples that will print Hello World! when run.
BASIC:
10 PRINT HELLO WORLD!
20 END
Pascal:
Program HelloWorldoutput
begin
writelnHello World!
end.
FORTH:
: HELLO -- CR . Hello world! HELLO cr
HELLO
or
CR . Hello world!
Now do you see why this is a bad idea? One thing you have to keep in mind
is that home computers were marketed for kids to teenagers, and, frankly,
FORTH is the best language to teach kids programming - before they run off
to Montana to become the Unabombers apprentice. The computer was a
failure from start to finish, and very few working models are available
today.
So, be thankful for the fact that you werent around when these computers
were released with the exception of the Lisa, or those that were around
during this time period, that you didnt actually stumble upon them.
xa13
total dos collection!
ok, the title is deceiving, but on purpose. for those you dont know, there
is a big project called total dos collection, you can find some... info
on this website: http://www.totaldoscollection.org/nugnugnug/
the project is all about collecting and preserving all... and i mean ALL,
DOS software! everything... from games to applications, but from what i
have seen, it only collects licensed software, of some type. for example,
you wont find DOS utilities from public domain.
so does this mean, that you can get free DOS games? warez? nope! the
project just collects the software and it makes it available, only to those
who have, perhaps, an academic reason to get the collection, for example,
universities. so you and i, cant get a copy... or can we?
but of course we can! right now, TDC is on version 18. up to version 17,
can be found, on torrents or even at the archive.org website:
https://archive.org/details/totaldoscollectionrelease1719811995201910
so... vouala! warez, that was not intended to be warez, but made warez
after all... oh i love internet!!!
xa14
4 of the most common and best cli players for linux
*tui text user interface
as i grew up with a dos machine, i was really enjoying hearing music from
the terminal, watching the awesome visualization bars of programs like
mpxplay. so even i got older, the habit didnt get lost and i still hear
music from my linux terminal, which i think is the most convenient way to
organize playlists, specially if you have organized your media library by
directories. lets see some of the most well known, linux cli media players.
soxplay
the play program from the sox package, is a simple cli mplayer. no tui,
you just use the command line. give play *.mp3 in a directory to play
any file in that dir. so simple. make sure you have installed the
libsox-fmt-all package also, for mp3 support and other formats.
play is not a simple program. because its part of the sox package, it was
designed to do very advanced stuff. you may think that is a simple player,
but its much more. but for simple use to hear some music is adequate
enough.
mpg123ogg123 http://mpg123.org/
similar to play, are these two players. also no tui, just command line. both
programs are similar and have the same command line arguments. they also
accept some key commands, like play/pause/next etc.
sudo apt-get install mpg123
...now, the real stuff comes!!!
cmus https://cmus.github.io/
cmus is something like vim, for music : its a very powerful application
and has all sorts of bells and whistles. it uses ncurses for a tui and has
7 views, like browser, playlist, filters, settings etc.
sudo apt-get install cmus
you can organize your music in playlists or by folders, use the tui to add
or remove tracks, or you can use its command line mode. manpages are, again
your savior on how to use it.
Artist / Album Track Library
. 00:00 - 00:00 all from library C RS
moc http://moc.daper.net/
...but my favorite player is moc! with a simpler interface and simple key
bindings, moc is an easier player to use, with out loosing any features.
again you can use moc to listen to all sorts of music, even internet radio
stations, mod/track files, mp3/ogg etc. like cmus, moc also has powerful
command line arguments and you can use it to other projects, like bash
scripts. it can also launch as a daemon and control it via command line
args.
sudo apt-get install moc
/home/x/MusicPlaylist
../ 1 http://stream03.uzic.ch:9 NET
electro-bass/
mod/
Files: 1 Master 60 000:00:00
00:00 00:00 kHz kbps STEREO NET SHUFFLE REPEAT NEXT
for sure, linux cli media players, dont have the magic of the old DOS ones.
but also, dont the troubles of them... i still remember trying to use DOS
players to play music in the background, while i was using a shell in the
foreground... with limited memory, players forcing to run in protected
mode and many... many... many... resets :
xa15
you may know protracker, screamtracker, fasttracker, milkytracker, renoise,
etc. but now there is also another one and is called bassoon tracker! the
special thing with this player/tracker, is that you can use it online and
its written in javascript!
https://www.stef.be/bassoontracker/
you can create your own music, in any device connected to the web... even
a smartphone! no need to use emulation or old text mode trackers. everything
is doable via a graphical user interface.
the tracker is open source software MIT license and you can download the
code from https://www.github.com/steffest/bassoontracker
here are some of the features it has:
@ Protracker and FastTracker compatible: load, edit and save .mod and .xm
files
@ Allows up to 32 channels
@ Has a built-in sample editor
@ Imports 8-bit WAV files, 8-Bit Sampled Voice 8SVX files, and RAW samples
as well as any other format the AudioContext interface can read, such as
.mp3 and .ogg
@ Exports to .wav and .mp3 formats
@ Includes the historic ST-01 and ST-02 sample disks, released in 1987
@ Uses the modarchive API to give access to several thousands of music files
@ Uses the modules.pl API to give access to even more music files
@ Can connect to your Dropbox account to directly read and write files
@ Includes a lightweight player library which you can use in your projects
specially the modarchive/modules.pl API is a very cool feature. you can edit
tracks directly from those websites and store them locally!
personally i am not into music/track editing, but for a beginner is a very
fine choice to start with. give it a try and play with the sample demos it
offers.
xa16
bottomless abyss bbs // stack fault
When Hacking and CTF meets the BBS
Again this year, The Bottomless Abyss BBS is organizing its contest during
the year-end holidays. The concept is simple, participate in 1 or both of the
2 tracks the contest has to offer and make points. The winners from each track
get some special swag, get their name immortalized on the Hall of Fame and
create some unique memories. Its more for the fun than anything else...
When is the contest?
The contest starts on December 19th 2020 at 00:00EST and ends on January 19th
2020 at 00:00EST.
Where do I connect to participate in the contest?
You have to create an account on The Bottomless Abyss BBS using one of the
following:
telnet://bbs.bottomlessabyss.net:2023
ssh://bbs.bottomlessabyss.net:2222
https://bbs.bottomlessabyss.net/connect
Track 1: Full-blown Capture-The-Flag CTF Hacking challenges
What is a CTF?
In a CTF, participants have to complete challenges to gather flags proofs of
success and submit them in a scoreboard. The scoreboard then validates your
flag and if correct, will credit you with the points associated with the
challenge. Challenges does not require any particular hacking skills but the
more knowledge you have, the better your chances. Curiosity and perseverance
are really the winning factors here. Anyone can do it...
How does it work?
You connect to the BBS and access the custom developed contest environment,
from there you have access to everything you need to complete your goals.
List of challenges, description, format of the flag to look for, hints, etc.
Everything is centralized in the same location.
The Bottomless Abyss BBS is also the official board of Hackfest, the largest
IT security conference in Canada. Stackfault +o have been part of the
Hackfest organization for many years and is also a challenge designer. Teaming
with several other designers, the CTF offers a wide variety of challenges for
the participants to solve.
Where are the challenges?
The challenges can be on the BBS itself, on a website, or within static files
requiring you download and crack them locally. It really depends on the
designer but the information is all available when you access the scoreboard.
Who can do this CTF stuff?
There are challenges for all and any skill levels and its a great opportunity
to learn in a casual environment. Other participants are very happy to share
hints and give nudges in the specially created message bases.
One big particularity of this track is that challenges are released on a
regular basis during the whole contest and points awarded for solving them
decreases over time. The quicker you solve them, the more points you get. Its
more of a marathon than a sprint. It allows casual players to perform well even
if they cannot commit crazy amount of time. It also ensure participants have to
connect regularly to keep up to date with new challenges.
Track 2: Door games triathlon
You think hacking and CTF is not your cup of tea? Why not try the second trace
and focus on games who doesnt like games?. These 3 games are made available
just for the contest and based on the nature of the game, they may reset on a
weekly basis or bi-weekly basis. This keeps the games exciting and avoid
having a player who dominates to just stay on top. You have to work regularly
to maintain your standing.
How does the scoring works?
For both tracks, all scores are kept in a dynamic Hall of Fame and everything
is automatically updated. A special ranking system provides you with better
levels everytime you progress.
For the Door games triathlon, the sum of the points from all 3 games makes
your total score for that track. If the game allows your score to drop, this
also have an effect on the scoreboard, play your moves carefully.
Conclusion
I hope to see you around since this is a great way to create a synergy between
the BBS scene and the Hacking community. After all, BBSes have always been the
prefered home of hackers, didnt they? The best of all, its free as in beer!
Cheers, and Hack the Planet! :
c0W+PUk5+ t F7xY +/ T7wjt Lc0W PU rioR wAF xYA+ UT7 jt gD1C jt Q y i c
CA NkiBfX Ag O7 AiyCf IvICB HvAAN iBfX4 g4O7w iyCfT vIC RHvA sf3hH 6iLe Ry0g
AAA Xv /IIBQj48i e7Rz4HOcA Pj76AAXvC IIBQj48 Te7Rz HOcAHP 6vgk+B FAj7Q PgzA
Pc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQ
E As7rioR7 AF6irKLf 1/gsR0BwA 5As7rioR7 AF6irK fX1/gsR0 wAFuoZzS qERPk7T Ct
Q e e3 C I gTJO +5 s ri 7wAF6ir L X / sR0 w F oZ S q R k7T C d4 5 k +
xt01
clear your terminal screen, like the 8bit computers did...
if you had an old home micro computer, you should remember their terminal
screen. i still remember the one from my Amstrad 6128. so, what about making
a similar one, for our bash terminal. nothing fancy, nothing great.
just some simple ansi commands, to clear, colorize the screen and put some
info on it, to resemble the oldskool style. try the function below. feel
free to customize it as you like.
function clearretro
bsbash --version head -n2
fmawk /MemFree/ printf Free Mem. .1f MBs, 2/1024 /proc/meminfo
echo -e 03344m033133m0332J03311Hbs03341Hfm
xt02
convert ansi files to html
i was trying to find a way to convert the end result .ans file of null to
a pdf. i tried some ways, but the result wasnt what i expected. the thing
is, that i have promised a pdf version for null00a and i have written about
it, in the editorial. so some people, asked about it and after telling them
the problem i had, one of them suggested to convert the ansi to html and
then to pdf.
the easiest way i found, for me, was a python utility called ansi2html.
you can install it with pip, as easy as: pip install ansi2html
although you can use it as python library, it has an external app,
allready made called ansi2html. the help page html2ansi --help shows many
useful options. i ended using the following command line:
cat null00a.ans ansi2html -s solarized -a --input-encodingCP437 null.htm
...which will automatically convert the CP437 encoding of the original ansi
file to UTF, make the URLs provided in the text as click-able links! and
use a different color pallete, cause the original, has a problem displaying
dark gray 08 to a black background.
the only downside is, that it reveals the hidden text, which was a task
for you to do so : perhaps with some tweaking in the final html code, or
in the original python code, would solve this matter... but nah... i am
bored. also its a way to discover that there is some hidden text, cause
otherwise, you may didnt find about it. now you know... there are hidden
scriptures inside null... :p
i still tried to convert it to a pdf, but again i didnt like the result
and it was too much trouble. but the HTML format, i think, perhaps, its
better. anyone has a browser in their system and the links are working with
a click so why bother convert it to a pdf?
xt03
amstrad emulator for linux...
clone the github page with:
git clone https://github.com/ColinPitrat/caprice32
then type:
cd caprice32
make APPPATHPWD
./cap32
now download this awesome demo, from here:
https://files.scene.org/view/parties/2011/forever11/cpc/demo/batmanforever.zip
xt04
Strip ANSI code from String Python3
below is a simple function to strip ansi codes from a string, written in
python3. the function will strip almost any ansi code and also it will
interpret the CSInC code into empty characters. some ansi files use the
CSInC code to emulate empty spaces, so if you have such a code inside your
string and only remove the codes, you will get a string with different size
than it would have been, if you had displayed the ansi codes, normally.
by using the same functions and getting the stripped string, you can easily
find the length, of a stripped ansi string
def stripansis:
if lens0:
return
i 0
res
esc False
opt
while i lens-1:
if esc:
if si in A,B,D,E,F,G,H,J,K,S,T,f,m,u:
esc False
opt
elif siC:
res + *intopt
opt
esc False
elif si in 1,2,3,4,5,6,7,8,9,0:
opt + si
else:
if si chr27:
esc True
i+1
else:
res + si
i+1
return res
xt05
Strip MCI codes from string Python3
another snippet of code, for removing all those pipe codes, mystic uses.
its useful when writing scripts/mods and want to manipulate the real
text of a string and not the pipe codes.
def stripmcis:
i 0
val
while i lens:
if si ! :
val + si
i + 1
else:
i + 3
return val
xt06
Wrap line Python3
and to make the above snippet of code, more useful, here is another very
useful piece of code, which will wrap a line, even if that string includes
pipe codes in it.
def wraplines,width78:
wrapchars ,/,.,,
if lens width:
return s
res
ilens-1
while i0:
if si in wrapchars:
if lenstripmcis:i width:
res.appends:i
ssi+1:
ilens-1
i-1
return res
also this is another implementation of a wrapline function. the logic
differs, to show that there are different ways you can use to implement
things and that there is no right or wrong way.
def wraplinenltext, width80:
lines
for paragraph in text.splitn:
line
lenline 0
for word in paragraph.split :
lenword lenword
if lenline + lenword width:
line.appendword
lenline + lenword + 1
else:
lines.append .joinline
line word
lenline lenword + 1
lines.append .joinline
return n.joinlines
xt07
Find message base id, by echo-tag Python3
for some scripts/mods, i need to pass a variable of a specific message
base. usually the *-dat echoarea of an echonet. but because all bbses dont
assign the same id to that specific echoarea, up to now, i was leaving to
the sysop of the bbs to fill that id number, in a variable inside the
script... but no more.
because a specific echo-area, has the same echo-tag, in all bbses, instead
of searching the message base by its id, we can search it by its echo-tag
string. and thats what the following MPY function does. it finds the id
number of a message base, with a specific echo-tag. so for example, if we
want to find the id of the fsxnet, dat area, we can search for the fsxdat
echo-tag and get it! now you dont have to customize mods, for entering the
base id, at least not for fsx :
def findbases:
s s.upper
res
i 0
mb getmbasei
while mb and not shutdown:
if mbechotag.upper s:
return mbid
i +1
mb getmbasei
return -1
the function will return the base id, in integer if it finds it, or else
it will return -1. now you can use the getbaseid MPY function to open
that message base and get the info you want happy modding...
xt08
convert ansi to mci mystic codes python3
i wanted a way to convert ansi escape codes to mci codes. this way, i could
display an ansi file, via mystic, with no breaks/wrapping etc. so below is
my way of doing so.
it actually renders an ansi file to a virtual 2d array. this way, even if
in the ansi file are codes that move the cursor like A, B, etc. it will
render the ansi file correct.
at first i was using a 1d list, which you can convert to a 2d-like array,
with a formula of listx+y*width, but after exchanging some source code
with opicron of bbs.opicron.eu found out about this type of declaring a
2d list matc 32 for x in rangeh for y in rangew , which is
more easy to the eye to use.
def ansi2mciansi:
global x,y
global h,w
global bottom
ansi is a list
opt
esc False
w 80
h 1000
matc 32 for x in rangeh for y in rangew
matfg 7 for x in rangeh for y in rangew
matbg 7 for x in rangeh for y in rangew
oldxy 0,0
mode 0
fg 7
bg 16
ansifg range30,38
ansibg range40,48
pipefg 0,4,2,6,1,5,3,7
pipefgh 8,12,10,14,9,13,11,15
pipebg 16,20,18,22,17,21,19,23
fgcol
x0
y0
bottom 0
def checkxy:
global x,y
global h,w
global bottom
if x 0: x 0
if xw-1:
x0
y+1
if yh-1: yh-1
if bottom y: bottom y
if lenansi 0:
return
for s in ansi:
s s.encodecp437
if chr1 in s:
pass
else:
i 0
y+1
x0
while ilens:
if not esc:
if si chr27:
esc True
i + 1
elif si chr12:
pass
x0
y0
elif sichr13:
x 0
y+1
checkxy
elif sichr10:
x 0
y+1
checkxy
else:
matcxy ordsi
matfgxy fg
matbgxy bg
x + 1
checkxy
else:
acodes A,B,C,D,E,F,G,l,N,O,P,m,s,u,
J,H,f,h
if si in acodes:
esc False
if si C: forward
if opt ! : x + intopt
else: x +1
checkxy
elif si A: up
if opt ! : y - intopt
else: y - 1
print A: +stry
checkxy
elif si B: down
if opt ! : y + intopt
else: y +1
print B: +stry
checkxy
elif si D: back
if opt ! : x - intopt
else: x -1
checkxy
elif si s: save cursor
oldxy x,y
elif si u: restore cursor
x,y oldxy
elif si J: clear screen? NOPE
x 0
y 0
elif si l: reset mode? nope
pass
elif si K: clear EOL
for i in rangex,w:
mataiy
x 0
y + 1
checkxy
elif si H or si f: gotoxy
if lenopt0:
x,y 0,0
else:
kopt.split
xintk0-1
yintk1-1
checkxy
elif sim: set color mode!
codesopt.split
for code in codes:
num intcode
if num 0:
mode 0
fgcol pipefg
elif num 1:
mode 1
fgcol pipefgh
elif num 5:
mode 5
elif num 7:
mode 7
tmp fg
fg bg
bg tmp
elif num 8:
fg 7
bg 16
elif num in ansifg:
fg fgcolansifg.indexnum
matfgxy fg
elif num in ansibg:
bg pipebgansibg.indexnum
matbgxybg
opt
else:
opt + si
i+1
oldfg 7
oldbg 0
res
for y in rangebottom:
r
for x in rangew:
if oldfg matfgxy:
r + +strmatfgxy.zfill2
oldfg matfgxy
if oldbg matbgxy:
r + +strmatbgxy.zfill2
oldbg matbgxy
r + chrmatcxy
res.appendr
return res
to use the above code you can use this piece of code. it will read an ansi
file, in CP437 format, convert it to mci codes and display it in the
screen. i hope you find this function very helpful and use it in your
projects.
import codecs
f codecs.open/home/x/3.txt,r,cp437
lines f.readlines
f.close
qansi2mcilines
for w in q:
sys.stdout.writew
sys.stdout.flush
xt09
yes/no/cancel input with lighbars python 2.7
in case the default input function of MPY dont cover you, here is another
one. it imitates the default yes/no selection, but it can also get a
cancel response, and the text displayed is customizable. so you can use it
also in other cases, you need a response of the user with three options.
you can use spacebar, left/right cursor keys to select the value, but it
also accepts the first letter of the words you entered as options and its
case insensitive. below is a full working MPY script, to test it yourself.
from mysticbbs import *
KEYUP chr72
KEYDOWN chr80
KEYESCAPE chr27
KEYENTER chr13
KEYTAB chr9
KEYBACKSPACE chr8
KEYLEFT chr75
KEYRIGHT chr77
KEYPGUP chr73
KEYPGDN chr81
KEYEND chr79
KEYHOME chr71
KEYSPACE chr32
def getyncx,y,trueat,offat,default2,yes Yes ,no No ,
cancel Cancel :
Function to get a Yes/No/Cancel answer
trueat : color in byte value for the No button
offat : color in byte value for the Yes button
default : default value
def writexyx,y,a,s:
gotoxyx,y
textcolora
writes
global exitcode
exitcode
key
val 0:yes, 1:no, 2:cancel
res default
while key ! KEYENTER:
writexyx,y,offat,val0+val1+val2
if res 1:
writexyx+lenval0,y,trueat,valres
elif res 0:
writexyx,y,trueat,valres
elif res 2:
writexyx+lenval1+lenval0,y,trueat,valres
gotoxy1,25
key, extended getkey
if key KEYLEFT:
res - 1
if res 0:
res 2
elif key KEYRIGHT or key KEYSPACE:
res + 1
if res 2:
res 0
elif key.upper yes1.upper:
res 0
break
elif key.upper no1.upper:
res 1
break
elif key.upper cancel1.upper:
res 2
break
return res
write0716CL
a getync5,5,30,7
if a 0:
writeYES selected
elif a 1:
writeNO selected
elif a 2:
writeCANCEL selected
xt10
SYNCHRONET
bash script by DeepThaw
this bash script will let your users opt to download files via http
download rather than relying solely on the likes of zmodem. it was written
and tested with synchronet, but with minor tweaks should work with any bbs
running in *nix. you pass the socket descriptor as the first parameter, and
the file or list of files as the second parameter.
synch setup:
Download Command Line: httpdl.sh h f
Batch Download Command Line: httpdl.sh h @f
Native Executable: yes
Supports DSZLog: no
Socket I/O: yes
you will probably want to disallow executing of php files et. al from the
directory you choose to use.
youll need the uuid-gen and at packages, as well as a web server of some
sort running on your system.
!/bin/bash
we generate a uuid to use for storage of the files. we only keep
the first 8 characters
uuiduuidgen
dirhashuuid:0:8
the base url from which files will be downloaded
downloadprefixhttp://deepthaw.net/bbsdownloads/
mkdir -m715 /var/www/html/bbsdownloads/dirhash is 715 safe?
setup some needed variables
descriptor1 socket descriptor
files2 file or list of files if it starts with @
if the first character in the name of files is @, we read every line
if files:0:1 @ then
batchfiles:1
while IFS tnr read -r line i hate bash
do
cp -p line /var/www/html/bbsdownloads/dirhash
done batch
else
cp -p files /var/www/html/bbsdownloads/dirhash
fi
from at package - lets us schedule jobs for later
echo rm -rf /var/www/html/bbsdownloads/dirhash at now +60 minutes
tell users where to find the files on the website
descriptor printf your files will be available atrnss/ for one
hour.n downloadprefix dirhash
close socket
exec -
xt11
so lets play with darkness 2 a bit, but not the actual game. most of the
data files are binary files, which can be hex edited. but i am not in the
mood for it. so it was nice finding one file that contains all ansi graphics
of the game DARKTXT.DAT cause you can rip them off! no, no, no, you
should definitely dont do that! but you can easily alter them a bit to
match your bbs or whatever. the format of the file is very easy. each ansi
has a code like @A0,@A1,@A2 etc. after this code, is the ansi escape codes
for the graphic it self. a nice thing, that i think it should be by default
is to clear the screen every time you enter an area. so to do that, add the
ESC2J seq. after the graphic code like @A2ESC2J
i also got into the DRS thing a bit and tried some stuff. i was a bit
curios about a thing, so i tried to see if it is possible...
below is a DRS file for Darkness2. Its mostly a proof of concept, rather
than a good DRS for the game. i am not revealing, what is about. to find out
youll have to decode the file, name it as a .DRS file and enable it, in
the Darkness configuration.
its obvious that the DRS engine, can do a lot of remarkable things. it only
needs imagination :
Ow0KQFRJVExFOlQxMDENCkBWRVJTSU9OOjEuMDANCkBBVVRIT1I6WFFUUg0KQEFSRUE6NTANCjsN
CkBTRVRDUkVESVRTOjcNCkBSQU5ET01JVEVNDQobWzJKG1swbQ0KG1sxbSAgICAbWzQ3bbAbWzMw
OzQwbbKxsLCwsLCysBtbMG0gG1sxOzQ3bbKxsBtbMG3bG1sxOzMwbbLcsbIbWzBtsbGysg0KG1tB
G1syN0MbWzE7MzBt39/f39/f39/f398bWzBtIBtbMTszMG3cG1swbSAbWzE7MzBt29zcG1swbSAb
WzE7MzBt398NChtbQRtbNDdDG1swbSAbWzE7MzBt3xtbMG3bG1sxOzMwbbKw398bWzBtIBtbMTsz
MG3b398bWzBtG1sxMUMbWzE7MzBt3w0KG1tBG1s3MEMbWzM3OzQ3bbIbWzBtDQogICAgG1sxOzQ3
bbAbWzMwOzQwbbKxsLCwsLCysBtbMzc7NDdtsrEbWzQwbdsbWzBt2xtbMTszMG2ysLLf3xtbMG0b
WzE2Qw0KG1tBG1szOUMbWzE7MzBt37LcG1swbSAbWzE7MzBt39/fG1swbSAgG1sxOzMwbd8bWzBt
ICAgIBtbMTszMG3c2xtbMG0gIA0KG1tBG1s1N0MgIBtbMzVtIBtbMzFtICAgG1szN20gIBtbMzVt
IBtbMzdtICAgIBtbMTs0N22yG1swbQ0KICAgIBtbMTs0N22yG1szMDs0MG2ysbCwsLCxsrAbWzM3
OzQ3bbLfsBtbMG3bG1sxOzMwbbGyG1swbRtbNkMbWzM1bSANChtbQRtbMjdDG1szN20gICAgG1sx
OzMwbSAgICAbWzBtICAbWzM1bSAbWzM3bSAgIBtbMTszMG3fshtbMG0gG1sxOzQ3bbAbWzQwbQ0K
G1tBG1s0NUMbWzBt3BtbMTszMG2xsrCfUiHfG1swbRtbNUMbWzMxbSAg3NzcICAbWzM1bSAbWzM3
bSAgICAbWzE7NDdtshtbNDBtDQobW0EbWzcxQxtbNDdtsBtbMG0NCiAgICAbWzE7NDdtsRtbMG0g
G1sxOzMwbbKxsLCw27AbWzQ3bbIbWzBtIBtbMTszMG3fG1szNzs0N22wG1swbdsNChtbQRtbMThD
G1sxOzMwbbGyG1swbRtbN0MbWzM1bSAgG1sxOzMwbSAgG1swOzMxbdzc3BtbMTszMG0gIBtbMDsz
NW0gG1szN20bWzVDDQobW0EbWzQyQxtbMTszMG3f27GwsBtbMzc7NDdtsBtbMzA7NDBtsdwbWzBt
IBtbMTszMG3cG1swbRtbNUMbWzM1bSANChtbQRtbNThDG1szMW0g2xtbMTszMDs0MW0gICAgG1sw
OzMxbSAbWzM3bRtbNUMbWzE7NDdt37IbWzBtDQogICAgG1sxOzQ3bbAbWzBt2yAbWzE7MzBtsrGw
sLAbWzBt3BtbMTs0N22yG1swbdwgG1sxOzQ3bbCwG1szMDs0MG2wshtbMG0bWzlDDQobW0EbWzI5
QxtbMTszMG0gG1s0MW0gICAgIBtbNDBtIBtbMDszNW0gG1szN20bWzZDG1sxOzMwbbKxsBtbMzc7
NDdtsBtbNDBtDQobW0EbWzQ3QxtbMzBtst+y2xtbMG0bWzhDG1szMW0g39/fIBtbMzVtICAbWzM3
bSAgICCyG1sxOzQ3bbIbWzBtDQogICAgG1sxOzQ3bbIbWzMwbdwbWzBt2xtbMTszMG3csBtbMG0g
ICAbWzE7NDdtsrKwsbKwG1szMDs0MG2wsrEbWzBtG1s1Qw0KG1tBG1syNkMbWzE7MzBt3BtbMG3c
IBtbMzVtIBtbMTszMG0gG1swOzMxbd/f3xtbMTszMG0gG1swOzM1bSAgIBtbMzdtIA0KG1tBG1sz
OUMgICAbWzE7MzBt3LKwsbAbWzM3OzQ3bbAbWzBt3CAbWzE7MzBt37LcG1swbRtbNkMbWzM1bSAb
WzM3bRtbNUMNChtbQRtbNjVDG1szNW0gG1szN20gICAgshtbMTs0N22yshtbMG0NCiAgICAbWzMw
bdwbWzE7Mzc7NDdtsrEbWzMwOzQwbbLcG1swbSAbWzE7MzBt3BtbMzc7NDdtsrKxsrCxshtbMG2y
DQobW0EbWzE5QxtbMTszMG2xshtbMG0bWzVD3xtbMTFDG1sxOzMwbdzcst/c3N/csLAbWzBt3xtb
MTszMG2wG1swbSAgDQobW0EbWzUyQxtbMTszMG2yG1swbSDcIBtbMTszMG3fstzcG1swbRtbNkMb
WzE7MzBt3NzcG1swbSCyG1sxOzQ3bbKxG1swbQ0KICAgIBtbMzBt29sbWzE7Mzc7NDdtsrEbWzMw
OzQwbdyw3xtbMzc7NDdtsrKysrCxsrEbWzMwOzQwbbCxshtbMG0bWzExQw0KG1tBG1szM0MbWzE7
MzBt3Nzcst/fG1swbSAbWzE7MzBt3BtbMG2yG1sxOzQ3bbAbWzBtIBtbMTszMG3cG1szNzs0N22y
G1s0MG0NChtbQRtbNDZDG1szMG2w3LAbWzBtIBtbMTszMG2wG1swbSAbWzE7MzBt3BtbMG0gstwb
WzE7MzBt3NzcG1swbbANChtbQRtbNjBDG1sxOzMwbd/f39+ysrKyshtbMG2wshtbMTs0N22ysRtb
MG0NChtbNUMbWzMwbdvbG1sxOzM3OzQ3bbKxG1szMDs0MG2ysLIbWzM3OzQ3bbKysbKwsbKxG1sz
MDs0MG2wsRtbMG2wDQobW0EbWzIzQxtbMTszMG2xsrLb29vb27Lf37Lc3BtbMG2xshtbMTs0N22w
sLEbWzMwOzQwbd8bWzBtIBtbMTs0N22yG1s0MG0NChtbQRtbNDVDG1swbSAbWzE7MzBtsBtbMG3f
IBtbMTszMG2wsLAbWzBt3xtbMTs0N22yG1swbSCwG1sxOzMwbbKysrKystwNChtbQRtbNjND3Nzc
398bWzBtsLCyG1sxOzQ3bbKyG1swbQ0KG1s3Q9vcG1sxOzMwbbKxsLIbWzM3OzQ3bbKysbGwsbIb
WzBtshtbMTszMG2wshtbMG2xG1sxOzMwbbGysrLf3xtbMG0gDQobW0EbWzMxQxtbMTszMG3c3Btb
MG2xsrIbWzE7NDdtsLCxsrKyG1swbSDb3xtbMTszMG2wsbAbWzBtICAbWzE7MzBtsLCwDQobW0Eb
WzUzQxtbMG3bG1sxOzQ3bbIbWzBtIBtbMTszMG3fG1swbbAbWzE7MzBtsrKysrKysrKystwbWzBt
sLIbWzE7NDdtG1s0MG0NChtbQRtbNzFDG1s0N22wshtbMG0NChtbN0MbWzE7NDdtshtbMG3b3xtb
MTszMG2xsbAbWzM3OzQ3bbIbWzMwOzQwbd8bWzQ3bdwbWzM3bbKwsbGyG1swbbKxsLENChtbQRtb
MjVDG1sxOzMwbdzcG1swbdwbWzE7MzA7NDdt3xtbMG2yshtbMTs0N22wsLCxsbKyshtbNDBtsrIb
WzMwOzQ3bdwbWzQwbQ0KG1tBG1s0MkMbWzBt3BtbMTs0N22yG1szMDs0MG2wsRtbMG0gG1sxOzMw
bbCwG1szNzs0N22wG1swbSAbWzE7MzBtsLCwDQobW0EbWzU0QxtbMG3fIBtbMTszMG3f3LDf3xtb
MG2wG1sxOzMwbbKysrKyshtbMG2wsbIbWzE7NDdtsrAbWzBtDQobWzE7MzBt3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzcDQobW0Eb
WzYzQ9zc3Nzc3Nzc3Nzc3Nzc3NwbWzBtDQp8RFRTZWFyY2hpbmcgYmV0d2VlbiB0aGUgcnVpbnMg
eW91IHNwb3QgYW4gb2xkIGRyb2lkLiBJdCdzIG9idmlvdXMgdGhhdCB0aGlzDQpAVVANCmRyb2lk
IGhhcyBzb21lIHNlcmlvdXMgZGFtYWdlLCBwZXJoYXBzIGZyb20gYmF0dGxlcywgYnV0IG5ldmVy
IHRoZSBsZXNzLCB5b3UgDQpAVVANCmFyZSBjdXJpb3VzIHRvIHNlZSBpZiBpdCdzIHdvcmtpbmcg
YW5kIHBlcmhhcHMgeW91IGNhbiBzYWx2YWdlIGl0Lg0KQERJVklERVINCkBGT1JNQVQ6fERUfDA3
VGhlIHwwNFQxMDEgfDA3YWN0aXZhdGVzIGFuZCBhdCB0aGF0IHRpbWUsIHlvdSByZWFsaXplIHRo
ZSBtaXN0YWtlIHlvdSBtYWRlIQ0KVGhlIGRyb2lkIHRha2VzIGFuIG9mZmVuc2l2ZSBwb3NpdGlv
biwgYnV0IGhhcyBubyB3ZWFwb25zIGF0IGhhbmQuIEl0IGZpbmRzIGEgDQpAVVANCnJlYmFyIGZy
b20gdGhlIHJ1aW5zIGFuZCBncmFicyBpdC4uLg0KDQpAUFJPTVBUOnxEVFdpbGwgeW91IGF0dGFj
az8gfElODQpAWUVTTk86Tk8NCg0KQElGVFJVRTpBVFRBQ0sNCjpOT0FUVEFDSw0KG1syShtbMG0N
ChtbMW0gICAgG1s0N22wG1szMDs0MG2ysbCwsLCwsrAbWzBtIBtbMTs0N22ysbAbWzBt2xtbMTsz
MG2y3LGyG1swbbGxsrINChtbQRtbMjdDG1sxOzMwbd/f39/f39/f39/fG1swbSAbWzE7MzBt3Btb
MG0gG1sxOzMwbdvc3BtbMG0gG1sxOzMwbd/fDQobW0EbWzQ3QxtbMG0gG1sxOzMwbd8bWzBt2xtb
MTszMG2ysN/fG1swbSAbWzE7MzBt29/fG1swbRtbMTFDG1sxOzMwbd8NChtbQRtbNzBDG1szNzs0
N22yG1swbQ0KICAgIBtbMTs0N22wG1szMDs0MG2ysbCwsLCwsrAbWzM3OzQ3bbKxG1s0MG3bG1sw
bdsbWzE7MzBtsrCy398bWzBtG1sxNkMNChtbQRtbMzlDG1sxOzMwbd+y3BtbMG0gG1sxOzMwbd/f
3xtbMG0gIBtbMTszMG3fG1swbSAgICAbWzE7MzBt3NsbWzBtICANChtbQRtbNTdDICAbWzM1bSAb
WzMxbSAgIBtbMzdtICAbWzM1bSAbWzM3bSAgICAbWzE7NDdtshtbMG0NCiAgICAbWzE7NDdtshtb
MzA7NDBtsrGwsLCwsbKwG1szNzs0N22y37AbWzBt2xtbMTszMG2xshtbMG0bWzZDG1szNW0gDQob
W0EbWzI3QxtbMzdtICAgIBtbMTszMG0gICAgG1swbSAgG1szNW0gG1szN20gICAbWzE7MzBt37Ib
WzBtIBtbMTs0N22wG1s0MG0NChtbQRtbNDVDG1swbdwbWzE7MzBtsbKwn1Ih3xtbMG0bWzVDG1sz
MW0gIBtbMTszMG3c3NwbWzA7MzFtICAbWzM1bSANChtbQRtbNjZDG1szN20gICAgG1sxOzQ3bbKw
G1swbQ0KICAgIBtbMTs0N22xG1swbSAbWzE7MzBtsrGwsLDbsBtbNDdtshtbMG0gG1sxOzMwbd8b
WzM3OzQ3bbAbWzBt2w0KG1tBG1sxOEMbWzE7MzBtsbIbWzBtG1s3QxtbMzVtICAbWzE7MzBtICDc
3NwgIBtbMDszNW0gG1szN20bWzVDG1sxOzMwbQ0KG1tBG1s0MkPf27GwsBtbMzc7NDdtsBtbMzA7
NDBtsdwbWzBtIBtbMTszMG3cG1swbRtbNUMbWzM1bSAbWzMxbSANChtbQRtbNTlDG1sxOzMwbdvb
G1s0MW0gG1s0MG3b2xtbMDszMW0gG1szN20bWzVDG1sxOzQ3bd+yG1swbQ0KICAgIBtbMTs0N22w
G1swbdsgG1sxOzMwbbKxsLCwG1swbdwbWzE7NDdtshtbMG3cIBtbMTs0N22wsBtbMzA7NDBtsLIb
WzBtG1s5Qw0KG1tBG1syOUMbWzE7MzBtINvbG1s0MW0gG1s0MG3b2yAbWzA7MzVtIBtbMzdtG1s2
QxtbMTszMG2ysbAbWzM3OzQ3bbAbWzQwbQ0KG1tBG1s0N0MbWzMwbbLfstsbWzBtG1s4QxtbMzFt
IBtbMTszMG3f398bWzA7MzFtIBtbMzVtICAbWzM3bSAgICCyDQobW0EbWzcxQxtbMTs0N22yG1sw
bQ0KICAgIBtbMTs0N22yG1szMG3cG1swbdsbWzE7MzBt3LAbWzBtICAgG1sxOzQ3bbKysLGysBtb
MzA7NDBtsLKxG1swbRtbNUMNChtbQRtbMjZDG1sxOzMwbdwbWzBt3CAbWzM1bSAbWzE7MzBtIN/f
3yAbWzA7MzVtICAgG1szN20gICAgG1sxOzMwbdyysLENChtbQRtbNDZDsBtbMzc7NDdtsBtbMG3c
IBtbMTszMG3fstwbWzBtG1s2QxtbMzVtIBtbMzdtG1s1QxtbMzVtIBtbMzdtICAgDQobW0EbWzY5
QyCyG1sxOzQ3bbKyG1swbQ0KICAgIBtbMzBt3BtbMTszNzs0N22ysRtbMzA7NDBtstwbWzBtIBtb
MTszMG3cG1szNzs0N22ysrGysLGyG1swbbINChtbQRtbMTlDG1sxOzMwbbGyG1swbRtbNUPfG1sx
MUMbWzE7MzBt3Nyy39zc39ywsBtbMG3fG1sxOzMwbbAbWzBtICANChtbQRtbNTJDG1sxOzMwbbIb
WzBtINwgG1sxOzMwbd+y3NwbWzBtG1s2QxtbMTszMG3c3NwbWzBtILIbWzE7NDdtsrEbWzBtDQog
ICAgG1szMG3b2xtbMTszNzs0N22ysRtbMzA7NDBt3LDfG1szNzs0N22ysrKysLGysRtbMzA7NDBt
sLGyG1swbRtbMTFDDQobW0EbWzMzQxtbMTszMG3c3Nyy398bWzBtIBtbMTszMG3cG1swbbIbWzE7
NDdtsBtbMG0gG1sxOzMwbdwbWzM3OzQ3bbIbWzQwbQ0KG1tBG1s0NkMbWzMwbbDcsBtbMG0gG1sx
OzMwbbAbWzBtIBtbMTszMG3cG1swbSCy3BtbMTszMG3c3NwbWzBtsA0KG1tBG1s2MEMbWzE7MzBt
39/f37KysrKyG1swbbCyG1sxOzQ3bbKxG1swbQ0KG1s1QxtbMzBt29sbWzE7Mzc7NDdtsrEbWzMw
OzQwbbKwshtbMzc7NDdtsrKxsrCxsrEbWzMwOzQwbbCxG1swbbANChtbQRtbMjNDG1sxOzMwbbGy
stvb29vbst/fstzcG1swbbGyG1sxOzQ3bbCwsRtbMzA7NDBt3xtbMG0gG1sxOzQ3bbIbWzQwbQ0K
G1tBG1s0NUMbWzBtIBtbMTszMG2wG1swbd8gG1sxOzMwbbCwsBtbMG3fG1sxOzQ3bbIbWzBtILAb
WzE7MzBtsrKysrKy3A0KG1tBG1s2M0Pc3Nzf3xtbMG2wsLIbWzE7NDdtsrIbWzBtDQobWzdD29wb
WzE7MzBtsrGwshtbMzc7NDdtsrKxsbCxshtbMG2yG1sxOzMwbbCyG1swbbEbWzE7MzBtsbKyst/f
G1swbSANChtbQRtbMzFDG1sxOzMwbdzcG1swbbGyshtbMTs0N22wsLGysrIbWzBtINvfG1sxOzMw
bbCxsBtbMG0gIBtbMTszMG2wsLANChtbQRtbNTNDG1swbdsbWzE7NDdtshtbMG0gG1sxOzMwbd8b
WzBtsBtbMTszMG2ysrKysrKysrKy3BtbMG2wshtbMTs0N20bWzQwbQ0KG1tBG1s3MUMbWzQ3bbCy
G1swbQ0KG1s3QxtbMTs0N22yG1swbdvfG1sxOzMwbbGxsBtbMzc7NDdtshtbMzA7NDBt3xtbNDdt
3BtbMzdtsrCxsbIbWzBtsrGwsQ0KG1tBG1syNUMbWzE7MzBt3NwbWzBt3BtbMTszMDs0N23fG1sw
bbKyG1sxOzQ3bbCwsLGxsrKyG1s0MG2yshtbMzA7NDdt3BtbNDBtDQobW0EbWzQyQxtbMG3cG1sx
OzQ3bbIbWzMwOzQwbbCxG1swbSAbWzE7MzBtsLAbWzM3OzQ3bbAbWzBtIBtbMTszMG2wsLANChtb
QRtbNTRDG1swbd8gG1sxOzMwbd/csN/fG1swbbAbWzE7MzBtsrKysrKyG1swbbCxshtbMTs0N22y
sBtbMG0NChtbMTszMG3c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NwNChtbQRtbNjND3Nzc3Nzc3Nzc3Nzc3Nzc3BtbMG0NCkBGT1JN
QVQ6fERUfDA3VGhpcyBUMTAxIGlzIG5vdCBhbiBvcmRpbmFyeSBvbmUuIFJlYmVscyBmcm9tIHRo
ZSBPbGQgV2FycywgaGFkIHJlcHJvZ3JhbW1lZCBpdCwgdG8gc2VydmUgaHVtYW5zLiBBcyB5b3Ug
YXJlIG5vdCB3aWxsaW5nIHRvIGZpZ2h0IGl0IGFuZCBpdCBoYXNuJ3QgYW55IHB1cnBvc2UsIG5v
IG1vcmUsIGl0IGRlY2lkZXMgdG8gZGVhY3RpdmF0ZSBvbmNlIGFnYWluLCBhbW9uZyB0aGUgcnVp
bnMuDQpARk9STUFUOnxEVHwwN0FzIGFuIGFwcHJlY2lhdGlvbiBvZiB5b3VyIGNob2ljZSwgdGhl
IFQxMDEgZ2l2ZXMgeW91IGEgfEgxJFZSQU5ET01JVEVNIHwwN2FuZCBkZWFjdGl2YXRlcy4NCkBH
T1RPOkVYSVQNCg0KOkFUVEFDSw0KG1sySg0KICAgIBtbMTs0N22wG1szMDs0MG2ysbCwsLCwsrAb
WzBtIBtbMTs0N22ysbAbWzBt2xtbMTszMG2y3LGyG1swbbGxsrINChtbQRtbMjdDG1sxOzMwbd/f
39/f39/f39/fG1swbSAbWzE7MzBt3BtbMG0gG1sxOzMwbdvc3BtbMG0gG1sxOzMwbd/fDQobW0Eb
WzQ3QxtbMG0gG1sxOzMwbd8bWzBt2xtbMTszMG2ysN/fG1swbSAbWzE7MzBt29/fG1swbSAgICAg
ICAgICAgDQobW0EbWzY5QxtbMTszMG3fG1szNzs0N22yG1swbQ0KICAgIBtbMTs0N22wG1szMDs0
MG2ysbCwsLCwsrAbWzM3OzQ3bbKxG1s0MG3bG1swbdsbWzE7MzBtsrCy398bWzBtICAgIA0KG1tB
G1syN0MgICAgICAgICAgICAbWzE7MzBt37LcG1swbSAbWzE7MzBt39/fG1swbSAgG1sxOzMwbd8b
WzBtICAgIA0KG1tBG1s1M0MbWzE7MzBt3NsbWzBtICAgIBtbMzFtsNzc3BtbMzdtICAbWzE7MzBt
sBtbMG0gICAgG1sxOzQ3bbIbWzBtDQogICAgG1sxOzQ3bbIbWzMwOzQwbbKxsLCwsLGysBtbMzc7
NDdtst+wG1swbdsbWzE7MzBtsbIbWzBtICAgICAgDQobW0EbWzI2QxtbMTszMG3cG1swbSAgICAb
WzMxbdzc3BtbMzdtICAgG1sxOzMwbbAbWzBtICAgG1sxOzMwbd+yG1swbSANChtbQRtbNDRDG1sx
OzQ3bbAbWzBt3BtbMTszMG2xsrCfUiHfG1swbSAgICAgG1szMW3cG1sxOzQxbdwbWzQwbdvb2w0K
G1tBG1s2M0MbWzQxbdwbWzA7MzFt3LAbWzM3bSAgICAbWzE7NDdtsrAbWzBtDQogICAgG1sxOzQ3
bbEbWzBtIBtbMTszMG2ysbCwsNuwG1s0N22yG1swbSAbWzE7MzBt3xtbMzc7NDdtsBtbMG3bDQob
W0EbWzE4QxtbMTszMG2xshtbMG0gICAgICAgG1szMW3fsNwbWzE7NDFt3BtbNDBt29vbG1s0MW3c
G1swOzMxbdywDQobW0EbWzM3QxtbMzdtICAgICAbWzE7MzBt39uxsLAbWzM3OzQ3bbAbWzMwOzQw
bbHcG1swbSAbWzE7MzBt3BtbMG0gICAgDQobW0EbWzU2QyAbWzMxbbDbG1sxbdvb29vbG1swOzMx
bdsbWzM3bSAgICAgG1sxOzQ3bd+yG1swbQ0KICAgIBtbMTs0N22wG1swbdsgG1sxOzMwbbKxsLCw
G1swbdwbWzE7NDdtshtbMG3cIBtbMTs0N22wsBtbMzA7NDBtsLINChtbQRtbMjBDG1swbSAgICAg
ICAgIBtbMzFtshtbMW3b29vb2xtbMDszMW2yG1sxOzMwbbAbWzBtICAgICAgG1sxOzMwbbINChtb
QRtbNDRDsbAbWzM3OzQ3bbAbWzMwOzQwbbLfstsbWzBtICAgICAgICAbWzMwOzQxbdwbWzE7MzFt
39/fG1swOzMxbd8NChtbQRtbNjRDG1sxOzMwbbAbWzA7MzFtsBtbMzdtICAgILIbWzE7NDdtshtb
MG0NCiAgICAbWzE7NDdtshtbMzBt3BtbMG3bG1sxOzMwbdywG1swbSAgIBtbMTs0N22ysrCxsrAb
WzMwOzQwbbCysRtbMG0gICANChtbQRtbMjRDICAbWzE7MzBt3BtbMG3cIBtbMzFtsBtbMzA7NDFt
3BtbMTszMW3f398bWzA7MzFt3xtbMTszMG2wG1swbSANChtbQRtbMzdDG1sxOzMwbbAbWzBtICAg
IBtbMTszMG3csrCxsBtbMzc7NDdtsBtbMG3cIBtbMTszMG3fstwbWzBtICAgICANChtbQRtbNThD
IBtbMzFtsBtbMzdtICAgICAbWzE7MzBtsBtbMG0gICAgshtbMTs0N22yshtbMG0NCiAgICAbWzMw
bdwbWzE7Mzc7NDdtsrEbWzMwOzQwbbLcG1swbSAbWzE7MzBt3BtbMzc7NDdtsrKxsrCxshtbMG2y
DQobW0EbWzE5QxtbMTszMG2xshtbMG0gICAgIN8gICAgICAgICAgIBtbMTszMG3c3LLf3Nzf3LCw
G1swbd8bWzE7MzBtsA0KG1tBG1s1MEMbWzBtICAbWzE7MzBtshtbMG0g3CAbWzE7MzBt37Lc3Btb
MG0gICAgICAbWzE7MzBt3NzcG1swbSCyDQobW0EbWzcxQxtbMTs0N22ysRtbMG0NCiAgICAbWzMw
bdvbG1sxOzM3OzQ3bbKxG1szMDs0MG3csN8bWzM3OzQ3bbKysrKwsbKxG1szMDs0MG2wsbIbWzBt
ICAgICANChtbQRtbMjdDICAgICAgG1sxOzMwbdzc3LLf3xtbMG0gG1sxOzMwbdwbWzBtshtbMTs0
N22wG1swbSAbWzE7MzBt3A0KG1tBG1s0NUMbWzM3OzQ3bbIbWzMwOzQwbbDcsBtbMG0gG1sxOzMw
bbAbWzBtIBtbMTszMG3cG1swbSCy3BtbMTszMG3c3A0KG1tBG1s1OEPcG1swbbAbWzE7MzBt39/f
37KysrKyG1swbbCyG1sxOzQ3bbKxG1swbQ0KICAgICAbWzMwbdvbG1sxOzM3OzQ3bbKxG1szMDs0
MG2ysLIbWzM3OzQ3bbKysbKwsbKxG1szMDs0MG2wsRtbMG2wDQobW0EbWzIzQxtbMTszMG2xsrLb
29vb27Lf37Lc3BtbMG2xshtbMTs0N22wsLEbWzMwOzQwbd8bWzBtIBtbMTs0N22yG1s0MG0NChtb
QRtbNDVDG1swbSAbWzE7MzBtsBtbMG3fIBtbMTszMG2wsLAbWzBt3xtbMTs0N22yG1swbSCwG1sx
OzMwbbKysrKystwNChtbQRtbNjND3Nzc398bWzBtsLCyG1sxOzQ3bbKyG1swbQ0KICAgICAgINvc
G1sxOzMwbbKxsLIbWzM3OzQ3bbKysbGwsbIbWzBtshtbMTszMG2wshtbMG2xG1sxOzMwbbGysrLf
3w0KG1tBG1szMEMbWzBtIBtbMTszMG3c3BtbMG2xsrIbWzE7NDdtsLCxsrKyG1swbSDb3xtbMTsz
MG2wsbAbWzBtICANChtbQRtbNTBDG1sxOzMwbbCwsBtbMG3bG1sxOzQ3bbIbWzBtIBtbMTszMG3f
G1swbbAbWzE7MzBtsrKysrKysrKystwNChtbQRtbNjlDG1swbbCyG1sxOzQ3bbCyG1swbQ0KICAg
ICAgIBtbMTs0N22yG1swbdvfG1sxOzMwbbGxsBtbMzc7NDdtshtbMzA7NDBt3xtbNDdt3BtbMzdt
srCxsbIbWzBtsg0KG1tBG1syMkOxsLEbWzE7MzBt3NwbWzBt3BtbMTszMDs0N23fG1swbbKyG1sx
OzQ3bbCwsLGxsrKyG1s0MG2ysg0KG1tBG1s0MUMbWzMwOzQ3bdwbWzBt3BtbMTs0N22yG1szMDs0
MG2wsRtbMG0gG1sxOzMwbbCwG1szNzs0N22wG1swbSANChtbQRtbNTFDG1sxOzMwbbCwsBtbMG3f
IBtbMTszMG3f3LDf3xtbMG2wG1sxOzMwbbKysrKyshtbMG2wsbIbWzE7NDdtsrAbWzBtDQobWzE7
MzBt3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3NzcDQobW0EbWzYzQ9zc3Nzc3Nzc3Nzc3Nzc3NwbWzBtDQpARU5FTVk6MzANCkBJRlJB
TjpXVVNTDQobWzJKG1swbQ0KG1sxbSAgICAbWzQ3bbAbWzMwOzQwbbKxsLCwsLCysBtbMG0gG1sx
OzQ3bbKxsBtbMG3bG1sxOzMwbbLcsbIbWzBtsbGysg0KG1tBG1syN0MbWzE7MzBt39/f39/f39/f
398bWzBtIBtbMTszMG3cG1swbSAbWzE7MzBt29zcG1swbSAbWzE7MzBt398NChtbQRtbNDdDG1sw
bSAbWzE7MzBt3xtbMG3bG1sxOzMwbbKw398bWzBtIBtbMTszMG3b398bWzBtG1sxMUMbWzE7MzBt
3w0KG1tBG1s3MEMbWzM3OzQ3bbIbWzBtDQogICAgG1sxOzQ3bbAbWzMwOzQwbbKxsLCwsLCysBtb
Mzc7NDdtsrEbWzQwbdsbWzBt2xtbMTszMG2ysLLf3xtbMG0bWzE2Qw0KG1tBG1szOUMbWzE7MzBt
37LcG1swbSAbWzE7MzBt39/fG1swbSAgG1sxOzMwbd8bWzBtICAgIBtbMTszMG3c2xtbMG0gIA0K
G1tBG1s1N0MgIBtbMzVtIBtbMzFtICAgG1szN20gIBtbMzVtIBtbMzdtICAgIBtbMTs0N22yG1sw
bQ0KICAgIBtbMTs0N22yG1szMDs0MG2ysbCwsLCxsrAbWzM3OzQ3bbLfsBtbMG3bG1sxOzMwbbGy
G1swbRtbNkMbWzM1bSANChtbQRtbMjdDG1szN20gICAgG1sxOzMwbSAgICAbWzBtICAbWzM1bSAb
WzM3bSAgIBtbMTszMG3fshtbMG0gG1sxOzQ3bbAbWzQwbQ0KG1tBG1s0NUMbWzBt3BtbMTszMG2x
srCfUiHfG1swbRtbNUMbWzMxbSAgG1sxOzMwbdzc3BtbMDszMW0gIBtbMzVtIA0KG1tBG1s2NkMb
WzM3bSAgICAbWzE7NDdtsrAbWzBtDQogICAgG1sxOzQ3bbEbWzBtIBtbMTszMG2ysbCwsNuwG1s0
N22yG1swbSAbWzE7MzBt3xtbMzc7NDdtsBtbMG3bDQobW0EbWzE4QxtbMTszMG2xshtbMG0bWzdD
G1szNW0gIBtbMTszMG0gINzc3CAgG1swOzM1bSAbWzM3bRtbNUMbWzE7MzBtDQobW0EbWzQyQ9/b
sbCwG1szNzs0N22wG1szMDs0MG2x3BtbMG0gG1sxOzMwbdwbWzBtG1s1QxtbMzVtIBtbMzFtIA0K
G1tBG1s1OUMbWzE7MzBt29sbWzQxbSAbWzQwbdvbG1swOzMxbSAbWzM3bRtbNUMbWzE7NDdt37Ib
WzBtDQogICAgG1sxOzQ3bbAbWzBt2yAbWzE7MzBtsrGwsLAbWzBt3BtbMTs0N22yG1swbdwgG1sx
OzQ3bbCwG1szMDs0MG2wshtbMG0bWzlDDQobW0EbWzI5QxtbMTszMG0g29sbWzQxbSAbWzQwbdvb
IBtbMDszNW0gG1szN20bWzZDG1sxOzMwbbKxsBtbMzc7NDdtsBtbNDBtDQobW0EbWzQ3QxtbMzBt
st+y2xtbMG0bWzhDG1szMW0gG1sxOzMwbd/f3xtbMDszMW0gG1szNW0gIBtbMzdtICAgILINChtb
QRtbNzFDG1sxOzQ3bbIbWzBtDQogICAgG1sxOzQ3bbIbWzMwbdwbWzBt2xtbMTszMG3csBtbMG0g
ICAbWzE7NDdtsrKwsbKwG1szMDs0MG2wsrEbWzBtG1s1Qw0KG1tBG1syNkMbWzE7MzBt3BtbMG3c
IBtbMzVtIBtbMTszMG0g39/fIBtbMDszNW0gICAbWzM3bSAgICAbWzE7MzBt3LKwsQ0KG1tBG1s0
NkOwG1szNzs0N22wG1swbdwgG1sxOzMwbd+y3BtbMG0bWzZDG1szNW0gG1szN20bWzVDG1szNW0g
G1szN20gICANChtbQRtbNjlDILIbWzE7NDdtsrIbWzBtDQogICAgG1szMG3cG1sxOzM3OzQ3bbKx
G1szMDs0MG2y3BtbMG0gG1sxOzMwbdwbWzM3OzQ3bbKysbKwsbIbWzBtsg0KG1tBG1sxOUMbWzE7
MzBtsbIbWzBtG1s1Q98bWzExQxtbMTszMG3c3LLf3Nzf3LCwG1swbd8bWzE7MzBtsBtbMG0gIA0K
G1tBG1s1MkMbWzE7MzBtshtbMG0g3CAbWzE7MzBt37Lc3BtbMG0bWzZDG1sxOzMwbdzc3BtbMG0g
shtbMTs0N22ysRtbMG0NCiAgICAbWzMwbdvbG1sxOzM3OzQ3bbKxG1szMDs0MG3csN8bWzM3OzQ3
bbKysrKwsbKxG1szMDs0MG2wsbIbWzBtG1sxMUMNChtbQRtbMzNDG1sxOzMwbdzc3LLf3xtbMG0g
G1sxOzMwbdwbWzBtshtbMTs0N22wG1swbSAbWzE7MzBt3BtbMzc7NDdtshtbNDBtDQobW0EbWzQ2
QxtbMzBtsNywG1swbSAbWzE7MzBtsBtbMG0gG1sxOzMwbdwbWzBtILLcG1sxOzMwbdzc3BtbMG2w
DQobW0EbWzYwQxtbMTszMG3f39/fsrKysrIbWzBtsLIbWzE7NDdtsrEbWzBtDQobWzVDG1szMG3b
2xtbMTszNzs0N22ysRtbMzA7NDBtsrCyG1szNzs0N22ysrGysLGysRtbMzA7NDBtsLEbWzBtsA0K
G1tBG1syM0MbWzE7MzBtsbKy29vb29uy39+y3NwbWzBtsbIbWzE7NDdtsLCxG1szMDs0MG3fG1sw
bSAbWzE7NDdtshtbNDBtDQobW0EbWzQ1QxtbMG0gG1sxOzMwbbAbWzBt3yAbWzE7MzBtsLCwG1sw
bd8bWzE7NDdtshtbMG0gsBtbMTszMG2ysrKysrLcDQobW0EbWzYzQ9zc3N/fG1swbbCwshtbMTs0
N22yshtbMG0NChtbN0Pb3BtbMTszMG2ysbCyG1szNzs0N22ysrGxsLGyG1swbbIbWzE7MzBtsLIb
WzBtsRtbMTszMG2xsrKy398bWzBtIA0KG1tBG1szMUMbWzE7MzBt3NwbWzBtsbKyG1sxOzQ3bbCw
sbKyshtbMG0g298bWzE7MzBtsLGwG1swbSAgG1sxOzMwbbCwsA0KG1tBG1s1M0MbWzBt2xtbMTs0
N22yG1swbSAbWzE7MzBt3xtbMG2wG1sxOzMwbbKysrKysrKysrLcG1swbbCyG1sxOzQ3bRtbNDBt
DQobW0EbWzcxQxtbNDdtsLIbWzBtDQobWzdDG1sxOzQ3bbIbWzBt298bWzE7MzBtsbGwG1szNzs0
N22yG1szMDs0MG3fG1s0N23cG1szN22ysLGxshtbMG2ysbCxDQobW0EbWzI1QxtbMTszMG3c3Btb
MG3cG1sxOzMwOzQ3bd8bWzBtsrIbWzE7NDdtsLCwsbGysrIbWzQwbbKyG1szMDs0N23cG1s0MG0N
ChtbQRtbNDJDG1swbdwbWzE7NDdtshtbMzA7NDBtsLEbWzBtIBtbMTszMG2wsBtbMzc7NDdtsBtb
MG0gG1sxOzMwbbCwsA0KG1tBG1s1NEMbWzBt3yAbWzE7MzBt39yw398bWzBtsBtbMTszMG2ysrKy
srIbWzBtsLGyG1sxOzQ3bbKwG1swbQ0KG1sxOzMwbdzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc
3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3A0KG1tBG1s2M0Pc3Nzc3Nzc3Nzc
3Nzc3NzcG1swbQ0KQEZPUk1BVDp8RFRZb3UgY2FuIHNlZSB0aGUgbGlnaHRzIGZyb20gaXRzIGV5
ZXMgdHVybmluZyBvZmYsIHdoaWxlIHBvd2VyaW5nIGRvd24uLi4geW91IHByb21pc2UgeW91cnNl
bGYsIG5vdCB0byByZWFjdGl2YXRlIGFueSBkcm9pZCBhZ2FpbiEhIQ0KDQpAR09UTzpFWElUDQoN
CjpXVVNTDQpARk9STUFUOnxEVFRoZSB8MDRUMTAxIHwwN2lzIHZlcnkgcGlzc2VkIG9mZiEgWW91
IGFyZSBub3QgZ29pbmcgdG8gZXNjYXBlIGZyb20gaXQuDQpARk9STUFUOnxEVC4uLmFmdGVyIGFs
bCwgaXQgd2FzIG1hZGUgYXMgYSBraWxsaW5nIG1hY2hpbmUhDQpAUEFVU0UNCkBHT1RPOkFUVEFD
Sw0KDQpAR09UTzpFWElUDQoNCjpFWElUDQpATkwNCi4uLiB8MDhYUVRSLy8yMDIwIC0gTlVMTCB4
MDBCIC8vIGFuZHIwMWQuemFwdG8ub3JnOjk5OTkNCg
xt12
DEMO SOURCE CODE
perhaps i should include this one, in the links area, but because it is so
awesome, i had to make a separate article about it. if you follow the link
below, you will find a wealth of information, on how, one of the greatest
demos came alive.
https://fabiensanglard.net/secondreality/index.php
you will find all the code and detail explanation, on how this demo has been
built. its a great resource about brilliant programming! so even if you are
not into assembly, reading it will open your mind in other areas.
here you can see the end result.
https://youtu.be/KTjntWSJu8
xt13
lets see how we can use bash to display ansi graphics. the biggest problem,
is that now days, all terminals use utf8 encoding, but almost all ansis come
in cp437 encoding.
check extended chars. support
to check if our terminal can display properly utf8 or cp437 ansi extended
characters lets make some tests. execute the following script:
for i in 32..255do i160echoprintf printf o i done
if you can see the extended block chars. then you are using a cp437
compatible font, if you dont use the above commands like this:
for i in 32..255do i160echoprintf printf o i done
iconv -f cp437 -t utf8
the additional iconv -f cp437 -t utf8 will display the chars. in utf8.
do you see the blocks now? if you dont you have to use another font.
resize terminal
if you want to resize the terminal, you can use this ansi escape code, in
bash like this:
echo -ne 03385080t
this command will resize the terminal in a 80x50 mode. you can bring it back
to 80x25 by this:
echo -ne 03382580t
display 16colo.rs ansi images
use CURL to display ansi graphics, from the internet and specially from
16colo.rs. the command is very straightforward:
curl -L https://16colo.rs/pack/laz11/raw/US-DIS2.ans iconv -f cp437 -t utf-8
ansi in LESS?
you can also use LESS to display ansi graphics and scroll them down, like
this:
iconv -f cp437 -t utf8 rad-LOVE.ANS less -r
its not the best way to show ansi graphics, but it works. :
ansi-mation
to view full blown ansi animation with bash, use the following script:
!/bin/bash
ANIMATIONhttps://16colo.rs/pack/acdu1092/raw/BRTRACD2.ANS
SPEED.005 wait this time each line
1. Disable cursor
printf e?25l
2. Download, convert, display slow play animation
curl --silent ANIMATION
iconv -f cp437 -t utf-8
awk systemsleep SPEEDprint
3. Enable cursor settings
printf e?12le?25h
the above commands are from this webpage. its a great read, so dont miss
it.
http://bruxy.regnet.cz/web/linux/EN/linux-demoscene
xt14
although actual transparency in ansi graphics is not possible, we can use a
couple of tricks to imitate that. the concept is this. first of all we use
the 8 colors that we can use as background colors, we could use the light
colors, but in this case, you cant use text on them, so choose wisely.
so, if we have a blue area that has an intersection with a red area and we
want to add transparency, in the intersection area we use purple to color
the area, cause red + blue mixes to purple. if we had a blue/yellow area, we
should use green and so on.
another way, is to use the dithered block chars and in the intersection
area, use the first color as froground and the second one, as background. in
this case, we dont use the mixed color, but the dither of the characters,
will create the effect, that those two areas collide and there is some
transparency. in case you dont use colors then a mix of the chars will
give the result as in the pictures above
xt15
this is a small MPY script, for mystic bbs. its a small example on how to
use some character animations or as they called spiners. you may know the
most used one, which looks like -/ and i think thats the one, it got
its name.
so below, are some other spinners, that you can use in your script/mods.
some use simple chars. other use the extended ascii chars. but i think each
one is unique.
of course you can get the character sequences and apply them to other,
scripting languages for other bbs software.
from mysticbbs import *
from time import sleep
delay 0.4
seq chr250+chr249+chr205+chr240+chr205+chr249+chr250,
-+chr196+chr205+chr240+chr205+chr196+-,
chr197+chr206+chr197,
dbpqq,
0123456789876543210,
chr221+chr219+chr222+chr219+chr221,
chr176+chr177+chr178+chr219+chr178+chr177+chr176,
.:+chr179+:.,
chr250+chr249+chr254+chr219+chr254+chr249+chr250,
chr220+chr221+chr223+chr222+chr220,
chr191+chr217+chr192+chr218+chr191,
chr250+chr249+chr43+chr197+chr206+chr197+chr43+chr249+chr250,
chr45+chr61+chr240+chr61+chr45,
.oO080Oo.
def animx,y,chars:
i 0
d True
while not keypressed and not shutdown:
gotoxyx,y
writecharsi
gotoxy1,25
sleepdelay
i + 1
if i lenchars-1:
i 0
write0716CL
for d in rangelenseq:
anim10,10,seqd
writePB
xt16
mystic modding
lets see how we can show a progress bar, while mystic is scanning, for
example, new messages. the same technique, can be used also in other areas
of mystic, but for this example we will use the Msg.Base QuickScan MQ.
first edit your prompts.ini .dat, .txt whatever you have. find prompt 487.
it should look like: 487 03Scanning 111 03112 03of 1130308...
duplicate the line, to create a backup and add a semicolon in front of
the one. you should have this:
487 03Scanning 111 03112 03of 1130308...
487 03Scanning 111 03112 03of 1130308...
erase the second line we added and make it look like this:
487 qsbar 1 2 3
where qsbar is the name of the script we will create after. make sure you
have put the /hash in front of the name. this will tell mystic to execute
the qsbar.mpy script, that we will create.
save the prompts file and close it. now create an empty file, name it like,
qsbar.mpy and copy/paste the following:
from mysticbbs import *
tb 1
tc 1
ts
w 70
x position, y position, attr off, attr on, char off, char on
bx, by, baoff, baon, bcoff, bcon 5, 10, 8+7*16, 1+7*16,chr176, chr178
x position, y position, attr, showTrue/False
px, py, pa, showpercent 39, 11, 11+7*16, True
def writexyx,y,a,s:
gotoxyx,y
textcolora
writes
tbs
tcs
try:
ts mci2str1
tcs mci2str2
tbs mci2str3
tc inttcs
tb inttbs
except ValueError as ex:
print s cannot be converted to an int: s tcs, ex
tb 1
tc 1
writexybx,by,baoff,bcoff*w
percentdraw tc * w / tb
writexybx,by,baon,bcon*percentdraw
writexybx+w / 2-lents / 2,by-1,baoff,ts
if showpercent:
percent tc*100 / tb
writexypx,py,pa,strpercent
lets do some explaining...
these are default variables for positions and coloring text. ignore tb,tc,ts
for now.
tb 1
tc 1
ts
this is the width of the progress bar
w 70
these are the values for the progress bar, position, color, characters etc.
x position, y position, attr off, attr on, char off, char on
bx, by, baoff, baon, bcoff, bcon 5, 10, 8+7*16, 1+7*16,chr176, chr178
these are the values for showing a percentage string
x position, y position, attr, showTrue/False
px, py, pa, showpercent 39, 11, 11+7*16, True
because mystics MPY, doesnt have a writexy function, we write our own. its
easier to display text with that.
def writexyx,y,a,s:
gotoxyx,y
textcolora
writes
now, we must get our values. in the Msg.QuickScan, 1 is the base name, that
mystic is scanning, 2 is the incremental number of that base and 3 is the
total number of msg.bases.
so we get these values and convert them to text. i use a try/except block,
which may be an overkill for this occasion, but its a good practice when
converting strings to numbers.
notice that if 3 total bases is 0/zero, we will get a division by zero,
error, after. i dont imagine, that you dont have any message bases... do
you?
try:
ts mci2str1
tcs mci2str2
tbs mci2str3
tc inttcs
tb inttbs
except ValueError as ex:
print s cannot be converted to an int: s tcs, ex
tb 1
tc 1
now we have to draw the progress bar. first we draw the background of the
progress bar: writexybx,by,baoff,bcoff*w
to convert the values we got into number of characters we have to draw, we
use this formula: chars2draw currentbase * width divide by totalbases
percentdraw tc * w / tb
...and we draw the foreground of the progress bar, with character bcon
writexybx,by,baon,bcon*percentdraw
just for effect, we also display the name of the message base being scanned,
above the progress bar and centered in the screen.
writexybx+w / 2-lents / 2,by-1,baoff,ts
to center a string in the screen we use the formula:
screenwidth / 2 - lengthofstring / 2
if we set the showpercent variable to True, we are displaying the percentage.
the formula is: currentbase * 100 divide by totalbases
if showpercent:
percent tc*100 / tb
writexypx,py,pa,strpercent
but we are not finished yet. if you make a quick scan, right now, you will
see the progress bar on top, of your current screen and perhaps a footer,
with the results of the scanning. lets fix that.
open mystic configuration and edit the message menu. select the quick scan
menu command and press tab, to go to the Action List area. insert a new
action before the quick scan and make it look like this:
Action List Access Data
GT Display line of text X1Scanning...377713
MQ Message quick scan /NOFOOTER /LIST
this way, it will display a window/box, which will clear the area below it
and the progress bar, will be displayed on top. you could also use other
commands/mci codes, to display perhaps an ansi file?
for more intel on how to use the quickscan system, make sure to examine the
pscanlog menu, which has an extensive use of the quick scan commands. this
way, you could use an ansi image before the scan and one after the scan,
depending the result, to have a cool effect!
xt17
using ALSA to make a beep sound in linux
one of the most enjoyable commands/function in Turbo Pascal, back in the
old DOS days, was beep. even just hearing a simple beep tone from the
speaker ofyour pc, was something great back then. but as the years past,
turbo pascal has almost been forgotten, the pc speaker is not used, almost,
at all and the magic has gone : but no more!
below are two snippets of code, in C and Free/Pascal, that will make your
thing go beep... i mean your soundcard, with ALSA, in Linux, will play a
small tone.
so, all of you, that make bbs software, now you dont have excuse not to
implement a beep sound/command... :p
C CODE
adapted from:
https://www.linuxjournal.com/article/6735
see Listing 3
This example writes an approximated sine wave of
440Hz to the default PCM device for approx 200ms.
// Use the newer ALSA API
define ALSAPCMNEWHWPARAMSAPI
include alsa/asoundlib.h
int main
long loops
int rc
int size
sndpcmt *handle
sndpcmhwparamst *params
unsigned int val
int dir
sndpcmuframest frames
char *buffer
// Open PCM device for playback
rc sndpcmopenhandle, default, SNDPCMSTREAMPLAYBACK, 0
if rc 0
fprintfstderr, unable to open pcm device: sn, sndstrerrorrc
exit1
// Allocate a hardware parameters object
sndpcmhwparamsallocaparams
// Fill it in with default values
sndpcmhwparamsanyhandle, params
// Set the desired hardware parameters
// Interleaved mode
sndpcmhwparamssetaccesshandle, params,
SNDPCMACCESSRWINTERLEAVED
// Signed 16-bit little-endian format
sndpcmhwparamssetformathandle, params, SNDPCMFORMATS16LE
// Two channels stereo
sndpcmhwparamssetchannelshandle, params, 2
// 44100 bits/second sampling rate CD quality
val 44100
sndpcmhwparamssetratenearhandle, params, val, dir
// Set period size to 256 frames original 32 frames caused scratches
frames 256
sndpcmhwparamssetperiodsizenearhandle, params, frames, dir
// Write the parameters to the driver
rc sndpcmhwparamshandle, params
if rc 0
fprintfstderr, unable to set hw parameters: sn, sndstrerrorrc
exit1
// Use a buffer large enough to hold one period
sndpcmhwparamsgetperiodsizeparams, frames, dir
size frames * 4
buffer char * mallocsize
// We want to loop for 200ms seconds
sndpcmhwparamsgetperiodtimeparams, val, dir
// 0.2 seconds in microseconds divided by period time
loops 200000 / val
//printfloops ldn, loops
int I, J0, K0, level, phase0
while loops 0
loops--
forI0Isize
switch phase
case 0: level 0 break
case 1: level 30 break
case 2: level 60 break
case 3: level 60 break
case 4: level 30 break
case 5: level -0 break
case 6: level-30 break
case 7: level-60 break
case 8: level-60 break
case 9: level-30
J++
if J10 phasephase+1 10 J0
// printfphase is dn, phase
if K200 levellevel*K / 200
if loops16 K++ else if K0 K--
// printfK dn, K
bufferI++0
bufferI++level
bufferI++0
bufferI++level
rc sndpcmwriteihandle, buffer, frames
if rc -EPIPE
fprintfstderr, underrun occurredn
sndpcmpreparehandle
else if rc 0
fprintfstderr, error from writei: sn, sndstrerrorrc
else if rc ! intframes
fprintfstderr, short write, write d framesn, rc
//printfresidual K dn, K
sndpcmdrainhandle
sndpcmclosehandle
freebuffer
return 0
compile the code with this command:
gcc beep.c -no-pie pkg-config --cflags --libs alsa
PASCAL CODE
program tone
M objfpc
uses alsa
function ALSAbeepfrequency, duration:integer:boolean
var buffer:array0..2400-1 of byte
// 1/20th of a second worth of samples @48000 bps
frames:sndpcmsframest
pcm:PPsndpcmt
I,LC:integer
SA:array0..359 of byte
SS,R:real
const devicedefault+0
begin
result:false
if duration50 then duration:50
if frequency20 then frequency:20
SS:sizeofSA/sizeofbuffer*frequency/20.0
for I:0 to 359 do SAI:128 + roundsinpi*I/180.0 * 100.0
// 100 is effectively the volume
R:0.0
if sndpcmopen@pcm, @device1, SNDPCMSTREAMPLAYBACK, 00 then
if sndpcmsetparamspcm, SNDPCMFORMATU8,
SNDPCMACCESSRWINTERLEAVED,
1,
48000, // bitrate bps
1,
200000 then // latency us
for LC:1 to duration div 50 do
begin
for I:0 to sizeofbuffer-1 do
begin
bufferI:SAtruncR
R:R+SS
if R360.0 then R:R-360.0
end
frames:sndpcmwriteipcm, @buffer, sizeofbuffer
if frames0 then frames:sndpcmrecoverpcm, frames, 0
if frames0 then break // writelnsndstrerrorframes
end
sndpcmclosepcm
result:true
end
begin
ALSAbeep400,40
end.
you can compile it like:
fpc -Mobjfpc tone.pas
...but you will also need a modified version of the FreePascal alsa.pas
unit, which is below. the code is wrapped, but it should compile anyway.
alsa.pas
Free Pascal port by Nikolay Nikolov nickysn@users.sourceforge.net
This version of the header has been created by Andreas Stoeckel and has been
adapted to the needs of the Audorra audio library. For a complete version of
the header for pascal have a look for the fpAlsa project on sourceforge.
http://sourceforge.net/projects/fpalsa/
This adaption has been done for the following reasons:
- Easier to update to new versions of ALSA, as not the whole header has to
be updated
- Easier to distribute with Audorra only a short, single file
* file include/asoundlib.h
* brief Application interface library for the ALSA driver
* author Jaroslav Kysela perex@perex.cz
* author Abramo Bagnara abramo@alsa-project.org
* author Takashi Iwai tiwai@suse.de
* date 1998-2001
* Application interface library for the ALSA driver
* This library is free software you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation either version 2.1 of
* the License, or at your option any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License for more details.
* You should have received a copy of the GNU Lesser General Public
* License along with this library if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
unit alsa
MODE objfpc
PACKRECORDS c
LINKLIB c
interface
uses
ctypes
const
libasound asound
type
PCM generic info container
PPsndpcminfot Psndpcminfot
Psndpcminfot Pointer
PCM hardware configuration space container
PPsndpcmhwparamst Psndpcmhwparamst
Psndpcmhwparamst Pointer
PCM software configuration container
PPsndpcmswparamst Psndpcmswparamst
Psndpcmswparamst Pointer
PCM status container
PPsndpcmstatust Psndpcmstatust
Psndpcmstatust Pointer
PCM access types mask
PPsndpcmaccessmaskt Psndpcmaccessmaskt
Psndpcmaccessmaskt Pointer
PCM formats mask
PPsndpcmformatmaskt Psndpcmformatmaskt
Psndpcmformatmaskt Pointer
PCM subformats mask
PPsndpcmsubformatmaskt Psndpcmsubformatmaskt
Psndpcmsubformatmaskt Pointer
PCM handle
PPsndpcmt Psndpcmt
Psndpcmt Pointer
CTL Handle
PPsndctlt Psndctlt
Psndctlt Pointer
CTL type
PPsndctltypet Psndctltypet
Psndctltypet sndctltypet
sndctltypet cint
PCM sample format
Psndpcmformatt sndpcmformatt
sndpcmformatt cint
PCM stream direction
Psndpcmstreamt sndpcmstreamt
sndpcmstreamt cint
PCM access type
Psndpcmaccesst sndpcmaccesst
sndpcmaccesst cint
Unsigned frames quantity
Psndpcmuframest sndpcmuframest
sndpcmuframest cuint
Signed frames quantity
Psndpcmsframest sndpcmsframest
sndpcmsframest cint
const
Unknown
SNDPCMFORMATUNKNOWN: sndpcmformatt -1
Signed 8 bit
SNDPCMFORMATS8: sndpcmformatt 0
Unsigned 8 bit
SNDPCMFORMATU8: sndpcmformatt 1
Signed 16 bit Little Endian
SNDPCMFORMATS16LE: sndpcmformatt 2
Signed 16 bit Big Endian
SNDPCMFORMATS16BE: sndpcmformatt 3
Unsigned 16 bit Little Endian
SNDPCMFORMATU16LE: sndpcmformatt 4
Unsigned 16 bit Big Endian
SNDPCMFORMATU16BE: sndpcmformatt 5
Signed 24 bit Little Endian using low three bytes in 32-bit word
SNDPCMFORMATS24LE: sndpcmformatt 6
Signed 24 bit Big Endian using low three bytes in 32-bit word
SNDPCMFORMATS24BE: sndpcmformatt 7
Unsigned 24 bit Little Endian using low three bytes in 32-bit word
SNDPCMFORMATU24LE: sndpcmformatt 8
Unsigned 24 bit Big Endian using low three bytes in 32-bit word
SNDPCMFORMATU24BE: sndpcmformatt 9
Signed 32 bit Little Endian
SNDPCMFORMATS32LE: sndpcmformatt 10
Signed 32 bit Big Endian
SNDPCMFORMATS32BE: sndpcmformatt 11
Unsigned 32 bit Little Endian
SNDPCMFORMATU32LE: sndpcmformatt 12
Unsigned 32 bit Big Endian
SNDPCMFORMATU32BE: sndpcmformatt 13
Float 32 bit Little Endian, Range -1.0 to 1.0
SNDPCMFORMATFLOATLE: sndpcmformatt 14
Float 32 bit Big Endian, Range -1.0 to 1.0
SNDPCMFORMATFLOATBE: sndpcmformatt 15
Float 64 bit Little Endian, Range -1.0 to 1.0
SNDPCMFORMATFLOAT64LE: sndpcmformatt 16
Float 64 bit Big Endian, Range -1.0 to 1.0
SNDPCMFORMATFLOAT64BE: sndpcmformatt 17
IEC-958 Little Endian
SNDPCMFORMATIEC958SUBFRAMELE: sndpcmformatt 18
IEC-958 Big Endian
SNDPCMFORMATIEC958SUBFRAMEBE: sndpcmformatt 19
Mu-Law
SNDPCMFORMATMULAW: sndpcmformatt 20
A-Law
SNDPCMFORMATALAW: sndpcmformatt 21
Ima-ADPCM
SNDPCMFORMATIMAADPCM: sndpcmformatt 22
MPEG
SNDPCMFORMATMPEG: sndpcmformatt 23
GSM
SNDPCMFORMATGSM: sndpcmformatt 24
Special
SNDPCMFORMATSPECIAL: sndpcmformatt 31
Signed 24bit Little Endian in 3bytes format
SNDPCMFORMATS243LE: sndpcmformatt 32
Signed 24bit Big Endian in 3bytes format
SNDPCMFORMATS243BE: sndpcmformatt 33
Unsigned 24bit Little Endian in 3bytes format
SNDPCMFORMATU243LE: sndpcmformatt 34
Unsigned 24bit Big Endian in 3bytes format
SNDPCMFORMATU243BE: sndpcmformatt 35
Signed 20bit Little Endian in 3bytes format
SNDPCMFORMATS203LE: sndpcmformatt 36
Signed 20bit Big Endian in 3bytes format
SNDPCMFORMATS203BE: sndpcmformatt 37
Unsigned 20bit Little Endian in 3bytes format
SNDPCMFORMATU203LE: sndpcmformatt 38
Unsigned 20bit Big Endian in 3bytes format
SNDPCMFORMATU203BE: sndpcmformatt 39
Signed 18bit Little Endian in 3bytes format
SNDPCMFORMATS183LE: sndpcmformatt 40
Signed 18bit Big Endian in 3bytes format
SNDPCMFORMATS183BE: sndpcmformatt 41
Unsigned 18bit Little Endian in 3bytes format
SNDPCMFORMATU183LE: sndpcmformatt 42
Unsigned 18bit Big Endian in 3bytes format
SNDPCMFORMATU183BE: sndpcmformatt 43
SNDPCMFORMATLAST: sndpcmformatt 43
Playback stream
SNDPCMSTREAMPLAYBACK: sndpcmstreamt 0
Capture stream
SNDPCMSTREAMCAPTURE: sndpcmstreamt 1
SNDPCMSTREAMLAST: sndpcmstreamt 1
mmap access with simple interleaved channels
SNDPCMACCESSMMAPINTERLEAVED: sndpcmaccesst 0
mmap access with simple non interleaved channels
SNDPCMACCESSMMAPNONINTERLEAVED: sndpcmaccesst 1
mmap access with complex placement
SNDPCMACCESSMMAPCOMPLEX: sndpcmaccesst 2
sndpcmreadi/sndpcmwritei access
SNDPCMACCESSRWINTERLEAVED: sndpcmaccesst 3
sndpcmreadn/sndpcmwriten access
SNDPCMACCESSRWNONINTERLEAVED: sndpcmaccesst 4
SNDPCMACCESSLAST: sndpcmaccesst 4
Kernel level CTL
SNDCTLTYPEHW: sndctltypet 0
Shared memory client CTL
SNDCTLTYPESHM: sndctltypet 1
INET client CTL not yet implemented
SNDCTLTYPEINET: sndctltypet 2
external control plugin
SNDCTLTYPEEXT: sndctltypet 3
Lower boundary of sound error codes.
SNDERRORBEGIN 500000
Kernel/library protocols are not compatible.
SNDERRORINCOMPATIBLEVERSION SNDERRORBEGIN + 0
Lisp encountered an error during acall.
SNDERRORALISPNIL SNDERRORBEGIN + 1
Functions neccessary to perform audio output
function sndpcmopenpcm: PPsndpcmt name: PChar
stream: sndpcmstreamt mode: cint: cint cdecl external libasound
function sndpcmclosepcm: Psndpcmt: cint cdecl external libasound
function sndpcmwriteipcm: Psndpcmt buffer: Pointer
size: sndpcmuframest: sndpcmsframest cdecl external libasound
function sndpcmrecoverpcm: Psndpcmt err, silent: cint: cint cdecl
external libasound // added in from fpAlsa
function sndpcmpreparepcm: Psndpcmt: cint cdecl external libasound
function sndpcmresumepcm: Psndpcmt: cint cdecl external libasound
function sndpcmstartpcm: Psndpcmt: cint cdecl external libasound
function sndpcmpausepcm: Psndpcmt enable: cint: cint cdecl
external libasound
function sndpcmdroppcm: Psndpcmt: cint cdecl external libasound
function sndpcmwaitpcm: Psndpcmt timeout: cint: cint cdecl
external libasound
function sndpcmsetparamspcm: Psndpcmt format: sndpcmformatt
access: sndpcmaccesst channels, rate: cuint softresample: cint
latency: cuint: cint cdecl external libasound
function sndpcmavailpcm: Psndpcmt: sndpcmsframest cdecl
external libasound
function sndpcmavailupdatepcm: Psndpcmt: sndpcmsframest cdecl
external libasound
function sndpcmavaildelaypcm: Psndpcmt availp: Psndpcmsframest
delayp: Psndpcmsframest: cint cdecl external libasound
ALSA sndpcminfo functions
function sndpcminfomallocptr: PPsndpcminfot: cint cdecl
external libasound
procedure sndpcminfofreeobj: Psndpcminfot cdecl
external libasound
procedure sndpcminfocopydst: Psndpcminfot src: Psndpcminfot cdecl
external libasound
function sndpcminfogetdeviceobj: Psndpcminfot: cuint cdecl
external libasound
function sndpcminfogetsubdeviceobj: Psndpcminfot: cuint cdecl
external libasound
function sndpcminfogetstreamobj: Psndpcminfot: sndpcmstreamt
cdecl external libasound
function sndpcminfogetcardobj: Psndpcminfot: cint cdecl
external libasound
function sndpcminfogetidobj: Psndpcminfot: PChar cdecl
external libasound
function sndpcminfogetnameobj: Psndpcminfot: PChar cdecl
external libasound
function sndpcminfogetsubdevicenameobj: Psndpcminfot: PChar cdecl
external libasound
//function sndpcminfogetclassobj: Psndpcminfot: sndpcmclasst cdecl
external libasound
//function sndpcminfogetsubclassobj: Psndpcminfot: sndpcmsubclasst
cdecl external libasound
function sndpcminfogetsubdevicescountobj: Psndpcminfot: cuint cdecl
external libasound
function sndpcminfogetsubdevicesavailobj: Psndpcminfot: cuint cdecl
external libasound
//function sndpcminfogetsyncobj: Psndpcminfot: sndpcmsyncidt
cdecl external libasound
procedure sndpcminfosetdeviceobj: Psndpcminfot val: cuint cdecl
external libasound
procedure sndpcminfosetsubdeviceobj: Psndpcminfot val: cuint cdecl
external libasound
procedure sndpcminfosetstreamobj: Psndpcminfot val: sndpcmstreamt
cdecl external libasound
Control functions
function sndcardnextcard: Pcint: cint cdecl external libasound
function sndcardgetindexname: PChar: cint cdecl external libasound
function sndcardgetnamecard: cint name: PPChar: cint cdecl
external libasound
function sndcardgetlongnamecard: cint name: PPChar: cint cdecl
external libasound
function sndctlopenctl: PPsndctlt name: PChar mode: cint: cint cdecl
external libasound
function sndctlclosectl: Psndctlt: cint cdecl external libasound
function sndctlpcmnextdevicectl: Psndctlt device: Pcint: cint cdecl
external libasound
function sndctlpcminfoctl: Psndctlt info: Psndpcminfot: cint cdecl
external libasound
Error handling
function sndstrerrorerrnum: cint: PChar cdecl external libasound
implementation
end.
end of alsa.pas
xt18
text conversion from https://bit.ly/2UK60jk, provided by MeaTLoTioN
tutor version: 2020-11-21
Pre-requisites:
On your smartphone, you will need to install a couple of free apps from
the Google Play Store in order to make this all work. Here are the
applications you need and the links to get them:
Termux
https://play.google.com/store/apps/details?idcom.termux
Andronix
https://play.google.com/store/apps/details?idstudio.com.techriz.andronix
Once you have installed both of these we can begin to install the OS we need
to run the BBS.
Choosing which OS we want
First you need to launch Andronix. With this first set of choices we will
set out the map for our build so its important to install exactly what you
want to use going forward, I dont think the decisions will negate the BBS
working, but it will allow you to choose something youre familiar with.
This is the first screen that we will interact with. You can see a list of
Linux distributions we can choose from. These are From top going right and
then down:
Ubuntu
Kali
Debian
Arch
Manjaro
Fedora
Void
Alpine
For me, Ubuntu is my preferred distribution, so I choose the top left icon.
Now we just click Install to proceed.
We are asked which version of Ubuntu we wish to install. I chose Ubuntu
20.04.
It then asks which desktop environment we wish to install, this is important
as we will need to use the desktop environment to open up other access later.
It will install a vnc server which will allow us to access the desktop just
like a normal computer or Raspberry Pi.
I chose XFCE, just because it was the first on the list, I dont really
have a preference at this point, I will only be using the desktop
environment initially to set up the rest of the environment, and afterwards
it will be entirely headless.
Once you pick your desktop environment, click the link at the bottom to
OPEN TERMUX.
Installing the OS
When you click OPEN TERMUX, it loads and leaves you at a prompt ready for
input.
First this you need to do is on any black area hold your finger on the
screen until a context menu appears
Then choose Paste and a long command string will appear.
Once you have that, just press return and it will start to install the OS
you chose in the previous section, in my case Ubuntu 20.04.
Connecting to your new OS
Now that you have installed your new OS, you need to run the vnc server in
order for you to access it via your normal PC. At the terminal prompt, just
type ./start-ubuntu20.sh and press return. If you didnt choose Ubuntu
20.04, just type ls and look for a .sh file in green and run that in the
same way instead, ./start-script.sh.
Once you have run that, you will be in your new OS at the cli. To start
the vnc server just type vncserver-start and once its running, you will
be able to access the desktop from your PC just by connecting to the IP
address of the phone and vnc port 5901.
At the desktop
Now that youre looking at your new desktop environment you can use it just
like any other normal Linux computer. Go ahead and open the web browser and
open the url http://www.mysticbbs.com/download/prealpha/
You will see a list of files in here, right click the file for
mys112a47pi.zip and click copy link.
Next you need to open the terminal and type
wget http://www.mysticbbs.com/downloads/prealpha/mys112a47pi.zip and
press return to download the archive to the root users home folder /root.
Once you have got the file you need to install zip and unzip, so type
apt update apt -y install zip unzip and press return.
Now we need to add the 32 bit architecture support for the OS so that we
can install Mystic BBS for Pi which is only 32 bit currently. To do this
we run dpkg --add-architecture armhf apt update and press return.
The next step is optional but I would recommend installing openssh-server
so that you can remotely administer the OS like any other Linux server. To
do this just type apt -y install openssh-server, once installed you will
need to edit the config file /etc/ssh/sshdconfig and change the
listening port from 22 to something else above 1000 as although you have
root access on this new system, because the phone itself is not rooted,
you cant actually bind ports under 1000. Open the configuration file,
change the port and save it, and then to start the ssh server run
/etc/init.d/ssh start
From here you can follow the normal instructions on how to install Mystic
as per http://wiki.mysticbbs.com/doku.php
Once you have installed Mystic the rest is up to you. To connect to this
installation remotely, you will need to either have a mobile carrier that
allows your phone to have a public facing internet connection, or if you
dont like me you will need to be creative and make your own. I have my
own server in a data center like Linode or Digital Ocean, so I created 3
reverse SSH tunnels to that server from my BBS on my phone, which allows
the ports on my server to be forwarded to my BBS on my phone. I will have
at the bottom of this document a list of all my scripts that I use which
you can use and modify as needed for your own use.
Extra applications to help
I have since found an application called autossh which is supposed to
monitor ssh tunnels and connections and if they drop or get locked up,
automatically restart them. The last puzzle in this project was keeping
the ssh tunnels stable, they mostly are but occasionally a weird packet of
data would cause the remote end the end you would connect to in order to
reach the BBS to somehow hang that ssh session, so I needed to log into
the remote server and manually kill the process which made the BBS
automatically recreate the tunnel.
I wanted to make this fully automated, so after finding this application I
have installed it and testing it out to see if I can reach the BBS after
swapping wifi connections on the phone and/or dropping it completely for a
brief moment. If it all works as hoped I will modify this document to
reflect my new changes and discoveries. I have noticed that autossh can
only be run once, however I can create multiple tunnels in that one
command so I have made it do all three in one command line. So far looks
good watch this space
Reverse SSH tunnels
Scripts I use to make it all work
TELNET
Filename: starttunneltelnet.sh
!/bin/bash
LOG/var/log/tunnels/telnet
inittunnel
screen -X -S sshtunneltelnet quit
echo date Initialising TELNET tunnel... LOG
screen -dm -S sshtunneltelnet /bin/bash -c while true
do ssh -vn -N -R 18023:localhost:2323 root@webserver -i /root/.ssh/ided25519
done
echo date Completed. LOG
echo date Starting TELNET watchdog LOG
inittunnel
BINKP
Filename: starttunnelbinkp.sh
!/bin/bash
LOG/var/log/tunnels/binkp
inittunnel
screen -X -S sshtunnelbinkp quit
echo date Initialising BINKP tunnel... LOG
screen -dm -S sshtunnelbinkp /bin/bash -c while true
do ssh -vn -N -R 18554:localhost:24554 root@webserver -i /root/.ssh/ided25519
done
echo date Completed. LOG
echo date Starting BINKP watchdog LOG
inittunnel
SSH
Filename: starttunnelssh.sh
!/bin/bash
LOG/var/log/tunnels/ssh
inittunnel
screen -X -S sshtunnelshell quit
echo date Initialising SSH tunnel... LOG
screen -dm -S sshtunnelshell /bin/bash -c while true
do ssh -vn -N -R 18022:localhost:2022 root@webserver -i /root/.ssh/ided25519
done
echo date Completed. LOG
echo date Starting SSH watchdog LOG
inittunnel
Run all script
Filename: startbbs.sh
!/bin/sh
start SSHD
/etc/init.d/ssh start
Wipe any old screen sessions
screen -wipe
Remove old mystic semaphores
rm /mystic/semaphore/*
cd /root
./starttunnelssh.sh /dev/null
./starttunnelbinkp.sh /dev/null
./starttunneltelnet.sh /dev/null
cd /mystic
./mis root /mystic/ daemon
SSH config /.ssh/config
Match host webserver user *,!root
Hostname 51.38.68.114
Match host user root
ProxyCommand ssh 51.38.68.114 -W 127.0.0.1:22
Match host *
User sshtunneluser
ForwardAgent yes
ExitOnForwardFailure yes
ServerAliveInterval 60
ServerAliveCountMax 5
StrictHostKeyChecking no
HostkeyAlgorithms +ssh-dss
KexAlgorithms +diffie-hellman-group1-sha1
Ciphers +aes256-cbc,aes192-cbc,aes128-cbc,3des-cbc
c0W+PUk5+ t F7xY +/ T7wjt Lc0W PU rioR wAF xYA+ UT7 jt gD1C jt Q y i c
CA NkiBfX Ag O7 AiyCf IvICB HvAAN iBfX4 g4O7w iyCfT vIC RHvA sf3hH 6iLe Ry0g
AAA Xv /IIBQj48i e7Rz4HOcA Pj76AAXvC IIBQj48 Te7Rz HOcAHP 6vgk+B FAj7Q PgzA
Pc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQ
E As7rioR7 AF6irKLf 1/gsR0BwA 5As7rioR7 AF6irK fX1/gsR0 wAFuoZzS qERPk7T Ct
Q e e3 C I gTJO +5 s ri 7wAF6ir L X / sR0 w F oZ S q R k7T C d4 5 k +
xabout
n u l l m a g a z i n e
i s s u e x 0 0 B . december 2020
::a b o u t::
null magazine is an e-mag, about the bbs scene, ansi art, programming, retro
computing/gaming and stuff. as from issue x005 null is written in turbo
pascal 7 for dos only! oldschool stuff!!! this way anyone can get a copy of
dosbox in his pc or smartphone and read null! there is also a text only
version, specially for those who are scared to execute binary files...
::d o w n l o a d::
null magazine hq is another droid bbs. there you can can download or even
read online the magazine, from the bbs. just visit:
another droid bbs / andr01d.zapto.org:9999
official distros for null mag:
agency bbs // agency.bbs.nz
distortion bbs // d1st.org
at the distros you can download the mag or read it online, couple of days
before the mag is released to the web. you can also download it from
affiliate networks
and from github at: https://github.com/xqtr/null
::d i s c l a i m e r::
any writer who provides articles for null mag. has his own opinion. the mag
is not responsible in any way about authors opinions. null respects free
speech and supports the variety of opinions in any social form of a network.
for used material, like articles, ansi art, music, all credits goes to their
creators. you are free to use material made by the founder of the mag xqtr
under GPL3 license, no need to ask permissions. for any other material its
your responsibility to do what you think best.
the author has taken every precaution to insure that no harm or damage
will occur on computer systems operating this util. never the less, the
author will not be held liable for whatever may happen on your computer
system or to any computer systems which connects to your own as a result
of. operating this util. the user assumes full responsibility for the
correct operation of this software package, whether harm or damage
results from software error, hardware malfunction, or operator error.
no warranties are : offered, expressly stated or implied, including
without limitation or restriction any warranties of operation for a
particular purpose and/or merchant ability. if you do not agree with
this then do not use this program.
::c o n t a c t::
if you want to repost bugs, send articles or art, just send an email at:
xqtr@gmx.com
::t e a m::
def listauthors:
xqtr // another droid bbs
def listcontributors:
smooth // ink2 bbs
:: ansi screen for issue x003
:: ansi screen for issue x004
shinobi //
:: tutor for issue x005
:: tutor for issue x009
eugene // ?
:: ansi screen for issue x006
:: ansi screen for issue x007
:: ansi screen for issue x008
:: ansi screen for issue x009
:: ansi screen for issue x00A
alphaking // blocktronics
:: flyer/logo for null mag.
filth // blocktronics
:: flyer/logo for null mag.
nodohana
:: article for issue x008
deepthaw
:: article for issue x00B
stack fault
:: article for issue x00B
meatlotion
:: tutorial for issue x00B
def listdistributors:
avon // agency bbs
jack phlash // distortion bbs
best viewed with LESS linux txt viewer :p
c0W+PUk5+ t F7xY +/ T7wjt Lc0W PU rioR wAF xYA+ UT7 jt gD1C jt Q y i c
CA NkiBfX Ag O7 AiyCf IvICB HvAAN iBfX4 g4O7w iyCfT vIC RHvA sf3hH 6iLe Ry0g
AAA Xv /IIBQj48i e7Rz4HOcA Pj76AAXvC IIBQj48 Te7Rz HOcAHP 6vgk+B FAj7Q PgzA
Pc2TbqJADKCBb+7yL70zjt2SQO8AjPc2TbqJADK Bb+7yL70zjt2SQO8uQw3ir40yfQ
E As7rioR7 AF6irKLf 1/gsR0BwA 5As7rioR7 AF6irK fX1/gsR0 wAFuoZzS qERPk7T Ct
Q e e3 C I gTJO +5 s ri 7wAF6ir L X / sR0 w F oZ S q R k7T C d4 5 k +
xcredits
and with this weird way, i would like to give credits to the following people
and groups. all of them in a way, the helped me, as also helped others to
keep bbsing alive in a level, that i enjoy and value.
i am asking sorry in advance, if i forgot someone, which i am sure i am :
scinet sudden death
jack phlash mistigris
shinobi
16colors echicken
avon
fsxnet nodohana
alphaking
amish
burps
opicron
blocktronics
nuskooler netsurge
eugene marisa
stackfault
the godfather
black panther
apam filth
deepthaw
dreammaster g00r00
fuel
impure meatlotion
xenos dorenet freshrich
xtrack
da music file! decode it and email me the filename written in the info header
of the track! you will get a free copy of my new announcement board mod for
mystic bbs.
SU1QTW1lY2hhbml6ZWQgdGVycm9yAAAAAAAAAAAABBAxAAUABAAPAIgIiAiFEA4AgEYI8IAAAAAA
AAAAAAAAACAAQCAgZBccIwwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBACQlAQA4wEDceQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAAAABAgMEBAUDBAQFBgYGBgQEBAUGBgYGBAQEBQcHBwcICAgJ
CgoKCwwMDA0ODg4ODnMUAACdFgAAxxgAAPEaAAAbHQAARR8AAJUfAADlHwAANSAAAIUgAADUIAAA
JyEAAD0iAACaIwAA3iQAAPklAAAGKAAArCgAAGQpAAA4KgAANiwAADUuAACFLwAAyDAAAAAARkYA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGQwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOWMgbiB2AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAA5YyBuIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAENjIHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
RjBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAAAABo
ujh+dgAAAAAwRjAwMHoAAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAAAAAA
AAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAAAwRjAwMHoAAAAA
AAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAAAAMEYw
MDB6AAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAAAwRjAwMHoAAAAAAAAAAAAAAAAAAAAAAGi6OH52
AAAAADBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAA
AABoujh+dgAAAAAwRjAwMHoAAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAA
AAAAAAAAAAAAaLo4fnYAAAAAMEYwMDB6AAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAAAwRjAwMHoA
AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAAADBGMDAwegAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABG
MEYwMDEwMAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTAxAAAAAAAAAAAAAAAAAAAAAGi6
OH52AAAARjBGMDAxMDIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwMwAAAAAAAAAAAAAA
AAAAAABoujh+dgAAAEYwRjAwMTA0AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMDUAAAAA
AAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwNgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAw
MTA3AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMDgAAAAAAAAAAAAAAAAAAAAAaLo4fnYA
AABGMEYwMDEwOQAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTBBAAAAAAAAAAAAAAAAAAAA
AGi6OH52AAAARjBGMDAxMEIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwQwAAAAAAAAAA
AAAAAAAAAABoujh+dgAAAEYwRjAwMTBEAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMEUA
AAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEwRgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYw
RjAwMTEwAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMTEAAAAAAAAAAAAAAAAAAAAAaLo4
fnYAAABGMEYwMDExMgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTEzAAAAAAAAAAAAAAAA
AAAAAGi6OH52AAAARjBGMDAxMTQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDExNQAAAAAA
AAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTE2AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAx
MTcAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDExOAAAAAAAAAAAAAAAAAAAAABoujh+dgAA
AEYwRjAwMTE5AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMUEAAAAAAAAAAAAAAAAAAAAA
aLo4fnYAAABGMEYwMDExQgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTFDAAAAAAAAAAAA
AAAAAAAAAGi6OH52AAAARjBGMDAxMUQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDExRQAA
AAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTFGAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBG
MDAxMjAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEyMQAAAAAAAAAAAAAAAAAAAABoujh+
dgAAAEYwRjAwMTIyAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMjMAAAAAAAAAAAAAAAAA
AAAAaLo4fnYAAABGMEYwMDEyNAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTI1AAAAAAAA
AAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMjYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEy
NwAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTI4AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAA
RjBGMDAxMjkAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEyQQAAAAAAAAAAAAAAAAAAAABo
ujh+dgAAAEYwRjAwMTJCAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMkMAAAAAAAAAAAAA
AAAAAAAAaLo4fnYAAABGMEYwMDEyRAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTJFAAAA
AAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMkYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYw
MDEzMAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTMxAAAAAAAAAAAAAAAAAAAAAGi6OH52
AAAARjBGMDAxMzIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzMwAAAAAAAAAAAAAAAAAA
AABoujh+dgAAAEYwRjAwMTM0AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMzUAAAAAAAAA
AAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzNgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTM3
AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxMzgAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABG
MEYwMDEzOQAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTNBAAAAAAAAAAAAAAAAAAAAAGi6
OH52AAAARjBGMDAxM0IAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzQwAAAAAAAAAAAAAA
AAAAAABoujh+dgAAAEYwRjAwMTNEAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxM0UAAAAA
AAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDEzRgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAw
MTQwAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNDEAAAAAAAAAAAAAAAAAAAAAaLo4fnYA
AABGMEYwMDE0MgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTQzAAAAAAAAAAAAAAAAAAAA
AGi6OH52AAAARjBGMDAxNDQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE0NQAAAAAAAAAA
AAAAAAAAAABoujh+dgAAAEYwRjAwMTQ2AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNDcA
AAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE0OAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYw
RjAwMTQ5AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNEEAAAAAAAAAAAAAAAAAAAAAaLo4
fnYAAABGMEYwMDE0QgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTRDAAAAAAAAAAAAAAAA
AAAAAGi6OH52AAAARjBGMDAxNEQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE0RQAAAAAA
AAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTRGAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAx
NTAAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE1MQAAAAAAAAAAAAAAAAAAAABoujh+dgAA
AEYwRjAwMTUyAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNTMAAAAAAAAAAAAAAAAAAAAA
aLo4fnYAAABGMEYwMDE1NAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTU1AAAAAAAAAAAA
AAAAAAAAAGi6OH52AAAARjBGMDAxNTYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE1NwAA
AAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTU4AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBG
MDAxNTkAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE1QQAAAAAAAAAAAAAAAAAAAABoujh+
dgAAAEYwRjAwMTVCAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNUMAAAAAAAAAAAAAAAAA
AAAAaLo4fnYAAABGMEYwMDE1RAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTVFAAAAAAAA
AAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNUYAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2
MAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTYxAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAA
RjBGMDAxNjIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2MwAAAAAAAAAAAAAAAAAAAABo
ujh+dgAAAEYwRjAwMTY0AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNjUAAAAAAAAAAAAA
AAAAAAAAaLo4fnYAAABGMEYwMDE2NgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTY3AAAA
AAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNjgAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYw
MDE2OQAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTZBAAAAAAAAAAAAAAAAAAAAAGi6OH52
AAAARjBGMDAxNkIAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2QwAAAAAAAAAAAAAAAAAA
AABoujh+dgAAAEYwRjAwMTZEAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNkUAAAAAAAAA
AAAAAAAAAAAAaLo4fnYAAABGMEYwMDE2RgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTcw
AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNzEAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABG
MEYwMDE3MgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTczAAAAAAAAAAAAAAAAAAAAAGi6
OH52AAAARjBGMDAxNzQAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE3NQAAAAAAAAAAAAAA
AAAAAABoujh+dgAAAEYwRjAwMTc2AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxNzcAAAAA
AAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDE3OAAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAw
MTc5AAAAAAAAAAAAAAAAAAAAAGi6OH52AAAARjBGMDAxN0EAAAAAAAAAAAAAAAAAAAAAaLo4fnYA
AABGMEYwMDE3QgAAAAAAAAAAAAAAAAAAAABoujh+dgAAAEYwRjAwMTdDAAAAAAAAAAAAAAAAAAAA
AGi6OH52AAAARjBGMDAxN0YAAAAAAAAAAAAAAAAAAAAAaLo4fnYAAABGMEYwMDIwMAAAAAAAAAAA
AAAAAAAAAABoujh+dgAAAEYwRjAwMjEwAAAAAAAAAAAAAAAAAAAAAGi6OH52AAAASU1QSQAAAAAA
AAAAAAAAAAAAAAAIAAA8YKAAACACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
AQECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEd
AR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkB
OgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFW
AVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAW8BcAFxAXIB
cwF0AXUBdgF3AQEDAAAAAEAAAEAFAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAADgAADgAADgAADgAADg
AADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AAAAAQQAAAAACwAA/wQA5gkA4B0A4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA
4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAAAAAAAABJTVBJAAAAAAAAAAAAAAAAAAAAAAgAADyA
oAAAIAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAAAAAAAIBAgICAwIEAgUCBgIHAggC
CQIKAgsCDAINAg4CDwIQAhECEgITAhQCFQIWAhcCGAIZAhoCGwIcAh0CHgIfAiACIQIiAiMCJAIl
AiYCJwIoAikCKgIrAiwCLQIuAi8CMAIxAjICMwI0AjUCNgI3AjgCOQI6AjsCPAI9Aj4CPwJAAkEC
QgJDAkQCRQJGAkcCSAJJAkoCSwJMAk0CTgJPAlACUQJSAlMCVAJVAlYCVwJYAlkCWgJbAlwCXQJe
Al8CYAJhAmICYwJkAmUCZgJnAmgCaQJqAmsCbAJtAm4CbwJwAnECcgJzAnQCdQJ2AncCAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAA
AOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAAAAAgAAAAAAAADrBgDr
CADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AADgAADgAADgAAAAAAAAAElNUEkAAAAAAAAAAAAAAAAAAQMACAAAPFKgAAAgAgEAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwEDAgMDAwQDBQMGAwcDCAMJAwoDCwMMAw0DDgMPAxAD
EQMSAxMDFAMVAxYDFwMYAxkDGgMbAxwDHQMeAx8DIAMhAyIDIwMkAyUDJgMnAygDKQMqAysDLAMt
Ay4DLwMwAzEDMgMzAzQDNQM2AzcDOAM5AzoDOwM8Az0DPgM/A0ADQQNCA0MDRANFA0YDRwNIA0kD
SgNLA0wDTQNOA08DUANRA1IDUwNUA1UDVgNXA1gDWQNaA1sDXANdA14DXwNgA2EDYgNjA2QDZQNm
A2cDaANpA2oDawNsA20DbgNvA3ADcQNyA3MDdAN1A3YDdwMBAgAAAABAAAAADwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA
4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAAAAAAAAAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAA
AOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAAAAAAAA
SU1QSQAAAAAAAAAAAAAAAAAAAAAIAAA8gKAAACACAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAEAQQCBAMEBAQFBAYEBwQIBAkECgQLBAwEDQQOBA8EEAQRBBIEEwQUBBUEFgQXBBgE
GQQaBBsEHAQdBB4EHwQgBCEEIgQjBCQEJQQmBCcEKAQpBCoEKwQsBC0ELgQvBDAEMQQyBDMENAQ1
BDYENwQ4BDkEOgQ7BDwEPQQ+BD8EQARBBEIEQwREBEUERgRHBEgESQRKBEsETARNBE4ETwRQBFEE
UgRTBFQEVQRWBFcEWARZBFoEWwRcBF0EXgRfBGAEYQRiBGMEZARlBGYEZwRoBGkEagRrBGwEbQRu
BG8EcARxBHIEcwR0BHUEdgR3BAEDAAAAAEAAAAQEAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAADgAADg
AADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AADgAADgAADgAAAAAAAAAAAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA
4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAA4AAAAAAAAABJTVBJAAAAAAAAAAAAAAAA
AAEAAAgAADw2oAAAIAIBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBBAIEAwQE
BAUEBgQHBAgECQQKBAsEDAQNBA4EDwQQBBEEEgQTBBQEFQQWBBcEGAQZBBoEGwQcBB0EHgQfBCAE
IQQiBCMEJAQlBCYEJwQoBCkEKgQrBCwELQQuBC8EMAQxBDIEMwQ0BDUENgQ3BDgEOQQ6BDsEPAQ9
BD4EPwRABEEEQgRDBEQERQRGBEcESARJBEoESwRMBE0ETgRPBFAEUQRSBFMEVARVBFYEVwRYBFkE
WgRbBFwEXQReBF8EYARhBGIEYwRkBGUEZgRnBGgEaQRqBGsEbARtBG4EbwRwBHEEcgRzBHQEdQR2
BHcEAQMAAAAAQAAABicAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAA
AOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAOAAAAABAwAA
AADzAADrCADoQADg7QDgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADgAADg
AADgAADgAADgAADgAADgAADgAAAAAAAAAElNUFNaSU9OLklUAAAAAAAAQFFAcnNhAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAABACIDAAC0AgAAIAMAACJWAAAAAAAAAAAAAFExAAAAAAAASU1QU2RiYXNz
LndhdgAAAABAEUB4YWltdXMAAAAAAAAAAAAAAAAAAAAAAAAAAAEgChsAAAAAAAAKGwAARKwAAAAA
AAAAAAAAczQAAAAAAABJTVBTWklPTi5JVAAAAAAAAEBRQHJzYQAAAAAAAAAAAAAAAAAAAAAAAAAA
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
9/P18e/e3uvuAxAPDgf89Ozg3dnT07vHt63Ov6+rrMPOxsTEwsPT3vL69/0HCRUZFCArLjg9RUxK
TE9YXF1bWl5jaWxnXllTVWVxYlVOS1laVVNHQ0dKR0VHRkA7MiYgJS4vIxUPEBISDwkC+/f18fDv
6+fk4t7c2tfV09HQz8/Ozs3O0NHS0tLV2+He3uDj5OPm6vH+/vwHCwYHCBAWEBIeJSglHxcXHSct
MTg9OTEvOURMRkI+QEVNUFBQT09SVlhZWFZUVVZUUlBOS0hISEZFQjw2MzIxMCsmIh8dGxYQCgQA
//358+3o4t7b19PQzMjDwL24sqyqqaeloJyYlZWVlpWQi4iHiImJhoGAgoeMjoyIhYmOkZSVmqKm
p6qqq6yxt7u/w8fKzs/R0NPa3uTm6ert8fX4+fsAAwUFCQ0PEBQYHB8fICEkJiktMTQ2NjY2Oj1A
QUNEQ0ZKTlJUVldYV1hZW19hYmJgYGBhY2RlZmRhYF1aWFdXV1RSTkxJRkI/OzczMC0pJSIfGhYQ
CwcB/fn18e3o5N/c2NHOysbCvrm1sK6rpqKgnJmWk5GPjIqHhYSDgYGAgICAgICAgICAgICAgICA
gICAgICAgIGEhYeIiIuOkpWZnqSnqqutsba6v8TK0NTX2+Dm7PH3+/8DCA4TGR8kKS0zNzw/Q0lQ
VVtfYmVnam5ydnp+f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f358enl4
dXJwbmtpZWJiYV9dWVVUUlBNSkZBPDYwLSwqKSUgGhUPCwYD//v18O3p6OXf2dPPy8jEwLy1sa6r
p6SgnZuYlZKPjYqIhoSBgICAgICAgICAgICAgICAgIDV09HQzszJycnT3NrQx761sK+wsrKysLK0
vM7QxsG9uLe1tK+urautra2rra6urq+ur7O0sq2rqqq6vriuqaG8+P/dyLqwrZ+LgICHq+Dg0MPB
wcbIycnJyM7T1tja3N/i5enr7u/+BwMA/v3+/wAAAA0XEgwKCAgICgsLDAwNDxESFBUWGhscHyAh
ISMlKCkqKystLSsrKisrLS4vLi4tLi0wPz85Mi4rKSYmKCYlJCMhIB4cGhcVFEtxVjglGxYVFBER
ERISFBkbGx4fHx4cHBkWFhYXGxwcHBsbHCAgISEgHiAeFhEMCwcGAwIA/v36+Pb29fY9Ti8VBQD/
DBAGAPv6+/4AAAIGCAwPERQVFhscHh8gHyAhIyQlKCgpKikpKisrLS4vMjM1NTU3ODg5Ojo9Pj8/
QUJDREZGRkQ/PDpETEI5MzIyNDQyMC8uLzIyMDAuKykmJCMfHBkWFBIQDwwLCggHBgUGBQIBAAAA
+/f37+v39+/n18e/s6+rm5OLh39/d3N3c29ra19PR0NXf4trQxr+5ub2+vb/Cw8K/y9fOxr+9
urfkEAPm0cSzlYCAi5alrbO5vsHN3d/WzcfBurKrra2tra+8xMG5t7OvsK+uraupqKampqalpKOh
oaOkpKSkpaSlqKilo6OhoaGhoaCgnL/99NrRzL+4s6qboLC4s7W4ub2/w8bJzdHS09PV19rf4ubp
6uns8fT2+Pn6+/8AAAIFBggKDSlBNCUaFBESEhERERAQERQVFxocICEjJCQlJikqLS4wMzU3ODk6
PDw9P0E+Ojg3NzUzLy4uLjJGS0M9ODM0ODUzLy0rKSYjHx4cGxVEeWFCKh8XFxUUEhESFBYXGx4e
Hx8eHhcVFRYZGx4eHx8eGxseHx4cGxkXFhQQCwcICAMB//v5+Pb08/Hv7u7q7OEQTDAcA//6+vr4
9vX09Pj7/wADFCMgGxYVFhcWFRYXGhweICEkJSYoJigoKSorKy0uLzAwMjM1Nzg5Oj5DRENCQT8/
QUJBPTk3NzUzLy0rKys5SEM8NS8qKisoIx8fHx4cHBkVEhAPDQoIBgUDAgAA//79+/37+vr5+PX0
8/Hw8/j17+rl4eDf39zb2tja2Njm8e7h2tXNx7+6vL2+v8HN1tLNx8PCwcLDw7+9ubi3t7W1tLSz
ucjIv7m1sq+rpZ6kuMjJo5ufoKapqaimpqampqWmqKimpaSkpKOjoaChoaCfoJ+enJyenpuamZeZ
mpual5aUlMz65Mm5sq+ysK6rqamzxMnGxMbHy87Q0dLT09bY3N/h5Obq7/Hz8fP1+Pn7/wACAwYH
CAoNDxASFSQwLSUgHhwfIyEgHik3My0pJSMjJCQjIyEhIyUoKy4wNDk6PD0+P0FDREZHR0RBPTw8
Ojc0MC8wMDIzMjpMRz84NTU1My4pJSMgHBsXFhUNH19rTjIkGhUUEQ8NDA0NDA0QEhQVFhUUERAR
FBcbGxwcHh4eISMgIB4cGhcVERAPDAoDAP/9+vr69vPw7+7u7Orp5eTk4eXfFEkqFQD79vb08O/u
7u/x9Pj7/wEDBwsNEBIUFRccHy04MiokISEjIyAeGx8jJSkrLzIwLy8uLi8wNDU1Nzg3ODk8PT49
OTc1NTQwLisqKSgqLSstKyoqMD5BOS8rJBoPCwwLDAwLCAcHCAwMCAUCAP/9+Pb18/Px9PTx7+zq
6+/u6+fk5PD48Ong29jW0MfExsfV3NfRzs3LycjIx8TDwb6/vr7N19HIwr68ur26tbS1s7Cwr6+v
rauqq6urq6uqqqqrq6qqqaimpaWlpaWlpaWlpaWlpaSjoaSmpKCfnp6cm5qZl5aUm9/54MS4sq+y
r66trq+yt7y/xMfL0NXX5PX17+vp5ebp6erq6+vs7/P7//7/AAAAAQECAwYICwwNEBEVFhwtNS8p
JSQjIyMjJCUmKisqKisrLS4tLTBER0E9Ojk8QUE+PDw+P0FCQ0RHSElLSERCPz09PDg3MzI0NDQ1
NzU3MzlJSEM8NzIvLSgkIBwZFhQREAslZmRHLSEZFxYUEQ8LBgMDBwoLDA8NDQwMDREUFhcaGxsc
GxseHh8cGxcUERANCwcFAgD//fr49PHv7Ovq6evu6+fk4eHi4uHg39vf1/s+KhH+9O/v7+zq6enq
7O/z9vsAAgYHCAcICAoNDxASFRcXGRwhISAhICMjLT09Ny8qJSAXFhscIygqLS8zNTU3ODg3NDAu
LS0tKikmJSQkJCUmJigrKyklIyMjISAbGx4gGhANCwoIBwUBAP/+/fv5+Pb09PPx8e/s+QH++PPv
6eTh3NfY29vX1tXT09LR0tHQzNLi4djTzcnIxsTCv76+vby8urm5uLi4t7W1tLW0tbi3tK+vsLKw
r66tq6urq6moqampqampqKmqqaurqqilpKOko6Ogn5+eo+EB6cy9sq6vraqrqq2vtLq+xMjO09jb
3+Hk5+rr7u/w7/H/BgH++vj6/f7/AAIGBwYHCgsNDw8QEBAREhQVFxocLTo1LisqKy0uLi4uLS0t
LS4vMDI0NDQ0NTc4OTk6PT5CQ0RNYWFYUlFQTk5OUE5JREJBQT89PUE+Ojc1Nzg5ODc1NDIwLzJB
SUI5MCsmJCAeGRQRDwwLBhRaYkMuHxcVFhIQDAUBAQUHCgsMDAsKCAgKCw0PEBESERIQERQVFhUS
ERAPDAoHBQMBAP76+fb18/Dv7Orn6ebl5eTk5OTm5+Xi4d/d29ra2tra/y0cA/Xw7Ozq6evq6enq
6+zu7vH1+Pr9/wEDBQUHCAoLDAsLDAsMDA0QERIUFRUWFxYWFhYZGxweHiAlJiEbISMjIB4bGxkX
FxYVEhIUFRUWFRUWFRQUFBIREhEQEA8NDAsHBgMCAQAAAP/+/fv6Ag8KAv759vTx7+vq6eru7uvp
5/b+9e7n5OHg39zb2tjY2NfW19fX19fX19fX19bV1dPV09XR1s7/Hw/45vbp6+vp6eXl5uzx8/T1
+Pv+AAEGCAcHCAoLDAwNDxARFBUWGx4fICAgICAgISMjJCUmKCkqKy4vMDI0Nzg5PT9BPz9BQUJC
QkJCQ0RESFdgW1ZTUlZXVVJRUVBRUE5OUFBSU1JTUlhnaWJdW1pYWlhXV1dYWFpaXFxcXF1cW1tc
XV9hYmRkZWZlZWZmZ2psbm5vcG9vcH9/e3Vwbmxsa2traWdna2prbGtrbGxnZGBdW1dXZGdiX1hV
Uk5LSEZERENDQ0E+PDo4NDAtKSYkIR8cFxYUERAMCwoHBgIA//36+fj29fTz8e/u7uzr6urp5+nq
6eXk4uDf3dzb2NfW09LR0NHQztDOzc7MycjIx8bExsbEx8TDwsG/vr29v7+8uri3tbSyrq2urrCy
sK6urauqqaipqqqpqKaoqKimpqWko6OjpKSmqKWhn5+enp6cnJycm5qbm5qZmZeVlpaZl5WVlJSU
lJKSkpGQkZGQkJCPj4+NjI2MjY+PjY2MobzCqZCGgYaIioqIh4eHipyjnpaSj5fh8NG5r6upqKWj
o6Olpquvtbq+wsbL0NLT19vd4OTp6+7w8fP2+v4AAQMGCAsMDw8QERIUFBUXGx4fJSUkJSQlJigt
LSsqKiorLS4vLi8yMjM1NTc4OTo8PDw8PT4+P0FBQkJDRkhJS0xNTExMTlBRU1NVVVZXWFpbXFxd
X19hcH99dG5rZmVkYmFgXVxbW1xcZnV0a2VhYGBhYF9dXF1fYGFkZWZmZmdpa2tsbm9wcHFxc3R2
eHl4eHh5enp6enp6e317e3t6eXh4eHh+f39/f3t5eHZ2dXFrZmJgXVpWU1NVVlxnZVxWUlBRUE5L
SERBPzw4MzAuKigqKSQgHBkVEAwKBwYGBQMCAQAA//37+vj29PPx7+7s6+fl5OLi4eDh4eHg3dva
2NjX19XT0tLR0M7Ny8nIx8jHx8bDxMTDw8LBv769vby9v728ube1tLKysLCwr66ura2rq6uqqaim
qKampamrqailpKSjoaCfn5+fnp6cm5ycnJybm5ubm5uZmZeVlZWVlZKgpaGalZmUlJGQkI+NjIuM
jIyMio2659/CrpSAgICAgZmfm5eWmpuen5+enpybmpmZlpvR+OXLvbSysrCvr7Cwr7C3vL/Bw8PO
4eLg3+Hi5enq6+zv8PT2+v3/AAECAwYHCgsMDQ8QFBUWGh8gISAgICEjJCQlJiYoKSkqKisuLzAw
MjI0OT09PDw9Pj4/QUJBQUFBQUFCQkNGR0ZHSEhJTE1QTlBRUVNVVldYWFpbWlpaWltaWFtfXVxh
cXNuZmRiYmVkYmFgX19gYGFhYmJiYmJiZGRlZWZmZ2lrbm9wcXFzc3R1dXV1dXV2dnZ2dnZ2dnZ2
dnh4eHh4dnZ4eXh5eHZ2eHh4enl1c3Fwbm97f3ZvamViYF1cW1pYVVVTUVBLSEZEQ0NBPz05NzMv
LSooJSMfGxcVFBEPDQsIBgIAAAAA/v36+fb19vX08ezr6unm5OLh3dzb2trY19fW1tXV0tLR0M7M
y8zMzMvIx8fGxMPCw8PCwb69vLy6urm5wsbHuq6qqqutra2rq6urq66tq6mopaq8ubKppaOjoaCf
npycm5uampqZl5mZlpeZmZmZl5WVlJWjpqSblpqUlZSRkI+NjZCQj42Nsurmx7erqZ6LgICAgouR
lZmcoKSmqKmpqKmqq6urqqmpqKimqKG39gDp0MO+vr+9vLq5urm6vb/DxsjJzczOyN8DBf329fX4
+Pn5+/3+/wAAAgMGBwgKDQ8QERIZHh8eHh4gISMkJCUmKCgpKSotLi8vMDAyNDU3ODo6PD09Pj9B
QkNERkZHR0hOUVFQTk5OUVBQUFBQUVFSU1JQTkxMSUdEQj8+Vm5iWFVSUlNWWFhWVlhaW11fYGFi
ZGVlZmdpZ2dnampra2trbG5sbGxsbG5ubm5vcG9vb3BxcHFxc3Nzc3FxcXNzc3NzdXZ2dnZ2dnZ2
dnh4eHh4eHh5enl2dHFwb25sa2lnZWRhX19dXVxcW1hXVlNRS0hHRkRCQT48OTcwLSooJCAfGhYV
EhAPDAsIBgMBAAD+/fn49vXz8fDw7+7r6efl5OLh4N/d3dzc2trc29jV0tLQ0M7LycfGx8bGxMPC
wcLN1tDGv7WqpqiqtLm5sq2qqqutrq2tq6qrqqmqqbC+vrrGw7qyrammpKGfnJqXlZSSkZGWmZaV
lZSUlZSUkpKRkZCQkJCQkJGRkZCRi7/44sy5sK2vsKuhlpKaoaatrrCysrCzt7i6vL2+vr6+vr69
vL2+vr69vL29vLy4zgoR89/SycjJyMbExMPExsjM0NLV19ra2tja29vb3w0oGgsFAgYKBwUDAwIC
AwUHCgsMDxARFBYZHB4fICEjJCUmKCkqKy0uMDI0NTU4OTo8PT4/Pj9BQkJCQ0RGRkdISUlLTExO
Tk5OUFBRUVJTU1VWVldWUk5LSUhIREI/PDk3NTUzMjIvLy8uLi0qKDJOdH5mWEQ/Q0E9ODUyMDAz
NTg5Oj0+P0FBQkJERkhISUlLTE5QUlJSU1NVVldYWFpaW1tcXV1fYGFgYWJkZGVmZ2ZmZmZmZ2dn
Z2lnZWRiYWBgXFtYV1ZSUVBQTlBNSUZGREJBPTo4NzUwLy0rKCQgHBsbFhENCgcDAf/9+fb08e/s
6+rn5OLh4N3c2NbV09PS0dDOzMnIxsTEw8PDwsHBv7+9vLq8y9LJwb26t6+po6SjpKWlpKawvbqz
q6WalJWXm6CkoaGhoaChoaW0ubKppaOhoJ+otLCmoZyampmWkpGQj4+NkZualZGRlJaVlJKSkZCP
jZXT9NzEt7CvsrCvsLCzt7m8v8bJztDR0tPW19fY2tvc29zd4eLl5+fp6unn5eTi4eTl5OXi4eDf
2uIXMxsC9ezp6efl4uDf3dzd4eTm6uvq6+rq6e709fT19fb4+ChRQSoeFxYXFhUSEhYXGRcbHB4f
ISMkJigpKy0uLy8wMDI0NDU3OTw+Pj9BQ0RGR0lLTExNUFFSUlNVVlZXV1hYWlpbW1xcXF1dX2Bf
YF1bWFdWVVVTUlBNSUZEQ0NBQ0ZGQj8+Ojg1MzAvLy8uKyomJCEfHBkVEhANDAgUJjgrAhU/OCQX
DwoKCAcGBwgKDA0QFBYaHCAjJSYpKy4wMjQ1Nzk9PkFCQ0NERkdISElMUFBRUlNTVVZaW1dVUk5M
S0tJSEZCQT4+Pz4/Pj09Ojg3NTAuKi0vLSklIRwaFhIPCwoGAgAA/vv59fPx7uvp5eTi4N3b2tfX
1tXT0dDNy8nIx8bDzNvY0MfGxMK/urewrautrauqqamopqWkqbe8tK6ppqSfmZWVl5mcnJyenp+f
n5+muLeuqaWjoaCfnpybmpeWqb+6qZeRkZKUkpCPjYyPm56ZlpKe5PTYwbS1urq3tbS0tbm8wcTH
zNLW2t/i5uru8PP29vX19vn6+/v9/f79+/v9//8AAAD +/fv49vb19fTz8O/q+zVDIQsA+vr4
9fPw8O7r6+zv8PP09fT09fX09fb4+fn6+/39+/3+ASpxcE4zKCMgIBwWEhAPEBEUFRkcHiAjJSYm
KCgpKSstLjAzNTU3OTo8Pj9BQkNERkdISUxMUFFRUlNVVVZXWFhaW1tcXF1dX19gX1xaV1ZVVVNS
UU1MR0ZEQ0NCQj8+PT06OTc0MDAvLi0rKSYkIR8eGhUSEA0LCAUDAQAA/fr49fPx7uzq6ebi4eDb
Cz0pD//49PX18/Hw7/Dz9fn9/wADCAsQFhsbHB4fICAhIyUmKSsuMDI3ODo6OTc1Nzg3NTU0MC8u
LSsqKy4wLysqKSkmIx4aFxcWFREPCwgHBQEA//36+fj49vPv6+nl4uDf3NrY1+Xr4tzV0tDMycfE
w8G+vLq5uLm4t7SysK6tq6qpqKq6v7myraqoqKWjn5ybm5yenp+enpybnJybo7Ozq6Whn5+enJqh
wdrWr5WDgYKHjZmqraWho6Set/r/5c3J0tDJxMLBv8HBw8bLztLW29/v/f37+/4AAQIDBQYICgsN
EBIVFBISFBUWFRUVFRQUEhEREhQSFBIREA8NDAoHBgYFBQMBAP4DOlo+IxIKBwUCAAD++/j2+Pn7
/v8AAAAAAAAAAAABAwIDBQYHBwYFAwEAAAAFQ2FILh8XGiAgEg8ZHiAoKiUkHyAjIyMjJCMkJCUm
KSsuLzAyNDU3ODk6PT9BQkNGR0hJSUtNUFFSUlNVVldYWFtcXVxcXFpXVlVTUlBOTEtLS0hHRkZG
RENCQT49PDo5NzIwLy0rKSUjIR8cGRURDwsIBgMBAAD//fr49vPv7uzq6ebk4uHf3NvY19bV2NjV
0tDOzMfsJRkA7uXg4eLg393c3eDi5uzw9fn7/wEDBgcLDxASFRUUFRQVFRofHxwaFxYVFhUWGxwa
FxUVFBALBgUGBgMCAAAA/v3++vbz7/QA//Xu6+vl4NvW09HOzcjHxsPCwb+9vby6vL28ubi1tK+v
rq2uvcO9t7Cuq6uppqWko6GhoKChoKCfnp6cnJubm5ypsKmjn5ql1fnqyLSZgYCAgYWKjZCXm70B
Aera2+Tk3NfT0NDR0tbk+Pj08/P2+fv9/f7//wAAAQUHCgwPEhQaKzAuKikqKy0tLi4vLy0qKikp
KikoJiUkJCEjIyQjISEfHhwbFxQSERIREA8MCgUgWl09JhoRDw0LCAYDAP//AAEDBwgICgsKCAoI
CgsNDw0PDQwLCgsKCBQhIR4XEg0KBhlEMxIB//0AAAAAAAECBQYIGSUjHBoXFhYWFhccISQfGyUt
KigmJSUmKCYmKCkpKiorLS4vMDM1Nzg5Ojw8Ojo8PD49PTw6PD09Pj9BQkNCQT8+Pj9BQkNERERD
QkE/Pj08Ojk4NTIwLy4tKykmJiUjIR8eGxsZHB8bFhQRDw0LCAYFAgEA//79+/r49vTz8e/u6+rn
5eTi4d/d3Nvb2tf9Ffvi1dXW2tvb3Nzd3N/k5+nq6efp5+nq6e72+vXw6uTh4uXn6enn6evs7O/7
BQH9+Pb28e/r6efk4uHg4N/d3Nvb2tzh4dzW1dPS0dHQzszLy8nIyMbExNPc1czGxMTEv726uLi3
tbe1tbW1tLS0s7Cwr66vr66rr77B1fPkw6+qpJuLgpGaoaakzeXVvrS3t7q9vL2+v8LGyMnX5+ri
4eDi5enq8QEA/fj19fj5+vn6/fv6+/39/v8AAAIDBgcICwwMGSouKCQjIB8fHx8fHx8fHx8gHx8f
ICEjJCQmJSQkJCUkIyMkIx8eGxcjTVEuFg8MEBISEREPDQ8SFhcaHBscGxsZFxcaGhscHh8gHx4e
HBwbGxkaFxUUERAPDQwLCggGBS9HJgwBAAADBgUFBgcICwwNDw8RERUoLigkISAfHh4eHhweHh8f
ICEjJCUmMkNBOjc1NDQ0MjAvLy8wMjQ1NDU1ODc1Nzg5Ojo8OTo6Ojo5OTo8PT4+Pj4+PT08PDo5
PD06NTAuKyomJSMhIB8cGxsaFxYUEhEQDw0LCgcGBQIBAAAA//37+vn49fPx8O/v7Ovp5+Ti4eHg
39/d29rY19bV19jW09HNy9LmFBDqzb+5vMK+ubOtucLM4ebf19HNzM7OzMvLycvJztLT09LR0NDO
zMzLyMfHyM7W2NHHwb28vL6+wcLBvr29vb3L1s7Gv7y4t7Wyr62qqaipqampqampqauuq6mpqKio
qKimpa/f9N/Eta+vqZyLi5ap0tO+sLCwuLq8vL29vsHCxMjM0NLV19rc4OLl5+8ADAsDAQAAAAUQ
DwcBAAAAAgMFBgcICgwNEBQVFRQWFxobHB4fICMkJSYmKCYyREM+Ojc1MzIwLysqKi0wMDIwLzA0
NDIwLi0qKCUjIB8VN11BKBYUFBkbGRcWFxkcHiAfHx8fHx8eGxoZGxwfHyAhICAhJCQjIBwbFxYV
ERANDQwKBwYGBQMCAAAA/yY/HAP7+/0AAAAAAAACAwUGBwgKCw0PEBESEiAoIBoVFxkbGxweHyAh
JCUoKCkoKCgpKSotLzA0Q0tDPDo5ODk8Ojk5Ojo5OD0+Pjo5ODU1NTc4OTk5OTk6Ojk4NTMwLi0p
KCUkISAgHyAfHhwXFhQSEQ8PDQ0MCwgHBgUDAgAAAP/++/r49vX18/Hv7uzs6ufl5OLl5erv6+Ha
19PRy8THyMjIx9HW0MvLycbEwsG+vbq5uMz26826uK+hjZKmrr3Dwr++v7+/vr28ur/M0cm/ubKp
AAABBw8YGhkWEg0OERgPExr7CCbgyREgH9e2+zzsN/iAKQCAk3+xgKwhlbA2msA8jITVy86AgKNe
f8mAgCkSBfzaxqAE3571DeXT/fj72NfUITDrHsMwf3+l1Ut/f3k7w/9/f38gZ39/f39/f39/f39/
f39/f39/f39/f3t/fmk3Q396UkM+NwvfwubU2cqAqI+AgIGypICAgICAgICAgICAgICAgICAgICA
gICAgICAgICAgICAgICAnrKDgLipw9PMs+cb++b1NkQfRV1DOSt/bTo9VmlBYn1/YTZlf2x/fH9/
f3l/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f396cGZeUlFCLQ4B+cbAqpagubOagICA
gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZnIecrKvEzOLN09Xv+vwS
LS8kS39/VzdFf39+f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f398f39falxoeGs3HipH
JRYZHP/rA/HQ7g/ut83SrYCfsoOm15uAgIaAgJGAgICAgICAgICAgICAgICAgICAgICAgICAgJGA
gICJyLmR54CAmtDFwevptND35Oj/IjnyCU5SGkNFUFo0NTMlKDs2XUIPGSIl9RdaSC0MHCM+NCpO
PTpLXw4cO04vWfkcSnRrP01/TXtcaEp/f35/b39iYX9/X3tjZUBMVktQSX8rQWhRLilqXiwbCmNB
Q0gXWW9IFk5RagD7+zH5DwIG48Hx3qgC977D07+61YCa0LeAsKmqmp+UgI2AnoCAgIeAgJrKyomA
pLymjYGpybiTmOHElZm/m6y0xw2ByA4k7uIuNx4H6PNTHhYT4u8LL2ED8WNQSQAuZTgtM0smWE1v
Xm5/e1J/fi1IbGdhblBUaXh/amN/elhhfyNASmxrJElmJCcnS2g9ESAeKmNLFdP6TEM+Ky7rFOT8
7gMA2cia8v7+m93x16eArfWvgLqrqrjTv4C8tICRuoCAjcqAgICAqICAkJmGgICPkoCYgIy02oCi
jc60kbGd4a/cwe2MsQH4ugYHEsgEDxDn2QIsDu4A/xrsIwcTW3UlQRc9Yyw3f1MxYVRYfy49c39K
PHlqWVZqf39zf0l/f391dn9/Z3Rje3RFVF8gImNB5iRtKDFPAAoAGT4+3sgPE/YRx0I+Hd/X/uf8
xenEsLu4spqhz8mtvKevyYCAy6uorZW6yZ/Itq6KvLGAorKAyoOAnM2TnYCl+I/IgICAtcDKrYzT
B6W27uCn8vcP9d/K8Nft6AEDGhc8J/UvVjT3Jylucjz4eH/lTn8YH39/K0x/f3R/f39UZn9/P39v
Yn96f39kf39nWk9WfH9EI0sIMVszEfwFbUTi/u7wLOnV5NXBJvCAoBXb25y3kLLhDsOxtAG0t4np
66/JsqqxnLSbua6Ah/bsgIyQpICTo/GGpMiNq8+1nfIQsI/ev+rpxMDYAPmXyj0Iyd/RCCzqOS8A
/gQxMOXzOkIMRjdEDf9GU1FOBlklYh00RC1uNhZaffY9NB1bUhMwan4xHWNHS3xQHyFrVjRVb0lR
NiJYaDM0QTAFJxUM5/wcShvnxTIaEuILHOHA2RUL5NEZ9tHw27jf2Pii4+KmjPDrx8TU2aGzwKH3
5buj1+mzuubNtsrr7tqzn8DlzaKMuLfbysaotaDgycOwm8vG/c+qrrv+wcrb7qPcA/LZyMPI8P/v
xfz3CuDoERQOFCIUJDEIFWRJNflJaVc7MDVQZSk+fzVLUUU4REM7NVt/VypHYCwpXjlRVD9GXzoi
Pyc6Pn9HBAZaRVkVMEVENBUEMkEN5Rr55AgoAdsA6AINtcAG6dXHv7K7xde8h9HSgKC7rcqZoaSA
l63FkoqSsZDdmKiRnaK+ramYtaKSp5ih4b2u1dnD9ADCtb7E7y3+utX5/RYC/wMoLf36ID4SNw4t
LkAUMGol/VRjIV1/Ny83Xmdjb0x9Q39Udn5/Un91Y21/c3RyVE9Zfz8ubGdIY1c1RSMxDj0RJisU
/zgO9v7D3QL0+v3atd8A8fWbuOy6pOLfsKu3utrezZuv08jZv53G5JKq2vHDp7+ri8fF+PCOgOrn
tZzo3Zaw2+jFoprC+AfNswPqo7328PDkxOACEN/f8ObuFQcB8w4GEAEjEikcFC0rSz8RRERGU1VO
JUFvLUcxMml5KkBQc0tODVBpVU5bEy9eZio3XE0pHCw+IwcgOeclHkQJ+O7hFhYKygffAd4C58ju
8ca45MLl7JfH0uHf38q0n/MT7qyUFPvl6+nVzf8Axdoc1rrm7vzr3sjl/u/v17DZ4OnczegxxdL/
DtPuAOPsBAgEzwMy+uksGvMOKRn01UQ0HwQL7ixBH/IcJRP7EQkNHxXtBhsVEQwQ6BgnEBsFA/8A
GAj/ESMW8f8OAP4HKx0L8CQXCv8nKQQG/ggTCv4ZBRcW+PkG9u4ZGvH5A/EK/QvrzwscAN0B+wQ1
8M4GAPYYBAQeBNcfJRUDAAj96OwC+QEpH/P1CxDsEP37B+3v6Pjw9xzc4PLyudz55uTBxNfq2dbn
BdvSxvHYswDx4vP72PXn4c0L2e4NDr70HfnLAQwXJP7o5wLi/eXnEBoU/AT/9ujzQxfW2x8j+xUI
D/3zLBceBukaKyURGTAH6BQqFBgaKf4tNykhKyIiQyMiLCETCTkWLC5OOPciGQYVEyAX+OoXN/vi
AS0HEOH2Cwz2/BkL7uQB9gn09eL65wD3zAnr7Nv3++4T6MPe6Avb19HmyevU0eTrzsrU+BDHstP4
5yveub306uDM+RTi6MLzFgTF5d4a5+7+6OIEFvnfBxH08SnzB+0gDtAEDgcU9vAc7xAH/BkjGCUT
BDIMHBMh/ywZIRIQMTUYByIrMSkaDTMuCPYUDCMiIRUe/BQfEQAXId3tICAGDe0ZBfn4GAkc/Or5
Ef3//iwU+QIdBukV+w4KFAAb9eEZ9QUKBvgPHBne6t756vEJ9+/2xO4B+M/e4e/k1N0AzuPfBcXn
8ezf4dHx8d3o49rX7QnZ177U6fTv5bbg/d7Z/PzUvwULyt4R+tPeAP0RAxAEARAFIQIdEQgHHSIe
FRIVJj4UFApJPx4lFjY7Py00FSgqPBAnEzY/HxorFwo6OwwFKCoQHAcZKRUR/Q8fHgH99y8d/w4g
EBMOEQMQ//sDD/v8AADu5vsK19nz99rk5QDIxMr95Ly89sDEpMXkxMWwu7TA4bOtv8PM3bW81r7Z
8NLT1dbo+NPZ5CDs9+j67+cjFSIDFRMRAikbGxEdFEYfCBMfHSMoNQ0PFCATGi4hLRYeLhsSHDQY
IREdGBFAHxQRHjMdGzEoDwQzHSsVFi8bLQcsICMTEQweCQgkIwQZHvEWEA0CCRLuAw4JAvkL+fQY
/vDv8frt497m+9a10uDm3bixzezAs9C/q8Pd3cLEtsre18rJ4/PU3eLOzPHp8Pj39Pj6DgwA6/sN
DAMVFPj5OzEY/xYoFg8QFwYNDx4eABkYAwAKBP8RAg7/CREQCh4IBwYFGC4TChnyEg4AFCgRAxcU
JRgZJxv3GyQRHRYdKBkSDx0tGwQAERAMCwkFBBoD/hUaAALx/hL7+fEa8NsE/f74/fnw9vL87uTW
+gjw2v/m4+bk8u3c+ejcy/X31cfX6vr00t745dLW9+3c3PcA3/Lm+/To7ebu+uTn9uLu/vnv7QMH
AOoFAxIDEAAVHBMIHhAUCxwfIxsPIRkPExwsHScbEBojFygYFws6LhAjHB8MAiUtBgAN8h4vDwce
F/gBJw4L/e319hEP9fPxEP0A7fr3FQcCBgPcARDyENP/8Qvk/fwRzugHDeD388/v9wHx6fIG8eT6
3PTz69zm9PXs2MoC9Lrd/uLM3P3x1eTz8PPR9AkA++Ds8xEU9uUOGxoW8vYUCA/+BCAWARwNHCAO
ASYxFQkNARwNCwUdJw39DBAICBsVGQAPIxYIIBgRGRAHGhoX9/QHBxLt+yLu+Qz5AO0R+QMA/gL/
+QkQ6uoY9//67eztD/bt++n45PXz6A8M7eTxCQz76ff2AO7sDPbdwiIO5/gc3CTkJ94I9SQA0zP1
4SfnAAAI4T7FGRm/MAUF3h/ZJ/Ic3BEL8vIW9f4cC+HvEd4w3i3+3A4ZzQgRDt4f+/ILAO0i5/gc
4TbKEyS0Kv74HNkfBfX4Lc0W+PUk5+0t6gIF7xYA+/UT7wjtDgD1CwjtBQLyFiLc7wsZ4eonBRHZ
EeoZ2RwL7QsL6hnv6hMLANkiBfX4Ag4O7wAiyCfTIvICBRHvAPsf3hH76iLeGRy0LRbv8ggW7f7q
MOrZT9MFBfsF5BML7xb1AAXvC/IIBQj48iTe7Rz4HOcAHPj76vgk+B/FAj7QAPgz0Psq8u8R4Qsc
2RPnKuQCAhbt+/gRGe3qAjPc2TbqJADKCBb+7yL70zjt2SQO8uQw3ir40yfQExMA3irv5CreGecC
EQLeLe3tC/IfE8gTJOr+5As7rioR7wAF6irKLfX1/gsR0BwAFuoZzSfqERPk7TDCQd4O5wIk7+3v
MAveAu8c9fITAgjWM+f4HPj7+BntABH41i34AAD+AuEiC+8I3D7eFvXTMwgA5wUZyD7WLdkZH7Ef
AAsAAAjZNuQLBdYIDgIfyjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDu8c4SLc7xkW5AX+HNM7
3O0cCNwWEeQZ4QX+AhzKJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxkC5xzy9RPq9RkAAOoI
HOrkONP4M/L1AO0n5x/cDg7v7xwR4QUF+w7kAvs23P4T3vgfFsIz3vgTBQvqE/71CwvWJ+r4NspE
qzAI9QXvDtA2/vX+AvUZ3irnAAX1BfsR+/sI7QUZ5Oot7yLc/hneJ9Yi9QL1+Dbc5CrnAgsI00/Z
Dtkn7xzhABH1/vUq0A4FBQvcCBnhCBbkDhHn8gsRAPv+EeET5EG5BT7IGQLvIs0RCwXtDuQn+/IF
ABbeBQv7IuHtFv4R2STt3jMI3hP+/u8OAgX4GdMLAhkC
EOF HERE
DO NOT READ BELOW
THIS POINT
VIRUS INCLUDED
Pj7+BntA H41i34AAPj7+BntA 8gDZCxO9D+AuEiC+8I3D7eFv TMw34AAD+AuEiC+8I3D7eFv TwI
jPv+BzIJ/gFBfX+CAjPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wUIDuX+CAsC+OEfFtb7Ig7e+wUIu7
/X1/h8A5yTt5yfn6j/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxfn6jPqykzt9QAO9R/IKgDZxO
OLc0W+PUk5+0t6gIFOLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W+PU6gIF7xYA+/UT7wjtDLc0W+PU
recursive NULL linking... you have to follow every link... that will keep E
JdaF you busy for the next 1010 years or at least a server goes down aTMwI3
wITt5yfn6j/X https://jackphla.sh/null-interview-part-1 Du7Igv TMwI3DwUIDu7Ig
u7KgDZJ/gFBfX+CAjPvJ/gFBfX+CAjPv+BzxO9R J/gFBfX+CAjPv+BzZCxO9RwUIDu7IggDZCxO9R
xOc0W+5yTt5yfn6j/X15yTt5yfn6j/X1/h8Uwjt 5yTt5yfn6j/X1/h8+PUwjtgDZCxO9R0W+PUwjt
8gDZCxO the only virus i got... is bbsing... :p test that! 0FveTMwI8gDZCxO9
wIJ/gFBfX+J/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HwUIDu7IgTMwI3D
u75yTt5yfn6j/X1/KgDZCxO9KgDZCxO9/gFBfX+CAjPv+Bz 5yTt5yfn6j/X1/h8gDZCxO9RIDu7Ig
xOX1/h8A5yTt5yJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4cC+HUwjtZCxO9R
KgDZCxO9xO9 except blocktronics, i also love darktronics gDZCxO9RGFc0W+PUwj+
Pj7+BntA H41i34AAD+AuEiC+8I3DPj7+BntA H41i34AAD+AuEiC+8I3Dc0W+PUwjt3D7eFvDTMw+
jPv+BzIJ/gFBfX+CAsC+OEfFtb7IgjPvJ/gFBfX+CAjPv+Bz+OEfFtb7Ig7e+wUIDu7Ig7e+wUIDu/
/X1/h8A5yTt5yfn6jPqykzt9QAO9R/X15yTt5yfn6j/X1KgDZCxO9QAO9R/IKgDZCxO9R/IKgDZCx0
Fv TMwI3Dv TMwI3D7xYA+/UT7wjtOLc0W+PUk5+0t6gIF7xYA+/UTFv TMwI3D+PFv TMwI3D+xO9
+wUIDu7IgwUIDu7I www.youtube.com/watch?veYZiKheaEJU wUIDu78gDZCxO9Du7IgHI3D
KgDZCxO9RgDZCxO9RAAD+AuEiC+8I3D7eFRTFvhT8gDZCxO9gDZCxO9gDZCxO8gDZCxO9CxO9RTIg
c0W+PUwjt0W+PUwjtCAsC+OEfFtb7Ig7e+wU+wUIDu7Igj7+BntA Hc0W+PUwjtAuc0W+PUwjteO9R
+wUIDu7Ig5yTt5yfn6jPqykzt9QAO9R/IKgDKgDZCxO9RPv+BzIJ/gFBfX+CAsC+OEfFtb7Ig7e+wU
xO9ZCxO9RUk5+0t6gIF7Fv TMwI3DjtDLc0Wc0W+PUwjtX1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgD
I3D+PUwj8gDZCxO9ZCxO9wUIDu7I fuck covid19 OLc0W+PUk5+0t6gIF7xYA+/UT7wjtDLc0W
7IgBJw4L/e319hEP9fPxKgDZCxO9RQcCBgPcARDyENP/8Qvk/fwRzugHDeD388/v9wHx6fIG8eTxO9
O9Rz69zm9PXs2MoC9Lrdc0W+PUwjteTz8PPR9AkA++Ds8xEU9uUOGxoW8vYUCA/+BCAWARwNHCAI3D
J/X1/h8A5yTt5yfn6jPqykztJ/X1/h8A5yTt5yfn6jPqykzt9QAO9R/IKgDZCxc2TbqJADW9f4c7Ig
M7eTxCQz76ff2AO7sDPbdwiIO5/g null008 7eTxCQz7M7eTxCQz76ff2AO7sDPbdwiIO5/eO9R
dPj7+BntA H41i34AAPj7+BntA 8gDZCxO9D+AuEiC+8I3D7eFvrTMw34AAD+AuEiC+8I3D7eFvfTw
n u l l m a g. x 0 0 B n o t j u s t r a n d o m s h i t