public static byte[] UrlTokenDecode (string input)
{
if (input == null)
throw new ArgumentNullException ("input");
if (input.Length < 1)
return new byte[0];
byte[] bytes = Encoding.ASCII.GetBytes (input);
int inputLength = input.Length - 1;
int equalsCount = (int)(((char)bytes[inputLength]) - 0x30);
char[] ret = new char[inputLength + equalsCount];
int i = 0;
for (; i < inputLength; i++) {
switch ((char)bytes[i]) {
case '-':
ret[i] = '+';
break;
case '_':
ret[i] = '/';
break;
default:
ret[i] = (char)bytes[i];
break;
}
}
while (equalsCount > 0) {
ret[i++] = '=';
equalsCount--;
}
return Convert.FromBase64CharArray (ret, 0, ret.Length);
}