|
You last visited: Today at 11:38
Advertisement
CProxy 0.2B
Discussion on CProxy 0.2B within the CO2 Exploits, Hacks & Tools forum part of the Conquer Online 2 category.
07/18/2006, 04:26
|
#76
|
elite*gold: 0
Join Date: Jun 2005
Posts: 327
Received Thanks: 4
|
Its a real shame, because this project had a lot of potential guys. If you had just given the guy some credit for the work he did, maybe he would continue to add to it. Sorry Etain, you really did not get the credit you deserved for this....everyone should give him karma even if he doesn't continue it. It is a pretty awsome tool.
+k
|
|
|
07/18/2006, 04:56
|
#77
|
elite*gold: 0
Join Date: Nov 2005
Posts: 280
Received Thanks: 1
|
Quote:
No respect for work done by other equal no more update of program.
If u r that good in decompiling, go decompile the game instead.
PROJECT CLOSE
|
Dude, not trying to put you down, but that's one guy. Almost all developers receive some negative comments sooner or later, just because you receive one bad comment doesn't mean you should quit. This was just an excuse for you to shut it down because nobody has posted anything, and I'm guessing you yourself lost interest, making it easier to close the project. Don't consider this as bad as it sounds, but somebody was going to say it sooner or later.
|
|
|
07/18/2006, 07:01
|
#78
|
elite*gold: 0
Join Date: Mar 2006
Posts: 30
Received Thanks: 3
|
i got my copy beffor it cloused  but never tryed it but i will later on
|
|
|
07/18/2006, 07:16
|
#79
|
elite*gold: 0
Join Date: Jan 2006
Posts: 52
Received Thanks: 0
|
I feel really sorry that Etan close this project, which I think could be most promising for the next big thing in this community.
In fact, Etan you could ask Choronman4k to add you to co.developer group, so that you can keep away from the noob and share within a more professional group. Whisper me if you like this idea.
|
|
|
07/18/2006, 12:56
|
#80
|
elite*gold: 0
Join Date: Aug 2004
Posts: 166
Received Thanks: 4
|
Quote:
Originally posted by Etain+Jun 27 2006, 13:21--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (Etain @ Jun 27 2006, 13:21)</td></tr><tr><td id='QUOTE'>
Quote:
Originally posted by -tester@Jul 18 2006, 00:24
<!--QuoteBegin--Gera
|
Quote:
@Jul 13 2006, 19:04
lol, seems like Etain dissapeared =P
|
doesnt matter people can just decompile this and as its .net convert it to what ever langueage they are most comfortable with (j#, c#, vb)
|
No respect for work done by other equal no more update of program.
If u r that good in decompiling, go decompile the game instead.
PROJECT CLOSE
[/b][/quote]
ermm I hope you didnt close this cause of what i said, I previously posted telling you to obfuscate your program but you didnt and you hadnt provided any updates for a while, dont use me as a scapegoat.
I told you to obfuscate your app because of the way .NET works, if you dont know the EXE isnt truely compiled until it is FIRST RUN ON THE CLIENT MACHINE making the framework extremely flexible but at the same time making non-obfuscated EXE very easy to DECOMPILE NOT DISASSEMBLE, you wouldn't be able to decompile the game although you could disassemble it.
Again if you think i was being disrespectful I apologise to you, but I asure you I wasnt I was trying to help you and get you to secure your source.
Example of how easy it is to decompile, this took me about 30 second to get this proceedure, its not perfect but it is a good start for a programmer, and as its .Net I can decompile to any language, Hopefully you appreciate what I am saying when you see this, as I said it wasnt a respect thing I had told you to obfuscate it and when it seemed like you had left I merely replied to say anyone can continue this because you didnt obfuscate it.
in j#
Code:
private void castSkill(String skill, boolean self)
{
java.lang.Throwable throwable;
if(skill == null)
{
return;
}
String txt = com.ms.vjsharp.lang.<VerifierFix>.genCastToString(this.mc.p.skillLvl.get(skill));
if(txt == null)
{
return;
}
try
{
int i1 = 0;
Object obj = this.mc.lock;
com.ms.vjsharp.lang.<CorArrayWrapper>.Enter(obj);
try
{
i1 = ((int)(System.Int32)(new java.util.Date().getTime())) - this.mc.td;
int i2 = ((int)(System.Int32)(this.mc.lastCast + ((long)(System.Int64)(300))));
if(i2 > i1)
{
i1 = i2;
}
this.mc.lastCast = ((long)(System.Int64)(i1));
}
finally
{
System.Threading.Monitor.Exit(obj);
}
int i3 = 0;
int i4 = 0;
int i5 = 0;
if(self)
{
i3 = this.mc.id;
i4 = this.mc.lx;
i5 = this.mc.ly;
}
else
{
String txt1 = null;
i3 = this.mc.lastTarget;
if(this.mc.id2name.get(String.valueOf(new java.lang.StringBuffer().append(i3).append(""))) != null)
{
txt1 = com.ms.vjsharp.lang.<VerifierFix>.genCastToString(this.mc.id2pos.get(String.valueOf(new java.lang.StringBuffer().append(i3).append(""))));
}
else
{
txt1 = com.ms.vjsharp.lang.<VerifierFix>.genCastToString(this.mc.mob2pos.get(String.valueOf(new java.lang.StringBuffer().append(i3).append(""))));
}
if(txt1 != null)
{
int i6 = com.ms.vjsharp.lang.StringImpl.indexOf(txt1, " ");
i4 = java.lang.Integer.parseInt(com.ms.vjsharp.lang.StringImpl.substring(txt1, 0, i6));
i5 = java.lang.Integer.parseInt(com.ms.vjsharp.lang.StringImpl.substring(txt1, i6 + 1));
}
}
if(((i3 != 0) && (i4 != 0)) && (i5 != 0))
{
pCore.QOProxy.sendMapPacketToServer(this.mc, pCore.QOProxy.skill(this.mc.id, i3, i4, i5, java.lang.Integer.parseInt(skill), java.lang.Byte.parseByte(txt), i1), true);
}
}
catch (System.Exception )
{
pCore.QOProxy.alert(this.mc, "Error casting.");
pCore.QOProxy.UI.msg(String.valueOf(new java.lang.StringBuffer().append(this.mc.id).append(" - Error in Castor Thread")));
}
}
private void postAction()
{
/* Evaluation version. */
}
/** @attribute JavaThrownExceptions("1;java/lang/CloneNotSupportedException;"/** @attribute JavaFlags(4227077)*/
public override Object MemberwiseClone()
{
com.ms.vjsharp.lang.ObjectImpl.clone(this);
return super.MemberwiseClone();
}
in VB.Net
Code:
Private Sub castSkill(ByVal skill As String, ByVal self As Boolean)
Dim throwable As Throwable
If skill Is Nothing Then
Return
End If
Dim txt As String = <VerifierFix>.genCastToString(Me.mc.p.skillLvl.[get](skill))
If txt Is Nothing Then
Return
End If
Try
Dim i1 As Integer = 0
Dim obj As Object = Me.mc.lock
<CorArrayWrapper>.Enter(obj)
Try
i1 = CType(New Date.getTime,Integer) - Me.mc.td
Dim i2 As Integer = CType(Me.mc.lastCast + CType(300,Long),Integer)
If i2 > i1 Then
i1 = i2
End If
Me.mc.lastCast = CType(i1,Long)
Finally
Monitor.[Exit](obj)
End Try
Dim i3 As Integer = 0
Dim i4 As Integer = 0
Dim i5 As Integer = 0
If self Then
i3 = Me.mc.id
i4 = Me.mc.lx
i5 = Me.mc.ly
Else
Dim txt1 As String = Nothing
i3 = Me.mc.lastTarget
If Not Me.mc.id2name.[get](New StringBuffer.append(i3).append("").ToString) Is Nothing Then
txt1 = <VerifierFix>.genCastToString(Me.mc.id2pos.[get](New StringBuffer.append(i3).append("").ToString))
Else
txt1 = <VerifierFix>.genCastToString(Me.mc.mob2pos.[get](New StringBuffer.append(i3).append("").ToString))
End If
If Not txt1 Is Nothing Then
Dim i6 As Integer = StringImpl.indexOf(txt1, " ")
i4 = Integer.parseInt(StringImpl.substring(txt1, 0, i6))
i5 = Integer.parseInt(StringImpl.substring(txt1, i6 + 1))
End If
End If
If ((i3 <> 0) AndAlso (i4 <> 0)) AndAlso (i5 <> 0) Then
QOProxy.sendMapPacketToServer(Me.mc, QOProxy.skill(Me.mc.id, i3, i4, i5, Integer.parseInt(skill), Byte.parseByte(txt), i1), true)
End If
Catch
QOProxy.alert(Me.mc, "Error casting.")
QOProxy.UI.msg(New StringBuffer.append(Me.mc.id).append(" - Error in Castor Thread").ToString)
End Try
End Sub
Private Sub postAction()
'Evaluation version.
End Sub
<JavaThrownExceptions("1;java/lang/CloneNotSupportedException;"), _
JavaFlags(4227077)> _
Public Overrides Function MemberwiseClone() As Object
ObjectImpl.clone(Me)
Return MyBase.MemberwiseClone
End Function
in C#
Code:
public class castor : java.lang.Thread
{
private MapConnection mc;
private string defSkill;
private string offSkill;
private int cond;
public castor(MapConnection m, string skill, int postCond, string oSkill) : base()
{
this.mc = m;
this.defSkill = skill;
this.offSkill = oSkill;
this.cond = postCond;
}
public override void run()
{
// Evaluation version.
}
private void castSkill(string skill, bool self)
{
Throwable throwable;
if (skill == null)
{
return;
}
string txt = <VerifierFix>.genCastToString(this.mc.p.skillLvl.@get(skill));
if (txt == null)
{
return;
}
try
{
int i1 = 0;
object obj = this.mc.@lock;
<CorArrayWrapper>.Enter(obj);
try
{
i1 = ((int)(new Date().getTime())) - this.mc.td;
int i2 = ((int)(this.mc.lastCast + ((long)(300))));
if (i2 > i1)
{
i1 = i2;
}
this.mc.lastCast = ((long)(i1));
}
finally
{
Monitor.Exit(obj);
}
int i3 = 0;
int i4 = 0;
int i5 = 0;
if (self)
{
i3 = this.mc.id;
i4 = this.mc.lx;
i5 = this.mc.ly;
}
else
{
string txt1 = null;
i3 = this.mc.lastTarget;
txt1 = this.mc.id2name.@get(new StringBuffer().append(i3).append("").ToString()) != null ? <VerifierFix>.genCastToString(this.mc.id2pos.@get(new StringBuffer().append(i3).append("").ToString())) : <VerifierFix>.genCastToString(this.mc.mob2pos.@get(new StringBuffer().append(i3).append("").ToString()));
if (txt1 != null)
{
int i6 = StringImpl.indexOf(txt1, " ");
i4 = Integer.parseInt(StringImpl.substring(txt1, 0, i6));
i5 = Integer.parseInt(StringImpl.substring(txt1, i6 + 1));
}
}
if (((i3 != 0) && (i4 != 0)) && (i5 != 0))
{
QOProxy.sendMapPacketToServer(this.mc, QOProxy.skill(this.mc.id, i3, i4, i5, Integer.parseInt(skill), java.lang.Byte.parseByte(txt), i1), true);
}
}
catch
{
QOProxy.alert(this.mc, "Error casting.");
QOProxy.UI.msg(new StringBuffer().append(this.mc.id).append(" - Error in Castor Thread").ToString());
}
}
private void postAction()
{
// Evaluation version.
}
[JavaThrownExceptions("1;java/lang/CloneNotSupportedException;")]
[JavaFlags(4227077)]
public override object MemberwiseClone()
{
ObjectImpl.clone(this);
return base.MemberwiseClone();
}
Delphi??
Code:
procedure castor.castSkill (skill : String; self : Boolean);
var
txt: String;
sbt: ShortInt;
i: Integer;
i1: Integer;
i2: Integer;
i3: Integer;
i4: Integer;
i5: Integer;
txt1: String;
i6: Integer;
exception: Exception;
obj: System.Object;
throwable: Throwable;
begin
if (skill = nil) then
begin
exit;
end;
txt := <VerifierFix>.genCastToString(Self.mc.p.skillLvl.get(skill));
if (txt = nil) then
begin
exit;
end;
try
sbt := Byte.parseByte(txt);
i := Integer.parseInt(skill);
i1 := 0;
obj := Self.mc.lock;
<CorArrayWrapper>.Enter(obj);
try
i1 := Integer(Date.Create.getTime) - Self.mc.td;
i2 := Integer(Self.mc.lastCast + Int64(300));
if (i2 > i1) then
begin
i1 := i2;
end;
Self.mc.lastCast := Int64(i1);
finally
Monitor.Exit(obj);
end;
i3 := 0;
i4 := 0;
i5 := 0;
if (self) then
begin
i3 := Self.mc.id;
i4 := Self.mc.lx;
i5 := Self.mc.ly;
end
else
begin
txt1 := nil;
i3 := Self.mc.lastTarget;
if (Self.mc.id2name.get(StringBuffer.Create.append(i3).append('').ToString) <> nil) then
begin
txt1 := <VerifierFix>.genCastToString(Self.mc.id2pos.get(StringBuffer.Create.append(i3).append('').ToString));
end
else
begin
txt1 := <VerifierFix>.genCastToString(Self.mc.mob2pos.get(StringBuffer.Create.append(i3).append('').ToString));
end;
if (txt1 <> nil) then
begin
i6 := StringImpl.indexOf(txt1, ' ');
i4 := Integer.parseInt(StringImpl.substring(txt1, 0, i6));
i5 := Integer.parseInt(StringImpl.substring(txt1, i6 + 1));
end;
end;
if (((i3 <> 0) and (i4 <> 0)) and (i5 <> 0)) then
begin
QOProxy.sendMapPacketToServer(Self.mc, QOProxy.skill(Self.mc.id, i3, i4, i5, i, sbt, i1), true);
end;
except
on System.Exception do
begin
exception := Exception(throwable);
QOProxy.alert(Self.mc, 'Error casting.');
QOProxy.UI.msg(StringBuffer.Create.append(Self.mc.id).append(' - Error in Castor Thread').ToString);
end;
end;
end;
C++
Code:
inline System.Void castor::castSkill(System.String * skill, System.Boolean self)
{
java::lang::Throwable throwable;
if ((skill == 0))
{
return;
}
System.String txt = com::ms::vjsharp::lang::<VerifierFix>::genCastToString(this->mc->p->skillLvl->get(skill));
if ((txt == 0))
{
return;
}
try
{
System.Int32 i1 = 0;
System.Object obj = this->mc->lock;
com::ms::vjsharp::lang::<CorArrayWrapper>::Enter(obj);
try
{
i1 = ((*__try_cast<__box System.Int32 * >(new java::util::Date()->getTime())) - this->mc->td);
System.Int32 i2 = (System.Int32)(this->mc->lastCast + (System.Int64)300);
if ((i2 > i1))
{
i1 = i2;
}
this->mc->lastCast = (System.Int64)i1;
}
__finally
{
System.Threading.Monitor::Exit(obj);
}
System.Int32 i3 = 0;
System.Int32 i4 = 0;
System.Int32 i5 = 0;
if ((self != false))
{
i3 = this->mc->id;
i4 = this->mc->lx;
i5 = this->mc->ly;
}
else
{
System.String txt1 = 0;
i3 = this->mc->lastTarget;
if ((this->mc->id2name->get(new java::lang::StringBuffer()->append(i3)->append(S"")->ToString()) != 0))
{
txt1 = com::ms::vjsharp::lang::<VerifierFix>::genCastToString(this->mc->id2pos->get(new java::lang::StringBuffer()->append(i3)->append(S"")->ToString()));
}
else
{
txt1 = com::ms::vjsharp::lang::<VerifierFix>::genCastToString(this->mc->mob2pos->get(new java::lang::StringBuffer()->append(i3)->append(S"")->ToString()));
}
if ((txt1 != 0))
{
System.Int32 i6 = com::ms::vjsharp::lang::StringImpl::indexOf(txt1, S" ");
i4 = java::lang::Integer::parseInt(com::ms::vjsharp::lang::StringImpl::substring(txt1, 0, i6));
i5 = java::lang::Integer::parseInt(com::ms::vjsharp::lang::StringImpl::substring(txt1, (i6 + 1)));
}
}
if ((((i3 != 0)
&& (i4 != 0))
&& (i5 != 0)))
{
:QOProxy::sendMapPacketToServer(this->mc, :QOProxy::skill(this->mc->id, i3, i4, i5, java::lang::Integer::parseInt(skill), java::lang::Byte::parseByte(txt), i1), true);
}
}
catch (System.Exception *)
{
:QOProxy::alert(this->mc, S"Error casting.");
:QOProxy::UI->msg(new java::lang::StringBuffer()->append(this->mc->id)->append(S" - Error in Castor Thread")->ToString());
}
|
|
|
07/18/2006, 15:13
|
#81
|
elite*gold: 0
Join Date: Aug 2005
Posts: 22
Received Thanks: 5
|
POSTING PROGRAM CODES ON PUBLIC FORUM WITHOUT OWNER PERMISSION IS AN ACT OF DISRESPECT.
|
|
|
07/18/2006, 16:49
|
#82
|
elite*gold: 0
Join Date: Aug 2004
Posts: 166
Received Thanks: 4
|
Quote:
Originally posted by Etain@Jul 18 2006, 15:13
POSTING PROGRAM CODES ON PUBLIC FORUM WITHOUT OWNER PERMISSION IS AN ACT OF DISRESPECT.
|
Calm down I am proving to you that your source isnt safe If you dont wanna learn something say so I am trying to teach you how wide open your app is, If you want to throw your toys out the pram because I told you something you didnt know then sue me, You could have just asked me to remove the code rather than ranting in caps I would have obliged.
Anyone with google and an IQ above a dog can get the source from your app so really its already public, maybe in a round about way my message will have gotten through to you to OBFUSCATE your applications the next time you put them in the public domain.
I have already apologised once if I offended you by telling you that your code is wide open, but I aint apologising for showing you how easy it is when you blantently thought it wasnt easy "if your that good at decompiling"
If your not big/man enough to suck up your ego and accept my initial apology you will have to get a mod to edit my post.
|
|
|
07/19/2006, 08:51
|
#83
|
elite*gold: 0
Join Date: Jan 2006
Posts: 52
Received Thanks: 0
|
Well, I have to agree that I also peeked into the source code the same way as tester did, but the purpose is to get more knowledge of CO packets.
The issue is how can we share knowledge while still be acknowledged. I once cracked an encrypted network protocol for a IM, and eventually decided to GPL the code. For me, this is the way to get a better community. Now there are always quite a few applications based the cracked encryption algorithm.
Without the access to QOProxy, Etain may take longer to develop its code. The same is for the community. For the good of a "good" community, open source it. Of couse, I do not think noobs are the target here.
|
|
|
07/19/2006, 09:58
|
#84
|
elite*gold: 0
Join Date: Aug 2005
Posts: 22
Received Thanks: 5
|
Quote:
Originally posted by tester+Jul 18 2006, 23:49--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (tester @ Jul 18 2006, 23:49)</td></tr><tr><td id='QUOTE'><!--QuoteBegin--Etain@Jul 18 2006, 15:13
POSTING PROGRAM CODES ON PUBLIC FORUM WITHOUT OWNER PERMISSION IS AN ACT OF DISRESPECT.
|
Calm down I am proving to you that your source isnt safe If you dont wanna learn something say so I am trying to teach you how wide open your app is, If you want to throw your toys out the pram because I told you something you didnt know then sue me, You could have just asked me to remove the code rather than ranting in caps I would have obliged.
Anyone with google and an IQ above a dog can get the source from your app so really its already public, maybe in a round about way my message will have gotten through to you to OBFUSCATE your applications the next time you put them in the public domain.
I have already apologised once if I offended you by telling you that your code is wide open, but I aint apologising for showing you how easy it is when you blantently thought it wasnt easy "if your that good at decompiling"
If your not big/man enough to suck up your ego and accept my initial apology you will have to get a mod to edit my post.[/b][/quote]
Why should I OBFUSCATE my code when i not selling it for money.
This is a cracking site, even if it is obfuscated it is still readable.
beside obfuscate code, do have it's side effect, use yr dog brain to search more.
yr post basiclly show not respect to ppl work, u r no diff to those noob that post complete QOProxy code on sun java forum and ask for explaination.
|
|
|
07/19/2006, 10:12
|
#85
|
elite*gold: 0
Join Date: Apr 2006
Posts: 25
Received Thanks: 3
|
+1 Karma
|
|
|
07/19/2006, 10:26
|
#86
|
elite*gold: 0
Join Date: Aug 2004
Posts: 166
Received Thanks: 4
|
Quote:
Originally posted by Etain+Jul 19 2006, 09:58--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (Etain @ Jul 19 2006, 09:58)</td></tr><tr><td id='QUOTE'>
Quote:
Originally posted by -tester@Jul 18 2006, 23:49
<!--QuoteBegin--Etain
|
Quote:
@Jul 18 2006, 15:13
POSTING PROGRAM CODES ON PUBLIC FORUM WITHOUT OWNER PERMISSION IS AN ACT OF DISRESPECT.
|
Calm down I am proving to you that your source isnt safe If you dont wanna learn something say so I am trying to teach you how wide open your app is, If you want to throw your toys out the pram because I told you something you didnt know then sue me, You could have just asked me to remove the code rather than ranting in caps I would have obliged.
Anyone with google and an IQ above a dog can get the source from your app so really its already public, maybe in a round about way my message will have gotten through to you to OBFUSCATE your applications the next time you put them in the public domain.
I have already apologised once if I offended you by telling you that your code is wide open, but I aint apologising for showing you how easy it is when you blantently thought it wasnt easy "if your that good at decompiling"
If your not big/man enough to suck up your ego and accept my initial apology you will have to get a mod to edit my post.
|
Why should I OBFUSCATE my code when i not selling it for money.
This is a cracking site, even if it is obfuscated it is still readable.
beside obfuscate code, do have it's side effect, use yr dog brain to search more.
yr post basiclly show not respect to ppl work, u r no diff to those noob that post complete QOProxy code on sun java forum and ask for explaination. [/b][/quote]
OK If you want to go off on one and use me as a scapegoat to dump this project then fine.
I know obfuscation doesnt totally protect you, but at least make it harder  I am sure a man of your obvious talent (Judging by your ego) can sort out the little bugs...
Yes this is a cracking site, so dont cry when your code is posted then? You used Q's source to how is that any better? Every game that is cracked or hacked here, you think that shows any respect to the commercial devs? lol
I wont lower myself to insults, your obviously a very very angry child (if your a kid or not i dont know, but your acting like one so meh) I would think carefully about why you are really angry and see how silly it is before you give yourself a heart attack.
|
|
|
07/19/2006, 19:29
|
#87
|
elite*gold: 0
Join Date: Sep 2005
Posts: 62
Received Thanks: 0
|
fight about this is pointless, like Etain contributed to the comunity with a nice tool ... and i dont get the point to tell someone how to make the things if you didnt helped at all. tester i think if you know more then Etain you should take the pole and fix the bugs/add new functions and such stuff =P.
really i think if someone makes a program like etain did and didnt obfuscate the program or made it in other lang its because he knows what is he doing not because he is a noob or doesnt know how to do the things.
|
|
|
07/19/2006, 20:21
|
#88
|
elite*gold: 0
Join Date: Sep 2005
Posts: 160
Received Thanks: 6
|
lol this stuff is gold for the stupidity meter you stop developing because some guy said something about ur coding
|
|
|
07/19/2006, 20:41
|
#89
|
elite*gold: 0
Join Date: Mar 2006
Posts: 61
Received Thanks: 3
|
i agree with nightyard, u should forget testers words and start updating  , u r gold man
|
|
|
07/19/2006, 20:47
|
#90
|
elite*gold: 0
Join Date: Dec 2005
Posts: 52
Received Thanks: 15
|
Ouch....
Such a nice Program u did Etain...
can put a link or tell me where can i download ur program.
i cant find the link on the first page, ty....
+karma for what u've done...
its sure takes time to analyst the packet...
|
|
|
Similar Threads
|
Cproxy- To older members
08/13/2007 - Conquer Online 2 - 5 Replies
hey guys, does any1 have CProxy? Only the older members remeber this program. Im not too sure if it still works but i used to have it until i had to reformat my computer. Not to sure if any1 else has it still, its very very old. PM if u doo thanks
Have a look, this was the project
http://www.elitepvpers.com/forum/index.php?...st&a mp;CODE=00&f=53
|
All times are GMT +1. The time now is 11:38.
|
|