Your Universal Remote Control Center
RemoteCentral.com
Philips Pronto Professional Forum - View Post
Previous section Next section Previous page Next page Up level
Up level
The following page was printed from RemoteCentral.com:

Login:
Pass:
 
 

Page 2 of 2
Topic:
Denon DVD 232
This thread has 29 replies. Displaying posts 16 through 30.
Post 16 made on Sunday May 13, 2007 at 04:16
sWORDs
Long Time Member
Joined:
Posts:
November 2006
373
I tried sacd and the cd track of an sacd, and a dvd, all worked when pressing 1 on the denon remote, but not with the hex, I'll try the ASCII aswell.
Post 17 made on Thursday July 26, 2007 at 17:46
sWORDs
Long Time Member
Joined:
Posts:
November 2006
373
I'm trying it with pronto script, but I'm not sure why I can't get it to work. I've tried //x aswell. The extender number and rs232 are correct and the rs232 light blinks.
SerialCode("40","00","00","00","00") returns x02x40x00x00x00x00x03x34x33 or \x02\x40\x00\x00\x00\x00\x03\x34\x33 when using \\x. Using \x02\x40\x00\x00\x00\x00\x03\x34\x33 direct works.


function SerialCode(varCommand, varParameter0, varParameter1, varParameter2, varParameter3)
{
var varStx = "02";
var varEtx = "03";
var varCalc = parseInt(varCommand, 16) + parseInt(varParameter0, 16) + parseInt(varParameter1, 16) + parseInt(varParameter2, 16) + parseInt(varParameter3, 16) + parseInt(varEtx, 16);
varCalc2 = varCalc.toString(16)
var varBatchHigh = varCalc2.substr(0,1);
var varBatchLow = varCalc2.substr(-1,1);
return "\\x" + varStx + "\\x" + varCommand + "\\x" + varParameter0 + "\\x" + varParameter1 + "\\x" + varParameter2 + "\\x" + varParameter3 + "\\x" + varEtx + "\\x" + varBatchHigh.charCodeAt().toString(16) + "\\x" + varBatchLow.charCodeAt().toString(16);
}
var extender1 = CF.extender[1];
if( extender1 == null )
{
Diagnostics.log("Extender 1 is not defined");
}
else
{
var rs232port2 = extender1.serial[1];
if( rs232port2 == null )
{
Diagnostics.log("Extender 1 is not a serial extender");
}
else
{
rs232port2.bitrate = 9600;
rs232port2.databits = 8;
rs232port2.parity = 2; // Even
rs232port2.stopbits = 1;
panel2.label = SerialCode("40","00","00","00","00")
rs232port2.send(panel2.label);
}
}

Last edited by sWORDs on July 26, 2007 19:42.
Post 18 made on Thursday July 26, 2007 at 21:52
Lyndel McGee
RC Moderator
Joined:
Posts:
August 2001
12,997
To build a set of hexadecimal binary characters using the string method as you've done above, you shoud eval() the results of the concatenation.

eval('\\x' + '41'); Results in a hex bytecode value of 65 which is the character code for 'A'.

Note that the end result of the string concatenation of my above expression (what's inside the eval parens) is '\x41', which when evaluated using eval() will build character code 'A'.

The quick and dirty fix is to change your return .... concats containing all the double backslashes to:

return eval(... string concatenation result);
Lyndel McGee
Philips Pronto Addict/Beta Tester
Post 19 made on Friday July 27, 2007 at 03:44
sWORDs
Long Time Member
Joined:
Posts:
November 2006
373
Thanks for helping Lyndel, bu I can't get it to work. eval('\\x' + '41'); gives no result.

SerialCode("40","00","00","00","00") gives \x02\x40\x00\x00\x00\x00\x03\x34\x33
rs232port2.send("\x02\x40\x00\x00\x00\x00\x03\x34\x33") works, so why won't
rs232port2.send(SerialCode("40","00","00","00","00"))?
Post 20 made on Friday July 27, 2007 at 05:36
Sogliphy
Long Time Member
Joined:
Posts:
July 2007
186
sWORDs:

Your SerialCode will return a String containing '\', 'x', '0', '2', ...

What you want is something that returns a String containing '\x02', '\x40', ...

A possible way to do this is like:


function SerialCode(command, parameter0, parameter1, parameter2, parameter3)
{
var stx = 0x02;
var etx = 0x03;
var calc = command + parameter0 + parameter1 + parameter2 +
parameter3 + etx;
return String.fromCharCode( stx, command, parameter0, parameter1,
parameter2, parameter3, etx, (calc >> 8)&0xff, calc & 0xff);
}


and use it like:


mycode = SerialCode(0x40, 0x00, 0x00, 0x00, 0x00);
rs232port2.send(mycode);


Note that you cannot set such a String containing arbitrary binary values as a label (you can, but the result will be garbage - the binary content will be interpreted as ASCII codes)

You could use something like:


function BinaryDump(s)
{
var result = "";
for (var i=0; i<s.length; i++) {
result += "\x" + s.charCodeAt(i).toString(16);
}
return result;
}

mycode = SerialCode(0x40, 0, 0, 0, 0);
panel2.label = BinaryDump(mycode);
rs232port2.send(mycode);



Enjoy.
Post 21 made on Friday July 27, 2007 at 08:01
sWORDs
Long Time Member
Joined:
Posts:
November 2006
373
Sogliphy, I'll try it!

For the ones trying to parse a Denon DVD here's my debug code (not tidy yet, and two bugs, no track info with SACD, DSD always gives highest available channels instead of current selected, both are probably bugs in Denon's protocol):

var extender1 = CF.extender[1];
if( extender1 == null )
{
Diagnostics.log("Extender 1 is not defined");
}
else
{
var rs232port1 = extender1.serial[0];
var rs232port2 = extender1.serial[1];
if( rs232port1 == null )
{
Diagnostics.log("Extender 1 is not a serial extender");
}
else
{
rs232port2.bitrate = 9600;
rs232port2.databits = 8;
rs232port2.parity = 2; // Even
rs232port2.stopbits = 1;
var varReturn = rs232port2.match("\x02\x30\x00\x00\x00\x00\x03\x33\x33","\x03",250);
var varReply = varReturn.substr(1,1)
var varAnswer = varReturn.substr(2,1)
var varDiscType = varReturn.substr(3,1)
switch(varDiscType) {
case "1":
varDiscType = "DVD Video";
break;
case "2":
varDiscType = "DVD Audio";
break;
case "3":
varDiscType = "VCD";
break;
case "4":
varDiscType = "CD-DA";
break;
case "5":
varDiscType = "MP3";
break;
case "6":
varDiscType = "?";
break;
case "7":
varDiscType = "SACD";
break;
}
var varAudioFormat = varReturn.substr(4,1)
switch(varAudioFormat ) {
case "1":
varAudioFormat = "Dolby Dig";
break;
case "2":
varAudioFormat = "DTS";
break;
case "3":
varAudioFormat = "MPEG";
break;
case "4":
varAudioFormat = "LPCM";
break;
case "5":
varAudioFormat = "PPCM";
break;
case "6":
varAudioFormat = "?";
break;
case "7":
varAudioFormat = "DSD";
break;
}
var varAudioChannel = varReturn.substr(5,1)
switch(varAudioChannel) {
case "1":
varAudioChannel = "1 ch";
break;
case "2":
varAudioChannel = "2 ch";
break;
case "3":
varAudioChannel = "2.1 ch";
break;
case "4":
varAudioChannel = "3 ch";
break;
case "5":
varAudioChannel = "3.1 ch";
break;
case "6":
varAudioChannel = "4 ch";
break;
case "7":
varAudioChannel = "4.1 ch";
break;
case "8":
varAudioChannel = "5 ch";
break;
case "9":
varAudioChannel = "5.1 ch";
break;
case ":":
varAudioChannel = "6 ch";
break;
case ";":
varAudioChannel = "2 ch";
break;
case "<":
varAudioChannel = "1 ch R";
break;
case "=":
varAudioChannel = "1 ch L";
break;
case ">":
varAudioChannel = "?";
break;
}
var varDialog = varReturn.substr(6,1)
switch(varDialog) {
case "1":
varDialog = "JPN";
break;
case "2":
varDialog = "ENG";
break;
case "3":
varDialog = "FRA";
break;
case "4":
varDialog = "DEU";
break;
case "5":
varDialog = "ITA";
break;
case "6":
varDialog = "ESP";
break;
case "7":
varDialog = "NLD";
break;
case "8":
varDialog = "CHI";
break;
case "9":
varDialog = "RUS";
break;
case ":":
varDialog = "KOR";
break;
case ";":
varDialog = "?";
break;
}
var varSubtitle = varReturn.substr(7,1)
switch(varSubtitle) {
case "1":
varSubtitle = "JPN";
break;
case "2":
varSubtitle = "ENG";
break;
case "3":
varSubtitle = "FRA";
break;
case "4":
varSubtitle = "DEU";
break;
case "5":
varSubtitle = "ITA";
break;
case "6":
varSubtitle = "ESP";
break;
case "7":
varSubtitle = "NLD";
break;
case "8":
varSubtitle = "CHI";
break;
case "9":
varSubtitle = "RUS";
break;
case ":":
varSubtitle = "KOR";
break;
case ";":
varSubtitle = "?";
break;
}
var varAngle = varReturn.substr(8,1)
var varStatus = varReturn.substr(9,1)
switch(varStatus) {
case "0":
varStatus = "Standby";
break;
case "1":
varStatus = "Loading";
break;
case "2":
varStatus = "Loaded";
break;
case "3":
varStatus = "Opening";
break;
case "4":
varStatus = "Closing";
break;
case "A":
varStatus = "No Disc";
break;
case "B":
varStatus = "Stop";
break;
case "C":
varStatus = "Play";
break;
case "D":
varStatus = "Pause";
break;
case "E":
varStatus = "Scan";
break;
case "F":
varStatus = "Slow";
break;
case "G":
varStatus = "Setup";
break;
case "H":
varStatus = "Control";
break;
case "I":
varStatus = "Resume";
break;
case "J":
varStatus = "DVD Menu";
break;
case "K":
varStatus = "DAC";
break;
}
var varPlayMode = varReturn.substr(10,1)
switch(varPlayMode) {
case "1":
varPlayMode = "Normal";
break;
case "2":
varPlayMode = "Program";
break;
case "3":
varPlayMode = "Random";
break;
}
var varGroupTitle10 = varReturn.substr(11,1)
var varGroupTitle1 = varReturn.substr(12,1)
var varTrackChapter100 = varReturn.substr(13,1)
var varTrackChapter10 = varReturn.substr(14,1)
var varTrackChapter1 = varReturn.substr(15,1)
var varTimeMode = varReturn.substr(16,1)
var varTimeElapsedHours10 = varReturn.substr(17,1)
var varTimeElapsedHours1 = varReturn.substr(18,1)
var varTimeElapsedMinutes10 = varReturn.substr(19,1)
var varTimeElapsedMinutes1 = varReturn.substr(20,1)
var varTimeElapsedSeconds10 = varReturn.substr(21,1)
var varTimeElapsedSeconds1 = varReturn.substr(22,1)
var varElapsedTime = parseInt(varTimeElapsedHours10 + varTimeElapsedHours1) + "h" + varTimeElapsedMinutes10 + varTimeElapsedMinutes1 + "m" + varTimeElapsedSeconds10 + varTimeElapsedSeconds1 + "s";
widget("PNLTIME").label = varElapsedTime;
widget("PNLTRACKCHAPTER").label = parseInt(varTrackChapter100 + varTrackChapter10 + varTrackChapter1);
widget("PNLGROUPTITLE").label = parseInt(varGroupTitle10 + varGroupTitle1);
widget("PNLANSWER").label = varStatus;
widget("PNLMODE").label = varPlayMode;
widget("PNLAUDIOCHANNEL").label = varAudioChannel;
widget("PNLAUDIOFORMAT").label = varAudioFormat;
widget("PNLSUBTITLE").label = varDialog;
widget("PNLDIALOG").label = varSubtitle;
widget("PNLDISCTYPE").label = varDiscType;
}
}

Last edited by sWORDs on July 27, 2007 08:18.
Post 22 made on Friday July 27, 2007 at 09:02
sWORDs
Long Time Member
Joined:
Posts:
November 2006
373
I really don't get this part:
(calc >> 8)&0xff, calc & 0xff)

Could some on explain what it does? (Right shift with sign extension, Bitwise AND
???)

Last edited by sWORDs on July 27, 2007 09:11.
Post 23 made on Saturday July 28, 2007 at 04:16
sWORDs
Long Time Member
Joined:
Posts:
November 2006
373
Playing with ProntoScript is really nice, I like the polling:

Post 24 made on Saturday July 28, 2007 at 06:15
sWORDs
Long Time Member
Joined:
Posts:
November 2006
373
n/m

Last edited by sWORDs on July 28, 2007 06:28.
Post 25 made on Saturday July 28, 2007 at 11:01
sbwright
Long Time Member
Joined:
Posts:
March 2007
62
Very Nice
Brian
Pronto TSU9600, RFX9600, (RFX9400 - retired), SlimPronto
Post 26 made on Monday July 30, 2007 at 03:30
Sogliphy
Long Time Member
Joined:
Posts:
July 2007
186
sWORDs,

The expression '(calc >> 8)&0xff' yields the value of bits 9-15 of the integer representation of the value assigned to 'calc'. Bits 9 through 32 are first shifted right, this yields the value of bits 9-32. Then a bitwise AND is performed with 255, or 0xff, which is '11111111' in binary. This ensures that the result is constrained to values 0 to 255 (not strictly necessary in your case, since calc will never be bigger than 1277 (= (5 * 0xff) + 0x02) there, but a good habit anyway).

Finally, 'calc & 0xff' yields the value of bits 0-7 of the integer representation of the value assigned to 'calc'.
Post 27 made on Thursday August 9, 2007 at 13:55
mrwar
Lurking Member
Joined:
Posts:
August 2007
7
Hello all,

I have managed to make most RS-232 commands for a Denon DVD 2930 work but I can't find some commands (not even from the Denon site).
Are there RS-232 codes for the following commands:
Digits (0-9), +10, repeat, random, clear, zoom, pic-adjust & search mode.

Thanks in advance for any help.
Post 28 made on Friday August 10, 2007 at 06:01
Aslan
Long Time Member
Joined:
Posts:
May 2007
100
On August 9, 2007 at 13:55, mrwar said...

Are there RS-232 codes for the following commands:
Digits (0-9), +10, repeat, random, clear, zoom, pic-adjust
& search mode.

I've never seen codes for digits but I've got these:
Random: 02 6B 00 00 00 00 03 36 3E
Clear: 02 66 00 00 00 00 03 36 39
Zoom: 02 6D 00 00 00 00 03 37 30
Picture Adjust: 02 6F 00 00 00 00 03 37 32

Good luck with the others, and let me know if you find anything.
Post 29 made on Friday August 10, 2007 at 20:52
mrfreeze
Long Time Member
Joined:
Posts:
November 2004
167
Speed Length Parity Start Stop
9600bps 8 Even 1 1

Command String
Power

Power On 02 20 00 00 00 00 03 32 33
Power Standby 02 21 00 00 00 00 03 32 34

Operation
Play 02 40 00 00 00 00 03 34 33
Stop 02 41 00 00 00 00 03 34 34
Pause 02 42 00 00 00 00 03 34 35
Skip + 02 43 2B 00 00 00 03 37 31
Skip - 02 43 2D 00 00 00 03 37 33
Slow/Search + 02 44 2B 00 00 00 03 37 32
Slow/Search - 02 44 2D 00 00 00 03 37 34
Setup 02 45 00 00 00 00 03 34 38
Top menu 02 46 00 00 00 00 03 34 39
Menu 02 47 00 00 00 00 03 34 41
Return 02 48 00 00 00 00 03 34 42
Audio + 02 49 2B 00 00 00 03 37 37
Audio - 02 49 2D 00 00 00 03 37 39
Subtitle + 02 4A 2B 00 00 00 03 37 38
Subtitle - 02 4A 2D 00 00 00 03 37 41
Angle + 02 4B 2B 00 00 00 03 37 39
Angle - 02 4B 2D 00 00 00 03 37 42
Cursor Left 02 4D 31 00 00 00 03 38 31
Cursor Up 02 4D 32 00 00 00 03 38 32
Cursor Right 02 4D 33 00 00 00 03 38 33
Cursor Down 02 4D 34 00 00 00 03 38 34
Enter 02 4E 00 00 00 00 03 35 31
SACD Layer Select 02 4F 00 00 00 00 03 35 32
Disc Select 1 02 50 31 00 00 00 03 38 34
Disc Select 2 02 50 32 00 00 00 03 38 35
Disc Select 3 02 50 33 00 00 00 03 38 36
Disc Select 4 02 50 34 00 00 00 03 38 37
Disc Select 5 02 50 35 00 00 00 03 38 38
Disc Skip 02 51 00 00 00 00 03 35 34
Open/Close 02 61 00 00 00 00 03 36 34
HDMI Select 02 63 00 00 00 00 03 36 36
HDMI Format 02 64 00 00 00 00 03 36 37
Display 02 68 00 00 00 00 03 36 42
Page + 02 6A 31 00 00 00 03 39 45
Page - 02 6A 32 00 00 00 03 39 46

Direct Select
Track/Chapter 1 02 4C 32 30 30 31 03 31 32
Track/Chapter 2 02 4C 32 30 30 32 03 31 33
Track/Chapter 3 02 4C 32 30 30 33 03 31 34
Track/Chapter 4 02 4C 32 30 30 34 03 31 35
Track/Chapter 5 02 4C 32 30 30 35 03 31 36
Track/Chapter 6 02 4C 32 30 30 36 03 31 37
Track/Chapter 7 02 4C 32 30 30 37 03 31 38
Track/Chapter 8 02 4C 32 30 30 38 03 31 39
Track/Chapter 9 02 4C 32 30 30 39 03 31 41
Track/Chapter 10 02 4C 32 30 31 30 03 31 32
Track/Chapter 11 02 4C 32 30 31 31 03 31 33
Track/Chapter 12 02 4C 32 30 31 32 03 31 34
Track/Chapter 13 02 4C 32 30 31 33 03 31 35
Track/Chapter 14 02 4C 32 30 31 34 03 31 36
Track/Chapter 15 02 4C 32 30 31 35 03 31 37
Track/Chapter 16 02 4C 32 30 31 36 03 31 38
Track/Chapter 17 02 4C 32 30 31 37 03 31 39
Track/Chapter 18 02 4C 32 30 31 38 03 31 41
Track/Chapter 19 02 4C 32 30 31 39 03 31 42
Track/Chapter 20 02 4C 32 30 32 30 03 31 33
Track/Chapter 21 02 4C 32 30 32 31 03 31 34
Track/Chapter 22 02 4C 32 30 32 32 03 31 35
Track/Chapter 23 02 4C 32 30 32 33 03 31 36
Track/Chapter 24 02 4C 32 30 32 34 03 31 37
Track/Chapter 25 02 4C 32 30 32 35 03 31 38
Track/Chapter 26 02 4C 32 30 32 36 03 31 39
Track/Chapter 27 02 4C 32 30 32 37 03 31 41
Track/Chapter 28 02 4C 32 30 32 38 03 31 42
Track/Chapter 29 02 4C 32 30 32 39 03 31 43
Track/Chapter 30 02 4C 32 30 33 30 03 31 34
Track/Chapter 31 02 4C 32 30 33 31 03 31 35
Track/Chapter 32 02 4C 32 30 33 32 03 31 36
Track/Chapter 33 02 4C 32 30 33 33 03 31 37
Track/Chapter 34 02 4C 32 30 33 34 03 31 38
Track/Chapter 35 02 4C 32 30 33 35 03 31 39
Track/Chapter 36 02 4C 32 30 33 36 03 31 41
Track/Chapter 37 02 4C 32 30 33 37 03 31 42
Track/Chapter 38 02 4C 32 30 33 38 03 31 43
Track/Chapter 39 02 4C 32 30 33 39 03 31 44
Track/Chapter 40 02 4C 32 30 34 30 03 31 35
Track/Chapter 41 02 4C 32 30 34 31 03 31 36
Track/Chapter 42 02 4C 32 30 34 32 03 31 37
Track/Chapter 43 02 4C 32 30 34 33 03 31 38
Track/Chapter 44 02 4C 32 30 34 34 03 31 39
Track/Chapter 45 02 4C 32 30 34 35 03 31 41
Track/Chapter 46 02 4C 32 30 34 36 03 31 42
Track/Chapter 47 02 4C 32 30 34 37 03 31 43
Track/Chapter 48 02 4C 32 30 34 38 03 31 44
Track/Chapter 49 02 4C 32 30 34 39 03 31 45
Track/Chapter 50 02 4C 32 30 35 30 03 31 36
Track/Chapter 51 02 4C 32 30 35 31 03 31 37
Track/Chapter 52 02 4C 32 30 35 32 03 31 38
Track/Chapter 53 02 4C 32 30 35 33 03 31 39
Track/Chapter 54 02 4C 32 30 35 34 03 31 41
Track/Chapter 55 02 4C 32 30 35 35 03 31 42
Track/Chapter 56 02 4C 32 30 35 36 03 31 43
Track/Chapter 57 02 4C 32 30 35 37 03 31 44
Track/Chapter 58 02 4C 32 30 35 38 03 31 45
Track/Chapter 59 02 4C 32 30 35 39 03 31 46
Track/Chapter 60 02 4C 32 30 36 30 03 31 37
Track/Chapter 61 02 4C 32 30 36 31 03 31 38
Track/Chapter 62 02 4C 32 30 36 32 03 31 39
Track/Chapter 63 02 4C 32 30 36 33 03 31 41
Track/Chapter 64 02 4C 32 30 36 34 03 31 42
Track/Chapter 65 02 4C 32 30 36 35 03 31 43
Track/Chapter 66 02 4C 32 30 36 36 03 31 44
Track/Chapter 67 02 4C 32 30 36 37 03 31 45
Track/Chapter 68 02 4C 32 30 36 38 03 31 46
Track/Chapter 69 02 4C 32 30 36 39 03 31 30
Track/Chapter 70 02 4C 32 30 37 30 03 31 38
Track/Chapter 71 02 4C 32 30 37 31 03 31 39
Track/Chapter 72 02 4C 32 30 37 32 03 31 41
Track/Chapter 73 02 4C 32 30 37 33 03 31 42
Track/Chapter 74 02 4C 32 30 37 34 03 31 43
Track/Chapter 75 02 4C 32 30 37 35 03 31 44
Track/Chapter 76 02 4C 32 30 37 36 03 31 45
Track/Chapter 77 02 4C 32 30 37 37 03 31 46
Track/Chapter 78 02 4C 32 30 37 38 03 31 30
Track/Chapter 79 02 4C 32 30 37 39 03 31 31
Track/Chapter 80 02 4C 32 30 38 30 03 31 39
Track/Chapter 81 02 4C 32 30 38 31 03 31 41
Track/Chapter 82 02 4C 32 30 38 32 03 31 42
Track/Chapter 83 02 4C 32 30 38 33 03 31 43
Track/Chapter 84 02 4C 32 30 38 34 03 31 44
Track/Chapter 85 02 4C 32 30 38 35 03 31 45
Track/Chapter 86 02 4C 32 30 38 36 03 31 46
Track/Chapter 87 02 4C 32 30 38 37 03 31 30
Track/Chapter 88 02 4C 32 30 38 38 03 31 31
Track/Chapter 89 02 4C 32 30 38 39 03 31 32
Track/Chapter 90 02 4C 32 30 39 30 03 31 41
Track/Chapter 91 02 4C 32 30 39 31 03 31 42
Track/Chapter 92 02 4C 32 30 39 32 03 31 43
Track/Chapter 93 02 4C 32 30 39 33 03 31 44
Track/Chapter 94 02 4C 32 30 39 34 03 31 45
Track/Chapter 95 02 4C 32 30 39 35 03 31 46
Track/Chapter 96 02 4C 32 30 39 36 03 31 30
Track/Chapter 97 02 4C 32 30 39 37 03 31 31
Track/Chapter 98 02 4C 32 30 39 38 03 31 32
Track/Chapter 99 02 4C 32 30 39 39 03 31 33
Track/Chapter 100 02 4C 32 31 30 30 03 31 32

All from a file originally created by Scott Elliott for the Denon 3930.
Post 30 made on Wednesday August 29, 2007 at 18:01
mrwar
Lurking Member
Joined:
Posts:
August 2007
7
Aslan & mrfreeze,

Thanks a lot for these codes! I will be trying them very soon but I am already sure they will work.
Page 2 of 2


Jump to


Protected Feature Before you can reply to a message...
You must first register for a Remote Central user account - it's fast and free! Or, if you already have an account, please login now.

Please read the following: Unsolicited commercial advertisements are absolutely not permitted on this forum. Other private buy & sell messages should be posted to our Marketplace. For information on how to advertise your service or product click here. Remote Central reserves the right to remove or modify any post that is deemed inappropriate.

Hosting Services by ipHouse