add waf
This commit is contained in:
commit
6da834d6f9
1 file changed
+170
@@ -0,0 +1,170 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# encoding: ISO8859-1
|
||||||
|
# Thomas Nagy, 2005-2015
|
||||||
|
|
||||||
|
"""
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions
|
||||||
|
are met:
|
||||||
|
|
||||||
|
1. Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The name of the author may not be used to endorse or promote products
|
||||||
|
derived from this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
|
||||||
|
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
|
||||||
|
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||||
|
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
|
||||||
|
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import os, sys, inspect
|
||||||
|
|
||||||
|
VERSION="1.8.17"
|
||||||
|
REVISION="daa67386b71d29ad7cda321d44eb497a"
|
||||||
|
GIT="c618546130a493ec6d3a586ae41760ec1763449e"
|
||||||
|
INSTALL=''
|
||||||
|
C1='#6'
|
||||||
|
C2='#1'
|
||||||
|
C3='#+'
|
||||||
|
cwd = os.getcwd()
|
||||||
|
join = os.path.join
|
||||||
|
|
||||||
|
|
||||||
|
WAF='waf'
|
||||||
|
def b(x):
|
||||||
|
return x
|
||||||
|
if sys.hexversion>0x300000f:
|
||||||
|
WAF='waf3'
|
||||||
|
def b(x):
|
||||||
|
return x.encode()
|
||||||
|
|
||||||
|
def err(m):
|
||||||
|
print(('\033[91mError: %s\033[0m' % m))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
def unpack_wafdir(dir, src):
|
||||||
|
f = open(src,'rb')
|
||||||
|
c = 'corrupt archive (%d)'
|
||||||
|
while 1:
|
||||||
|
line = f.readline()
|
||||||
|
if not line: err('run waf-light from a folder containing waflib')
|
||||||
|
if line == b('#==>\n'):
|
||||||
|
txt = f.readline()
|
||||||
|
if not txt: err(c % 1)
|
||||||
|
if f.readline() != b('#<==\n'): err(c % 2)
|
||||||
|
break
|
||||||
|
if not txt: err(c % 3)
|
||||||
|
txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00'))
|
||||||
|
|
||||||
|
import shutil, tarfile
|
||||||
|
try: shutil.rmtree(dir)
|
||||||
|
except OSError: pass
|
||||||
|
try:
|
||||||
|
for x in ('Tools', 'extras'):
|
||||||
|
os.makedirs(join(dir, 'waflib', x))
|
||||||
|
except OSError:
|
||||||
|
err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir)
|
||||||
|
|
||||||
|
os.chdir(dir)
|
||||||
|
tmp = 't.bz2'
|
||||||
|
t = open(tmp,'wb')
|
||||||
|
try: t.write(txt)
|
||||||
|
finally: t.close()
|
||||||
|
|
||||||
|
try:
|
||||||
|
t = tarfile.open(tmp)
|
||||||
|
except:
|
||||||
|
try:
|
||||||
|
os.system('bunzip2 t.bz2')
|
||||||
|
t = tarfile.open('t')
|
||||||
|
tmp = 't'
|
||||||
|
except:
|
||||||
|
os.chdir(cwd)
|
||||||
|
try: shutil.rmtree(dir)
|
||||||
|
except OSError: pass
|
||||||
|
err("Waf cannot be unpacked, check that bzip2 support is present")
|
||||||
|
|
||||||
|
try:
|
||||||
|
for x in t: t.extract(x)
|
||||||
|
finally:
|
||||||
|
t.close()
|
||||||
|
|
||||||
|
for x in ('Tools', 'extras'):
|
||||||
|
os.chmod(join('waflib',x), 493)
|
||||||
|
|
||||||
|
if sys.hexversion<0x300000f:
|
||||||
|
sys.path = [join(dir, 'waflib')] + sys.path
|
||||||
|
import fixpy2
|
||||||
|
fixpy2.fixdir(dir)
|
||||||
|
|
||||||
|
os.remove(tmp)
|
||||||
|
os.chdir(cwd)
|
||||||
|
|
||||||
|
try: dir = unicode(dir, 'mbcs')
|
||||||
|
except: pass
|
||||||
|
try:
|
||||||
|
from ctypes import windll
|
||||||
|
windll.kernel32.SetFileAttributesW(dir, 2)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def test(dir):
|
||||||
|
try:
|
||||||
|
os.stat(join(dir, 'waflib'))
|
||||||
|
return os.path.abspath(dir)
|
||||||
|
except OSError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def find_lib():
|
||||||
|
src = os.path.abspath(inspect.getfile(inspect.getmodule(err)))
|
||||||
|
base, name = os.path.split(src)
|
||||||
|
|
||||||
|
#devs use $WAFDIR
|
||||||
|
w=test(os.environ.get('WAFDIR', ''))
|
||||||
|
if w: return w
|
||||||
|
|
||||||
|
#waf-light
|
||||||
|
if name.endswith('waf-light'):
|
||||||
|
w = test(base)
|
||||||
|
if w: return w
|
||||||
|
err('waf-light requires waflib -> export WAFDIR=/folder')
|
||||||
|
|
||||||
|
dirname = '%s-%s-%s' % (WAF, VERSION, REVISION)
|
||||||
|
for i in (INSTALL,'/usr','/usr/local','/opt'):
|
||||||
|
w = test(i + '/lib/' + dirname)
|
||||||
|
if w: return w
|
||||||
|
|
||||||
|
#waf-local
|
||||||
|
dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname)
|
||||||
|
w = test(dir)
|
||||||
|
if w: return w
|
||||||
|
|
||||||
|
#unpack
|
||||||
|
unpack_wafdir(dir, src)
|
||||||
|
return dir
|
||||||
|
|
||||||
|
wafdir = find_lib()
|
||||||
|
sys.path.insert(0, wafdir)
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
from waflib import Scripting
|
||||||
|
Scripting.waf_entry_point(cwd, VERSION, wafdir)
|
||||||
|
|
||||||
|
#==>
|
||||||
|
#BZh91AY&SY"2Ó´6Áÿÿ°#+Óÿÿÿÿÿÿÿÿÿÿÿ„ Y�Â#(%H5Á!p(aùü÷½Wq#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+WBµ õ¢åš¯…Tª5ÞÝvn}¸½›Ñ¬µõêïvImo£|·¾¶;/½¢t�M^Ø"Ÿ;§ß}íàí7\tÃÒX’º)§¹½OOx§Gu®ÃzÝèönzz:äw}ÝØY™ªºÞÞi–í¹ê»ÓA7w>¹öï‡ÐYÙñ{N”íír˜û÷W=Ûßxà#+#+@hç`#+ùV#+Ÿ #+#+vÞØ{o=À§i€–ƒ£]ÛgrÔ4ÐÙÑ¡ªÝ•}�\ #1jöÔŽƒ z4vÀ#Ý�QBª#6P��vé± ªC£ å&€aEws€·p÷€Ï^âûî×Uèû°_V{�;ŽöÞðÞïw€Y‰½h ¨»k}½iŽ2±ô3ê<Ñ·}æ¾²ö7½mϽÏ>Í{»Ö½½sî¾mÝ÷½ö¾k®—ovÎùÛ�nç_Ou³ì;«ïy§�-fÆA¬¨#6_bŽ�P4§×ÏseÛÝàÞà #+z÷*4h¤ˆGv÷{/xÞÚƒJ¡;h»2…E#+Gm3c×]ãoLyy³Þ#1(ÁîïlçÝÍyzÞÆŠ[#1.Ýv1DØWÚÏ öë‡G§gºöuéëÛ¼íóÆ�^nï@sÝßc»ãžS`Ýß>wƒšgF‚ª£ï8çÛ¾ÏsÍÍ·T×»×¾Ù÷‡eÏ3^Í}Û“¹ÕõÝîíïvñ½^ûÞÞò¾¼ÞÎûï·‹ž�ÖÈÝÁuï]™çl¾Î�6èiÏ®Ï3Ý�“ÄôèÓ‘Þ±O_^«‚^Ê{Ò¨‡Né¹³»—ÌÞ»™;¾ç¾ÝÛ¯»»eãsÚÝi>Æx·»îξíÆtûÙæœº>ï'£Ý¾/X#+Þõê×¼c¯:>z½k�à#6#+T*T{˜Wvvл»°“wV0ì«xïO^›°¹ŽNéµ[Ý•Á¹i•Žœ=xЉïUíØiPuëÝöížê{à#+Îàè#+*½‹ÛÞßw¾ÊÞùÞ�õ½}¡»_]s–íZîÝßqÏ!ó#¹í�kÛuÒî5Ð7Ú'NQ÷»�{,²d7r"c§¼è¶nm÷µÍ6}ï|•éu÷]¸t«l°[pO}Z°Wµd×Ñ϶ò×¾çíÖ:nKë�|lúÞ�µ°÷ž·{“ëÓï±ÛãrÚÇ›|Z1¡´�︶U:p>º¼_öë ×ÛÔ^>6¾Þú¥¶a½·¢û½í.û¯@>µWÛ *�Ê{ݱ ÙÓï½·¯¾<óuݽäñÓÃt<÷·;vÕîóëW¾×¸‹ï{ïw½1ôïváft#6.½í½”ô¯3lW;×W°ƒáêá¥1¶ï®ï.{é!öÏ&�éèržÖØÐ×n V›¦ëžG6O|_ws@í�@#1±AOi5öþ û½^y�JÝÚŸ{'mtÓÞgÚcÓgvÝô{†ª#6(¼»�näŸZŸSy½îé›>ù¸ô±ö–ôËßX¯yî5kÞy^!¾ù_{wpìó›ïGžÂˆz4ïmï6Þ08ÓwÙíö÷¼ÚË�Üzõ‹ßczØËàîÕ´¼Ú÷»WkÝ�»îEï�x%4�#+4#+ i“@ÓM2&daMSõ¨y@4ÐÚ�6§£PIå¦�A4ˆL¦#6ždÔõ<¤Þ¤=LÓIˆô‡©£@h#+#+#+#+#+#+�Hˆ�M2˜&ƒIOÂ4iª©M©š1&€µ#+õ#+#+#+#+#+#+z¥$BjaO@d§•<Sf”�õ<¡¡êM€Ð@#+#+#+#+#+#+’@#+h™#+™4ÔdLÓ*~š`@#6oRhÐÐÐ#+4€#+&¢ €@C@Ðh‰µGêžÕTÞTõ='åOjžPõ¦&§ê�H#+#+Ð#+#+òÿ2Ûjÿû˜˜ÿHÚ×6·*î“övÚ—Y(L>;m]qBHHP™#6¢¡b€˜>Gãû ø»…ücÏÇ“zâ9¸îó8#6ò�sˆaæpãÙŠŒ]+OqýF� ¿È3ü"va€î’@ÄïߣÈV#¯HðÁB1!<=ÔÜ=âñiU«¼aÕ[‘*qxÄÜ]Ñå·[zúÙ-3Œ#×NÏâ~~y0ZjÊØ´—.¦«Mª�VÚAD‘�Yº¨A**±AI™#+/BCl(@ÄHAó‚DK*#6A[º5F±VÖ×Û«jÕI�B$‰c3L@LˆhÆm3DIMH–2$”¢˜¦ÚJ„TÉ%Š„Ñµ*6ÉA„D Iš&ÊÉŒ•™A4KL)AcI›hÉD"•)‘T@ %–’#6’A0e$Mb‹h´š¡h3,Ø¥‰©FJ#6IE4‰Y•�EimikT¤›Q2d™(ØÕjV±ša›2™jK¥¶ ©¶!*”É©…‘L’j6�‘©VŠÈFɤÐS$£ABZH-¦±’±‰‚#634Ó¦Æ& SK„#+f!ŒÌ@Ca’dJ"J&Ô�$RÄ"²hdˆ™H¤še,RdƒhÃ)Im%E ÔÆ¥H¨bÉ0ÑFš@À�…J$²)DÆ,LT&Sh¤™i¤‰ Å‘¦Fd©EÌ‹d*K#6$ÒHI¦ÄjKf¢H*!H’ŠŠˆƒbJB™±’jM‘H‰™É2fŒÂ2[2¦A°•"B$„©6‘ $ÒVI“E–f#1›Di¤Q¡B”�2“4D̪Y°"ÊQAŒ¤2id›4Ê4ÒÅ%™2²1$Š-#+ËK$#6‰,Ê‚›3F*6ie4±%5´Ðhb4Š4ÄF¤ÉI¤#14”³Q¢Ê•L(( Ø"bLˆ$¥1�#+ÂHÉ#13#+h!›35¤EašÈC)R,™#6RÚMIE²EcI2I(J,”´‹a4l�ÀÉ”Da²I²£LÍDb1šT33Jb¡S&ˆ©¢1f¦Å&QddÄ”ŠT’BÊ*dX”Ó#h1I’ÊI˜l›&Œ™#6†‘¨¡$̬¤Ãh,›% &B$–L£!ÍHÊe#,FIJ¦ÍE¡2‚dJHƒj1li&k"†“I#*4…TJ(Ö*i0¢±,ÔÉ4i0’ȉB¥�£I’Œ£4†ÍZ–¶ÐQl`’¦�i(6RF‹ÉL“k&¥,Ѧ)3LÓM’Êhµ21°¶IF…M”e#4ie¯Ûmti+IHJ”d¦±VŠÅ¢£Bf•4ÉF’ÐTl"¤–©ˆ¡±¥ˆfYJBi#Y�Œ„ jZ,Šk&Cc(´¨Ò-&cRÒÌd‘¤Å†fR«4i�µ›"©¶Šl¢K*2•XÓV’²¡5¬Ô¥)¦³4ȋѥ¥D–’�,V+L¨¶Û@Í‚ÆÛBF¤Ñ¶ÆÑ±²Qª3IˆU† Ñ«FÃ5!µˆMdˆÚÍÊbJ)ÑcjQ)µ-ˆÔl’V1©¤™ª¶m4¢Â6mFÈ„3e²$̦¦”2L¶©j)i)ššlšÓTÚMTÓb¬©”ÒmM-¦ÌZ4f¶k32IYcC6#1I¶•e�ص4¢ˆ€ÀÍF’�"F(Ø È"„- &6£jH”•Êj�¥&–52h4”Ã#6)³b6)¥•" ¦Š`¦J5”Ù¡‹‘Qh³$1ŠVjK�³,šYŒ¦#1�Љ…(`É‹³ÁE£bJJ2fƒH³(µ31LRma3`Ѩ±˜b¦m@¥’„ØŠ )ÔÓhÈY›EE��Š4#Di54$R`¬)e Â#Ed‰ILe6–Ä)š”FI6jQ UU3(�†ÅJi6ci2‹4›E±†C”dL›)&„©5&S3L@•-–lZ#6ÊYI±±‰±Eš)&fM2Ö‘“)h²R$fÀ‰€–dLh´Ê#@ÖY6JPÄÄJM$$mˆÕ ±hÔh£lFÔ�&&h’‚“H´S#+•‘X°[-)$Ô…Q¬™…’–d4´hØChÚ-bM,ÛAI’ب4a…�¢’Ô¥¢¨Ö4¤ÍlY$ÖdT‘%F’4E–U©�š�£™Y-Ò”*4¤¦‚‰*X•%2”¢¶Ä¤Š,”l•FFÉcl”•U)ŠJ*R©RlT4“6FRlXi",X´�’‘š0m&¢LÐÁª”F�&”¬LF”j+F+´�†Ã$¢ˆ"Œe-ˆÚ+2J*@4¢“I«J#6-)ªSi5ØÖ+f˜¬–³H#6ѶMIEŠb”‘”Ù¡P”l”Á£m¢#66ÆÅ´liM«$2Ñc“QQ!Z&m–mFÑh¨µŒ’[RŒÙ²YX•F-eŠ©©([(Ë)DÒFÌ#1� ’ÅÉlk%I«›JfQ¤Ú4)”hÖÕMµ¤c*M%L¢Ñ±´0-’ÒÙ&ÚLdbÅ%m£[‹m£j†Y6¶"Õ5+5¢Q”P6’cÊÂÊXÙ#f‘QA3bI2’dI…©6Å™µL—·÷'ûéþVMqRÿÅJ¾ÜÑ-20ÅÔÛ ÿ>À·cqügˆñ´[›ýÚK/[×—ùÃý(³ô¢�b¦ Í,j£ÿn%Š£ÚT+^�€ÎÝ&ò"ðÅXšbå�Ü–#6WD2›¤-¶†ª€Gj?Òíü<õÆðþº¤?Õæ“ûü¹pÿNÊÆ^8˪*™³º»�´b<ŽÄ°‚DIÝ7npßç|X|F—¾D)žS üÅÞZmê]�I6dëÑűj—¸ˆä8u½�c,„Â’¦6Ýr¸6=)`ó©N#6ˆÖ*¢«²ZVJ£-=5zrκÙù^Sw[p&^,¡lÑ)P4C.ü4`CT¦S(ØÚÌmô]y'œ¨’×{õw—bó»Q?·ê÷óªeìÜÒh²¨ ±«²ÕŽZ�orÁÿ¯Gö\ Za7*@Ö«Ú“fXÅQSÝF[,‹ãý×,;û«F`:2�ê�SÖÊÃ#6#6OèV?Ê䀦4U$¶%”CùgÀp‡dÔx&Œ"61&žÓO^¦C©o”5 °ÙÅ×´¿ö ÏÍŸ, @·#1u»"0b1¼ÜµUзq¢¹¹“HRkI¢ŠA|ä$-€,'ʨ:W•Òy¤(‰»I IH)í©A,JPbmÆÂ;/sç݃PKjlºòÎ%f�“E›‚ªJ-mï=7»mÔ¶önšžEdP|>›ÛÒÈÈ‚êQ£ééh剸¡¦•+ ¹È#1Á„dc�ˆ�uÓø*ÞyßêßEÞD¨«Ô•š%À]¢VÊVâ¤X¯ÕT#=”V¿¶´ÇZæ=0L ÿšŠM’ª¹f°‘P�¬.D`@`£�(ÿ¼O^×ùê—QÛJ65ú�a€5Ui�¾«]®_Q®Ÿ”\ýþ}37Z¬àï#6Ï]\ę衎µGW/î©Þš§#68Ô<8Ðâ¶|¸âþ ;‘T:mOÛÚûRÒ;Ió¹ÚP™÷ r 0gƒ†i«B‹&iëu³*8ÞÃ<æ’z XZ2©Jõcaÿ%ã«XĶ“À°¥‚Á/N·�¹ùbŒ=�*'mh³f –4 ¶Ð·ä—š¬:Ö—Vs‚(f®Ê[±¿ñÕIßTeY#:µDD"Îú*Š¡dc Î6Q2ëesr%â¡ÊÊQþ£KàU#Íê^V)¢êÕŒ#1è±bŠ�*¥ÑJ d,æe“x×.[¯â¼¦£O±Á£oMßoWçxLÏôëýþ×Îö»F9nhÕwW#YÄa5'®ë•ç�µ·N–/©Ó`ßW*Âa"ñB„ò¡% RB)„±õzè¥/‹•_cÙy›ãq™gÚ0£Z)viADb¦•%,Åkw(±X²UóŸè¯º¹_�À¨°º¨.´w^¢™£ ÿœj]B�#6i“_:¦Ù±ý4Ny*Db+¥mfÈy-½M2B×ÿaåsn¦øË©P¦”H²sª›»Œ…¦õAu¢x»áÕ¿2ÞÏK³%Ë])~·Ri)»>I®¥#6ŠÉãT[J¢kßwͱóÛžÀv®,-;»]¤AI2U#xÑG¡i‘¤R<j’Ý¢sq«¸yâ#1²°ÛKN5d™j(ÛlôpÓ�0¶"§#6õ]#6Ï.ꇩ˜Hß¹Sº‚]ph¡Ù{l¥ü‘–ªÆ{\7f=ÈŠµ>±Ú]2Lj!cûøÏE0Œ«“솀áÇ3ís�¼*Xx$Õ yãE’)¢ˆ'uRüIçµ1!#M‡Š8ÃÏ'fgý&p¿+ˆÕÜÉÕ#1G+«0‡ù}ÕÅšd¤#1iÁ"ôéúÎóá±5»±è×"Œ Ð#1„à�QmߢL±ªÆÝˆÕÊ ñ¯{.¦YÞ¢+2F·>oY¦PȸΓ&q¥õS:ݾ\jæÏ‚(§7‡úšib�}ä8²‡%Line truncated
|
||||||
|
#<==
|
||||||
|
#-----BEGIN PGP SIGNATURE-----\nVersion: GnuPG v2\n\niQIcBAABCgAGBQJWZ221AAoJEGelZe39+Q5k3JoP/00d4MPKnYISlTQd7eCIYKVn\nFjgJBkdgMu30LB7g3w87PqPHjgfeMpyzZEwqMYLU0S9VKqlNei1ZVnHqN7XFS8ks\nOn1T2kawLVbvCnyS6GCtGxlKVJGzcthBCo/qlMG1z1GVvacDSY0LtQeZl+YI6+hf\nC8RYfx9LGG888eNL7f3si78BPJDUJJXvD53Xdk26zQh+3uDMvAoTQUEP84XnF3hu\nu+w7abgR+t/4QSVgtXaA0U1AY4IFOkW16OAK3+o7qGjcUYpY404dRXPqHIWc27nV\nQdCaZdUMs6BMlV0ao/Jgw1z4BgqmM2DtJk1wmkLdAqoTeq9249hClpl6KpBok2oF\njuGaIXXGKUGj+uNFScPdoHO7Tj8wyIut99Ha+g9Wy5qqcLwRg9mmbaoAqrnV9Ol4\nU6aIhkJZr6tPjgmK1yAaweQ0HqM1YLs8aglRAYsFCTEhbi4Ii326C3tNSdSJylUH\n8QGmMXbEDN/Jvb91KPsRQNgx5ojbL/AMbKvt5FZimbnWwn26gPjZZT2nFh92z3gU\nlhskZyufK/hSDU06WFKGB1H0yDGEGVnVMEn1pcWpRYWE7yVi/E6UM/z08LjYv96k\n5Eys0Gqn8WGUJUY5vIWHGe/fEJPKaa4GglrkXWlgAhKYoffVnJ6HT+2gaCzFESr0\nvlutwPKofCO4lyvJR1xB\n=SwcW\n-----END PGP SIGNATURE-----\n
|
||||||
Reference in new issue
Block a user