///|
fn account_character_mask(c : Char) -> Int32 {
let n = c.to_int()
if n < 128 {
if c >= 'A' && c <= 'Z' {
return 5
}
if c >= 'a' && c <= 'z' {
return 4
}
if c >= '0' && c <= '9' {
return 6
}
return 0
}
let mut low = 0
let mut high = account_unicode_ranges.length()
while low < high {
let mid = low + (high - low) / 2
let (start, end, mask) = account_unicode_ranges[mid]
if n < start {
high = mid
} else if n > end {
low = mid + 1
} else {
return mask
}
}
0
}
///|
pub fn valid_account_name(account : String) -> Bool {
let parts = account_parts(account)
if parts.length() < 2 {
return false
}
for index in 0..