I worked through this on EDA Playground and the link is here; it seems as if you need an account to run code so I will host a pyuvm implementation on GitHub and include the UVM implementation here: https://edaplayground.com/x/NWPL
Adapted from Matt Weber's "Arbiters: Design Ideas and Coding Styles" and the FreeCores Verilog implementation
Weber: https://www.researchgate.net/publication/228693610_Arbiters_design_ideas_and_coding_styles