Fixed range check on TryParse() for u32, again. The code from 748be364e5ee incorrectly accepted -0x100000000 on x86_64. Also if ERANGE is returned by strtoul(), reject the parsed value regardless of what that value is. This fixes invalid values being returned when compiling with Visual C++. Thanks to "cotton" for testing this.