(* not in 4.01 stdlib *)
let list_of_string s =
let rec los i acc =
if i
>= String.length s
then acc
else let ch
= String.get s i
in los (i + 1) (ch :: acc)
in
let permissions s = list_of_string s
| '-' -> 0
| 'r' | 'w' -> 1
| _ -> raise @@ Invalid_argument "shit happened")
|> List.fold_left
(fun acc cur
-> (acc
lsl 1) lor cur
) 0
let ss = "-rw-rw-r--"
KCogbm90IGluIDQuMDEgc3RkbGliICopCmxldCBsaXN0X29mX3N0cmluZyBzID0KCWxldCByZWMgbG9zIGkgYWNjID0gCgkJaWYgaSA+PSBTdHJpbmcubGVuZ3RoIHMgdGhlbiBhY2MKCQllbHNlIGxldCBjaCA9IFN0cmluZy5nZXQgcyBpIGluCgkJbG9zIChpICsgMSkgKGNoIDo6IGFjYykKCWluCgkJTGlzdC5yZXYgQEAgbG9zIDAgW10KCQkKbGV0IHBlcm1pc3Npb25zIHMgPSBsaXN0X29mX3N0cmluZyBzCgl8PiBMaXN0Lm1hcCAoZnVuY3Rpb24gCgkJfCAnLScgLT4gMAoJCXwgJ3InIHwgJ3cnIC0+IDEKCQl8IF8gLT4gcmFpc2UgQEAgSW52YWxpZF9hcmd1bWVudCAic2hpdCBoYXBwZW5lZCIpCgl8PiBMaXN0LmZvbGRfbGVmdCAoZnVuIGFjYyBjdXIgLT4gKGFjYyBsc2wgMSkgbG9yIGN1cikgMAoJCQpsZXQgc3MgPSAiLXJ3LXJ3LXItLSIKbGV0ICgpID0gcHJpbnRfZW5kbGluZSBAQCBzdHJpbmdfb2ZfaW50IEBAIHBlcm1pc3Npb25zIHNz