fn parse_immutable_refs(
    refs_val: Option<&Value>,
) -> Option<HashMap<String, Vec<ImmutableReference>>> {
    let obj = refs_val?.as_object()?;

    let mut map = HashMap::new();
    for (placeholder_key, spans_val) in obj {
        if let Some(spans_arr) = spans_val.as_array() {
            let mut spans_vec = Vec::new();
            for item in spans_arr {
                let start = item
                    .get("start")
                    .and_then(|v| v.as_u64())
                    .unwrap_or_default() as usize;
                let length = item
                    .get("length")
                    .and_then(|v| v.as_u64())
                    .unwrap_or_default() as usize;
                spans_vec.push(ImmutableReference { start, length });
            }
            if !spans_vec.is_empty() {
                map.insert(placeholder_key.clone(), spans_vec);
            }
        }
    }

    if map.is_empty() {
        None
    } else {
        Some(map)
    }
}
Parses `/evm/deployedBytecode/immutableReferences`
If the path doesn't exist or isn't an object, returns `None`.
core/lib/contract_verifier/src/compilers/mod.rs