def METHOD_NAME(data: bytes) -> Dict[str, Union[int, str]]:
    res: Dict[str, Union[int, str]] = {}
    items = dict(_gen_items(data))
    if 0x50 not in items:
        utils.LOGGER.warning("No User Info in items [%r]", items)
        return res
    ivalue: bytes
    ivalue_parsed: Union[int, str]
    for itype, ivalue in _gen_items(items[0x50]):
        if itype == 0x51:
            try:
                ivalue_parsed = cast(int, struct.unpack(">I", ivalue)[0])
            except struct.error:
                utils.LOGGER.warning(
                    "Cannot convert max_pdu_length value to an integer [%r]",
                    ivalue,
                )
                ivalue_parsed = utils.encode_b64(ivalue).decode()
        else:
            try:
                ivalue_parsed = ivalue.decode("ascii")
            except struct.error:
                utils.LOGGER.warning(
                    "Cannot convert value to an ASCII string [%r]",
                    ivalue,
                )
                ivalue_parsed = utils.encode_b64(ivalue).decode()
        try:
            itype_parsed = _USER_INFO_ITEMS[itype]
        except KeyError:
            utils.LOGGER.warning(
                "Unknown item type in User Info %02x [%r]", itype, ivalue
            )
            itype_parsed = "unknown_%02x" % itype
        res[itype_parsed] = ivalue_parsed
    return res