abstract io