Available on Google PlayApp Store

New Balance商標(しょうひょう)訴訟(そしょう)勝利(しょうり)(きゅう)外商(がいしょう)(ひん)(ぱい)知識(ちしき%οοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοοο)

中文(简体) Public
<a href="http://www.newbalance2014.com.tw/">new balance 绱愬反鍊?/a>姣忓ぉ鐐哄ぇ瀹跺付渚嗗叏鏂版疆娴佺郴鍒楀柈鍝侊紝鐐烘偍鐨勭敓娲绘坊鍔犳洿澶氱殑鑹插僵锛岀偤鎮ㄧ殑鐢熸椿鍏呮豢娲诲姏锛岃畵鎮ㄦ瘡澶╀笉閲嶈锛岀簿褰╃殑浜虹敓寰炵従鍦ㄩ枊濮嬶紝鏁珛闂滄敞鎴戝€憂ew balance 灏堣常搴楋紝鎴戝€戝皣鍏ㄦ柊鐨刵ew balance澶波鍠搧浠ュ強閬嬪嫊璩囪▕灏囦竴涓€鍛堢従绲﹀ぇ瀹躲€?div class="intro">閬嬪嫊鏈嶅搧鐗?new balance mrl247 鍦ㄥ晢妯欒ù瑷熶腑鐨勫嫕鍒╋紝鐐哄鍦嬪搧鐗屽湪涓湅淇濊鐭ヨ瓨鐢㈡瑠鎻愪緵鐬纰虹殑绀鸿寖銆?杩戞棩锛孨ew balance鐨勫晢妯欒ù瑷熸垚鍔燂紝鍦ㄤ腑鍦嬬嵅寰楃灜瑁$▼纰戞剰缇╃殑鍕濆埄銆?涓婂懆锛岃槆宸炲競





閬嬪嫊鏈嶅搧鐗?a href="http://www.newbalance2014.com.tw/p/nb-bn-4b2096c8-1/">new balance mrl247</a>鍦ㄥ晢妯欒ù瑷熶腑鐨勫嫕鍒╋紝鐐哄鍦嬪搧鐗屽湪涓湅淇濊鐭ヨ瓨鐢㈡瑠鎻愪緵鐬纰虹殑绀鸿寖銆?<p>杩戞棩锛孨ew balance鐨勫晢妯欒ù瑷熸垚鍔燂紝鍦ㄤ腑鍦嬬嵅寰楃灜瑁$▼纰戞剰缇╃殑鍕濆埄銆?/p><p></p><p>涓婂懆锛岃槆宸炲競鐨勪竴鍌㈡硶闄㈣瀹氫笁鍚嶇暥鍦伴瀷鍖犺鎸囨帶閬曞弽New balance鍟嗘鐨勨€淣鈥濇蹇楋紝涓﹀懡浠や粬鍊戞敮浠?50钀編鍏冪殑鎼嶅け璨诲拰鍝佺墝鐨勬硶寰嬭不鐢ㄣ€傚嵆浣胯姹轰粛鍙互鍚戜笂绱氭硶闄㈡彁鍑轰笂瑷达紝浣嗛€欐蹇楄憲澶栧湅浼佹キ鍦ㄤ腑鍦嬮枊灞曟キ鍕欐崓琛涚煡璀樼敘娆婄殑涓€鍊嬭!绋嬬銆?50钀編鍏冪殑瑁佹焙锛屾槸鐢变腑鍦嬫硶闄㈠垽瀹氱殑椤炰技妗堜欢涓郸澶栧湅浼佹キ鐨勬渶澶ц碃鍎熼噾椤嶃€?/p><p>2014骞达紝鍦嬪偄閫氶亷鐬竴闋呮柊鐨勫晢妯欐硶锛屽皣鏈€楂樻硶瀹氳碃鍎熼寰?5,000缇庡厓鎻愰珮鍒扮灜45钀編鍏冦€傝€屾摎鈥滅磹绱勬檪鍫扁€濆牨閬擄紝鐭ヨ瓨鐢㈡瑠妗堜欢鐨勬暩閲忛仩閬犱綆鏂煎凡缍撳緢浣庣殑娉曞畾鏁搁噺锛屾墍浠ュ湪閫欑ó鎯呮硜涓?a href="http://www.newbalance2014.com.tw/p/nb-bn-2d63ca43-1/">new balance wrl247</a>鐨勫嫕鍒╁挨鍏跺紩浜鸿ɑ鎰忋€?/p><p>鍦∟ew Balance鐨勬瀛愪腑锛岃槆宸炰腑绱氭硶闄㈣獚鐐猴紝涓夊悕琚憡浜猴紝鍏朵腑涓€鍊嬪湪2014骞?鏈堝湪绉戠緟鎷夊宸炶ɑ鍐婂晢妯欑偤鈥滅編鍦嬫柊鐧介緧楂旇偛鐢ㄥ搧闆嗗湗鍏徃鈥濓紝瑭茶鐐哄毚閲嶆悕瀹砃ew Balance鍏徃鐨勫悕璀斤紝涓︿笖閫犳垚涓湅娑堣不鑰呯殑娣蜂簜銆傚洜姝ゆ硶闄㈣姹備粬鍊戝仠姝镜鐘編鍦嬪叕鍙哥殑鐭ヨ瓨鐢㈡瑠锛屽仠姝㈡壒閲忕敓鐢€?/p><p>New Balance鐨勭煡璀樼敘娆婅硣娣遍¨鍟廌aniel McKinnon鍦ㄨ垏绱愮磩鏅傚牨鐨勯浕瀛愰兊浠堕€氫俊涓〃绀猴紝閫欐鍕濆埄浣夸粬鍊戝皪涓湅鐨勭煡璀樼敘娆婁繚璀锋埌鐣ユ洿鍔犱俊浠汇€?/p><p>鍙茶拏澶疯开閲戞.锛圫teve Dickinson锛夋浘鑸囧鍦嬪叕鍙稿悎浣滐紝骞姪浠栧€戦€插叆涓湅甯傚牬锛屼粬鐨勫緥甯搱瑁℃柉路浣堣!鑲紙Harris Bricken锛夎〃绀猴細鈥滀互淇濊鍟嗘鐐虹洰鐨勶紝涓彲浜烘皯鍏卞拰鍦嬫湁鑹ソ鐨勬硶闄㈠埗搴︼紝灏ゅ叾鍍忎笂娴凤紝鍖椾含閫欐ǎ鐨勫湴鏂圭殑娉曞畼鐬В鐭ヨ瓨鐢㈡瑠鐢氳嚦澶氭柤缇庡湅娉曞畼鈥?/p>鏂扮櫨鍊偤鍏朵粬鍙楀鐨勫搧鐗岄嫪璺?p>鐣跺鍦嬪搧鐗屽湪涓湅琚伣閫狅紝鎳夎┎濡備綍鍦ㄥ湅鍌㈢殑娉曞緥涓嬪皨姹備繚璀凤紵灏嶆柤閫欎竴鍟忛<a href="http://www.newbalance2014.com.tw/p/nb-bn-dacf6c5d-1/">new balance 247绮夐枊绠?/a>鍓甸€犵灜涓€鍊嬭紳鐓岀殑鍏堜緥銆?/p><p>瑭插搧鐗屾柤浜屽崄涓栫磤涔濆崄骞翠唬棣栨閫插叆涓湅甯傚牬锛屼甫鍏佽ū缍撻姺鍟嗕唬琛∟ew balance鍒嗛姺鐢㈠搧銆傜劧鑰岋紝鍏朵腑涓€浜涚稉閵峰晢寰屼締浠ユ櫘閫氳┍鍙婂叾璜ч煶鐧昏鐬┎鍝佺墝鐨勫晢妯欙紝涓﹁ō绔嬬灜鑷繁鐨勯瀷寤狅紝澶ч噺鐢熺敘璩噺浣庯紝浣嗗児鏍兼洿渚垮疁鐨勨€淣ew Balance鈥濈敘鍝併€侼ew Balance涓嶅緱涓嶅彇娑堜粬鍊戠殑缍撻姺娆婏紝闆㈤枊澶ч櫢甯傚牬銆?/p><p>瑭插搧鐗屾柤2013骞存寮忓洖姝革紝浠ヨ嫳鏂囪ɑ鍐婄灜鈥淣ew Balance鈥濆晢妯欍€傛柤2006骞?2鏈堝湪涓湅澶ч櫢瑷珛娉曚汉姗熸銆備絾鏄紝浠ュ墠鐢熺敘鐨勫伣鍐掑搧浠嶇劧瀛樺湪锛岄€欒畵New Balance闆d互鍦ㄤ腑鍦嬫秷璨昏€呬腑褰㈡垚绲变竴鐨勫搧鐗屽舰璞°€?/p><p>瑭插搧鐗屽湪涓湅鐨勫皪鎶楃浜烘椿鍕曚腑璧伴亷鐬极闀风殑姝风▼锛屽湪璐忓緱涓婅堪妗堝瓙涔嬪墠锛岀稉姝风灜瑷卞鎸姌銆備緥濡傦紝瀹冨湪2015骞?鏈堝皪涓湅浜轰娇鐢ㄢ€淣ew Balance鈥濈殑涓枃鍚嶇殑妗堝瓙涓け鏁楋紝涓嶅緱涓嶈碃鍎熺磩70钀編鍏冦€傝┎妗堝瓙閭勫湪涓婅ù銆?/p><p>鐙勯噾妫〃绀猴紝鈥淣ew Balance鈥濈殑鍕濆埄琛ㄦ槑锛岃┎鍝佺墝鍠勭敤涓彲浜烘皯鍏卞拰鍦嬪埗搴︼紝涓︾妤靛湪涓湅娉曢櫌閫茶鍩锋硶銆?/p><p>鈥滈€欐ǎ鍋氱殑鍏徃鍙互鍙栧緱鎴愬姛銆傝€屾秷妤电殑鍏徃甯屾湜澶栧湅娉曞緥鑳藉鎺у埗锛屼甫鏈熸湜鍒ヤ汉渚嗗公浠栧€戝仛閫欎欢浜嬶紝閫欑ó鍏徃娌掓湁浠讳綍鎴愬姛鐨勬鏈冦€傗€?/p>




鎯宠浜嗚В鏇村闂滄柤<a href="http://www.newbalance2014.com.tw/c/sport-style-shoes/
">new balance 寰╁彜鎱㈣窇闉?/a>璩囪▕娑堟伅鐨勬湅鍙嬶紝涓嶅Θ闂滄敞<a href="http://www.newbalance2014.com.tw/">new balance 灏堣常搴?/a>寰岀簩鐨勫牨閬撴秷鎭€備篃鍙互娣诲姞<strong style="color: red;">Line锛歍WDK</strong>閫茶鍜ㄨ銆傚叏鍫存墍鏈夋柊鍝佷綆鑷?鎶樿捣锛屾柊娆句笉鏂蜂笂鏋讹紝閫辨棩閫辨湯璩肩墿鏇存槸浜湁灏堝爆鎶樻墸鍎儬锛岄鍠滈€i€o紝姝e搧澶波锛屾敮鎸佸皥娅冮璀夛紝7澶╅憭璩炴湡锛?澶╃劇鐞嗙敱閫€鎻涜波锛屽績鍕曪紝涓嶅琛屽嫊锛岃稌绶婁締閬歌臣鍚э紒锛?a href="http://www.newbalance2014.com.tw/">http://www.newbalance2014.com.tw/</a>;锛?

Vocabulary List

  •  
     
    0
New Balance商標訴訟勝利,給外商品牌知識產權保護
0 vocabularies