/* P arrival time adjusted by CWBdata */
/* Pob:P observation time = secp - ( event occur time +60) */
/* Pth:P theorem time = (dist and depth=0) to theorem function */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"station_info.h"
#include<math.h>
#include<stdbool.h>
FILE *filename;
struct event{
char year[5];
char month[5];
char day[10];
char hr[10];
char min[10];
char sec[10];
char depth[10];
} eve;
struct sensor{
char name[5];
char bbb[5];/*what's this???????????*/
char min[10];
char sec[10];
char resp[10];
char wtp[10];
} sen;
char filenamec[100],path[100],datac,sory[5]/*sensor or eve.year */;
char tmp[100],dist[5];/*between sensor and hypercenter*/
int i,sensor=0,y=0,s=0,k=1;
double theorem(double ddiisstt,double fedepth);
float Pob,fdist,fsmin,fssec,femin,fesec,fedepth,Pth,obvelo,thvelo,fswtp;
/* fxxxx=float xxxxx */
/* ex: fedepth=float event depth */
/* ex: fssec =float sensor second */
int main(void){
filename
=fopen("filename.txt","r+"); //printf(" dist M Sec Pob Pth obvel thvel Count\n");
while(1){
fscanf(filename
,"%s",filenamec
);//filename = 201301DB.MAN if(feof(filename
)==1)break;
FILE *data;
strcpy(path
,"/home/m101019/Dropbox/EW/implement/CWB/pfile/"); strcat(path
,filenamec
); //path = /pfile/201412DB.MAN
//printf("%s\n\n",path);
if(data){// grab the data from MAN file.
while(1){
for(i=0;i<=3;i++){
sory[i]=datac;
}
//printf("%s\n",sory);
for(i=0;i<=1;i++){
eve.month[i]=datac;
}
for(i=0;i<=1;i++){
eve.day[i]=datac;
}
for(i=0;i<=1;i++){
eve.hr[i]=datac;
}
for(i=0;i<=1;i++){
eve.min[i]=datac;
}
for(i=0;i<=5;i++){
eve.sec[i]=datac;
}
for(i
=0;i
<=14;i
++)fscanf(data
,"%c",&datac
); for(i=0;i<=5;i++){
eve.depth[i]=datac;
}
y=1;
}else{
sen.name[4]=datac; //sen.name = " SEB " or " CHY1" length=5
//printf("%s\n",sen.name);
for(i=0;i<=5;i++){
dist[i]=datac; //sensor distance
}
for(i
=0;i
<=9;i
++)fscanf(data
,"%c",&datac
); //drop sensor az toa for(i=0;i<=1;i++){
sen.min[i]=datac; //sensor minute
}
for(i=0;i<=5;i++){
sen.sec[i]=datac; //sensor sec
}
for(i=0;i<=5;i++){
sen.resp[i]=datac; //sensor resp
}
for(i=0;i<=3;i++){
sen.wtp[i]=datac; //sensor wtp
}
s=1;
//k++;
}
if(fgets(tmp
,150,data
)==NULL
)break;
/*****change type******/
/****calculation****/
if(s==1){
if(fsmin==femin){Pob=(fssec-fesec);
}else if((fsmin+1)==femin || (fsmin+1)==(femin+60)) Pob=(fssec-fesec-60);
else if((fsmin+2)==femin || (fsmin+2)==(femin+60)) Pob=(fssec-fesec-120);
else if((fsmin-1)==femin || (fsmin-1)==(femin+60)) Pob=(fssec-fesec+60);
Pth=theorem(fdist,fedepth);
}
obvelo
=sqrt(fdist
*fdist
+fedepth
*fedepth
)/Pob
; thvelo
=sqrt(fdist
*fdist
+fedepth
*fedepth
)/Pth
;
/*human read format*/
/*if(y==1 && strcmp(sen.name," ENA ")==0 &&fssec!=0 && fdist<500 && Pob>0 && Pth>0 &&fswtp <=2 && fabs(Pob-Pth)>2){
printf("\nY:%s M:%s D:%s H:%s MIN:%s SEC:%s DEP:%s\n",eve.year,eve.month,eve.day,eve.hr,eve.min,eve.sec,eve.depth);y=0;
printf(" dist M Sec Pob Pth obvel thvel Count wtp diff\n");
y=0;
}
if(s==1 && strcmp(sen.name," ENA ")==0 && fssec!=0 && fdist<500 && Pob>0 && Pth>0 &&fswtp <=2 && fabs(Pob-Pth)>2){
// fdist<500 is used to ignore the dropped data
// Pth <0 is ignore double count
printf("%s %s %s %s ",sen.name,dist,sen.min,sen.sec);
printf("%.2f, %.2f, %.2f, %.2f, %d, %s, %f\n",Pob,Pth,obvelo,thvelo,k,sen.wtp,fabs(Pob-Pth));
s=0;
k++;
}*/
/*machine read format*/
if(s
==1 && strcmp(sen.
name," EGC ")==0 && fssec
!=0 && fdist
<500 && Pob
>0 && Pth
>0 &&fswtp
<=2 && fabs(Pob
-Pth
)>2){
printf("%s %s %s %s %s %s %s", eve.
year , eve.
month , eve.
day , eve.
hr , eve.
min , eve.
sec , eve.
depth);y
=0; printf("%s %s %s %s ",sen.
name , dist
, sen.
min , sen.
sec); printf("%.2f, %.2f, %.2f, %.2f, %d, %s, %f\n",Pob
,Pth
,obvelo
,thvelo
,k
,sen.
wtp,fabs(Pob
-Pth
)); k++;
//printf("%.2f, %.2f, %d\n ",Pob,Pth,k);
}
//y=0;
s=0;
}
//fgetc(stdin);
}
filenamec[0]='\0';
}
return 0;
}
double theorem(double XB,double ZA)
{
double Ptravel,Zc,G,G0,Theta_A,Theta_B,Xc;
if(ZA<=40){
G0=5.10298;
G=0.06659;
}else{
G0=7.804799;
G=0.004573;
}
Zc=-1*(G0/G);
Xc
=(pow(XB
,2)-2*(G0
/G
)*ZA
-pow(ZA
,2))/(2*XB
); Theta_A
=atan((ZA
-Zc
)/Xc
); if(Theta_A<0)Theta_A=Theta_A+M_PI;
Theta_A=M_PI-Theta_A;
Theta_B
=atan(-1*Zc
/(XB
-Xc
)); Ptravel
=(1/G
)*log(tan((Theta_A
/2))/tan((Theta_B
/2))); return Ptravel;
}
Ci8qIFAgYXJyaXZhbCB0aW1lIGFkanVzdGVkIGJ5IENXQmRhdGEJCQkJCQkJCQkqLwovKiBQb2I6UCBvYnNlcnZhdGlvbiB0aW1lID0gIHNlY3AgLSAoIGV2ZW50IG9jY3VyIHRpbWUgKzYwKQkJCQkqLwovKiBQdGg6UCB0aGVvcmVtICAgICB0aW1lID0gIChkaXN0IGFuZCBkZXB0aD0wKSB0byB0aGVvcmVtIGZ1bmN0aW9uCQkqLwoKCgojaW5jbHVkZTxzdGRpby5oPgojaW5jbHVkZTxzdGRsaWIuaD4KI2luY2x1ZGU8c3RyaW5nLmg+CiNpbmNsdWRlInN0YXRpb25faW5mby5oIgojaW5jbHVkZTxtYXRoLmg+CiNpbmNsdWRlPHN0ZGJvb2wuaD4KCgoKRklMRSAqZmlsZW5hbWU7CgpzdHJ1Y3QgZXZlbnR7CgkJCWNoYXIgeWVhcls1XTsKCQkJY2hhciBtb250aFs1XTsKCQkJY2hhciBkYXlbMTBdOwoJCQljaGFyIGhyWzEwXTsKCQkJY2hhciBtaW5bMTBdOwoJCQljaGFyIHNlY1sxMF07CgkJCWNoYXIgZGVwdGhbMTBdOwoJCX0gZXZlOwoKc3RydWN0IHNlbnNvcnsKCQkJY2hhciBuYW1lWzVdOwoJCQljaGFyIGJiYls1XTsvKndoYXQncyB0aGlzPz8/Pz8/Pz8/Pz8qLwoJCQljaGFyIG1pblsxMF07CgkJCWNoYXIgc2VjWzEwXTsKCQkJY2hhciByZXNwWzEwXTsKCQkJY2hhciB3dHBbMTBdOwoJCX0gc2VuOwoKY2hhciBmaWxlbmFtZWNbMTAwXSxwYXRoWzEwMF0sZGF0YWMsc29yeVs1XS8qc2Vuc29yIG9yIGV2ZS55ZWFyICovOwpjaGFyIHRtcFsxMDBdLGRpc3RbNV07LypiZXR3ZWVuIHNlbnNvciBhbmQgaHlwZXJjZW50ZXIqLwoKaW50IGksc2Vuc29yPTAseT0wLHM9MCxrPTE7CmRvdWJsZSB0aGVvcmVtKGRvdWJsZSBkZGlpc3N0dCxkb3VibGUgZmVkZXB0aCk7CmZsb2F0IFBvYixmZGlzdCxmc21pbixmc3NlYyxmZW1pbixmZXNlYyxmZWRlcHRoLFB0aCxvYnZlbG8sdGh2ZWxvLGZzd3RwOwovKglmeHh4eD1mbG9hdCAgeHh4eHggICAgICAgICAgICAgICovCi8qCWV4OiBmZWRlcHRoPWZsb2F0IGV2ZW50IGRlcHRoICAgKi8KLyogIGV4OiBmc3NlYyAgPWZsb2F0IHNlbnNvciBzZWNvbmQgKi8KaW50IG1haW4odm9pZCl7CgkKCWZpbGVuYW1lPWZvcGVuKCJmaWxlbmFtZS50eHQiLCJyKyIpOwoJLy9wcmludGYoIiAgICAgICBkaXN0ICAgTSAgIFNlYyAgICAgIFBvYiAgIFB0aCAgIG9idmVsICB0aHZlbCBDb3VudFxuIik7Cgl3aGlsZSgxKXsKCQkKCQlmc2NhbmYoZmlsZW5hbWUsIiVzIixmaWxlbmFtZWMpOy8vZmlsZW5hbWUgPSAyMDEzMDFEQi5NQU4KCQlpZihmZW9mKGZpbGVuYW1lKT09MSlicmVhazsKCgkJRklMRSAqZGF0YTsKCQlzdHJjcHkocGF0aCwiL2hvbWUvbTEwMTAxOS9Ecm9wYm94L0VXL2ltcGxlbWVudC9DV0IvcGZpbGUvIik7CgkJc3RyY2F0KHBhdGgsZmlsZW5hbWVjKTsgIC8vcGF0aCA9IC9wZmlsZS8yMDE0MTJEQi5NQU4KCQkJCQoJCWRhdGE9Zm9wZW4ocGF0aCwicisiKTsKCQkvL3ByaW50ZigiJXNcblxuIixwYXRoKTsKCgoJCWlmKGRhdGEpey8vIGdyYWIgdGhlIGRhdGEgZnJvbSBNQU4gZmlsZS4KCQkJCXdoaWxlKDEpewoJCQkJCWZvcihpPTA7aTw9MztpKyspewoJCQkJCQkJZnNjYW5mKGRhdGEsIiVjIiwmZGF0YWMpOwoJCQkJCQkJc29yeVtpXT1kYXRhYzsKCQkJCQl9CgkJCQkJLy9wcmludGYoIiVzXG4iLHNvcnkpOwoJCQkJCWlmKHN0cmNtcChzb3J5LCIyMDEzIik9PTAgfHwgc3RyY21wKHNvcnksIjIwMTQiKT09MHx8IHN0cmNtcChzb3J5LCI5OTk5Iik9PTApewoJCQkJCQkJc3RybmNweShldmUueWVhcixzb3J5LDQpOwoJCQkJCQkJZm9yKGk9MDtpPD0xO2krKyl7CgkJCQkJCQkJCWZzY2FuZihkYXRhLCIlYyIsJmRhdGFjKTsKCQkJCQkJCQkJZXZlLm1vbnRoW2ldPWRhdGFjOwoJCQkJCQkJfQoJCQkJCQkJZm9yKGk9MDtpPD0xO2krKyl7CgkJCQkJCQkJCWZzY2FuZihkYXRhLCIlYyIsJmRhdGFjKTsKCQkJCQkJCQkJZXZlLmRheVtpXT1kYXRhYzsKCQkJCQkJCX0KCQkJCQkJCWZvcihpPTA7aTw9MTtpKyspewoJCQkJCQkJCQlmc2NhbmYoZGF0YSwiJWMiLCZkYXRhYyk7CgkJCQkJCQkJCWV2ZS5ocltpXT1kYXRhYzsKCQkJCQkJCX0KCQkJCQkJCWZvcihpPTA7aTw9MTtpKyspewoJCQkJCQkJCQlmc2NhbmYoZGF0YSwiJWMiLCZkYXRhYyk7CgkJCQkJCQkJCWV2ZS5taW5baV09ZGF0YWM7CgkJCQkJCQl9CgkJCQkJCQlmb3IoaT0wO2k8PTU7aSsrKXsKCQkJCQkJCQkJZnNjYW5mKGRhdGEsIiVjIiwmZGF0YWMpOwoJCQkJCQkJCQlldmUuc2VjW2ldPWRhdGFjOwoJCQkJCQkJfQoJCQkJCQkJZm9yKGk9MDtpPD0xNDtpKyspZnNjYW5mKGRhdGEsIiVjIiwmZGF0YWMpOwoJCQkJCQkJZm9yKGk9MDtpPD01O2krKyl7CgkJCQkJCQkJCWZzY2FuZihkYXRhLCIlYyIsJmRhdGFjKTsKCQkJCQkJCQkJZXZlLmRlcHRoW2ldPWRhdGFjOwoJCQkJCQkJfQkJCgkJCQkJCQl5PTE7CgkJCQkJfWVsc2V7CgkJCQkJCXN0cmNweShzZW4ubmFtZSxzb3J5KTsKCgkJCQkJCWZzY2FuZihkYXRhLCIlYyIsJmRhdGFjKTsKCQkJCQkJc2VuLm5hbWVbNF09ZGF0YWM7CQkJCQkJCQkvL3Nlbi5uYW1lID0gIiBTRUIgIiBvciAiIENIWTEiIGxlbmd0aD01CgkJCQkJCS8vcHJpbnRmKCIlc1xuIixzZW4ubmFtZSk7CQkJCQkJCgkJCQkJCWZvcihpPTA7aTw9NTtpKyspewoJCQkJCQkJCQlmc2NhbmYoZGF0YSwiJWMiLCZkYXRhYyk7CgkJCQkJCQkJCWRpc3RbaV09ZGF0YWM7CQkJCQkvL3NlbnNvciBkaXN0YW5jZQoJCQkJCQl9CgkJCQkJCWZvcihpPTA7aTw9OTtpKyspZnNjYW5mKGRhdGEsIiVjIiwmZGF0YWMpOyAgLy9kcm9wIHNlbnNvciBheiB0b2EKCQkJCQkJZm9yKGk9MDtpPD0xO2krKyl7CgkJCQkJCQkJCWZzY2FuZihkYXRhLCIlYyIsJmRhdGFjKTsKCQkJCQkJCQkJc2VuLm1pbltpXT1kYXRhYzsJCQkJCS8vc2Vuc29yIG1pbnV0ZQkKCQkJCQkJfQoJCQkJCQlmb3IoaT0wO2k8PTU7aSsrKXsKCQkJCQkJCQkJZnNjYW5mKGRhdGEsIiVjIiwmZGF0YWMpOwoJCQkJCQkJCQlzZW4uc2VjW2ldPWRhdGFjOwkJCQkJLy9zZW5zb3Igc2VjCgkJCQkJCX0KCQkJCQkJZm9yKGk9MDtpPD01O2krKyl7CgkJCQkJCQkJCWZzY2FuZihkYXRhLCIlYyIsJmRhdGFjKTsKCQkJCQkJCQkJc2VuLnJlc3BbaV09ZGF0YWM7CQkJCQkvL3NlbnNvciByZXNwCgkJCQkJCX0KCQkJCQkJZm9yKGk9MDtpPD0zO2krKyl7CgkJCQkJCQkJCWZzY2FuZihkYXRhLCIlYyIsJmRhdGFjKTsKCQkJCQkJCQkJc2VuLnd0cFtpXT1kYXRhYzsJCQkJCS8vc2Vuc29yIHd0cAoJCQkJCQl9ICAgCgkJCQkJCXM9MTsKCQkJCQkJLy9rKys7CgkJCQkJfQoJCQkJCWlmKGZnZXRzKHRtcCwxNTAsZGF0YSk9PU5VTEwpYnJlYWs7CgoJCQkJCS8qKioqKmNoYW5nZSB0eXBlKioqKioqLwoJCQkJCWZkaXN0PWF0b2YoZGlzdCk7CgkJCQkJZnNzZWM9YXRvZihzZW4uc2VjKTsKCQkJCQlmc21pbj1hdG9mKHNlbi5taW4pOwoJCQkJCWZzd3RwPWF0b2Yoc2VuLnd0cCk7CQkKCQkJCQlmZW1pbj1hdG9mKGV2ZS5taW4pOwoJCQkJCWZlc2VjPWF0b2YoZXZlLnNlYyk7CgkJCQkJZmVkZXB0aD1hdG9mKGV2ZS5kZXB0aCk7CgkJCQkJCgkJCQkJLyoqKipjYWxjdWxhdGlvbioqKiovCgkJCQkJaWYocz09MSl7CQoJCQkJCQlpZihmc21pbj09ZmVtaW4pe1BvYj0oZnNzZWMtZmVzZWMpOwoJCQkJCQl9ZWxzZSBpZigoZnNtaW4rMSk9PWZlbWluIHx8IChmc21pbisxKT09KGZlbWluKzYwKSkgUG9iPShmc3NlYy1mZXNlYy02MCk7CgkJCQkJCWVsc2UgaWYoKGZzbWluKzIpPT1mZW1pbiB8fCAoZnNtaW4rMik9PShmZW1pbis2MCkpIFBvYj0oZnNzZWMtZmVzZWMtMTIwKTsKCQkJCQkJZWxzZSBpZigoZnNtaW4tMSk9PWZlbWluIHx8IChmc21pbi0xKT09KGZlbWluKzYwKSkgUG9iPShmc3NlYy1mZXNlYys2MCk7CgkJCQkJCVB0aD10aGVvcmVtKGZkaXN0LGZlZGVwdGgpOwoJCQkJCX0KCQkJCQlvYnZlbG89c3FydChmZGlzdCpmZGlzdCtmZWRlcHRoKmZlZGVwdGgpL1BvYjsKCQkJCQl0aHZlbG89c3FydChmZGlzdCpmZGlzdCtmZWRlcHRoKmZlZGVwdGgpL1B0aDsKCQkJCQkKCQkJCQkvKmh1bWFuIHJlYWQgZm9ybWF0Ki8KCQkJCQkvKmlmKHk9PTEgJiYgc3RyY21wKHNlbi5uYW1lLCIgRU5BICIpPT0wICYmZnNzZWMhPTAgJiYgZmRpc3Q8NTAwICAmJiBQb2I+MCAmJiBQdGg+MCAmJmZzd3RwIDw9MiAmJiBmYWJzKFBvYi1QdGgpPjIpeyAgIAoJCQkJCQkJcHJpbnRmKCJcblk6JXMgTTolcyBEOiVzIEg6JXMgTUlOOiVzIFNFQzolcyBERVA6JXNcbiIsZXZlLnllYXIsZXZlLm1vbnRoLGV2ZS5kYXksZXZlLmhyLGV2ZS5taW4sZXZlLnNlYyxldmUuZGVwdGgpO3k9MDsKCQkJCQkJCXByaW50ZigiICAgICAgICBkaXN0ICAgTSAgIFNlYyAgICAgIFBvYiAgIFB0aCAgIG9idmVsICB0aHZlbCAgQ291bnQgIHd0cCAgIGRpZmZcbiIpOwoJCQkJCQkJeT0wOwoJCQkJCQkJCgkJCQkJfQoJCQkJCWlmKHM9PTEgJiYgc3RyY21wKHNlbi5uYW1lLCIgRU5BICIpPT0wICYmIGZzc2VjIT0wICYmIGZkaXN0PDUwMCAgJiYgUG9iPjAgJiYgUHRoPjAgJiZmc3d0cCA8PTIgJiYgZmFicyhQb2ItUHRoKT4yKXsgICAKCQkJCQkJCS8vIGZkaXN0PDUwMCAgaXMgdXNlZCB0byBpZ25vcmUgdGhlIGRyb3BwZWQgZGF0YSAKCQkJCQkJCS8vIFB0aCA8MCBpcyBpZ25vcmUgZG91YmxlIGNvdW50CgkJCQkJCQlwcmludGYoIiVzICVzICAlcyAgJXMgICAiLHNlbi5uYW1lLGRpc3Qsc2VuLm1pbixzZW4uc2VjKTsgICAgICAKCQkJCQkJCXByaW50ZigiJS4yZiwgJS4yZiwgICUuMmYsICAlLjJmLCAgICVkLCAgJXMsICVmXG4iLFBvYixQdGgsb2J2ZWxvLHRodmVsbyxrLHNlbi53dHAsZmFicyhQb2ItUHRoKSk7CgkJCQkJCQlzPTA7CgkJCQkJCQlrKys7CgkJCQkJCQkKCQkJCQl9Ki8KCQkJCQkKCQkJCQkvKm1hY2hpbmUgcmVhZCBmb3JtYXQqLwoJCQkJCWlmKHM9PTEgJiYgc3RyY21wKHNlbi5uYW1lLCIgRUdDICIpPT0wICYmIGZzc2VjIT0wICYmIGZkaXN0PDUwMCAgJiYgUG9iPjAgJiYgUHRoPjAgJiZmc3d0cCA8PTIgJiYgZmFicyhQb2ItUHRoKT4yKXsgICAgIAoJCQkJCQkJCgkJCQkJCQlwcmludGYoIiVzICVzICVzICVzICVzICVzICVzIiwgZXZlLnllYXIgLCBldmUubW9udGggLCBldmUuZGF5ICwgZXZlLmhyICwgZXZlLm1pbiAsIGV2ZS5zZWMgLCBldmUuZGVwdGgpO3k9MDsKCQkJCQkJCXByaW50ZigiJXMgJXMgICVzICAlcyAgICIsc2VuLm5hbWUgLCBkaXN0ICwgc2VuLm1pbiAsIHNlbi5zZWMpOyAgICAgIAoJCQkJCQkJcHJpbnRmKCIlLjJmLCAlLjJmLCAgJS4yZiwgICUuMmYsICAgJWQsICAlcywgJWZcbiIsUG9iLFB0aCxvYnZlbG8sdGh2ZWxvLGssc2VuLnd0cCxmYWJzKFBvYi1QdGgpKTsJCQkJCQkKCQkJCQkJCWsrKzsKCgkJCQkJCQkvL3ByaW50ZigiJS4yZiwgJS4yZiwgJWRcbiAiLFBvYixQdGgsayk7CgkJCQkJfQoJCQkJCS8veT0wOwoJCQkJCXM9MDsKCQkJCX0KCQkJCS8vZmdldGMoc3RkaW4pOwoJCX0KCQlmaWxlbmFtZWNbMF09J1wwJzsKCQkJCgkJCiAgICAgICAgCgl9CnJldHVybiAwOwp9CgoKCgoKCgpkb3VibGUgdGhlb3JlbShkb3VibGUgWEIsZG91YmxlIFpBKQp7CiAgIGRvdWJsZSBQdHJhdmVsLFpjLEcsRzAsVGhldGFfQSxUaGV0YV9CLFhjOwogICBpZihaQTw9NDApewogICAgICAgICAgICAgRzA9NS4xMDI5ODsKICAgICAgICAgICAgIEc9MC4wNjY1OTsKICAgfWVsc2V7CiAgICAgICAgIEcwPTcuODA0Nzk5OwogICAgICAgICBHPTAuMDA0NTczOwogICB9CiAgIFpjPS0xKihHMC9HKTsKICAgWGM9KHBvdyhYQiwyKS0yKihHMC9HKSpaQS1wb3coWkEsMikpLygyKlhCKTsKICAgVGhldGFfQT1hdGFuKChaQS1aYykvWGMpOwogICBpZihUaGV0YV9BPDApVGhldGFfQT1UaGV0YV9BK01fUEk7CiAgIFRoZXRhX0E9TV9QSS1UaGV0YV9BOwogICBUaGV0YV9CPWF0YW4oLTEqWmMvKFhCLVhjKSk7CiAgIFB0cmF2ZWw9KDEvRykqbG9nKHRhbigoVGhldGFfQS8yKSkvdGFuKChUaGV0YV9CLzIpKSk7CiAgIHJldHVybiBQdHJhdmVsOwp9Cgo=