broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken broken